--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/gsmu/inc/Gsmuelem.h Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,2330 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This file define the classes for the different PDU elements
+//
+//
+
+
+
+/**
+ @file
+ @publishedAll
+*/
+
+#ifndef __GSMUELEM_H__
+#define __GSMUELEM_H__
+
+// Includes
+
+#include <e32std.h>
+#include <e32base.h>
+#include <charconv.h>
+#include <gsmunmspacemobph.h>
+
+class RFs;
+class RReadStream;
+class RWriteStream;
+class CSmsEMSBufferSegmenter;
+struct TEncodeParams;
+
+// class declarations
+
+/**
+ * Decoding error.
+ * @publishedAll
+ * @released
+ */
+const TInt KErrGsmuDecoding = KErrCorrupt;
+
+/**
+ * Thin wrapper over TLex8 to provide leaving functions when getting the next
+ * character(s).
+ *
+ * These functions leave with KErrGsmuDecoding if there are insufficient characters
+ * remaining.
+ * @publishedAll
+ * @released
+ */
+class TGsmuLex8 : public TLex8
+ {
+ public:
+ TGsmuLex8(const TDesC8& aSource);
+ TUint8 GetL();
+ void IncL(TInt aNumber = 1);
+ TPtrC8 NextWithNoIncL(TInt aLength) const;
+ TPtrC8 NextWithNoIncL(TInt aLength, TBool aAcceptTruncation) const;
+ TPtrC8 NextAndIncL(TInt aLength);
+
+ private:
+ inline void LeaveL() const;
+ };
+
+
+/**
+ * Base class for performing all operations on octets.
+ * @publishedAll
+ * @released
+ */
+class TSmsOctet
+ {
+public:
+ inline TSmsOctet(TInt aValue);
+ inline TSmsOctet(TUint8 aValue = 0);
+ inline operator TInt() const;
+ const TSmsOctet& operator = (TInt aValue);
+ inline void FillSemiOctets(TInt aNum);
+ inline TInt SemiOctetsToNum() const;
+ TUint8* EncodeL(TUint8* aPtr) const;
+ inline void DecodeL(TGsmuLex8& aPdu);
+ inline void InternalizeL(RReadStream& aStream);
+ inline void ExternalizeL(RWriteStream& aStream) const;
+protected:
+ /** Octet value. */
+ TUint8 iValue;
+ };
+
+
+/**
+ * Bit masks for key first octet of an SMS PDU
+ * @publishedAll
+ * @released
+ */
+class TSmsFirstOctet : public TSmsOctet
+ {
+public:
+/** TP-MTI (Message Type Indicator) First octet of all SMS PDUs. */
+ enum TSmsMTI
+ {
+ /** SMS-DELIVER or SMS-DELIVER-REPORT message. */
+ ESmsMTIDeliverOrDeliverReport=0x00,
+ /** SMS-SUBMIT or SMS-SUBMIT-REPORT message. */
+ ESmsMTISubmitOrSubmitReport=0x01,
+ /** SMS-STATUS or SMS-COMMAND message. */
+ ESmsMTIStatusReportOrCommand=0x02,
+
+ /** Mask for these bit flags. */
+ ESmsMTIMask=0x03
+ };
+
+/**
+ * TP-UDHI (User Data Header Indicator) Found in first octet of
+ * Submit and Deliver and possibly, Deliver Report and Status Report.
+ */
+ enum TSmsUDHI
+ {
+ /** User data header indicator not present. */
+ ESmsUDHIHeaderNotPresent=0x00,
+ /** User data header indicator present. */
+ ESmsUDHIHeaderPresent=0x40,
+
+ /** Mask for these bit flags. */
+ ESmsUDHIMask=0x40
+ };
+
+/** TP-RP (Reply Path) Found in first octet of Submit and Deliver. */
+ enum TSmsReplyPath
+ {
+ /** Reply path does not exist. */
+ ESmsReplyPathNone=0x00,
+ /** Reply path exists. */
+ ESmsReplyPathExists=0x080,
+
+ /** Mask for these bit flags. */
+ ESmsReplyPathMask=0x80
+ };
+
+/** TP-MMS (More Messages To Send) Found in Deliver and Status Report. */
+ enum TSmsMoreMessagesToSend
+ {
+ /** More messages to send. */
+ ESmsMoreMessagesToSend=0x00,
+ /** No more messages to send. */
+ ESmsNoMoreMessagesToSend=0x04,
+
+ /** Mask for these bit flags. */
+ ESmsMoreMessagesToSendMask=0x04,
+ };
+
+/** T-SRI (Status Report Indicator) Found in Status Report. */
+ enum TSmsStatusReportIndicator
+ {
+ /** Status report is not going to be returned. */
+ ESmsStatusReportNotReturned=0x00,
+ /** Status report is going to be returned. */
+ ESmsStatusReportReturned=0x20,
+
+ /** Mask for these bit flags. */
+ ESmsStatusReportIndicatorMask=0x20
+ };
+
+/** TP-RD bit flags. */
+ enum TSmsRejectDuplicates
+ /**
+ * T-RD (Reject Duplicates) Found in Submit
+ */
+ {
+ /** Accept duplicates. */
+ ESmsAcceptDuplicates=0x00,
+ /** Reject duplicates. */
+ ESmsRejectDuplicates=0x04,
+
+ /** Mask for these bit flags. */
+ ESmsRejectDuplicatesMask=0x04
+ };
+
+/** T-SRQ (Status Report Qualifier). Found in Status Report. */
+ enum TSmsStatusReportQualifier
+ {
+ /** Status report result of submit. */
+ ESmsStatusReportResultOfSubmit=0x00,
+ /** Status report result of command. */
+ ESmsStatusReportResultOfCommand=0x20,
+
+ /** Mask for these bit flags. */
+ ESmsStatusReportQualifierMask=0x20
+ };
+
+/** TP-VPF (Validity Period Format). Found in Submit. */
+ enum TSmsValidityPeriodFormat
+ {
+ /** TP-VP field not present. */
+ ESmsVPFNone=0x00,
+ /** TP-VP field present. Enhanced format (7 octets). */
+ ESmsVPFEnhanced=0x08, // was ESmsVPFReserved, the new GSM spec!
+ /** TP-VP field present, relative validity format. */
+ ESmsVPFInteger=0x10, // relative validity period
+ /** TP-VP field present, absolute validity format. */
+ ESmsVPFSemiOctet=0x18, // absolute validity period
+
+ /** Mask for these bit flags. */
+ ESmsVPFMask=0x18
+ };
+
+/** TP-SRR (Status Report Request) Found in Submit and Command. */
+ enum TSmsStatusReportRequest
+ {
+ /** Status report is not requested. */
+ ESmsStatusReportNotRequested=0x00,
+ /** Status report is requested. */
+ ESmsStatusReportRequested=0x20,
+
+ /** Mask for these bit flags. */
+ ESmsStatusReportRequestMask=0x20
+ };
+
+public:
+ TSmsFirstOctet(TInt aValue=0);
+ const TSmsFirstOctet& operator = (TInt aValue); // Review
+ };
+
+
+/**
+ * TP-FCS (Failure Cause) octet. For Deliver and Submit errors
+ * @publishedAll
+ * @released
+ */
+class TSmsFailureCause : public TSmsOctet
+ {
+public:
+/** TP-FCS flags. */
+ enum TSmsFailureCauseError
+ {
+// Reserved values
+// ....
+// ....
+// PID errors
+ /** Telematic interworking not supported. */
+ ESmsPIDErrorTelematicInterworkingNotSupported=0x80,
+ /** Short message Type 0 not supported. */
+ ESmsPIDErrorShortMessageType0NotSupported=0x81,
+ /** Cannot replace short message. */
+ ESmsPIDErrorCannotReplaceShortMessage=0x82,
+ /** Reserved. */
+ ESmsPIDErrorReserved1=0x83,
+ /** Reserved. */
+ ESmsPIDErrorReserved2=0x84,
+ /** Reserved. */
+ ESmsPIDErrorReserved3=0x85,
+ /** Reserved. */
+ ESmsPIDErrorReserved4=0x86,
+ /** Reserved. */
+ ESmsPIDErrorReserved5=0x87,
+ /** Reserved. */
+ ESmsPIDErrorReserved6=0x88,
+ /** Reserved. */
+ ESmsPIDErrorReserved7=0x89,
+ /** Reserved. */
+ ESmsPIDErrorReserved8=0x8A,
+ /** Reserved. */
+ ESmsPIDErrorReserved9=0x8B,
+ /** Reserved. */
+ ESmsPIDErrorReserved10=0x8C,
+ /** Reserved. */
+ ESmsPIDErrorReserved11=0x8D,
+ /** Reserved. */
+ ESmsPIDErrorReserved12=0x8E,
+ /** Unspecified TP-PID error. */
+ ESmsPIDErrorUnspecified=0x8F,
+// DCS errors
+ /** Data coding scheme (alphabet) not supported. */
+ ESmsDCSErrorAlphabetNotSupported=0x90,
+ /** Message class not supported. */
+ ESmsDCSErrorMessageClassNotSupported=0x91,
+ /** Reserved. */
+ ESmsDCSErrorReserved1=0x92,
+ /** Reserved. */
+ ESmsDCSErrorReserved2=0x93,
+ /** Reserved. */
+ ESmsDCSErrorReserved3=0x94,
+ /** Reserved. */
+ ESmsDCSErrorReserved4=0x95,
+ /** Reserved. */
+ ESmsDCSErrorReserved5=0x96,
+ /** Reserved. */
+ ESmsDCSErrorReserved6=0x97,
+ /** Reserved. */
+ ESmsDCSErrorReserved7=0x98,
+ /** Reserved. */
+ ESmsDCSErrorReserved8=0x99,
+ /** Reserved. */
+ ESmsDCSErrorReserved9=0x9A,
+ /** Reserved. */
+ ESmsDCSErrorReserved10=0x9B,
+ /** Reserved. */
+ ESmsDCSErrorReserved11=0x9C,
+ /** Reserved. */
+ ESmsDCSErrorReserved12=0x9D,
+ /** Reserved. */
+ ESmsDCSErrorReserved13=0x9E,
+ /** Reserved. */
+ ESmsDCSErrorUnspecified=0x9F,
+// CommandErrors
+ /** Command cannot be actioned. */
+ ESmsCommandErrorCannotBeActioned=0xA0,
+ /** Command unsupported. */
+ ESmsCommandErrorUnsupported=0xA1,
+ /** Reserved. */
+ ESmsCommandErrorReserved1=0xA2,
+ /** Reserved. */
+ ESmsCommandErrorReserved2=0xA3,
+ /** Reserved. */
+ ESmsCommandErrorReserved3=0xA4,
+ /** Reserved. */
+ ESmsCommandErrorReserved4=0xA5,
+ /** Reserved. */
+ ESmsCommandErrorReserved5=0xA6,
+ /** Reserved. */
+ ESmsCommandErrorReserved6=0xA7,
+ /** Reserved. */
+ ESmsCommandErrorReserved7=0xA8,
+ /** Reserved. */
+ ESmsCommandErrorReserved8=0xA9,
+ /** Reserved. */
+ ESmsCommandErrorReserved9=0xAA,
+ /** Reserved. */
+ ESmsCommandErrorReserved10=0xAB,
+ /** Reserved. */
+ ESmsCommandErrorReserved11=0xAC,
+ /** Reserved. */
+ ESmsCommandErrorReserved12=0xAD,
+ /** Reserved. */
+ ESmsCommandErrorReserved13=0xAE,
+ /** Unspecified TP-Command error. */
+ ESmsCommandErrorUnspecified=0xAF,
+//
+ /** PDU not supported. */
+ ESmsErrorPDUNotSupported=0xB0,
+// Reserved values
+// ....
+// ....
+ /** SC busy. */
+ ESmsErrorSCBusy=0xC0,
+ /** No SC subscription. */
+ ESmsErrorNoSCSubscription=0xC1,
+ /** SC system failure. */
+ ESmsErrorNoSCSystemFailure=0xC2,
+ /** Invalid SME address. */
+ ESmsErrorInvalidSMEAddress=0xC3,
+ /** Destination SME barred. */
+ ESmsErrorDestinationSMEBarred=0xC4,
+ /** SM Rejected-Duplicate SM. */
+ ESmsErrorSMRejectedDuplicateSM=0xC5,
+ /** TP-VPF not supported. */
+ ESmsErrorVPFNotSupported=0xC6,
+ /** TP-VP not supported. */
+ ESmsErrorVPNotSupported=0xC7,
+// Reserved values
+// ....
+// ....
+ /** SIM SMS storage full. */
+ ESmsErrorSIMSMSStorageFull=0xD0,
+ /** No SMS storage capability in (U)SIM. */
+ ESmsErrorNoSMSStorageCapabilityOnSIM=0xD1,
+ /** Error in MS. */
+ ESmsErrorErrorInMS=0xD2,
+ /** Memory Capacity Exceeded. */
+ ESmsErrorMemoryCapacityExceded=0xD3,
+ /** (U)SIM Application Toolkit Busy. */
+ ESmsErrorSIMApplicationToolkitBusy=0xD4,
+ /** (U)SIM data download error. */
+ ESmsErrorSIMDataDownloadError=0xD5,
+// Reserved values
+// ....
+// ....
+ /** Value specific to an application. */
+ ESmsApplicationError1=0xE0,
+ /** Value specific to an application. */
+ ESmsApplicationError2=0xE1,
+ /** Value specific to an application. */
+ ESmsApplicationError3=0xE2,
+ /** Value specific to an application. */
+ ESmsApplicationError4=0xE3,
+ /** Value specific to an application. */
+ ESmsApplicationError5=0xE4,
+ /** Value specific to an application. */
+ ESmsApplicationError6=0xE5,
+ /** Value specific to an application. */
+ ESmsApplicationError7=0xE6,
+ /** Value specific to an application. */
+ ESmsApplicationError8=0xE7,
+ /** Value specific to an application. */
+ ESmsApplicationError9=0xE8,
+ /** Value specific to an application. */
+ ESmsApplicationError10=0xE9,
+ /** Value specific to an application. */
+ ESmsApplicationError11=0xEA,
+ /** Value specific to an application. */
+ ESmsApplicationError12=0xEB,
+ /** Value specific to an application. */
+ ESmsApplicationError13=0xEC,
+ /** Value specific to an application. */
+ ESmsApplicationError14=0xED,
+ /** Value specific to an application. */
+ ESmsApplicationError15=0xEE,
+ /** Value specific to an application. */
+ ESmsApplicationError16=0xEF,
+ /** Value specific to an application. */
+ ESmsApplicationError17=0xF0,
+ /** Value specific to an application. */
+ ESmsApplicationError18=0xF1,
+ /** Value specific to an application. */
+ ESmsApplicationError19=0xF2,
+ /** Value specific to an application. */
+ ESmsApplicationError20=0xF3,
+ /** Value specific to an application. */
+ ESmsApplicationError21=0xF4,
+ /** Value specific to an application. */
+ ESmsApplicationError22=0xF5,
+ /** Value specific to an application. */
+ ESmsApplicationError23=0xF6,
+ /** Value specific to an application. */
+ ESmsApplicationError24=0xF7,
+ /** Value specific to an application. */
+ ESmsApplicationError25=0xF8,
+ /** Value specific to an application. */
+ ESmsApplicationError26=0xF9,
+ /** Value specific to an application. */
+ ESmsApplicationError27=0xFA,
+ /** Value specific to an application. */
+ ESmsApplicationError28=0xFB,
+ /** Value specific to an application. */
+ ESmsApplicationError29=0xFC,
+ /** Value specific to an application. */
+ ESmsApplicationError30=0xFD,
+ /** Value specific to an application. */
+ ESmsApplicationError31=0xFE,
+//
+ /** Unspecified error cause. */
+ ESmsErrorUnspecified=0xFF,
+
+ /** @publishedAll */
+ ESmsErrorFree=0x100
+ };
+public:
+ TSmsFailureCause();
+ inline TInt Error() const;
+ inline void SetError(TSmsFailureCauseError aError);
+ };
+
+
+/**
+ * TP-ST (Status Report) octet. Found in Status Report
+ * @publishedAll
+ * @released
+ */
+class TSmsStatus : public TSmsOctet
+ {
+public:
+/** TP-ST flag values. */
+ enum TSmsStatusValue
+ {
+// Short message transaction completed
+ /** Short message received by the SME. */
+ ESmsShortMessageReceivedBySME=0x00,
+ /**
+ * Short message forwarded by the SC to the SME but the SC is unable to confirm
+ * delivery.
+ */
+ ESmsShortMessageForwardedBySCToSMEButUnconfirmedBySC=0x01,
+ /** Short message replaced by the SC. */
+ ESmsShortMessageReplacedBySC=0x02,
+// Reserved values
+// ....
+// ....
+// Temporary error, SC still trying to transfer SM
+ /** Temporary error, SC still trying to transfer SM: congestion. */
+ ESmsTempError1StatusCongestion=0x20,
+ /** Temporary error, SC still trying to transfer SM: SME busy. */
+ ESmsTempError1StatusSMEBusy=0x21,
+ /** Temporary error, SC still trying to transfer SM: No response from SME. */
+ ESmsTempError1StatusNoResponseFromSME=0x22,
+ /** Temporary error, SC still trying to transfer SM: Service rejected. */
+ ESmsTempError1StatusServiceRejected=0x23,
+ /** Temporary error, SC still trying to transfer SM: Quality of service not available. */
+ ESmsTempError1StatusQualityOfServiceNotAvailable=0x24,
+ /** Temporary error, SC still trying to transfer SM: Error in SME. */
+ ESmsTempError1StatusErrorInSME=0x25,
+// Reserved values
+// ....
+// ....
+// Permanent error, SC is not making any more transfer attempts
+ /**
+ * Permanent error, SC is not making any more transfer attempts: Remote procedure
+ * error.
+ */
+ ESmsPermErrorRemoteProcedureError=0x40,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: Incompatible
+ * destination.
+ */
+ ESmsPermErrorIncompatibleDestination=0x41,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: Connection rejected
+ * by SME.
+ */
+ ESmsPermErrorConnectionRejectedBySME=0x42,
+ /** Permanent error, SC is not making any more transfer attempts: Not obtainable. */
+ ESmsPermErrorNotObtainable=0x43,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: Quality of service
+ * not available.
+ */
+ ESmsPermErrorQualityOfServiceNotAvailable2=0x44,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: No interworking
+ * available.
+ */
+ ESmsPermErrorNoInterworkingAvailable=0x45,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: SM Validity Period
+ * Expired.
+ */
+ ESmsPermErrorSMValidityPeriodExpired=0x46,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: SM Deleted by
+ * originating SME.
+ */
+ ESmsPermErrorSMDeletedByOriginatingSME=0x47,
+ /**
+ * Permanent error, SC is not making any more transfer attempts: SM Deleted by
+ * SC Administration.
+ */
+ ESmsPermErrorSMDeletedBySCAdministration=0x48,
+ /** Permanent error, SC is not making any more transfer attempts: SM does not exist. */
+ ESmsPermErrorDoesNotExist=0x49,
+// Reserved values
+// ....
+// ....
+// Temporary error, SC is not making any more transfer attempts
+ /** Temporary error, SC is not making any more transfer attempts: Congestion. */
+ ESmsTempError2Congestion=0x60,
+ /** Temporary error, SC is not making any more transfer attempts: SME Busy. */
+ ESmsTempError2SMEBusy=0x61,
+ /**
+ * Temporary error, SC is not making any more transfer attempts: No response from
+ * SME.
+ */
+ ESmsTempError2NoResponseFromSME=0x62,
+ /** Temporary error, SC is not making any more transfer attempts: Service rejected. */
+ ESmsTempError2ServiceRejected=0x63,
+ /**
+ * Temporary error, SC is not making any more transfer attempts: Quality of service
+ * not available.
+ */
+ ESmsTempError2QualityOfServiceNotAvailable=0x64,
+ /** Temporary error, SC is not making any more transfer attempts: Error in SME. */
+ ESmsTempError2ErrorInSME=0x65,
+// Reserved values
+// ....
+// ....
+ };
+public:
+ TSmsStatus();
+ inline TSmsStatus::TSmsStatusValue Status() const;
+ inline void SetStatus(TSmsStatusValue aValue);
+ };
+
+
+/**
+ * TP-PI octet. Found in Reports and Commands
+ * @publishedAll
+ * @released
+ */
+class TSmsParameterIndicator : public TSmsOctet
+ {
+public:
+/** TP-PI bit flags. */
+ enum TSmsPIBits
+ {
+ /** Protocol identifier present. */
+ ESmsPIDProtocolIdentifierPresent=0x01,
+ /** Data coding scheme present. */
+ ESmsPIDDataCodingSchemePresent=0x02,
+ /** User data present. */
+ ESmsPIDUserDataPresent=0x04,
+ /** Reserved. */
+ ESmsPIDReserved1=0x08,
+ /** Reserved. */
+ ESmsPIDReserved2=0x10,
+ /** Reserved. */
+ ESmsPIDReserved3=0x20,
+ /** Reserved. */
+ ESmsPIDReserved4=0x40,
+ /** Extension. */
+ ESmsPIDExtension=0x80
+ };
+public:
+ TSmsParameterIndicator();
+ inline TBool Extension() const;
+ inline void SetExtension(TBool aExtension);
+ inline TBool UserDataPresent() const;
+ inline void SetUserDataPresent(TBool aPresent);
+ inline TBool DataCodingSchemePresent() const;
+ inline void SetDataCodingSchemePresent(TBool aPresent);
+ inline TBool ProtocolIdentifierPresent() const;
+ inline void SetProtocolIdentifierPresent(TBool aPresent);
+ };
+
+// TSmsPID - conversion (None, Fax, Mail, etc.)
+
+/**
+ * TP-PID PDU octet. Found in ALL 6 message types.
+ * @publishedAll
+ * @released
+ */
+class TSmsProtocolIdentifier : public TSmsOctet
+ {
+public:
+/** PID bits 7-6, which determine the meaning of the lower order bits. */
+ enum TSmsPIDType
+ {
+ /** Telematic interworking. */
+ ESmsPIDTelematicInterworking=0x00,
+ /** Short message. */
+ ESmsPIDShortMessageType=0x40,
+ /** Reserved. */
+ ESmsPIDReserved=0x80,
+ /** SC specific use. */
+ ESmsPIDSCSpecificUse=0xC0,
+
+ /** Mask of bits 7-6. */
+ ESmsPIDTypeMask=0xC0
+ };
+
+/** Telematic device indicator flags. Bit 5 - When Bit 7 = 0, Bit 6 = 0 */
+ enum TSmsTelematicDeviceIndicator
+ {
+ /** No telematic device. */
+ ESmsNoTelematicDevice=0x00,
+ /** Telematic device. */
+ ESmsTelematicDevice=0x20,
+
+ /** Telematic device indicator mask. */
+ EPIDTelematicDeviceIndicatorMask=0x20
+ };
+
+/** Telematic Interworking device type flags. Bits 4-0 - When Bit 5 = 1*/
+ enum TSmsTelematicDeviceType
+ {
+ /** Device type is specific to this SC. */
+ ESmsSCSpecificDevice=0x00,
+ /** Telex. */
+ ESmsTelex=0x01,
+ /** Group 3 telefax. */
+ ESmsGroup3TeleFax=0x02,
+ /** Group 4 telefax. */
+ ESmsGroup4TeleFax=0x03,
+ /** Voice telephone. */
+ ESmsVoiceTelephone=0x04,
+ /** ERMES. */
+ ESmsERMES=0x05,
+ /** National Paging System. */
+ ESmsNationalPagingSystem=0x06,
+ /** Videotex. */
+ ESmsVideotex=0x07,
+ /** Teletex, carrier unspecified. */
+ ESmsTeletexCarrierUnspecified=0x08,
+ /** Teletex, PSPDN. */
+ ESmsTeletexPSPDN=0x09,
+ /** Teletex, CSPDN. */
+ ESmsTeletexCSPDN=0x0A,
+ /** Teletex, in analog PSTN. */
+ ESmsTeletexAnaloguePSTN=0x0B,
+ /** Teletex, in digital ISDN */
+ ESmsTeletexDigitalISDN=0x0C,
+ /** UCI (Universal Computer Interface, ETSI DE/PS 3 01-3). */
+ ESmsUCI=0x0D,
+ /** Reserved. */
+ ESmsReserved1=0x0E,
+ /** Reserved. */
+ ESmsReserved2=0x0F,
+ /** A message handling facility. */
+ ESmsMessageHandlingFacility=0x10,
+ /** X.400 message handling system. */
+ ESmsX400MessageHandlingSystem=0x11,
+ /** Internet Electronic Mail. */
+ ESmsInternetElectronicMail=0x12,
+ /** Reserved. */
+ ESmsReserved3=0x13,
+ /** Reserved. */
+ ESmsReserved4=0x14,
+ /** Reserved. */
+ ESmsReserved5=0x15,
+ /** Reserved. */
+ ESmsReserved6=0x16,
+ /** Reserved. */
+ ESmsReserved7=0x17,
+ /** Value specific to each SC. */
+ ESmsSCSpecific1=0x18,
+ /** Value specific to each SC. */
+ ESmsSCSpecific2=0x19,
+ /** Value specific to each SC. */
+ ESmsSCSpecific3=0x1A,
+ /** Value specific to each SC. */
+ ESmsSCSpecific4=0x1B,
+ /** Value specific to each SC. */
+ ESmsSCSpecific5=0x1C,
+ /** Value specific to each SC. */
+ ESmsSCSpecific6=0x1D,
+ /** Value specific to each SC. */
+ ESmsSCSpecific7=0x1E,
+ /** Value specific to each SC. */
+ ESmsGsmMobileStation=0x1F,
+
+ /** Mask for telematic device type bits. */
+ ESmsTelematicDeviceTypeMask=0x1F
+ };
+
+/** SM-AL protocol flag. No Telematic Interworking. Bits 4-0 - When Bit 5 = 0*/
+ enum TSmsShortMessageALProtocol
+ {
+ /** Mask for SM-AL protocol flag bit. */
+ ESmsShortMessageALProtocolMask=0x0F
+ };
+
+/** Short Message Type flags. Bits 5-0 - When Bit 7 = 1, Bit 6 = 0*/
+ enum TSmsShortMessageType
+ {
+ /** Short Message Type 0. */
+ ESmsShortMessageType0=0x00,
+ /** Replace Short Message Type 1. */
+ ESmsReplaceShortMessageType1=0x01,
+ /** Replace Short Message Type 2. */
+ ESmsReplaceShortMessageType2=0x02,
+ /** Replace Short Message Type 3. */
+ ESmsReplaceShortMessageType3=0x03,
+ /** Replace Short Message Type 4. */
+ ESmsReplaceShortMessageType4=0x04,
+ /** Replace Short Message Type 5. */
+ ESmsReplaceShortMessageType5=0x05,
+ /** Replace Short Message Type 6. */
+ ESmsReplaceShortMessageType6=0x06,
+ /** Replace Short Message Type 7. */
+ ESmsReplaceShortMessageType7=0x07,
+// Reserved values
+// ....
+// ....
+ /** Return Call Message. */
+ ESmsReturnCallMesage=0x1F,
+// Reserved values
+// ....
+// ....
+ ESmsAnsi136RData=0x3C,
+ ESmsMEDataDownload=0x3D,
+ /** ME De-personalization Short Message. */
+ ESmsMEDepersonalizationShortMessage=0x3E,
+ /** ME Data download. */
+ ESmsSIMDataDownLoad=0x3F,
+
+// ESmsShortMessageTypeMask=0x1F
+ /** Mask for Short Message type bits. */
+ ESmsShortMessageTypeMask=0x3F
+ };
+public:
+ TSmsProtocolIdentifier();
+ inline TSmsPIDType PIDType() const;
+ inline void SetPIDType(TSmsPIDType aSmsPIDType);
+ TSmsTelematicDeviceIndicator TelematicDeviceIndicator() const;
+ void SetTelematicDeviceIndicator(TSmsTelematicDeviceIndicator aIndicator);
+ TSmsTelematicDeviceType TelematicDeviceType() const;
+ void SetTelematicDeviceType(TSmsTelematicDeviceType aDeviceType);
+ TInt ShortMessageALProtocol() const;
+ void SetShortMessageALProtocol(TSmsShortMessageALProtocol aProtocol);
+ TInt ShortMessageType() const;
+ void SetShortMessageType(TSmsShortMessageType aShortMessageType);
+ };
+
+
+/**
+ * TP-DCS Data Coding Scheme defined in 3GPP TS 23.038.
+ *
+ * The data coding scheme is not always present in an GSM SMS PDU (CSmsPDU).
+ * It is always present for a SUBMIT (CSmsSubmit) and a DELIVER (CSmsDeliver),
+ * and is sometimes present for a DELIVER REPORT (CSmsDeliverReport), a SUBMIT
+ * REPORT (CSmsSubmitReport) or a STATUS REPORT (CSmsStatusReport), depending
+ * on the parameter indicator (TSmsParameterIndicator).
+ * @publishedAll
+ * @released
+ */
+class TSmsDataCodingScheme : public TSmsOctet
+ {
+public:
+/** Flags for bits 7-4, which determine the meaning of the lower order bits. */
+ enum TSmsDCSBits7To4
+ {
+ /** Text is uncompressed, no class information. */
+ ESmsDCSTextUncompressedWithNoClassInfo=0x00,
+ /** Text is uncompressed, class information present. */
+ ESmsDCSTextUncompressedWithClassInfo=0x10,
+ /** Text is compressed, no class information. */
+ ESmsDCSTextCompressedWithNoClassInfo=0x20,
+ /** Text is compressed, class information present. */
+ ESmsDCSTextCompressedWithClassInfo=0x30,
+
+ /** Auto Deletion, Text is uncompressed, no class information. */
+ ESmsDCSAutoDelNoClassInfoUncompressedText=0x40,
+ /** Auto Deletion, Text is uncompressed, class information present. */
+ ESmsDCSAutoDelClassInfoUncompressedText=0x50,
+ /** Auto Deletion, Text is compressed, no class information. */
+ ESmsDCSAutoDelNoClassInfoCompressedText=0x60,
+ /** Auto Deletion, Text is compressed, class information present. */
+ ESmsDCSAutoDelClassInfoTextCompressedText=0x70,
+
+ /** Reserved. */
+ ESmsDCSReserved1=0x40,
+ /** Reserved. */
+ ESmsDCSReserved2=0x50,
+ /** Reserved. */
+ ESmsDCSReserved3=0x60,
+ /** Reserved. */
+ ESmsDCSReserved4=0x70,
+ /** Reserved. */
+ ESmsDCSReserved5=0x80,
+ /** Reserved. */
+ ESmsDCSReserved6=0x90,
+ /** Reserved. */
+ ESmsDCSReserved7=0xA0,
+ /** Reserved. */
+ ESmsDCSReserved8=0xB0,
+
+
+
+ /** Message Waiting Indication Group: Discard Message. */
+ ESmsDCSMessageWaitingIndicationDiscardMessage=0xC0,
+
+ /** Message Waiting Indication Group (7 bit). */
+ ESmsDCSMessageWaitingIndication7Bit=0xD0, // 7 bit User data
+ /** Message Waiting Indication Group (UCS2). */
+ ESmsDCSMessageWaitingIndicationUCS2=0xE0, // unicode User data
+
+ /** Text uncompressed, 7 bit or 8 bit. */
+ ESmsDCSTextUncompressed7BitOr8Bit=0xF0,
+
+ /** Masks bits 7 to 4. */
+ ESmsDCSBits7To4Mask=0xF0
+ };
+
+/** Message Marked for Automatic Deletion */
+ enum TAutomaticDeletionGroup
+ {
+ ESmsDCSAutomaticDeletion = 0x40,
+ ESmsDCSAutomaticDeletionMask = 0xC0
+ };
+
+/** Alphabet bit flags. */
+ enum TSmsAlphabet
+ {
+ /** GSM 7 bit default alphabet. */
+ ESmsAlphabet7Bit=0x00,
+ /** 8-bit data. */
+ ESmsAlphabet8Bit=0x04,
+ /** UCS2. */
+ ESmsAlphabetUCS2=0x08,
+ /** Reserved. */
+ ESmsAlphabetReserved=0x0C,
+
+ /** Mask for these bit flags. */
+ ESmsAlphabetMask=0x0C,
+ };
+/** Message Class bit flags. */
+ enum TSmsClass
+ {
+ /** Class 0. */
+ ESmsClass0=0x00,
+ /** Class 1. */
+ ESmsClass1=0x01,
+ /** Class 2. */
+ ESmsClass2=0x02,
+ /** Class 3. */
+ ESmsClass3=0x03,
+
+ /** Mask for these bit flags. */
+ ESmsClassMask=0x03,
+ };
+
+/** Indication Sense bit flags. */
+ enum TSmsIndicationState
+ {
+ /** Indication inactive. */
+ ESmsIndicationInactive=0x00,
+ /** Indication active. */
+ ESmsIndicationActive=0x08,
+
+ /** Mask for these bit flags. */
+ ESmsIndicationStateMask=0x08
+ };
+/** Indication Type bit flags. */
+ enum TSmsIndicationType
+ {
+ /** Voicemail Message Waiting. */
+ ESmsVoicemailMessageWaiting=0x00,
+ /** Fax Message Waiting. */
+ ESmsFaxMessageWaiting=0x01,
+ /** Electronic Mail Message Waiting. */
+ ESmsElectronicMailMessageWaiting=0x02,
+ /** Other Message Waiting. */
+ ESmsFaxOtherMessageWaiting=0x03,
+
+ /** Mask for these bit flags. */
+ ESmsIndicationTypeMask=0x03
+ };
+
+public:
+ TSmsDataCodingScheme();
+ inline TSmsDCSBits7To4 Bits7To4() const;
+ inline void SetBits7To4(TSmsDCSBits7To4 aBits7To4);
+// Normal SMS settings
+ TBool TextCompressed() const;
+ void SetTextCompressed(TBool aCompressed);
+ TSmsAlphabet Alphabet() const;
+ void SetAlphabet(TSmsAlphabet aAlphabet);
+ TBool Class(TSmsClass& aClass) const;
+ void SetClass(TBool aClassDefined,TSmsClass aClass);
+// Message waiting settings
+ TSmsIndicationState IndicationState() const;
+ void SetIndicationState(TSmsIndicationState aState);
+ TSmsIndicationType IndicationType() const;
+ void SetIndicationType(TSmsIndicationType aType);
+ };
+
+
+/**
+ * Specifies alternative 7bit encoding combinations to use if the default
+ * GSM encoding cannot encode the message as 7bit without data loss.
+ *
+ * @publishedAll
+ * @released
+ */
+enum TSmsEncoding
+ {
+ /** Default value meaning that no alternative encoding would be used. */
+ ESmsEncodingNone = 0,
+
+ /**
+ * Allows the use of the Turkish Single Shift table in place of the
+ * default GSM shift table.
+ *
+ * @note If used during encoding there will be a 3 octet cost in the User Data
+ * Header.
+ */
+ ESmsEncodingTurkishSingleShift = 0x11,
+
+ /**
+ * Allows the use of the Turkish Locking Shift table in place of the
+ * default GSM alphabet table.
+ *
+ * @note If used during encoding there will be a 3 octet cost in the User Data
+ * Header.
+ * @note This encoding should only be used if the relevant national
+ * regulatory body has requested its use.
+ */
+ ESmsEncodingTurkishLockingShift = 0x12,
+
+ /**
+ * Allows the use of the Turkish Locking Shift and/or the Turkish Single
+ * Shift tables in place of the default GSM alphabet and shift tables.
+ *
+ * @note If used during encoding there will be a 3 or 6 octet cost in the User Data
+ * Header.
+ * @note This encoding should only be used if the relevant national
+ * regulatory body has requested its use.
+ */
+ ESmsEncodingTurkishLockingAndSingleShift = 0x13,
+
+ /**
+ * Allows the use of the Spanish Single Shift table in place of the
+ * default GSM shift table.
+ *
+ * @note If used during encoding there will be a 3 octet cost in the User Data
+ * Header.
+ */
+ ESmsEncodingSpanishSingleShift = 0x21,
+
+ /**
+ * Allows the use of the Portuguese Single Shift table in place of the
+ * default GSM shift table.
+ *
+ * @note If used during encoding there will be a 3 octet cost in the User Data
+ * Header.
+ */
+ ESmsEncodingPortugueseSingleShift = 0x31,
+
+ /**
+ * Allows the use of the Portuguese Locking Shift table in place of the
+ * default GSM alphabet table.
+ *
+ * @note If used during encoding there will be a 3 octet cost in the User Data
+ * Header.
+ * @note This encoding should only be used if the relevant national
+ * regulatory body has requested its use.
+ */
+ ESmsEncodingPortugueseLockingShift = 0x32,
+
+ /**
+ * Allows the use of the Portuguese Locking Shift and/or the Portuguese Single
+ * Shift tables in place of the default GSM alphabet and shift tables.
+ *
+ * @note If used during encoding there will be a 3 or 6 octet cost in the User Data
+ * Header.
+ * @note This encoding should only be used if the relevant national
+ * regulatory body has requested its use.
+ */
+ ESmsEncodingPortugueseLockingAndSingleShift = 0x33
+ };
+
+
+/**
+ * GSM National Language Identifiers.
+ *
+ * @publishedAll
+ * @released
+ */
+enum TSmsNationalLanguageIdentifier
+ {
+ /** Turkish. */
+ ESmsNationalLanguageIdentifierTurkish = 1,
+
+ /** Spanish. */
+ ESmsNationalLanguageIdentifierSpanish = 2,
+
+ /** Portuguese. */
+ ESmsNationalLanguageIdentifierPortuguese = 3
+ };
+
+
+/**
+ * Utility to provide piecewise character set conversion to / from unpacked user
+ * data elements.
+ * @publishedAll
+ * @released
+ */
+class CSmsAlphabetConverter : public CBase
+ {
+public:
+// Construction and destruction methods
+ IMPORT_C static CSmsAlphabetConverter* NewLC(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsDataCodingScheme::TSmsAlphabet aSmsAlphabet,TBool aIsBinary);
+ IMPORT_C ~CSmsAlphabetConverter();
+
+// Enumerated types and structs
+/**
+ * Indicates whether there is a fixed relationship between the number of characters
+ * and user data elements.
+ *
+ * For example, Unicode characters always map to a single SMS UCS2 character,
+ * while a Unicode character might map to one, two or more SMS 7-bit User Data
+ * Elements (extended 7-bit characters).
+ */
+ enum TSmsAlphabetWidthConversion
+ {
+ /** Fixed relationship. */
+ ESmsAlphabetWidthConversionFixed,
+ /** Variable relationship. */
+ ESmsAlphabetWidthConversionVariable
+ };
+
+ struct TSmsAlphabetConversionProperties
+/**
+ * Holds the number of user data elements required for conversion from a single
+ * native character.
+ *
+ * This value is applicable only if the iWidthConversion parameter is ESmsAlphabetWidthConversionFixed.
+ */
+ {
+ /** Alphabet width conversion. */
+ TSmsAlphabetWidthConversion iWidthConversion;
+ /** Number of user data elements required for conversion from a single native character */
+ TInt iUDElementsPerNativeCharacter;
+ };
+
+public:
+// Conversion methods
+ void ConversionPropertiesL(TSmsAlphabetConversionProperties& aConversionProperties) const;
+ IMPORT_C TPtrC8 ConvertFromNativeL(const TDesC& aNativeCharacters);
+ IMPORT_C TPtrC8 ConvertFromNativeL(const TDesC& aNativeCharacters,
+ TSmsEncoding aEncoding,
+ TInt& aNumberOfUnconvertibleCharacters,
+ TInt& aNumberOfDowngradedCharacters);
+ IMPORT_C TPtrC ConvertToNativeL(const TDesC8& aUDElements);
+ IMPORT_C TPtrC ConvertToNativeL(const TDesC8& aUDElements, TSmsEncoding aEncoding);
+
+ TBool IsSupportedL(TChar aChar);
+ TBool IsSupportedL(const TDesC& aDes, TInt& aNumberOfUnconvertibleCharacters,
+ TInt& aIndexOfFirstUnconvertibleCharacter);
+
+ TBool IsSupportedL(TChar aChar, TSmsEncoding aEncoding, TBool& aIsDowngrade,
+ TBool& aRequiresAlternativeEncoding);
+ TBool IsSupportedL(const TDesC& aDes, TSmsEncoding aEncoding,
+ TInt& aNumberOfUnconvertibleCharacters,
+ TInt& aNumberOfDowngradedCharacters,
+ TInt& aNumberRequiringAlternativeEncoding,
+ TInt& aIndexOfFirstUnconvertibleCharacter);
+
+// Alternative Encoding methods
+ TSmsEncoding FindBestAlternativeEncodingL(const TDesC& aNativeCharacters,
+ TSmsEncoding aSuggestedEncoding);
+ void ConfirmAlternativeEncoderL(TSmsEncoding aEncoding) const;
+
+// Unconverted buffer methods
+ inline void ResetUnconvertedNativeCharacters();
+ inline void ResetUnconvertedUDElements();
+ inline TPtrC UnconvertedNativeCharacters();
+ inline TPtrC8 UnconvertedUDElements();
+
+// Getter / setters
+ inline TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;
+
+private:
+// Private construction methods
+ CSmsAlphabetConverter(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsDataCodingScheme::TSmsAlphabet aSmsAlphabet,TBool aIsBinary);
+ void ConstructL();
+
+// Private conversion preparation methods
+ void PrepareForConversionFromNativeL(TSmsEncoding aEncoding);
+ void PrepareForConversionToNativeL(TSmsEncoding aEncoding);
+
+// Private Alternative Encoding methods
+ void GetAlternativeEncoderIDL(TSmsEncoding aEncoding, TUint& aEncoderID) const;
+
+// Private buffer helper methods
+ TPtr16 CheckAllocBufferL(HBufC16** aBuffer,TInt aMaxLength,TInt aUsedLength);
+ TPtr8 CheckAllocBufferL(HBufC8** aBuffer,TInt aMaxLength,TInt aUsedLength);
+
+// Private constants
+ enum
+ {
+ KMaxSmsAlphabetConversionRetries=4
+ };
+
+ enum
+ {
+ KMinSmsAlphabetConversionAllocIncrement=4
+ };
+
+private:
+
+ CCnvCharacterSetConverter& iCharacterSetConverter;
+ RFs& iFs;
+ TSmsDataCodingScheme::TSmsAlphabet iSmsAlphabet;
+ TBool iIsBinary;
+ HBufC* iConvertedNativeCharacters;
+ HBufC8* iConvertedUDElements;
+ HBufC* iUnconvertedNativeCharacters;
+ TPtr iUnconvertedNativeCharactersPtr;
+ HBufC8* iUnconvertedUDElements;
+ TPtr8 iUnconvertedUDElementsPtr;
+ };
+
+
+/** Type-of-number, as defined in ETSI 3GPP TS 23.040. */
+enum TGsmSmsTypeOfNumber
+ {
+ /**
+ * Unknown, used when the user or network has no a priori information about the
+ * numbering plan.
+ * In this case, the Address-Value field is organized according to the network
+ * dialling plan, e.g. prefix or escape digits might be present.
+ */
+ EGsmSmsTONUnknown=0x00,
+ /**
+ * International number.
+ * The international format shall be accepted also when the message is destined
+ * to a recipient in the same country as the MSC or as the SGSN.
+ */
+ EGsmSmsTONInternationalNumber=0x10,
+ /**
+ * National number.
+ * Prefix or escape digits shall not be included.
+ */
+ EGsmSmsTONNationalNumber=0x20,
+ /**
+ * Network specific number.
+ * Administration/service number specific to the serving network, e.g. used to
+ * access an operator.
+ */
+ EGsmSmsTONNetworkSpecificNumber=0x30,
+ /**
+ * Subscriber number.
+ * Used when a specific short number representation is stored in one or more
+ * SCs as part of a higher layer application. (Note that "Subscriber number"
+ * shall only be used in connection with the proper PID referring to this application).
+ */
+ EGsmSmsTONSubscriberNumber=0x40,
+ /**
+ * Alpha-numeric.
+ * Coded according to 3GPP TS 23.038 - GSM 7-bit default alphabet.
+ */
+ EGsmSmsTONAlphaNumeric=0x50,
+ EGsmSmsTONAbbreviatedNumber=0x60, //< Abbreviated number
+ EGsmSmsTONReserverved=0x70, //< Reserved for extension
+ };
+
+/** Numbering-plan-identification defined in ETSI 3GPP TS 23.040. */
+enum TGsmSmsNumberingPlanIdentification
+ {
+ /** Unknown. */
+ EGsmSmsNPIUnknown=0x00,
+ /** ISDN telephone numbering plan. */
+ EGsmSmsNPIISDNTelephoneNumberingPlan=0x01,
+ /** Data numbering plan. */
+ EGsmSmsNPIDataNumberingPlan=0x03,
+ /** Telex numbering plan. */
+ EGsmSmsNPITelexNumberingPlan=0x04,
+ /** National numbering plan. */
+ EGsmSmsNPINationalNumberingPlan=0x08,
+ /** Private numbering plan. */
+ EGsmSmsNPIPrivateNumberingPlan=0x09,
+ /** ERMES numbering plan. */
+ EGsmSmsNPIERMESNumberingPlan=0x0A,
+ /** Reserved for extension. */
+ EGsmSmsNPIReservedForExtension=0x0F,
+ };
+
+
+/**
+ * Type-of-address field defined in ETSI 3GPP TS 23.040
+ * @publishedAll
+ * @released
+ */
+class TGsmSmsTypeOfAddress : public TSmsOctet
+ {
+ public:
+
+ enum
+ {
+ EGsmSmsFirstBitMask=0x80,
+ EGsmSmsTONMask=0x70,
+ EGsmSmsNPIMask=0x0F
+ };
+
+ public:
+
+ inline TGsmSmsTypeOfAddress(TInt aValue = EGsmSmsFirstBitMask);
+ inline TGsmSmsTypeOfAddress(TGsmSmsTypeOfNumber aTon, TGsmSmsNumberingPlanIdentification aNPI);
+
+ inline TGsmSmsTypeOfNumber TON() const;
+ inline void SetTON(TGsmSmsTypeOfNumber aTON);
+
+ inline TGsmSmsNumberingPlanIdentification NPI() const;
+ /**
+ * Sets the numbering plan identification.
+ * @param aNPI Numbering plan identification
+ */
+ inline void SetNPI(TGsmSmsNumberingPlanIdentification aNPI);
+
+ /**
+ * Converts type of number and numbering plan identification information from
+ * the type of address parameter to the NMobilePhone::TMobileTON and NMobilePhone::TMobileNPI
+ * format.
+ *
+ * @param aTON On return, type of number
+ * @param aNPI On return, numbering plan identification
+ */
+ IMPORT_C void ConvertToETelMM(NMobilePhone::TMobileTON& aTON, NMobilePhone::TMobileNPI& aNPI) const;
+ /**
+ * Sets type of number and numbering plan identification information from values
+ * specified in NMobilePhone::TMobileTON and NMobilePhone::TMobileNPI formats.
+ *
+ * @param aTON Type of number
+ * @param aNPI Numbering plan identification
+ */
+ IMPORT_C void SetFromETelMM(NMobilePhone::TMobileTON aTON, NMobilePhone::TMobileNPI aNPI);
+ };
+
+/** Maximum length of a Service Centre address = 21, as defined in ETSI GSM 04.11. */
+const TInt TGsmSmsTelNumberMaxLen = 21;
+
+
+/**
+ * Encapsulation of basic address information
+ * @publishedAll
+ * @released
+ */
+class TGsmSmsTelNumber
+ {
+ public:
+ /**
+ * @publishedAll
+ * If the address is an alphanumeric address,
+ * it can represent a voice message waiting indicator
+ * as defined in the Common PCN Handset Specification
+ * v4.2. The specification allows other indicators
+ * to be defined in the future.
+ */
+ enum TTypeOfIndicator
+ {
+ EVoiceMessageWaitingIndicator = 0
+ };
+
+ private:
+ enum TCPHSIndicatorTypeByte
+ {
+ ECPSHIndicatorTypeBitMask = 0x7E,
+ ECPSHVoiceMailId = 0x10,
+ ECPHSIndicatorSettingBit = 0x01,
+ ECPHSVoiceMailSettingSpareBit = 0x80
+ };
+
+ enum TCPHSIndicatorIdByte
+ {
+ ECPSHIndicatorIdBitMask = 0x7E,
+ ECPSHIndicatorId = 0x00,
+ ECPSHIndicatorIdSettingBit = 0x01,
+ ECTSHVoiceMailIndicatorSpareBit = 0x80
+ };
+
+ enum TCPHSByteIndex
+ {
+ ECPHSLength = 0,
+ ECPHSAddressType = 1,
+ ECPHSAddressIndicatorType = 2,
+ ECPHSAddressIndicatorId = 3,
+ ECPHSSizeOfAddressField = 4
+ };
+
+ public:
+ inline TGsmSmsTelNumber();
+
+ IMPORT_C TBool IsInstanceOf(TTypeOfIndicator aType);
+
+ public:
+
+ TGsmSmsTypeOfAddress iTypeOfAddress; //< The type-of-address of iTelNumber
+ TBuf<TGsmSmsTelNumberMaxLen> iTelNumber; //< Telephone number, in format of iTypeOfAddress
+ };
+
+
+/**
+ * CSmsAddress - address of the recipient or SC
+ * @publishedAll
+ * @released
+ */
+class CSmsAddress : public CBase
+ {
+public:
+ enum
+ {
+ KSmsAddressMaxAddressValueLength=10,// octets
+ KSmsAddressMaxAddressLength = 12 // address length, type and address value
+ };
+public:
+ static CSmsAddress* NewL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
+ ~CSmsAddress();
+ TPtrC Address() const;
+ void SetAddressL(const TDesC& aAddress);
+ void ParsedAddress(TGsmSmsTelNumber& aParsedAddress) const;
+ void SetParsedAddressL(const TGsmSmsTelNumber& aParsedAddress);
+
+ void SetRawAddressL(TGsmSmsTypeOfAddress aTypeOfAddress, TPtrC aBuffer);
+ TGsmSmsTypeOfAddress& TypeOfAddress();
+
+ TUint8 SizeL();
+
+ TUint8* EncodeL(TUint8* aPtr) const;
+ void DecodeL(TGsmuLex8& aPdu);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+
+ CSmsAddress* DuplicateL() const;
+
+private:
+ CSmsAddress(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
+ void NewBufferL(TInt aLength);
+ void DoSetParsedAddressL(const TDesC& aAddress);
+private:
+
+ CCnvCharacterSetConverter& iCharacterSetConverter;
+ RFs& iFs;
+ TGsmSmsTypeOfAddress iTypeOfAddress;
+ HBufC* iBuffer;
+ };
+
+
+/**
+ * TP-SCTS Service Center Time Stamp Found in Deliver, Submit Report, Status Report,
+ * @publishedAll
+ * @released
+ */
+class TSmsServiceCenterTimeStamp
+ {
+public:
+ enum {KSmsMaxTimeZoneNumQuarterHours=79};
+/** Time zone offset sign bit. */
+ enum TSmsTimeZoneSignBit
+ {
+ /** Positive offset. */
+ ESmsTimeZonePositive=0x00,
+ /** Negative offset. */
+ ESmsTimeZoneNegative=0x08,
+
+ /** Mask for these bit flags. */
+ ESmsTimeZoneSignBitMask=0x08
+ };
+public:
+ TSmsServiceCenterTimeStamp();
+ inline TInt TimeOffset() const;
+ void SetTimeOffset(TInt aNumQuarterHours);
+ inline const TTime& Time() const;
+ inline void SetTime(const TTime& aTime);
+ TUint8* EncodeL(TUint8* aPtr) const;
+ void DecodeL(TGsmuLex8& aPdu, TInt& aTimeError);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+private:
+ TTime iTime;
+ TInt iTimeZoneNumQuarterHours;
+ };
+
+
+/**
+ * TP-VP Validity Period Found in SUBMIT PDUs.
+ *
+ * The validy period format is encoded in the first octet of the PDU, so the
+ * class takes a reference to a TSmsFirstOctet. The validty period specifies
+ * the length of time the PDU lives in the service center if the PDU cannot be
+ * immediately delivered.
+ * @publishedAll
+ * @released
+ */
+class TSmsValidityPeriod
+ {
+public:
+/** Validity period units (in minutes). */
+ enum TValidityPeriodUnitInMinutes
+ {
+ /** Five minutes. */
+ EFiveMinuteUnitInMinutes=5,
+ /** 30 minutes. */
+ EHalfHourUnitInMinutes=30,
+ /** 1 day. */
+ EOneDayUnitInMinutes=1440,
+ /** 1 week. */
+ EOneWeekUnitInMinutes=7*EOneDayUnitInMinutes
+ };
+/** Limits for validity period units (in minutes). */
+ enum TValidityPeriodUnitLimitInMinutes
+ {
+ /** Limit for 5 minute validity period unit. */
+ EFiveMinuteUnitLimitInMinutes=24*EHalfHourUnitInMinutes,
+ /** Limit for 30 minute validity period unit. */
+ EHalfHourUnitLimitInMinutes=EOneDayUnitInMinutes,
+ /** Limit for 1 day validity period unit. */
+ EOneDayUnitLimitInMinutes=30*EOneDayUnitInMinutes,
+ /** Limit for 1 week validity period unit. */
+ EOneWeekUnitLimitInMinutes=63*EOneWeekUnitInMinutes
+ };
+/** Limits for validity period units. */
+ enum TValidityPeriodLimit
+ {
+ /** Limit for 5 minute validity period unit. */
+ EFiveMinuteUnitLimit=143,
+ /** Limit for 30 minute validity period unit. */
+ EHalfHourUnitLimit=167,
+ /** Limit for 1 day validity period unit. */
+ EOneDayUnitLimit=196,
+ /** Limit for 1 week validity period unit. */
+ EOneWeekUnitLimit=255
+ };
+public:
+ TSmsValidityPeriod(TSmsFirstOctet& aFirstOctet);
+ inline TSmsFirstOctet::TSmsValidityPeriodFormat ValidityPeriodFormat() const;
+ inline void SetValidityPeriodFormat(TSmsFirstOctet::TSmsValidityPeriodFormat aValidityPeriodFormat);
+ inline const TTimeIntervalMinutes& TimeIntervalMinutes() const;
+ inline void SetTimeIntervalMinutes(const TTimeIntervalMinutes& aTimeIntervalMinutes);
+ TTime Time() const;
+ TUint8* EncodeL(TUint8* aPtr) const;
+ TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
+ void DecodeL(TGsmuLex8& aPdu);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+private:
+ TSmsFirstOctet& iFirstOctet;
+ TTimeIntervalMinutes iTimeIntervalMinutes;
+ };
+
+class CEmsInformationElement;
+
+/**
+ * SMS element defined in TP-UD octet.
+ *
+ * This element is found in Deliver, Deliver Report, Submit, Submit Report, Status
+ * Report and Command type messages.
+ * @publishedAll
+ * @released
+ */
+class CSmsInformationElement : public CBase
+ {
+public:
+/** TP-UD Information Element Identifier. */
+ enum TSmsInformationElementIdentifier
+ {
+ /** Concatenated short messages, 8-bit reference number. */
+ ESmsIEIConcatenatedShortMessages8BitReference=0x00,
+ /** Special SMS Message Indication. */
+ ESmsIEISpecialSMSMessageIndication=0x01,
+ /** Reserved. */
+ ESmsIEIReserved=0x02,
+ /** Value not used to avoid misinterpretation as line feed character. */
+ ESmsIEIValueNotUsed=0x03,
+ /** Application port addressing scheme, 8 bit address. */
+ ESmsIEIApplicationPortAddressing8Bit=0x04,
+ /** Application port addressing scheme, 16 bit address */
+ ESmsIEIApplicationPortAddressing16Bit=0x05,
+ /** SMSC Control Parameters. */
+ ESmsIEISMSCControlParameters=0x06,
+ /** UDH Source Indicator. */
+ ESmsIEIUDHSourceIndicator=0x07,
+ /** Concatenated short message, 16-bit reference number. */
+ ESmsIEIConcatenatedShortMessages16BitReference=0x08,
+ /** Wireless Control Message Protocol. */
+ ESmsIEIWirelessControlMessageProtocol=0x09,
+ ESmsIEIRFC822EmailHeader=0x20,
+
+
+// Enhanced SMS IE
+ ESmsEnhancedTextFormatting=0x0A,
+ ESmsEnhancedPredefinedSound=0x0B,
+ ESmsEnhancedUserDefinedSound=0x0C,
+ ESmsEnhancedPredefinedAnimation=0x0D,
+ ESmsEnhancedLargeAnimation=0x0E,
+ ESmsEnhancedSmallAnimation=0x0F,
+ ESmsEnhancedLargePicture=0x10,
+ ESmsEnhancedSmallPicture=0x11,
+ ESmsEnhancedVariablePicture=0x12,
+ ESmsEnhancedUserPromptIndicator=0x13,
+ ESmsEnhancedExtendedObject=0x14,
+ ESmsEnhancedReusedExtendedObject=0x15,
+ ESmsEnhancedCompressionControl=0x16,
+ ESmsEnhancedODI=0x17,
+ ESmsEnhancedStandardWVG=0x18,
+ ESmsEnhancedCharacterSizeWVG=0x19,
+ ESmsEnhancedextendedObjectDataRequest=0x1A,
+
+// Control Information Elements
+
+ ESmsHyperLinkFormat = 0x21,
+ ESmsReplyAddressFormat = 0x22,
+ ESmsEnhanceVoiceMailInformation = 0x23,
+ ESmsNationalLanguageSingleShift = 0x24,
+ ESmsNationalLanguageLockingShift = 0x25,
+
+// Reserved values
+// ....
+// ....
+ /** SIM Toolkit Security Header 1. */
+ ESmsIEISIMToolkitSecurityHeaders1=0x70,
+ /** SIM Toolkit Security Header 2. */
+ ESmsIEISIMToolkitSecurityHeaders2=0x71,
+ /** SIM Toolkit Security Header 3. */
+ ESmsIEISIMToolkitSecurityHeaders3=0x72,
+ /** SIM Toolkit Security Header 4. */
+ ESmsIEISIMToolkitSecurityHeaders4=0x73,
+ /** SIM Toolkit Security Header 5. */
+ ESmsIEISIMToolkitSecurityHeaders5=0x74,
+ /** SIM Toolkit Security Header 6. */
+ ESmsIEISIMToolkitSecurityHeaders6=0x75,
+ /** SIM Toolkit Security Header 7. */
+ ESmsIEISIMToolkitSecurityHeaders7=0x76,
+ /** SIM Toolkit Security Header 8. */
+ ESmsIEISIMToolkitSecurityHeaders8=0x77,
+ /** SIM Toolkit Security Header 9. */
+ ESmsIEISIMToolkitSecurityHeaders9=0x78,
+ /** SIM Toolkit Security Header 10. */
+ ESmsIEISIMToolkitSecurityHeaders10=0x79,
+ /** SIM Toolkit Security Header 11. */
+ ESmsIEISIMToolkitSecurityHeaders11=0x7A,
+ /** SIM Toolkit Security Header 12. */
+ ESmsIEISIMToolkitSecurityHeaders12=0x7B,
+ /** SIM Toolkit Security Header 13. */
+ ESmsIEISIMToolkitSecurityHeaders13=0x7C,
+ /** SIM Toolkit Security Header 14. */
+ ESmsIEISIMToolkitSecurityHeaders14=0x7D,
+ /** SIM Toolkit Security Header 15. */
+ ESmsIEISIMToolkitSecurityHeaders15=0x7E,
+ /** SIM Toolkit Security Header 16. */
+ ESmsIEISIMToolkitSecurityHeaders16=0x7F,
+ /** SME to SME specific use 1. */
+ ESmsIEISMEToSMESpecificUse1=0x80,
+ /** SME to SME specific use 2. */
+ ESmsIEISMEToSMESpecificUse2=0x81,
+ /** SME to SME specific use 3. */
+ ESmsIEISMEToSMESpecificUse3=0x82,
+ /** SME to SME specific use 4. */
+ ESmsIEISMEToSMESpecificUse4=0x83,
+ /** SME to SME specific use 5. */
+ ESmsIEISMEToSMESpecificUse5=0x84,
+ /** SME to SME specific use 6. */
+ ESmsIEISMEToSMESpecificUse6=0x85,
+ /** SME to SME specific use 7. */
+ ESmsIEISMEToSMESpecificUse7=0x86,
+ /** SME to SME specific use 8. */
+ ESmsIEISMEToSMESpecificUse8=0x87,
+ /** SME to SME specific use 9. */
+ ESmsIEISMEToSMESpecificUse9=0x88,
+ /** SME to SME specific use 10. */
+ ESmsIEISMEToSMESpecificUse10=0x89,
+ /** SME to SME specific use 11. */
+ ESmsIEISMEToSMESpecificUse11=0x8A,
+ /** SME to SME specific use 12. */
+ ESmsIEISMEToSMESpecificUse12=0x8B,
+ /** SME to SME specific use 13. */
+ ESmsIEISMEToSMESpecificUse13=0x8C,
+ /** SME to SME specific use 14. */
+ ESmsIEISMEToSMESpecificUse14=0x8D,
+ /** SME to SME specific use 15. */
+ ESmsIEISMEToSMESpecificUse15=0x8E,
+ /** SME to SME specific use 16. */
+ ESmsIEISMEToSMESpecificUse16=0x8F,
+ /** SME to SME specific use 17. */
+ ESmsIEISMEToSMESpecificUse17=0x90,
+ /** SME to SME specific use 18. */
+ ESmsIEISMEToSMESpecificUse18=0x91,
+ /** SME to SME specific use 19. */
+ ESmsIEISMEToSMESpecificUse19=0x92,
+ /** SME to SME specific use 20. */
+ ESmsIEISMEToSMESpecificUse20=0x93,
+ /** SME to SME specific use 21. */
+ ESmsIEISMEToSMESpecificUse21=0x94,
+ /** SME to SME specific use 22. */
+ ESmsIEISMEToSMESpecificUse22=0x95,
+ /** SME to SME specific use 23. */
+ ESmsIEISMEToSMESpecificUse23=0x96,
+ /** SME to SME specific use 24. */
+ ESmsIEISMEToSMESpecificUse24=0x97,
+ /** SME to SME specific use 25. */
+ ESmsIEISMEToSMESpecificUse25=0x98,
+ /** SME to SME specific use 26. */
+ ESmsIEISMEToSMESpecificUse26=0x99,
+ /** SME to SME specific use 27. */
+ ESmsIEISMEToSMESpecificUse27=0x9A,
+ /** SME to SME specific use 28. */
+ ESmsIEISMEToSMESpecificUse28=0x9B,
+ /** SME to SME specific use 29. */
+ ESmsIEISMEToSMESpecificUse29=0x9C,
+ /** SME to SME specific use 30. */
+ ESmsIEISMEToSMESpecificUse30=0x9D,
+ /** SME to SME specific use 31. */
+ ESmsIEISMEToSMESpecificUse31=0x9E,
+ /** SME to SME specific use 32. */
+ ESmsIEISMEToSMESpecificUse32=0x9F,
+// Reserved values
+// ....
+// ....
+ /** SC specific use 1. */
+ ESmsIEISCSpecificUse1=0xC0,
+ /** SC specific use 2. */
+ ESmsIEISCSpecificUse2=0xC1,
+ /** SC specific use 3. */
+ ESmsIEISCSpecificUse3=0xC2,
+ /** SC specific use 4. */
+ ESmsIEISCSpecificUse4=0xC3,
+ /** SC specific use 5. */
+ ESmsIEISCSpecificUse5=0xC4,
+ /** SC specific use 6. */
+ ESmsIEISCSpecificUse6=0xC5,
+ /** SC specific use 7. */
+ ESmsIEISCSpecificUse7=0xC6,
+ /** SC specific use 8. */
+ ESmsIEISCSpecificUse8=0xC7,
+ /** SC specific use 9. */
+ ESmsIEISCSpecificUse9=0xC8,
+ /** SC specific use 10. */
+ ESmsIEISCSpecificUse10=0xC9,
+ /** SC specific use 11. */
+ ESmsIEISCSpecificUse11=0xCA,
+ /** SC specific use 12. */
+ ESmsIEISCSpecificUse12=0xCB,
+ /** SC specific use 13. */
+ ESmsIEISCSpecificUse13=0xCC,
+ /** SC specific use 14. */
+ ESmsIEISCSpecificUse14=0xCD,
+ /** SC specific use 15. */
+ ESmsIEISCSpecificUse15=0xCE,
+ /** SC specific use 16. */
+ ESmsIEISCSpecificUse16=0xCF,
+ /** SC specific use 17. */
+ ESmsIEISCSpecificUse17=0xD0,
+ /** SC specific use 18. */
+ ESmsIEISCSpecificUse18=0xD1,
+ /** SC specific use 19. */
+ ESmsIEISCSpecificUse19=0xD2,
+ /** SC specific use 20. */
+ ESmsIEISCSpecificUse20=0xD3,
+ /** SC specific use 21. */
+ ESmsIEISCSpecificUse21=0xD4,
+ /** SC specific use 22. */
+ ESmsIEISCSpecificUse22=0xD5,
+ /** SC specific use 23. */
+ ESmsIEISCSpecificUse23=0xD6,
+ /** SC specific use 24. */
+ ESmsIEISCSpecificUse24=0xD7,
+ /** SC specific use 25. */
+ ESmsIEISCSpecificUse25=0xD8,
+ /** SC specific use 26. */
+ ESmsIEISCSpecificUse26=0xD9,
+ /** SC specific use 27. */
+ ESmsIEISCSpecificUse27=0xDA,
+ /** SC specific use 28. */
+ ESmsIEISCSpecificUse28=0xDB,
+ /** SC specific use 29. */
+ ESmsIEISCSpecificUse29=0xDC,
+ /** SC specific use 30. */
+ ESmsIEISCSpecificUse30=0xDD,
+ /** SC specific use 31. */
+ ESmsIEISCSpecificUse31=0xDE,
+ /** SC specific use 32. */
+ ESmsIEISCSpecificUse32=0xDF,
+ /**
+ * @publishedAll
+ */
+ ESmsIEMaximum = 0xFF
+ };
+
+public:
+ // Exported functions
+ IMPORT_C TSmsInformationElementIdentifier Identifier() const;
+ IMPORT_C TPtr8 Data();
+ IMPORT_C const TDesC8& Data() const;
+public:
+ static CSmsInformationElement* NewL(TSmsInformationElementIdentifier aIdentifier,const TDesC8& aData);
+ static CSmsInformationElement* NewL();
+ ~CSmsInformationElement();
+
+ TUint8* EncodeL(TUint8* aPtr) const;
+ void DecodeL(TGsmuLex8& aPdu);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+ void ConstructL(const TDesC8& aData);
+ TUint Length() const;
+protected:
+ void NewDataL(TInt aLength);
+ inline CSmsInformationElement(TSmsInformationElementIdentifier aInformationElementIdentifier);
+protected:
+ TSmsOctet iIdentifier;
+ HBufC8* iData;
+ };
+
+
+/**
+ * @publishedAll
+ *
+ * TSmsInformationElementCategories
+ *
+ * This class specifies where information elements are located SMS Messages.
+ *
+ * It specifies which PDUs each information element can be located in.
+ *
+ * The SMS stack uses this information when encoding and decoding SMS messages.
+ */
+class TSmsInformationElementCategories
+ {
+public:
+
+ // Comment, table approach probably is not necessary here.
+ // Simply use a switch statement as cannot index directly into table.
+
+ enum TInformationElementCategory
+ {
+ EEmsInformationElement,
+ ECtrlMandatoryInEveryPDUAndWithIdenticalValues, // e.g. Port Addresses
+ ECtrlMandatoryInEveryPDUMultipleInstancesPerPDU, // e.g. Special SMS Message Indication
+ ECtrlMandatoryInEveryPDUButWithValueSpecificToPDU, // e.g. Email Header / Concatenation Elements, SMSC Parameters
+ ECtrlMandatoryIn1stPDUOnly, // e.g. Reply Address
+ ECtrlSingleInstanceOnly, // e.g. Enhanced Voice Mail
+ ECtrlMultipleInstancesAllowed, // e.g. Hyperlink format
+ ENumberOfCategories
+ };
+
+typedef CSmsInformationElement::TSmsInformationElementIdentifier TInformationElementId;
+
+private:
+ enum TIndexToCategory
+ {
+ EIndexEmsInformationElement,
+ EIndexCtrlMandatoryInEveryPDUAndWithIdenticalValues,
+ EIndexCtrlMandatoryInEveryPDUMultipleInstancesPerPDU,
+ EIndexCtrlMandatoryInEveryPDUButWithValueSpecificToPDU,
+ EIndexCtrlMandatoryIn1stPDUOnly,
+ EIndexCtrlSingleInstanceOnly,
+ EIndexCtrlMultipleInstancesAllowed,
+ EIndexCtrlOptionalInEveryPDUWithValueSpecificToPDU,
+ ENumberOfIndices
+ };
+
+public:
+ static TBool GetCategoryDefinition(TInformationElementId aId, TInformationElementCategory& aCategory);
+private:
+ static TBool TranslateCategoryToIndex(TInformationElementId aId, TInt& index);
+ TSmsInformationElementCategories() {};
+ ~TSmsInformationElementCategories() {};
+ void operator=(TSmsInformationElementCategories& aCategory) {(void) aCategory; };
+ TBool operator==(TSmsInformationElementCategories& aCategory){(void) aCategory; return EFalse; };
+ static const TInformationElementCategory categories[ENumberOfIndices];
+ };
+
+
+/**
+ * @publishedAll
+ */
+typedef CSmsInformationElement::TSmsInformationElementIdentifier TSmsId;
+
+
+/**
+ * Mobile originated SMS sent to the network requesting an action or information
+ * on the status of a previously sent SUBMIT.
+ *
+ * This is internal and not intended for use.
+ * @publishedAll
+ * @released
+ */
+class CSmsCommandData : public CBase
+ {
+public:
+ enum {KSmsMaxDataSize=157};
+public:
+ static CSmsCommandData* NewL(TSmsFirstOctet& aFirstOctet);
+ ~CSmsCommandData();
+
+ inline TInt NumInformationElements() const;
+ CSmsInformationElement& InformationElement(TInt aIndex) const;
+ CSmsInformationElement*& InformationElementPtr(TInt aIndex);
+ TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,
+ TInt& aIndex) const;
+ void AddInformationElementL(const TSmsId aIdentifier,const TDesC8& aData);
+ void RemoveInformationElement(TInt aIndex);
+
+ inline TInt MaxDataLength() const;
+ TPtrC8 Data() const;
+ void SetDataL(const TDesC8& aData);
+
+ TUint8* EncodeL(TUint8* aPtr) const;
+ void DecodeL(TGsmuLex8& aPdu);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+
+ CSmsCommandData* DuplicateL() const;
+
+private:
+ CSmsCommandData(TSmsFirstOctet& aFirstOctet);
+
+ TInt HeaderLength() const;
+ TInt TotalHeaderLengthInUDLUnits() const;
+
+ TBool HeaderPresent() const;
+ void SetHeaderPresent(TBool aHeaderPresent);
+
+private:
+ TSmsFirstOctet& iFirstOctet;
+ CArrayPtrFlat <CSmsInformationElement> iInformationElementArray;
+ HBufC8* iBuffer;
+ };
+
+
+/**
+ * Enumerations and operations for SMS commands.
+ * @publishedAll
+ * @released
+ */
+class TSmsCommandType : public TSmsOctet
+ {
+public:
+/** Command types. */
+ enum TSmsCommandTypeValue
+ {
+ /** Enquiry. */
+ ESmsCommandTypeEnquiry=0x00,
+ /** Cancel. */
+ ESmsCommandTypeCancel=0x01,
+ /** Delete. */
+ ESmsCommandTypeDelete=0x02,
+ /** Enable Status Report Request. */
+ ESmsCommandTypeEnableStatusReportRequest=0x03
+// Reserved values
+// ....
+// ....
+ };
+public:
+ TSmsCommandType();
+ inline TInt CommandType() const;
+ inline void SetCommandType(TSmsCommandTypeValue aType);
+ };
+
+
+/**
+ * Operations on the User Data described in TP-UD.
+ * @publishedAll
+ * @released
+ */
+class CSmsUserData : public CBase
+ {
+public:
+ enum {KSmsMaxUserDataSize=140};
+ enum {KSmsMaxUserDataLengthInChars=(KSmsMaxUserDataSize*8)/7};
+
+public:
+ static CSmsUserData* NewL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsFirstOctet& aFirstOctet,const TSmsDataCodingScheme& aDataCodingScheme);
+ ~CSmsUserData();
+
+ inline TInt NumInformationElements() const;
+ IMPORT_C CSmsInformationElement& InformationElement(TInt aIndex) const;
+ IMPORT_C TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,TInt& aIndex) const;
+ IMPORT_C TBool InformationElementLastIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,TInt& aIndex) const;
+ IMPORT_C void AddInformationElementL(TSmsId aIdentifier,const TDesC8& aData);
+ IMPORT_C void RemoveInformationElement(TInt aIndex);
+ void InformationElementIndicesL(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, CArrayFixFlat<TInt>& aIndices) const;
+
+ // EMS related methods
+ void AddEmsInformationElementL(CEmsInformationElement* aIe); // takes ownership od aIe;
+ TBool EmsInformationElementWillFitL(CEmsInformationElement* aIe,CSmsEMSBufferSegmenter& aSeg,TUint& aCharsAddedToCurrentPDU);
+ // Control Information Element related methods
+ TBool ControlInformationElementWillFitL(CSmsInformationElement* aIe);
+ void UpdateInformationElementArrayL(TSmsId aIdentifier,const TDesC8& aData);
+ CSmsInformationElement*& InformationElementPtr(TInt aIndex);
+
+ TInt MaxPackedUDUnitsInBodyRemaining() const;
+ TInt MaxPackedUDUnitsInBodyRemaining(TUint totalHeaderLengthInUDLUnits) const;
+
+ IMPORT_C TInt MaxBodyLengthInChars() const;
+ IMPORT_C TPtrC8 Body() const;
+ IMPORT_C void SetBodyL(const TDesC8& aBody);
+ void AppendBodyL(const TDesC8& aExtraBody);
+
+ IMPORT_C TBool IsSupportedL(TChar aChar);
+ IMPORT_C TBool IsSupportedL(const TDesC& aDes, TInt& aNumberOfUnconvertibleCharacters,
+ TInt& aIndexOfFirstUnconvertibleCharacter) const;
+
+ IMPORT_C TBool IsSupportedL(const TDesC& aDes, TSmsEncoding aEncoding,
+ TInt& aNumberOfUnconvertibleCharacters,
+ TInt& aNumberOfDowngradedCharacters,
+ TInt& aNumberRequiringAlternativeEncoding,
+ TInt& aIndexOfFirstUnconvertibleCharacter) const;
+
+ TBool IsBinaryData() const;
+
+ TUint8* EncodeL(TUint8* aPtr) const;
+ void DecodeL(TGsmuLex8& aPdu);
+ void DecodeL(TGsmuLex8& aPdu, TBool aAcceptTruncation);
+ void InternalizeL(RReadStream& aStream);
+ void ExternalizeL(RWriteStream& aStream) const;
+
+ CSmsUserData* DuplicateL(TSmsFirstOctet& aFirstOctet, const TSmsDataCodingScheme& aDataCodingScheme) const;
+
+private:
+ CSmsUserData(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsFirstOctet& aFirstOctet,const TSmsDataCodingScheme& aDataCodingScheme);
+ void ConstructL();
+ TInt HeaderLength() const;
+ TInt TotalHeaderLengthInUDLUnits() const;
+ TInt BodyLengthInUDLUnits() const;
+ void NewBodyL(TInt aLengthInChars);
+ TBool HeaderPresent() const;
+ void SetHeaderPresent(TBool aHeaderPresent);
+ TInt TotalHeaderLengthInUDLUnits(TInt aIElen) const;
+
+private:
+
+ CCnvCharacterSetConverter& iCharacterSetConverter;
+ RFs& iFs;
+
+ TSmsFirstOctet& iFirstOctet;
+ const TSmsDataCodingScheme& iDataCodingScheme;
+ CArrayPtrFlat<CSmsInformationElement> iInformationElementArray;
+ HBufC8* iBody;
+ };
+
+ enum TSmsMessageIndicationType
+ {
+ EGsmSmsVoiceMessageWaiting =0x00,
+ EGsmSmsFaxMessageWaiting =0x01,
+ EGsmSmsElectronicMailMessageWaiting =0x02,
+ EGsmSmsExtendedMessageTypeWaiting =0x03,
+ };
+
+ enum TExtendedSmsIndicationType
+ {
+ EGsmSmsNoExtendedMessageTypeIndication=0x00,
+ EGsmSmsVideoMessageWaiting =0x01,
+ EGsmSmsExtendedIndicationType2 =0x02,
+ EGsmSmsExtendedIndicationType3 =0x03,
+ EGsmSmsExtendedIndicationType4 =0x04,
+ EGsmSmsExtendedIndicationType5 =0x05,
+ EGsmSmsExtendedIndicationType6 =0x06,
+ EGsmSmsExtendedIndicationType7 =0x07
+ };
+
+enum TSmsSpecialMessageIndicationTypeMask
+ {
+ /** Define a mask for the bits representing */
+ /** the TSmsMessageIndicationType and the */
+ /** TExtendedSmsIndicationType */
+ EGsmSmsSpecialMessageIndicationTypeMask = 0x1F
+ };
+
+ enum TSmsMessageProfileType
+ {
+ EGsmSmsProfileId1 =0x00,
+ EGsmSmsProfileId2 =0x01,
+ EGsmSmsProfileId3 =0x02,
+ EGsmSmsProfileId4 =0x03
+ };
+
+ enum TVoiceMailInfoType
+ {
+ EGsmSmsVoiceMailNotification = 0x00,
+ EGsmSmsVoiceMailDeleteConfirmation = 0x01
+ };
+
+ /** SMSC Control Parameters Selective Status Report For Each Segment. Found in Submit. */
+ enum TSmsSMSCControlParameters
+ {
+ /** Status Report for short message transaction completed. */
+ ESmsStatusReportTransactionCompleted=0x01,
+ /** Status Report for permanent error when Service Centre is not making any more transfer attempts. */
+ ESmsStatusReportPermanentError=0x02,
+ /** Status Report for temporary error when Service Centre is not making any more transfer attempts. */
+ ESmsStatusReportTemporaryError=0x04,
+ /** Status Report for temporary error when Service Centre is still trying to transfer message segment. */
+ ESmsStatusReportTemporaryErrorSCTrying=0x08,
+ /** This is not Supported.
+ Reserved for future use. */
+ ESmsStatusReportForFutureUse1=0x10,
+ /** This is not Supported.
+ Reserved for future use. */
+ ESmsStatusReportForFutureUse2=0x20,
+ /** This is not Supported.
+ A Status Report generated by this Short Message, due to a permanent error or last temporary error,
+ cancels the SRR of the rest of the Short Messages in a concatenated message. */
+ ESmsStatusReportCancelRestSRR=0x40,
+ /** This is not Supported.
+ Include original UDH into the Status Report. */
+ ESmsStatusReportIncludeOriginalUDH=0x80,
+ /** Mask. The 4 least significant bits, which are supported, are set. */
+ ESmsSMSCControlParametersMask=0x0F
+ };
+
+
+/** Non Information Element Identifiers. */
+ enum TSmsNonIEIdentifier
+ {
+ ESmsTPSRRParameter = 0x00,
+ ESmsIncompleteClass0MessageParameter = 0x01
+ };
+
+
+/** Status Report Scheme*/
+enum TSmsStatusReportScheme
+ {
+ EDefaultScheme = 0x00,
+ ETPSRRScheme = 0x01,
+ EControlParametersScheme = 0x10
+ };
+
+
+/**
+ * This is the base class for Enhanced Voice Mail Notifications and
+ * Enhanced Voice Mail Delete Confirmations. It encapsulates
+ * the attributes and encoding / decoding algorithms common to
+ * both types of Enhanced Voice Mail Information Element.
+ *
+ * @publishedAll
+ * @released
+ */
+class CEnhancedVoiceMailBoxInformation : public CBase
+{
+public:
+ enum {KSmsMaxEnhancedVoiceMailSize = CSmsUserData::KSmsMaxUserDataSize - 3};
+ // allow space in user data for the following bytes: user data header length, IE ID, IE Length
+public:
+ IMPORT_C TVoiceMailInfoType Type() const;
+ IMPORT_C void SetProfile(TSmsMessageProfileType aProfile);
+ IMPORT_C TSmsMessageProfileType Profile() const;
+ IMPORT_C void SetStorage(TBool aIsStored);
+ IMPORT_C TBool Store() const;
+ IMPORT_C void SetAlmostMaximumCapacity(TBool aIsAlmostFull);
+ IMPORT_C TBool AlmostMaximumCapacity() const;
+ IMPORT_C void SetMaximumCapacity(TBool aIsFull);
+ IMPORT_C TBool MaximumCapacity() const;
+ IMPORT_C TBool ExtensionIndicator() const;
+ IMPORT_C void SetAccessAddressL(const TDesC& aParsedAddress);
+ IMPORT_C void SetParsedAccessAddressL(const TGsmSmsTelNumber& aParsedAddress);
+ IMPORT_C TPtrC AccessAddress() const;
+ IMPORT_C void ParsedAccessAddress(TGsmSmsTelNumber& aParsedAddress) const;
+ IMPORT_C void SetNumberOfVoiceMessages(TUint8 aNumber);
+ IMPORT_C TUint8 NumberOfVoiceMessages() const;
+
+ static CEnhancedVoiceMailBoxInformation* NewL();
+ virtual ~CEnhancedVoiceMailBoxInformation();
+
+ virtual TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
+ virtual void DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
+protected:
+ CEnhancedVoiceMailBoxInformation();
+ CEnhancedVoiceMailBoxInformation(TVoiceMailInfoType aTVoiceMailInfoType);
+
+ CEnhancedVoiceMailBoxInformation(const CEnhancedVoiceMailBoxInformation&);
+ TBool operator==(const CEnhancedVoiceMailBoxInformation&);
+ void operator=(const CEnhancedVoiceMailBoxInformation&);
+
+ void ConstructL();
+ void NewBufferL(TInt aLength);
+ void DoSetParsedAddressL(const TDesC& aAddress);
+protected:
+ TVoiceMailInfoType iType;
+ TBool iOctet1Bit1;
+ TSmsMessageProfileType iProfile;
+ TBool iStorage;
+ TBool iAlmostFull;
+ TBool iFull;
+ TBool iExtensionIndicator;
+
+ HBufC* iAccessAddress;
+ TGsmSmsTypeOfAddress iTypeOfAddress;
+
+ TUint8 iNumberOfVoiceMessages;
+private:
+enum TBitMasks
+ {
+ EMask1Bit = 0x01,
+ EMask2Bits = 0x03,
+ EMask4Bits = 0x0F
+ };
+};
+
+
+/**
+ * This class encapsulates the attributes of a VM Notification as described in 23.040 V6.5.0.
+ * It is used as one of the attributes a Enhanced Voice Mail Notification.
+ *
+ * @publishedAll
+ * @released
+ */
+class CVoiceMailNotification : public CBase
+{
+public:
+ IMPORT_C void SetMessageId(TUint16 aMessageId);
+ IMPORT_C TUint16 MessageId() const;
+ IMPORT_C void SetMessageLength(TUint8 aLength);
+ IMPORT_C TUint8 MessageLength() const;
+ IMPORT_C void SetRetentionDays(TUint8 aDays);
+ IMPORT_C TUint8 RetentionDays() const;
+ IMPORT_C void SetPriorityIndication(TBool aPriority);
+ IMPORT_C TBool PriorityIndication() const;
+ IMPORT_C TBool MessageExtensionIndication() const;
+ IMPORT_C void SetCallingLineIdentityL(TDesC& aLineIdentity);
+ IMPORT_C TPtrC CallingLineIdentity() const;
+ IMPORT_C void SetParsedCallingLineIdentityL(TGsmSmsTelNumber& aParsedAddress);
+ IMPORT_C void ParsedCallingLineIdentity(TGsmSmsTelNumber& aParsedAddress) const;
+
+ IMPORT_C static CVoiceMailNotification* NewL();
+ IMPORT_C virtual ~CVoiceMailNotification();
+
+ TUint8 SizeL(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
+
+ virtual TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
+ virtual void DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
+protected:
+ CVoiceMailNotification();
+ CVoiceMailNotification(const CVoiceMailNotification&);
+ TBool operator==(const CVoiceMailNotification&);
+ void operator=(const CVoiceMailNotification&);
+ void ConstructL();
+ void NewBufferL(TInt aLength);
+ void NewExtensionL(TInt aLength);
+
+ void DoSetParsedAddressL(const TDesC& aAddress);
+protected:
+ TUint16 iMessageId;
+ TUint8 iMessageLength;
+ TUint8 iRetentionDays;
+ TBool iOctetN8Bit1;
+ TBool iPriorityIndication;
+ TBool iMessageExtensionIndicator;
+
+ HBufC* iCallingLineIdentity;
+ TGsmSmsTypeOfAddress iTypeOfAddress;
+
+ HBufC* iExtension;
+private:
+ enum TBitMasks
+ {
+ EMask1Bit = 0x01,
+ EMask2Bits = 0x03,
+ EMask4Bits = 0x0F,
+ EMask5Bits = 0x1F
+ };
+};
+
+
+/**
+ * This class encapsulates the attributes of an Enhanced Voice Mail Notification as described in
+ * 9.2.3.24.13.1. An enhanced voice mail notification is added to a CSmsMessage using the
+ * interface provided by the class CSmsEnhancedVoiceMailOperations.
+ *
+ * Clients should be aware that 23.040 v6.5.0 specifies that this information element must fit into the
+ * user data field of a single PDU. The amount of space available in the user data field depends on both
+ * the number and size of the mandatory information elements that must also be present.
+ * Intuitively the largest Enhanced Voice Mail information element can be added when no mandatory information
+ * elements need to be encoded in the PDU. To achieve this, the CSmsMessage must be configured with
+ * only the Enhanced Voice Mail Information Element and no other information elements or text.
+ *
+ * @publishedAll
+ * @released
+ */
+class CEnhancedVoiceMailNotification : public CEnhancedVoiceMailBoxInformation
+{
+public:
+ enum {KMaxNumberOfNotifications = 15};
+protected:
+ enum {KSmsNotificationBitMask = 0x0F};
+ // bits mask for bit representing the number of voice mail notifications.
+public:
+ IMPORT_C TUint8 NumberOfVoiceMails();
+ IMPORT_C RPointerArray<CVoiceMailNotification>& GetVoiceMailNotifications();
+
+ IMPORT_C static CEnhancedVoiceMailNotification* NewL();
+ IMPORT_C ~CEnhancedVoiceMailNotification();
+
+ TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
+ void DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
+protected:
+ CEnhancedVoiceMailNotification();
+ CEnhancedVoiceMailNotification(const CEnhancedVoiceMailNotification&);
+ TBool operator==(const CEnhancedVoiceMailNotification&);
+ void operator=(const CEnhancedVoiceMailNotification&);
+ void NewExtensionL(TInt aLength);
+ void ConstructL();
+protected:
+ TUint iNumberOfVMNotifications;
+ HBufC* iExtension;
+ RPointerArray<CVoiceMailNotification>* iNotifications;
+};
+
+
+/**
+ * This class encapsulates the attributes of a VM Deletion as described in 23.040 V6.5.0.
+ * 9.2.3.24.13.1.
+ *
+ * It is used as one of the attributes of a Enhanced Voice Mail Delete Confirmation.
+ *
+ * @publishedAll
+ * @released
+ */
+class CVoiceMailDeletion : public CBase
+{
+public:
+ IMPORT_C void SetMessageId(TUint16 aMessageId);
+ IMPORT_C TUint16 MessageId() const;
+ IMPORT_C TBool MessageExtensionIndication() const;
+
+ IMPORT_C static CVoiceMailDeletion* NewL();
+ IMPORT_C virtual ~CVoiceMailDeletion();
+ TUint8 SizeL();
+
+ virtual TUint8* EncodeL(TUint8* aPtr) const;
+ virtual void DecodeL(TGsmuLex8& aVoiceMailInfo);
+protected:
+ CVoiceMailDeletion();
+ CVoiceMailDeletion(const CVoiceMailDeletion&);
+ TBool operator==(const CVoiceMailDeletion&);
+ void operator=(const CVoiceMailDeletion&);
+
+ void ConstructL();
+ void NewBufferL(TInt aLength);
+protected:
+ TUint iMessageId;
+ TBool iExtensionIndicator;
+ HBufC* iExtension;
+};
+
+
+/**
+ * This class encapsulates the attributes of an Enhanced Voice Delete Confirmation as described in
+ * 9.2.3.24.13.2. An enhanced voice delete confirmation is added to a CSmsMessage using the
+ * interface provided by the class CSmsEnhancedVoiceMailOperations.
+ *
+ * @publishedAll
+ * @released
+ */
+class CEnhancedVoiceMailDeleteConfirmations : public
+ CEnhancedVoiceMailBoxInformation
+{
+public:
+ enum {KMaxNumberOfNotifications = 31};
+protected:
+ enum {KSmsNotificationBitMask = 0x1F};
+ // bits mask for bit representing the number of voice mail deletions.
+public:
+ IMPORT_C TUint8 NumberOfDeletes();
+ IMPORT_C RPointerArray<CVoiceMailDeletion>& GetVoiceMailDeletions();
+
+ IMPORT_C static CEnhancedVoiceMailDeleteConfirmations* NewL();
+ IMPORT_C ~CEnhancedVoiceMailDeleteConfirmations();
+
+ TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
+ void DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
+protected:
+ CEnhancedVoiceMailDeleteConfirmations();
+ CEnhancedVoiceMailDeleteConfirmations(const CEnhancedVoiceMailDeleteConfirmations&);
+ TBool operator==(const CEnhancedVoiceMailDeleteConfirmations&);
+ void operator=(const CEnhancedVoiceMailDeleteConfirmations&);
+
+ void ConstructL();
+ void NewExtensionL(TInt aLength);
+protected:
+ HBufC* iExtension;
+ RPointerArray<CVoiceMailDeletion>* iVoiceMailDeletions;
+};
+
+
+#include <gsmuelem.inl>
+
+#endif // !defined __GSMUELEM_H__