williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Contains a class representing the generic interface to a GSM SMS PDU (CSmsPDU) as well as six concrete implementations representing the six types of CSmsPDU, namely CSmsDeliver, CSmsSubmit, CSmsDeliverReport, CSmsSubmitReport, CSmsStatusReport and CSmsCommand williamr@2: // williamr@2: // williamr@2: williamr@2: /** williamr@2: @file williamr@2: */ williamr@2: williamr@2: #ifndef __GSMUPDU_H__ williamr@2: #define __GSMUPDU_H__ williamr@2: williamr@2: #include williamr@2: // forwarded class declarations williamr@2: williamr@2: class TGsmSms; williamr@2: class CSmsAddress; williamr@4: struct TEncodeParams; williamr@2: williamr@2: /** williamr@2: * A generic interface to a GSM SMS PDU. williamr@2: * williamr@2: * The class can be used on its own to encode GSM SMS PDUs. It is also the base williamr@2: * class for the six real implementations of GSM SMS PDUs. The derived classes williamr@2: * are built up from the elements defined in gsmuelem.h according to the ETSI williamr@2: * GSM 03.40. All the SMS elements have generic encode and decode functions so williamr@2: * that each PDU type knows how to encode and decode itself into a TGsmSms. williamr@2: * williamr@2: * CSmsPDU and derived classes provide a human readable interface to a GSM SMS williamr@2: * PDU, for example setting the destination address on a SUBMIT (CSmsSubmit). williamr@2: * All the factory functions for CSmsPDUs are provided in the base class. williamr@2: * williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsPDU : public CBase williamr@2: { williamr@2: public: williamr@2: //note the enum values must be kept to ensure future binary compatibility with the TSAREntry store. williamr@2: /** Flags for the 6 basic PDU types in GSM SMS messaging. */ williamr@2: enum TSmsPDUType williamr@2: { williamr@4: ESmsDeliver = 0, //< SMS-DELIVER, sent from SC to MS williamr@4: ESmsDeliverReport = 1, //< SMS-DELIVER-REPORT, sent from MS to SC williamr@4: ESmsSubmit = 2, //< SMS-SUBMIT, sent from MS to SC williamr@4: ESmsSubmitReport = 3, //< SMS-SUBMIT-REPORT, sent from SC to MS williamr@4: ESmsStatusReport = 4, //< SMS-STATUS-REQUEST, sent from SC to MS williamr@4: ESmsCommand = 5 //< SMS-COMMAND, sent from MS to SC williamr@2: }; williamr@2: public: williamr@2: IMPORT_C static CSmsPDU* NewL(RReadStream &aStream,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: IMPORT_C static CSmsPDU* NewL(const TGsmSms& aGsmSms,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse,TBool aIsMobileTerminated=ETrue); williamr@2: IMPORT_C static CSmsPDU* NewL(TSmsPDUType aType,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse); williamr@4: williamr@2: inline TSmsPDUType Type() const; williamr@2: williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: IMPORT_C void EncodeMessagePDUL(TGsmSms& aGsmSms) const; williamr@4: void EncodeMessagePDUL(TGsmSms& aGsmSms, const TEncodeParams* aEncodeParams) const; williamr@2: williamr@2: IMPORT_C TPtrC ServiceCenterAddress() const; williamr@2: IMPORT_C void SetServiceCenterAddressL(const TDesC& aAddress); williamr@2: IMPORT_C void ParsedServiceCenterAddress(TGsmSmsTelNumber& aParsedAddress) const; williamr@2: IMPORT_C void SetParsedServiceCenterAddressL(const TGsmSmsTelNumber& aParsedAddress); williamr@2: williamr@2: IMPORT_C TPtrC ToFromAddress() const; williamr@2: IMPORT_C void SetToFromAddressL(const TDesC& aAddress); williamr@2: IMPORT_C void ParsedToFromAddress(TGsmSmsTelNumber& aParsedAddress) const; williamr@2: IMPORT_C void SetParsedToFromAddressL(const TGsmSmsTelNumber& aParsedAddress); williamr@2: williamr@2: // Functions on data coding scheme williamr@2: IMPORT_C TSmsDataCodingScheme::TSmsDCSBits7To4 Bits7To4() const; williamr@2: IMPORT_C void SetBits7To4(TSmsDataCodingScheme::TSmsDCSBits7To4 aBits7To4); williamr@2: williamr@2: IMPORT_C TSmsDataCodingScheme::TSmsAlphabet Alphabet() const; williamr@2: IMPORT_C void SetAlphabet(TSmsDataCodingScheme::TSmsAlphabet aAlphabet); williamr@2: IMPORT_C TBool Class(TSmsDataCodingScheme::TSmsClass& aClass) const; williamr@2: IMPORT_C void SetClass(TBool aClassDefined,TSmsDataCodingScheme::TSmsClass aClass); williamr@2: IMPORT_C TBool TextCompressed() const; williamr@2: IMPORT_C void SetTextCompressed(TBool aCompressed); williamr@2: williamr@2: IMPORT_C TSmsDataCodingScheme::TSmsIndicationState IndicationState() const; williamr@2: IMPORT_C void SetIndicationState(TSmsDataCodingScheme::TSmsIndicationState aState); williamr@2: IMPORT_C TSmsDataCodingScheme::TSmsIndicationType IndicationType() const; williamr@2: IMPORT_C void SetIndicationType(TSmsDataCodingScheme::TSmsIndicationType aType); williamr@2: williamr@2: // Functions on concatenation user data information element williamr@2: IMPORT_C TBool TextConcatenated(TBool* aIs16Bit=NULL) const; williamr@2: IMPORT_C void SetTextConcatenatedL(TBool aConcatenated,TBool aIs16Bit=EFalse); williamr@2: IMPORT_C TInt ConcatenatedMessageReference() const; williamr@2: IMPORT_C void SetConcatenatedMessageReference(TInt aReference); williamr@2: IMPORT_C TInt NumConcatenatedMessagePDUs() const; williamr@2: IMPORT_C void SetNumConcatenatedMessagePDUs(TInt aNum); williamr@2: IMPORT_C TInt ConcatenatedMessagePDUIndex() const; williamr@2: IMPORT_C void SetConcatenatedMessagePDUIndex(TInt aIndex); williamr@2: williamr@2: // Functions for application port addressing williamr@2: IMPORT_C TBool ApplicationPortAddressing(TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit=NULL) const; williamr@2: IMPORT_C void SetApplicationPortAddressingL(TBool aAddressing,TInt aDestination,TInt aOriginator,TBool aIs16Bit=EFalse); williamr@2: williamr@2: // Functions on protocol identifier williamr@2: IMPORT_C TSmsProtocolIdentifier::TSmsPIDType PIDType() const; williamr@2: IMPORT_C void SetPIDType(TSmsProtocolIdentifier::TSmsPIDType aSmsPIDType); williamr@2: IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator TelematicDeviceIndicator() const; williamr@2: IMPORT_C void SetTelematicDeviceIndicator(TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator aIndicator); williamr@2: williamr@2: williamr@2: //-- concern 'ShortMessageType' williamr@2: IMPORT_C TSmsProtocolIdentifier::TSmsShortMessageType ShortMessageType() const; williamr@2: IMPORT_C void SetShortMessageType(TSmsProtocolIdentifier::TSmsShortMessageType aShortMessageType); williamr@2: williamr@2: williamr@2: IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceType TelematicDeviceType() const; williamr@2: IMPORT_C void SetTelematicDeviceType(TSmsProtocolIdentifier::TSmsTelematicDeviceType aDeviceType); williamr@2: williamr@2: // Functions on parameter indicator williamr@2: IMPORT_C TBool UserDataPresent() const; williamr@2: IMPORT_C void SetUserDataPresent(TBool aPresent); williamr@2: IMPORT_C TBool DataCodingSchemePresent() const; williamr@2: IMPORT_C void SetDataCodingSchemePresent(TBool aPresent); williamr@2: IMPORT_C TBool ProtocolIdentifierPresent() const; williamr@2: IMPORT_C void SetProtocolIdentifierPresent(TBool aPresent); williamr@2: williamr@2: IMPORT_C CSmsUserData& UserData(); williamr@2: IMPORT_C const CSmsUserData& UserData() const; williamr@2: virtual void DecodeL(TGsmuLex8& aPdu)=0; williamr@4: void UpdateConcatenationDataL(TInt aRef, TInt aPduIndex, TInt aMaxPdu); williamr@4: void UpdateEmailHeaderDataL(TInt& aEmailOverallHeaderLength); williamr@2: williamr@2: // SMSC Control Parameters williamr@4: TBool UpdateSMSCCtrlParameterL(const TUint8 aOctet); williamr@2: williamr@2: // TPSRR Scheme williamr@4: TBool UpdateTPSRRL(TSmsFirstOctet aSmsReportRequest); williamr@2: williamr@2: // National Language Encoding williamr@2: IMPORT_C TSmsEncoding NationalLanguageEncoding() const; williamr@2: IMPORT_C void SetNationalLanguageEncodingL(TSmsEncoding aEncoding); williamr@2: williamr@4: IMPORT_C CSmsPDU* DuplicateL() const; williamr@4: williamr@2: protected: williamr@2: CSmsPDU(TSmsPDUType aSmsPDUType); williamr@2: williamr@2: virtual const TSmsDataCodingScheme* DataCodingScheme() const; // Functions made const to avoid too many definitions williamr@2: virtual const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: virtual const TSmsParameterIndicator* ParameterIndicator() const; williamr@2: virtual const CSmsUserData* UserDataPtr() const; williamr@2: virtual const CSmsAddress* ToFromAddressPtr() const; williamr@2: williamr@2: virtual void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs)=0; williamr@2: virtual TUint8* EncodeL(TUint8* aPtr) const=0; williamr@4: virtual TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const=0; williamr@2: williamr@2: virtual void InternalizeMessagePDUL(RReadStream& aStream)=0; williamr@2: virtual void ExternalizeMessagePDUL(RWriteStream& aStream) const=0; williamr@2: williamr@2: private: williamr@2: TBool DoTextConcatenated(TInt& aIndex,TBool* aIs16Bit) const; williamr@2: void DoSetTextConcatenatedL(TBool aIs16Bit); williamr@2: TBool DoApplicationPortAddressing(TInt& aIndex,TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit) const; williamr@2: void DoSetApplicationPortAddressingL(TInt aDestination,TInt aOriginator,TBool aIs16Bit); williamr@2: williamr@2: private: williamr@2: const TSmsPDUType iSmsPDUType; williamr@2: williamr@2: protected: williamr@2: CSmsAddress* iServiceCenterAddress; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-DELIVER PDU - SC to MS williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsDeliver : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsDeliver(); williamr@2: ~CSmsDeliver(); williamr@2: williamr@2: IMPORT_C TBool MoreMessagesToSend() const; williamr@2: IMPORT_C void SetMoreMessagesToSend(TBool aMore); williamr@2: williamr@2: IMPORT_C TBool ReplyPath() const; williamr@2: IMPORT_C void SetReplyPath(TBool aReplyPath); williamr@2: williamr@2: IMPORT_C TBool StatusReportIndication() const; williamr@2: IMPORT_C void SetStatusReportIndication(TBool aIndication); williamr@2: williamr@2: IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours); williamr@2: IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt aNumQuarterHours=0); williamr@2: IMPORT_C const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@4: williamr@4: IMPORT_C CSmsDeliver* DuplicateL() const; williamr@2: williamr@2: protected: williamr@2: const TSmsDataCodingScheme* DataCodingScheme() const; williamr@2: const CSmsUserData* UserDataPtr() const; williamr@2: const CSmsAddress* ToFromAddressPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: CSmsAddress* iOriginalAddress; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsDataCodingScheme iDataCodingScheme; williamr@2: TSmsServiceCenterTimeStamp iServiceCenterTimeStamp; williamr@2: CSmsUserData* iUserData; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-SUBMIT PDU - MS to SC williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsSubmit : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsSubmit(); williamr@2: ~CSmsSubmit(); williamr@2: williamr@2: IMPORT_C TBool RejectDuplicates() const; williamr@2: IMPORT_C void SetRejectDuplicates(TBool aRejectDuplicates); williamr@2: williamr@2: IMPORT_C TSmsFirstOctet::TSmsValidityPeriodFormat ValidityPeriodFormat() const; williamr@2: IMPORT_C void SetValidityPeriodFormat(TSmsFirstOctet::TSmsValidityPeriodFormat aValidityPeriodFormat); williamr@2: williamr@2: IMPORT_C TBool ReplyPath() const; williamr@2: IMPORT_C void SetReplyPath(TBool aReplyPath); williamr@2: williamr@2: IMPORT_C TBool StatusReportRequest() const; williamr@2: IMPORT_C void SetStatusReportRequest(TBool aRequest); williamr@2: williamr@2: IMPORT_C TInt MessageReference() const; williamr@2: IMPORT_C void SetMessageReference(TInt aMessageReference); williamr@2: williamr@2: IMPORT_C const TTimeIntervalMinutes& ValidityPeriod() const; williamr@2: IMPORT_C void SetValidityPeriod(const TTimeIntervalMinutes& aTimeIntervalMinutes); williamr@4: williamr@4: IMPORT_C CSmsSubmit* DuplicateL() const; williamr@2: williamr@2: protected: williamr@2: const TSmsDataCodingScheme* DataCodingScheme() const; williamr@2: const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: const CSmsUserData* UserDataPtr() const; williamr@2: const CSmsAddress* ToFromAddressPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: TSmsOctet iMessageReference; williamr@2: CSmsAddress* iDestinationAddress; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsDataCodingScheme iDataCodingScheme; williamr@2: TSmsValidityPeriod iValidityPeriod; williamr@2: CSmsUserData* iUserData; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-DELIVER-REPORT PDU - MS to SC williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsDeliverReport : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsDeliverReport(TBool aIsRPError=EFalse); williamr@2: ~CSmsDeliverReport(); williamr@2: williamr@2: inline TBool IsRPError() const; williamr@2: inline void SetIsRPError(TBool aIsRPError); williamr@2: williamr@2: IMPORT_C TInt FailureCause() const; williamr@2: IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause); williamr@2: williamr@4: IMPORT_C CSmsDeliverReport* DuplicateL() const; williamr@4: williamr@2: protected: williamr@2: const TSmsDataCodingScheme* DataCodingScheme() const; williamr@2: const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: const TSmsParameterIndicator* ParameterIndicator() const; williamr@2: const CSmsUserData* UserDataPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: TUint8 iIsRPError; williamr@2: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: TSmsFailureCause iFailureCause; williamr@2: TSmsParameterIndicator iParameterIndicator; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsDataCodingScheme iDataCodingScheme; williamr@2: CSmsUserData* iUserData; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-SUBMIT-REPORT PDU - SC to MS williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsSubmitReport : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsSubmitReport(TBool aIsRPError=EFalse); williamr@2: ~CSmsSubmitReport(); williamr@2: williamr@2: inline TBool IsRPError() const; williamr@2: inline void SetIsRPError(TBool aIsRPError); williamr@2: williamr@2: IMPORT_C TInt FailureCause() const; williamr@2: IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause); williamr@2: williamr@4: IMPORT_C CSmsSubmitReport* DuplicateL() const; williamr@4: williamr@2: protected: williamr@2: const TSmsDataCodingScheme* DataCodingScheme() const; williamr@2: const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: const TSmsParameterIndicator* ParameterIndicator() const; williamr@2: const CSmsUserData* UserDataPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: TUint8 iIsRPError; williamr@2: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: TSmsFailureCause iFailureCause; williamr@2: TSmsParameterIndicator iParameterIndicator; williamr@2: TSmsServiceCenterTimeStamp iServiceCenterTimeStamp; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsDataCodingScheme iDataCodingScheme; williamr@2: CSmsUserData* iUserData; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-STATUS-REPORT PDU - SC to MS williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsStatusReport : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsStatusReport(); williamr@2: ~CSmsStatusReport(); williamr@2: williamr@2: inline TBool ParameterIndicatorPresent() const; williamr@2: inline void SetParameterIndicatorPresent(TBool aPresent); williamr@2: williamr@2: IMPORT_C TBool MoreMessagesToSend() const; williamr@2: IMPORT_C void SetMoreMessagesToSend(TBool aMore); williamr@2: williamr@2: IMPORT_C TSmsFirstOctet::TSmsStatusReportQualifier StatusReportQualifier() const; williamr@2: IMPORT_C void SetStatusReportQualifier(TSmsFirstOctet::TSmsStatusReportQualifier aQualifier); williamr@2: williamr@2: IMPORT_C TInt MessageReference() const; williamr@2: IMPORT_C void SetMessageReference(TInt aMessageReference); williamr@2: williamr@2: IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours); williamr@2: IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt& aNumQuarterHours); williamr@2: williamr@2: IMPORT_C void DischargeTime(TTime& aTime,TInt& aNumQuarterHours); williamr@2: IMPORT_C void SetDischargeTime(const TTime& aTime,TInt& aNumQuarterHours); williamr@2: williamr@2: IMPORT_C TSmsStatus::TSmsStatusValue Status() const; williamr@2: IMPORT_C void SetStatus(TSmsStatus::TSmsStatusValue aValue); williamr@2: williamr@4: IMPORT_C CSmsStatusReport* DuplicateL() const; williamr@4: williamr@2: protected: williamr@2: const TSmsDataCodingScheme* DataCodingScheme() const; williamr@2: const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: const TSmsParameterIndicator* ParameterIndicator() const; williamr@2: const CSmsUserData* UserDataPtr() const; williamr@2: const CSmsAddress* ToFromAddressPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: TUint8 iParameterIndicatorPresent; williamr@2: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: TSmsOctet iMessageReference; williamr@2: CSmsAddress* iRecipientAddress; williamr@2: TSmsServiceCenterTimeStamp iServiceCenterTimeStamp; williamr@2: TSmsServiceCenterTimeStamp iDischargeTime; williamr@2: TSmsStatus iStatus; williamr@2: TSmsParameterIndicator iParameterIndicator; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsDataCodingScheme iDataCodingScheme; williamr@2: CSmsUserData* iUserData; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * SMS-COMMAND PDU - MS to SC williamr@2: * @publishedAll williamr@2: * @released williamr@2: */ williamr@2: class CSmsCommand : public CSmsPDU williamr@2: { williamr@2: public: williamr@2: CSmsCommand(); williamr@2: ~CSmsCommand(); williamr@2: williamr@2: IMPORT_C TBool StatusReportRequest() const; williamr@2: IMPORT_C void SetStatusReportRequest(TBool aRequest); williamr@2: williamr@2: IMPORT_C TInt MessageReference() const; williamr@2: IMPORT_C void SetMessageReference(TInt aMessageReference); williamr@2: williamr@2: IMPORT_C TInt CommandType() const; williamr@2: IMPORT_C void SetCommandType(TSmsCommandType::TSmsCommandTypeValue aCommandType); williamr@2: williamr@2: IMPORT_C TInt MessageNumber() const; williamr@2: IMPORT_C void SetMessageNumber(TInt aMessageNumber); williamr@2: williamr@2: IMPORT_C TInt NumInformationElements() const; williamr@2: IMPORT_C CSmsInformationElement& InformationElement(TInt aIndex) const; williamr@2: CSmsInformationElement*& InformationElementPtr(TInt aIndex) const; williamr@2: IMPORT_C TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, williamr@2: TInt& aIndex) const; williamr@2: IMPORT_C void AddInformationElementL(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, TDesC8& aData); williamr@2: IMPORT_C void RemoveInformationElement(TInt aIndex); williamr@2: williamr@2: IMPORT_C TInt MaxCommandDataLength() const; williamr@2: IMPORT_C TPtrC8 CommandData() const; williamr@2: IMPORT_C void SetCommandDataL(const TDesC8& aData); williamr@2: williamr@4: IMPORT_C CSmsCommand* DuplicateL() const; williamr@4: williamr@2: protected: williamr@2: const TSmsProtocolIdentifier* ProtocolIdentifier() const; williamr@2: const CSmsAddress* ToFromAddressPtr() const; williamr@2: williamr@2: void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs); williamr@2: TUint8* EncodeL(TUint8* aPtr) const; williamr@4: TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const; williamr@2: void DecodeL(TGsmuLex8& aPdu); williamr@2: void InternalizeMessagePDUL(RReadStream& aStream); williamr@2: void ExternalizeMessagePDUL(RWriteStream& aStream) const; williamr@2: void DoSetStatusReportRequest(TBool aRequest); williamr@2: williamr@2: private: williamr@2: TSmsFirstOctet iFirstOctet; williamr@2: TSmsOctet iMessageReference; williamr@2: TSmsProtocolIdentifier iProtocolIdentifier; williamr@2: TSmsCommandType iCommandType; williamr@2: TSmsOctet iMessageNumber; williamr@2: CSmsAddress* iDestinationAddress; williamr@2: CSmsCommandData* iCommandData; williamr@2: }; williamr@2: williamr@2: #include "gsmupdu.inl" williamr@2: williamr@2: #endif // !defined __GSMUPDU_H__