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 the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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
28 // forwarded class declarations
35 * A generic interface to a GSM SMS PDU.
37 * The class can be used on its own to encode GSM SMS PDUs. It is also the base
38 * class for the six real implementations of GSM SMS PDUs. The derived classes
39 * are built up from the elements defined in gsmuelem.h according to the ETSI
40 * GSM 03.40. All the SMS elements have generic encode and decode functions so
41 * that each PDU type knows how to encode and decode itself into a TGsmSms.
43 * CSmsPDU and derived classes provide a human readable interface to a GSM SMS
44 * PDU, for example setting the destination address on a SUBMIT (CSmsSubmit).
45 * All the factory functions for CSmsPDUs are provided in the base class.
50 class CSmsPDU : public CBase
53 //note the enum values must be kept to ensure future binary compatibility with the TSAREntry store.
54 /** Flags for the 6 basic PDU types in GSM SMS messaging. */
57 ESmsDeliver = 0, ///< SMS-DELIVER, sent from SC to MS
58 ESmsDeliverReport = 1, ///< SMS-DELIVER-REPORT, sent from MS to SC
59 ESmsSubmit = 2, ///< SMS-SUBMIT, sent from MS to SC
60 ESmsSubmitReport = 3, ///< SMS-SUBMIT-REPORT, sent from SC to MS
61 ESmsStatusReport = 4, ///< SMS-STATUS-REQUEST, sent from SC to MS
62 ESmsCommand = 5 ///< SMS-COMMAND, sent from MS to SC
65 IMPORT_C static CSmsPDU* NewL(RReadStream &aStream,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
66 IMPORT_C static CSmsPDU* NewL(const TGsmSms& aGsmSms,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse,TBool aIsMobileTerminated=ETrue);
67 IMPORT_C static CSmsPDU* NewL(TSmsPDUType aType,CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TBool aIsRPError=EFalse);
69 inline TSmsPDUType Type() const;
71 IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
73 IMPORT_C void EncodeMessagePDUL(TGsmSms& aGsmSms) const;
75 IMPORT_C TPtrC ServiceCenterAddress() const;
76 IMPORT_C void SetServiceCenterAddressL(const TDesC& aAddress);
77 IMPORT_C void ParsedServiceCenterAddress(TGsmSmsTelNumber& aParsedAddress) const;
78 IMPORT_C void SetParsedServiceCenterAddressL(const TGsmSmsTelNumber& aParsedAddress);
80 IMPORT_C TPtrC ToFromAddress() const;
81 IMPORT_C void SetToFromAddressL(const TDesC& aAddress);
82 IMPORT_C void ParsedToFromAddress(TGsmSmsTelNumber& aParsedAddress) const;
83 IMPORT_C void SetParsedToFromAddressL(const TGsmSmsTelNumber& aParsedAddress);
85 // Functions on data coding scheme
86 IMPORT_C TSmsDataCodingScheme::TSmsDCSBits7To4 Bits7To4() const;
87 IMPORT_C void SetBits7To4(TSmsDataCodingScheme::TSmsDCSBits7To4 aBits7To4);
89 IMPORT_C TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;
90 IMPORT_C void SetAlphabet(TSmsDataCodingScheme::TSmsAlphabet aAlphabet);
91 IMPORT_C TBool Class(TSmsDataCodingScheme::TSmsClass& aClass) const;
92 IMPORT_C void SetClass(TBool aClassDefined,TSmsDataCodingScheme::TSmsClass aClass);
93 IMPORT_C TBool TextCompressed() const;
94 IMPORT_C void SetTextCompressed(TBool aCompressed);
96 IMPORT_C TSmsDataCodingScheme::TSmsIndicationState IndicationState() const;
97 IMPORT_C void SetIndicationState(TSmsDataCodingScheme::TSmsIndicationState aState);
98 IMPORT_C TSmsDataCodingScheme::TSmsIndicationType IndicationType() const;
99 IMPORT_C void SetIndicationType(TSmsDataCodingScheme::TSmsIndicationType aType);
101 // Functions on concatenation user data information element
102 IMPORT_C TBool TextConcatenated(TBool* aIs16Bit=NULL) const;
103 IMPORT_C void SetTextConcatenatedL(TBool aConcatenated,TBool aIs16Bit=EFalse);
104 IMPORT_C TInt ConcatenatedMessageReference() const;
105 IMPORT_C void SetConcatenatedMessageReference(TInt aReference);
106 IMPORT_C TInt NumConcatenatedMessagePDUs() const;
107 IMPORT_C void SetNumConcatenatedMessagePDUs(TInt aNum);
108 IMPORT_C TInt ConcatenatedMessagePDUIndex() const;
109 IMPORT_C void SetConcatenatedMessagePDUIndex(TInt aIndex);
111 // Functions for application port addressing
112 IMPORT_C TBool ApplicationPortAddressing(TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit=NULL) const;
113 IMPORT_C void SetApplicationPortAddressingL(TBool aAddressing,TInt aDestination,TInt aOriginator,TBool aIs16Bit=EFalse);
115 // Functions on protocol identifier
116 IMPORT_C TSmsProtocolIdentifier::TSmsPIDType PIDType() const;
117 IMPORT_C void SetPIDType(TSmsProtocolIdentifier::TSmsPIDType aSmsPIDType);
118 IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator TelematicDeviceIndicator() const;
119 IMPORT_C void SetTelematicDeviceIndicator(TSmsProtocolIdentifier::TSmsTelematicDeviceIndicator aIndicator);
122 //-- concern 'ShortMessageType'
123 IMPORT_C TSmsProtocolIdentifier::TSmsShortMessageType ShortMessageType() const;
124 IMPORT_C void SetShortMessageType(TSmsProtocolIdentifier::TSmsShortMessageType aShortMessageType);
127 IMPORT_C TSmsProtocolIdentifier::TSmsTelematicDeviceType TelematicDeviceType() const;
128 IMPORT_C void SetTelematicDeviceType(TSmsProtocolIdentifier::TSmsTelematicDeviceType aDeviceType);
130 // Functions on parameter indicator
131 IMPORT_C TBool UserDataPresent() const;
132 IMPORT_C void SetUserDataPresent(TBool aPresent);
133 IMPORT_C TBool DataCodingSchemePresent() const;
134 IMPORT_C void SetDataCodingSchemePresent(TBool aPresent);
135 IMPORT_C TBool ProtocolIdentifierPresent() const;
136 IMPORT_C void SetProtocolIdentifierPresent(TBool aPresent);
138 IMPORT_C CSmsUserData& UserData();
139 IMPORT_C const CSmsUserData& UserData() const;
140 virtual void DecodeL(TGsmuLex8& aPdu)=0;
141 void UpdateConcatenationDataL(TGsmSms& aGsmSms, TInt aRef, TInt aPduIndex, TInt aMaxPdu);
142 void UpdateEmailHeaderDataL(TGsmSms& aGsmSms,TInt& aEmailOverallHeaderLength);
144 // SMSC Control Parameters
145 TBool UpdateSMSCCtrlParameterL(TGsmSms& aGsmSms, const TUint8 aOctet);
148 TBool UpdateTPSRRL(TGsmSms& aGsmSms, TSmsFirstOctet aSmsReportRequest);
150 // National Language Encoding
151 IMPORT_C TSmsEncoding NationalLanguageEncoding() const;
152 IMPORT_C void SetNationalLanguageEncodingL(TSmsEncoding aEncoding);
155 CSmsPDU(TSmsPDUType aSmsPDUType);
157 virtual const TSmsDataCodingScheme* DataCodingScheme() const; // Functions made const to avoid too many definitions
158 virtual const TSmsProtocolIdentifier* ProtocolIdentifier() const;
159 virtual const TSmsParameterIndicator* ParameterIndicator() const;
160 virtual const CSmsUserData* UserDataPtr() const;
161 virtual const CSmsAddress* ToFromAddressPtr() const;
163 virtual void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs)=0;
164 virtual TUint8* EncodeL(TUint8* aPtr) const=0;
166 virtual void InternalizeMessagePDUL(RReadStream& aStream)=0;
167 virtual void ExternalizeMessagePDUL(RWriteStream& aStream) const=0;
170 TBool DoTextConcatenated(TInt& aIndex,TBool* aIs16Bit) const;
171 void DoSetTextConcatenatedL(TBool aIs16Bit);
172 TBool DoApplicationPortAddressing(TInt& aIndex,TInt& aDestination,TInt& aOriginator,TBool* aIs16Bit) const;
173 void DoSetApplicationPortAddressingL(TInt aDestination,TInt aOriginator,TBool aIs16Bit);
176 const TSmsPDUType iSmsPDUType;
179 CSmsAddress* iServiceCenterAddress;
184 * SMS-DELIVER PDU - SC to MS
188 class CSmsDeliver : public CSmsPDU
194 IMPORT_C TBool MoreMessagesToSend() const;
195 IMPORT_C void SetMoreMessagesToSend(TBool aMore);
197 IMPORT_C TBool ReplyPath() const;
198 IMPORT_C void SetReplyPath(TBool aReplyPath);
200 IMPORT_C TBool StatusReportIndication() const;
201 IMPORT_C void SetStatusReportIndication(TBool aIndication);
203 IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours);
204 IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt aNumQuarterHours=0);
205 IMPORT_C const TSmsProtocolIdentifier* ProtocolIdentifier() const;
208 const TSmsDataCodingScheme* DataCodingScheme() const;
209 const CSmsUserData* UserDataPtr() const;
210 const CSmsAddress* ToFromAddressPtr() const;
212 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
213 TUint8* EncodeL(TUint8* aPtr) const;
214 void DecodeL(TGsmuLex8& aPdu);
215 void InternalizeMessagePDUL(RReadStream& aStream);
216 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
219 TSmsFirstOctet iFirstOctet;
220 CSmsAddress* iOriginalAddress;
221 TSmsProtocolIdentifier iProtocolIdentifier;
222 TSmsDataCodingScheme iDataCodingScheme;
223 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
224 CSmsUserData* iUserData;
229 * SMS-SUBMIT PDU - MS to SC
233 class CSmsSubmit : public CSmsPDU
239 IMPORT_C TBool RejectDuplicates() const;
240 IMPORT_C void SetRejectDuplicates(TBool aRejectDuplicates);
242 IMPORT_C TSmsFirstOctet::TSmsValidityPeriodFormat ValidityPeriodFormat() const;
243 IMPORT_C void SetValidityPeriodFormat(TSmsFirstOctet::TSmsValidityPeriodFormat aValidityPeriodFormat);
245 IMPORT_C TBool ReplyPath() const;
246 IMPORT_C void SetReplyPath(TBool aReplyPath);
248 IMPORT_C TBool StatusReportRequest() const;
249 IMPORT_C void SetStatusReportRequest(TBool aRequest);
251 IMPORT_C TInt MessageReference() const;
252 IMPORT_C void SetMessageReference(TInt aMessageReference);
254 IMPORT_C const TTimeIntervalMinutes& ValidityPeriod() const;
255 IMPORT_C void SetValidityPeriod(const TTimeIntervalMinutes& aTimeIntervalMinutes);
258 const TSmsDataCodingScheme* DataCodingScheme() const;
259 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
260 const CSmsUserData* UserDataPtr() const;
261 const CSmsAddress* ToFromAddressPtr() const;
263 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
264 TUint8* EncodeL(TUint8* aPtr) const;
265 void DecodeL(TGsmuLex8& aPdu);
266 void InternalizeMessagePDUL(RReadStream& aStream);
267 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
270 TSmsFirstOctet iFirstOctet;
271 TSmsOctet iMessageReference;
272 CSmsAddress* iDestinationAddress;
273 TSmsProtocolIdentifier iProtocolIdentifier;
274 TSmsDataCodingScheme iDataCodingScheme;
275 TSmsValidityPeriod iValidityPeriod;
276 CSmsUserData* iUserData;
281 * SMS-DELIVER-REPORT PDU - MS to SC
285 class CSmsDeliverReport : public CSmsPDU
288 CSmsDeliverReport(TBool aIsRPError=EFalse);
289 ~CSmsDeliverReport();
291 inline TBool IsRPError() const;
292 inline void SetIsRPError(TBool aIsRPError);
294 IMPORT_C TInt FailureCause() const;
295 IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause);
298 const TSmsDataCodingScheme* DataCodingScheme() const;
299 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
300 const TSmsParameterIndicator* ParameterIndicator() const;
301 const CSmsUserData* UserDataPtr() const;
303 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
304 TUint8* EncodeL(TUint8* aPtr) const;
305 void DecodeL(TGsmuLex8& aPdu);
306 void InternalizeMessagePDUL(RReadStream& aStream);
307 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
312 TSmsFirstOctet iFirstOctet;
313 TSmsFailureCause iFailureCause;
314 TSmsParameterIndicator iParameterIndicator;
315 TSmsProtocolIdentifier iProtocolIdentifier;
316 TSmsDataCodingScheme iDataCodingScheme;
317 CSmsUserData* iUserData;
322 * SMS-SUBMIT-REPORT PDU - SC to MS
326 class CSmsSubmitReport : public CSmsPDU
329 CSmsSubmitReport(TBool aIsRPError=EFalse);
332 inline TBool IsRPError() const;
333 inline void SetIsRPError(TBool aIsRPError);
335 IMPORT_C TInt FailureCause() const;
336 IMPORT_C void SetFailureCause(TSmsFailureCause::TSmsFailureCauseError aFailureCause);
339 const TSmsDataCodingScheme* DataCodingScheme() const;
340 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
341 const TSmsParameterIndicator* ParameterIndicator() const;
342 const CSmsUserData* UserDataPtr() const;
344 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
345 TUint8* EncodeL(TUint8* aPtr) const;
346 void DecodeL(TGsmuLex8& aPdu);
347 void InternalizeMessagePDUL(RReadStream& aStream);
348 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
353 TSmsFirstOctet iFirstOctet;
354 TSmsFailureCause iFailureCause;
355 TSmsParameterIndicator iParameterIndicator;
356 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
357 TSmsProtocolIdentifier iProtocolIdentifier;
358 TSmsDataCodingScheme iDataCodingScheme;
359 CSmsUserData* iUserData;
364 * SMS-STATUS-REPORT PDU - SC to MS
368 class CSmsStatusReport : public CSmsPDU
374 inline TBool ParameterIndicatorPresent() const;
375 inline void SetParameterIndicatorPresent(TBool aPresent);
377 IMPORT_C TBool MoreMessagesToSend() const;
378 IMPORT_C void SetMoreMessagesToSend(TBool aMore);
380 IMPORT_C TSmsFirstOctet::TSmsStatusReportQualifier StatusReportQualifier() const;
381 IMPORT_C void SetStatusReportQualifier(TSmsFirstOctet::TSmsStatusReportQualifier aQualifier);
383 IMPORT_C TInt MessageReference() const;
384 IMPORT_C void SetMessageReference(TInt aMessageReference);
386 IMPORT_C void ServiceCenterTimeStamp(TTime& aTime,TInt& aNumQuarterHours);
387 IMPORT_C void SetServiceCenterTimeStamp(const TTime& aTime,TInt& aNumQuarterHours);
389 IMPORT_C void DischargeTime(TTime& aTime,TInt& aNumQuarterHours);
390 IMPORT_C void SetDischargeTime(const TTime& aTime,TInt& aNumQuarterHours);
392 IMPORT_C TSmsStatus::TSmsStatusValue Status() const;
393 IMPORT_C void SetStatus(TSmsStatus::TSmsStatusValue aValue);
396 const TSmsDataCodingScheme* DataCodingScheme() const;
397 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
398 const TSmsParameterIndicator* ParameterIndicator() const;
399 const CSmsUserData* UserDataPtr() const;
400 const CSmsAddress* ToFromAddressPtr() const;
402 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
403 TUint8* EncodeL(TUint8* aPtr) const;
404 void DecodeL(TGsmuLex8& aPdu);
405 void InternalizeMessagePDUL(RReadStream& aStream);
406 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
409 TUint8 iParameterIndicatorPresent;
411 TSmsFirstOctet iFirstOctet;
412 TSmsOctet iMessageReference;
413 CSmsAddress* iRecipientAddress;
414 TSmsServiceCenterTimeStamp iServiceCenterTimeStamp;
415 TSmsServiceCenterTimeStamp iDischargeTime;
417 TSmsParameterIndicator iParameterIndicator;
418 TSmsProtocolIdentifier iProtocolIdentifier;
419 TSmsDataCodingScheme iDataCodingScheme;
420 CSmsUserData* iUserData;
425 * SMS-COMMAND PDU - MS to SC
429 class CSmsCommand : public CSmsPDU
435 IMPORT_C TBool StatusReportRequest() const;
436 IMPORT_C void SetStatusReportRequest(TBool aRequest);
438 IMPORT_C TInt MessageReference() const;
439 IMPORT_C void SetMessageReference(TInt aMessageReference);
441 IMPORT_C TInt CommandType() const;
442 IMPORT_C void SetCommandType(TSmsCommandType::TSmsCommandTypeValue aCommandType);
444 IMPORT_C TInt MessageNumber() const;
445 IMPORT_C void SetMessageNumber(TInt aMessageNumber);
447 IMPORT_C TInt NumInformationElements() const;
448 IMPORT_C CSmsInformationElement& InformationElement(TInt aIndex) const;
449 CSmsInformationElement*& InformationElementPtr(TInt aIndex) const;
450 IMPORT_C TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,
452 IMPORT_C void AddInformationElementL(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, TDesC8& aData);
453 IMPORT_C void RemoveInformationElement(TInt aIndex);
455 IMPORT_C TInt MaxCommandDataLength() const;
456 IMPORT_C TPtrC8 CommandData() const;
457 IMPORT_C void SetCommandDataL(const TDesC8& aData);
460 const TSmsProtocolIdentifier* ProtocolIdentifier() const;
461 const CSmsAddress* ToFromAddressPtr() const;
463 void ConstructL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
464 TUint8* EncodeL(TUint8* aPtr) const;
465 void DecodeL(TGsmuLex8& aPdu);
466 void InternalizeMessagePDUL(RReadStream& aStream);
467 void ExternalizeMessagePDUL(RWriteStream& aStream) const;
468 void DoSetStatusReportRequest(TBool aRequest);
471 TSmsFirstOctet iFirstOctet;
472 TSmsOctet iMessageReference;
473 TSmsProtocolIdentifier iProtocolIdentifier;
474 TSmsCommandType iCommandType;
475 TSmsOctet iMessageNumber;
476 CSmsAddress* iDestinationAddress;
477 CSmsCommandData* iCommandData;
480 #include "gsmupdu.inl"
482 #endif // !defined __GSMUPDU_H__