1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
14 // 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
26 // forwarded class declarations
33 * A generic interface to a GSM SMS PDU.
35 * The class can be used on its own to encode GSM SMS PDUs. It is also the base
36 * class for the six real implementations of GSM SMS PDUs. The derived classes
37 * are built up from the elements defined in gsmuelem.h according to the ETSI
38 * GSM 03.40. All the SMS elements have generic encode and decode functions so
39 * that each PDU type knows how to encode and decode itself into a TGsmSms.
41 * CSmsPDU and derived classes provide a human readable interface to a GSM SMS
42 * PDU, for example setting the destination address on a SUBMIT (CSmsSubmit).
43 * All the factory functions for CSmsPDUs are provided in the base class.
48 class CSmsPDU : public CBase
51 //note the enum values must be kept to ensure future binary compatibility with the TSAREntry store.
52 /** Flags for the 6 basic PDU types in GSM SMS messaging. */
55 ESmsDeliver = 0, //< SMS-DELIVER, sent from SC to MS
56 ESmsDeliverReport = 1, //< SMS-DELIVER-REPORT, sent from MS to SC
57 ESmsSubmit = 2, //< SMS-SUBMIT, sent from MS to SC
58 ESmsSubmitReport = 3, //< SMS-SUBMIT-REPORT, sent from SC to MS
59 ESmsStatusReport = 4, //< SMS-STATUS-REQUEST, sent from SC to MS
60 ESmsCommand = 5 //< SMS-COMMAND, sent from MS to SC
63 IMPORT_C static CSmsPDU* NewL(RReadStream &aStream,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
64 IMPORT_C static CSmsPDU* NewL(const TGsmSms& aGsmSms,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse,TBool aIsMobileTerminated=ETrue);
65 IMPORT_C static CSmsPDU* NewL(TSmsPDUType aType,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse);
67 inline TSmsPDUType Type() const;
69 IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
71 IMPORT_C void EncodeMessagePDUL(TGsmSms& aGsmSms) const;
72 void EncodeMessagePDUL(TGsmSms& aGsmSms, const TEncodeParams* aEncodeParams) const;
74 IMPORT_C TPtrC ServiceCenterAddress() const;
75 IMPORT_C void SetServiceCenterAddressL(const TDesC& aAddress);
76 IMPORT_C void ParsedServiceCenterAddress(TGsmSmsTelNumber& aParsedAddress) const;
77 IMPORT_C void SetParsedServiceCenterAddressL(const TGsmSmsTelNumber& aParsedAddress);
79 IMPORT_C TPtrC ToFromAddress() const;
80 IMPORT_C void SetToFromAddressL(const TDesC& aAddress);
81 IMPORT_C void ParsedToFromAddress(TGsmSmsTelNumber& aParsedAddress) const;
82 IMPORT_C void SetParsedToFromAddressL(const TGsmSmsTelNumber& aParsedAddress);
84 // Functions on data coding scheme
85 IMPORT_C TSmsDataCodingScheme::TSmsDCSBits7To4 Bits7To4() const;
86 IMPORT_C void SetBits7To4(TSmsDataCodingScheme::TSmsDCSBits7To4 aBits7To4);
88 IMPORT_C TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;
89 IMPORT_C void SetAlphabet(TSmsDataCodingScheme::TSmsAlphabet aAlphabet);
90 IMPORT_C TBool Class(TSmsDataCodingScheme::TSmsClass& aClass) const;
91 IMPORT_C void SetClass(TBool aClassDefined,TSmsDataCodingScheme::TSmsClass aClass);
92 IMPORT_C TBool TextCompressed() const;
93 IMPORT_C void SetTextCompressed(TBool aCompressed);
95 IMPORT_C TSmsDataCodingScheme::TSmsIndicationState IndicationState() const;
96 IMPORT_C void SetIndicationState(TSmsDataCodingScheme::TSmsIndicationState aState);
97 IMPORT_C TSmsDataCodingScheme::TSmsIndicationType IndicationType() const;
98 IMPORT_C void SetIndicationType(TSmsDataCodingScheme::TSmsIndicationType aType);
100 // Functions on concatenation user data information element
101 IMPORT_C TBool TextConcatenated(TBool* aIs16Bit=NULL) const;
102 IMPORT_C void SetTextConcatenatedL(TBool aConcatenated,TBool aIs16Bit=EFalse);
103 IMPORT_C TInt ConcatenatedMessageReference() const;
104 IMPORT_C void SetConcatenatedMessageReference(TInt aReference);
105 IMPORT_C TInt NumConcatenatedMessagePDUs() const;
106 IMPORT_C void SetNumConcatenatedMessagePDUs(TInt aNum);
107 IMPORT_C TInt ConcatenatedMessagePDUIndex() const;
108 IMPORT_C void SetConcatenatedMessagePDUIndex(TInt aIndex);
110 // Functions for application port addressing
111 IMPORT_C TBool ApplicationPortAddressing(TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit=NULL) const;
112 IMPORT_C void SetApplicationPortAddressingL(TBool aAddressing,TInt aDestination,TInt aOriginator,TBool aIs16Bit=EFalse);
114 // Functions on protocol identifier
115 IMPORT_C TSmsProtocolIdentifier::TSmsPIDType PIDType() const;
116 IMPORT_C void SetPIDType(TSmsProtocolIdentifier::TSmsPIDType aSmsPIDType);
117 IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator TelematicDeviceIndicator() const;
118 IMPORT_C void SetTelematicDeviceIndicator(TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator aIndicator);
121 //-- concern 'ShortMessageType'
122 IMPORT_C TSmsProtocolIdentifier::TSmsShortMessageType ShortMessageType() const;
123 IMPORT_C void SetShortMessageType(TSmsProtocolIdentifier::TSmsShortMessageType aShortMessageType);
126 IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceType TelematicDeviceType() const;
127 IMPORT_C void SetTelematicDeviceType(TSmsProtocolIdentifier::TSmsTelematicDeviceType aDeviceType);
129 // Functions on parameter indicator
130 IMPORT_C TBool UserDataPresent() const;
131 IMPORT_C void SetUserDataPresent(TBool aPresent);
132 IMPORT_C TBool DataCodingSchemePresent() const;
133 IMPORT_C void SetDataCodingSchemePresent(TBool aPresent);
134 IMPORT_C TBool ProtocolIdentifierPresent() const;
135 IMPORT_C void SetProtocolIdentifierPresent(TBool aPresent);
137 IMPORT_C CSmsUserData& UserData();
138 IMPORT_C const CSmsUserData& UserData() const;
139 virtual void DecodeL(TGsmuLex8& aPdu)=0;
140 void UpdateConcatenationDataL(TInt aRef, TInt aPduIndex, TInt aMaxPdu);
141 void UpdateEmailHeaderDataL(TInt& aEmailOverallHeaderLength);
143 // SMSC Control Parameters
144 TBool UpdateSMSCCtrlParameterL(const TUint8 aOctet);
147 TBool UpdateTPSRRL(TSmsFirstOctet aSmsReportRequest);
149 // National Language Encoding
150 IMPORT_C TSmsEncoding NationalLanguageEncoding() const;
151 IMPORT_C void SetNationalLanguageEncodingL(TSmsEncoding aEncoding);
153 IMPORT_C CSmsPDU* DuplicateL() const;
156 CSmsPDU(TSmsPDUType aSmsPDUType);
158 virtual const TSmsDataCodingScheme* DataCodingScheme() const; // Functions made const to avoid too many definitions
159 virtual const TSmsProtocolIdentifier* ProtocolIdentifier() const;
160 virtual const TSmsParameterIndicator* ParameterIndicator() const;
161 virtual const CSmsUserData* UserDataPtr() const;
162 virtual const CSmsAddress* ToFromAddressPtr() const;
164 virtual void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs)=0;
165 virtual TUint8* EncodeL(TUint8* aPtr) const=0;
166 virtual TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const=0;
168 virtual void InternalizeMessagePDUL(RReadStream& aStream)=0;
169 virtual void ExternalizeMessagePDUL(RWriteStream& aStream) const=0;
172 TBool DoTextConcatenated(TInt& aIndex,TBool* aIs16Bit) const;
173 void DoSetTextConcatenatedL(TBool aIs16Bit);
174 TBool DoApplicationPortAddressing(TInt& aIndex,TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit) const;
175 void DoSetApplicationPortAddressingL(TInt aDestination,TInt aOriginator,TBool aIs16Bit);
178 const TSmsPDUType iSmsPDUType;
181 CSmsAddress* iServiceCenterAddress;
186 * SMS-DELIVER PDU - SC to MS
190 class CSmsDeliver : public CSmsPDU
196 IMPORT_C TBool MoreMessagesToSend() const;
197 IMPORT_C void SetMoreMessagesToSend(TBool aMore);
199 IMPORT_C TBool ReplyPath() const;
200 IMPORT_C void SetReplyPath(TBool aReplyPath);
202 IMPORT_C TBool StatusReportIndication() const;
203 IMPORT_C void SetStatusReportIndication(TBool aIndication);
205 IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours);
206 IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt aNumQuarterHours=0);
207 IMPORT_C const TSmsProtocolIdentifier* ProtocolIdentifier() const;
209 IMPORT_C CSmsDeliver* DuplicateL() const;
212 const TSmsDataCodingScheme* DataCodingScheme() const;
213 const CSmsUserData* UserDataPtr() const;
214 const CSmsAddress* ToFromAddressPtr() const;
216 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
217 TUint8* EncodeL(TUint8* aPtr) const;
218 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
219 void DecodeL(TGsmuLex8& aPdu);
220 void InternalizeMessagePDUL(RReadStream& aStream);
221 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
224 TSmsFirstOctet iFirstOctet;
225 CSmsAddress* iOriginalAddress;
226 TSmsProtocolIdentifier iProtocolIdentifier;
227 TSmsDataCodingScheme iDataCodingScheme;
228 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
229 CSmsUserData* iUserData;
234 * SMS-SUBMIT PDU - MS to SC
238 class CSmsSubmit : public CSmsPDU
244 IMPORT_C TBool RejectDuplicates() const;
245 IMPORT_C void SetRejectDuplicates(TBool aRejectDuplicates);
247 IMPORT_C TSmsFirstOctet::TSmsValidityPeriodFormat ValidityPeriodFormat() const;
248 IMPORT_C void SetValidityPeriodFormat(TSmsFirstOctet::TSmsValidityPeriodFormat aValidityPeriodFormat);
250 IMPORT_C TBool ReplyPath() const;
251 IMPORT_C void SetReplyPath(TBool aReplyPath);
253 IMPORT_C TBool StatusReportRequest() const;
254 IMPORT_C void SetStatusReportRequest(TBool aRequest);
256 IMPORT_C TInt MessageReference() const;
257 IMPORT_C void SetMessageReference(TInt aMessageReference);
259 IMPORT_C const TTimeIntervalMinutes& ValidityPeriod() const;
260 IMPORT_C void SetValidityPeriod(const TTimeIntervalMinutes& aTimeIntervalMinutes);
262 IMPORT_C CSmsSubmit* DuplicateL() const;
265 const TSmsDataCodingScheme* DataCodingScheme() const;
266 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
267 const CSmsUserData* UserDataPtr() const;
268 const CSmsAddress* ToFromAddressPtr() const;
270 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
271 TUint8* EncodeL(TUint8* aPtr) const;
272 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
273 void DecodeL(TGsmuLex8& aPdu);
274 void InternalizeMessagePDUL(RReadStream& aStream);
275 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
278 TSmsFirstOctet iFirstOctet;
279 TSmsOctet iMessageReference;
280 CSmsAddress* iDestinationAddress;
281 TSmsProtocolIdentifier iProtocolIdentifier;
282 TSmsDataCodingScheme iDataCodingScheme;
283 TSmsValidityPeriod iValidityPeriod;
284 CSmsUserData* iUserData;
289 * SMS-DELIVER-REPORT PDU - MS to SC
293 class CSmsDeliverReport : public CSmsPDU
296 CSmsDeliverReport(TBool aIsRPError=EFalse);
297 ~CSmsDeliverReport();
299 inline TBool IsRPError() const;
300 inline void SetIsRPError(TBool aIsRPError);
302 IMPORT_C TInt FailureCause() const;
303 IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause);
305 IMPORT_C CSmsDeliverReport* DuplicateL() const;
308 const TSmsDataCodingScheme* DataCodingScheme() const;
309 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
310 const TSmsParameterIndicator* ParameterIndicator() const;
311 const CSmsUserData* UserDataPtr() const;
313 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
314 TUint8* EncodeL(TUint8* aPtr) const;
315 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
316 void DecodeL(TGsmuLex8& aPdu);
317 void InternalizeMessagePDUL(RReadStream& aStream);
318 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
323 TSmsFirstOctet iFirstOctet;
324 TSmsFailureCause iFailureCause;
325 TSmsParameterIndicator iParameterIndicator;
326 TSmsProtocolIdentifier iProtocolIdentifier;
327 TSmsDataCodingScheme iDataCodingScheme;
328 CSmsUserData* iUserData;
333 * SMS-SUBMIT-REPORT PDU - SC to MS
337 class CSmsSubmitReport : public CSmsPDU
340 CSmsSubmitReport(TBool aIsRPError=EFalse);
343 inline TBool IsRPError() const;
344 inline void SetIsRPError(TBool aIsRPError);
346 IMPORT_C TInt FailureCause() const;
347 IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause);
349 IMPORT_C CSmsSubmitReport* DuplicateL() const;
352 const TSmsDataCodingScheme* DataCodingScheme() const;
353 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
354 const TSmsParameterIndicator* ParameterIndicator() const;
355 const CSmsUserData* UserDataPtr() const;
357 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
358 TUint8* EncodeL(TUint8* aPtr) const;
359 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
360 void DecodeL(TGsmuLex8& aPdu);
361 void InternalizeMessagePDUL(RReadStream& aStream);
362 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
367 TSmsFirstOctet iFirstOctet;
368 TSmsFailureCause iFailureCause;
369 TSmsParameterIndicator iParameterIndicator;
370 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
371 TSmsProtocolIdentifier iProtocolIdentifier;
372 TSmsDataCodingScheme iDataCodingScheme;
373 CSmsUserData* iUserData;
378 * SMS-STATUS-REPORT PDU - SC to MS
382 class CSmsStatusReport : public CSmsPDU
388 inline TBool ParameterIndicatorPresent() const;
389 inline void SetParameterIndicatorPresent(TBool aPresent);
391 IMPORT_C TBool MoreMessagesToSend() const;
392 IMPORT_C void SetMoreMessagesToSend(TBool aMore);
394 IMPORT_C TSmsFirstOctet::TSmsStatusReportQualifier StatusReportQualifier() const;
395 IMPORT_C void SetStatusReportQualifier(TSmsFirstOctet::TSmsStatusReportQualifier aQualifier);
397 IMPORT_C TInt MessageReference() const;
398 IMPORT_C void SetMessageReference(TInt aMessageReference);
400 IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours);
401 IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt& aNumQuarterHours);
403 IMPORT_C void DischargeTime(TTime& aTime,TInt& aNumQuarterHours);
404 IMPORT_C void SetDischargeTime(const TTime& aTime,TInt& aNumQuarterHours);
406 IMPORT_C TSmsStatus::TSmsStatusValue Status() const;
407 IMPORT_C void SetStatus(TSmsStatus::TSmsStatusValue aValue);
409 IMPORT_C CSmsStatusReport* DuplicateL() const;
412 const TSmsDataCodingScheme* DataCodingScheme() const;
413 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
414 const TSmsParameterIndicator* ParameterIndicator() const;
415 const CSmsUserData* UserDataPtr() const;
416 const CSmsAddress* ToFromAddressPtr() const;
418 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
419 TUint8* EncodeL(TUint8* aPtr) const;
420 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
421 void DecodeL(TGsmuLex8& aPdu);
422 void InternalizeMessagePDUL(RReadStream& aStream);
423 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
426 TUint8 iParameterIndicatorPresent;
428 TSmsFirstOctet iFirstOctet;
429 TSmsOctet iMessageReference;
430 CSmsAddress* iRecipientAddress;
431 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
432 TSmsServiceCenterTimeStamp iDischargeTime;
434 TSmsParameterIndicator iParameterIndicator;
435 TSmsProtocolIdentifier iProtocolIdentifier;
436 TSmsDataCodingScheme iDataCodingScheme;
437 CSmsUserData* iUserData;
442 * SMS-COMMAND PDU - MS to SC
446 class CSmsCommand : public CSmsPDU
452 IMPORT_C TBool StatusReportRequest() const;
453 IMPORT_C void SetStatusReportRequest(TBool aRequest);
455 IMPORT_C TInt MessageReference() const;
456 IMPORT_C void SetMessageReference(TInt aMessageReference);
458 IMPORT_C TInt CommandType() const;
459 IMPORT_C void SetCommandType(TSmsCommandType::TSmsCommandTypeValue aCommandType);
461 IMPORT_C TInt MessageNumber() const;
462 IMPORT_C void SetMessageNumber(TInt aMessageNumber);
464 IMPORT_C TInt NumInformationElements() const;
465 IMPORT_C CSmsInformationElement& InformationElement(TInt aIndex) const;
466 CSmsInformationElement*& InformationElementPtr(TInt aIndex) const;
467 IMPORT_C TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,
469 IMPORT_C void AddInformationElementL(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, TDesC8& aData);
470 IMPORT_C void RemoveInformationElement(TInt aIndex);
472 IMPORT_C TInt MaxCommandDataLength() const;
473 IMPORT_C TPtrC8 CommandData() const;
474 IMPORT_C void SetCommandDataL(const TDesC8& aData);
476 IMPORT_C CSmsCommand* DuplicateL() const;
479 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
480 const CSmsAddress* ToFromAddressPtr() const;
482 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
483 TUint8* EncodeL(TUint8* aPtr) const;
484 TUint8* EncodeL(TUint8* aPtr, const TEncodeParams* aEncodeParams) const;
485 void DecodeL(TGsmuLex8& aPdu);
486 void InternalizeMessagePDUL(RReadStream& aStream);
487 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
488 void DoSetStatusReportRequest(TBool aRequest);
491 TSmsFirstOctet iFirstOctet;
492 TSmsOctet iMessageReference;
493 TSmsProtocolIdentifier iProtocolIdentifier;
494 TSmsCommandType iCommandType;
495 TSmsOctet iMessageNumber;
496 CSmsAddress* iDestinationAddress;
497 CSmsCommandData* iCommandData;
500 #include "gsmupdu.inl"
502 #endif // !defined __GSMUPDU_H__