epoc32/include/gsmumsg.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
// This file defines the class CSmsMessage
williamr@2
    15
// 
williamr@2
    16
//
williamr@2
    17
williamr@2
    18
williamr@2
    19
/**
williamr@2
    20
 @file
williamr@4
    21
 @publishedAll
williamr@2
    22
*/
williamr@2
    23
williamr@2
    24
#ifndef __GSMUMSG_H__
williamr@2
    25
#define __GSMUMSG_H__
williamr@2
    26
williamr@2
    27
#include <e32std.h>
williamr@2
    28
#include <f32file.h>
williamr@2
    29
#include <gsmuetel.h>
williamr@2
    30
#include <charconv.h>
williamr@2
    31
#include <gsmunmspacemobstore.h>
williamr@2
    32
#include "gsmupdu.h"
williamr@2
    33
williamr@2
    34
#include <emsinformationelement.h>
williamr@2
    35
williamr@2
    36
/**
williamr@4
    37
 *  @publishedAll
williamr@2
    38
 */
williamr@2
    39
const TUint IoctlWriteSMSBufferSize = 256;
williamr@2
    40
const TUint KMaxMobileNameSize = 32;
williamr@2
    41
williamr@2
    42
class CSmsBufferBase;
williamr@2
    43
class CSmsCompressedBuffer;
williamr@2
    44
class TSmsUserDataSettings;
williamr@2
    45
class CSmsEMSBufferSegmenter;
williamr@2
    46
class CEmsUserPrompt;
williamr@2
    47
class CEmsObjectDistribution;
williamr@2
    48
class CSmsIEOperation;
williamr@2
    49
class CSmsNonIEOperation;
williamr@4
    50
class CSmsMessageAdditionalAttributes;
williamr@2
    51
williamr@2
    52
/**
williamr@2
    53
 *  This class is used in CSmsMessage only.
williamr@4
    54
 *  @publishedAll
williamr@2
    55
 */
williamr@2
    56
class TGsmSmsSlotEntry
williamr@2
    57
	{
williamr@2
    58
public:
williamr@2
    59
	IMPORT_C TGsmSmsSlotEntry();
williamr@2
    60
williamr@2
    61
public:
williamr@2
    62
    TInt iIndex;
williamr@2
    63
    TBuf<KMaxMobileNameSize> iStore; 				// equivalent to RMobilePhone::TMobileName
williamr@2
    64
	void InternalizeL(RReadStream& aStream);
williamr@2
    65
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
    66
    };
williamr@2
    67
williamr@4
    68
struct TEncodeParams
williamr@4
    69
	{
williamr@4
    70
	const TTime* iTimeStamp;
williamr@4
    71
	const TTimeIntervalSeconds* iTimeIntervalInSeconds;		
williamr@4
    72
	};
williamr@2
    73
williamr@2
    74
/**
williamr@2
    75
 *  Represents a complete SMS message.
williamr@2
    76
 *  
williamr@2
    77
 *  This class can:
williamr@2
    78
 *  
williamr@2
    79
 *  Internalise and externalise its data
williamr@2
    80
 *  
williamr@2
    81
 *  Encode/decode itself to/from one or more SMS PDU's
williamr@2
    82
 *  
williamr@2
    83
 *  SMS Message Data is stored in the CSmsBufferBase iBuffer. SMS Message Settings
williamr@2
    84
 *  are stored in the CSmsPDU iSmsPDU.
williamr@2
    85
 *  @publishedAll
williamr@2
    86
 *  @released 
williamr@2
    87
 */
williamr@2
    88
class CSmsMessage : public CBase
williamr@2
    89
	{
williamr@2
    90
public:
williamr@2
    91
/** User data optimisation flags. */
williamr@2
    92
	enum TSmsOptimizationFlags
williamr@2
    93
		{
williamr@2
    94
	/**
williamr@2
    95
	 *  The alphabet flag causes an alphabet to be chosen which preserves information
williamr@2
    96
	 *  	in the message and makes the number of PDUs as small as possible. 
williamr@2
    97
	 */
williamr@2
    98
		ESmsFlagOptimizeAlphabet=0x01,
williamr@2
    99
	/**
williamr@2
   100
	 *  8-bit referenced concatenation.
williamr@2
   101
	 *  
williamr@2
   102
	 *  This causes compression to be switched off and if the message length is greater
williamr@2
   103
	 *  	than the maximum message length, concatenation is switched on. 
williamr@2
   104
	 */
williamr@2
   105
		ESmsFlagOptimizeConcatenation=0x08,
williamr@2
   106
	/**
williamr@2
   107
	 *  16-bit referenced concatenation.
williamr@2
   108
	 *  
williamr@2
   109
	 *  This causes compression to be switched off and if the message length is greater
williamr@2
   110
	 *  	than the maximum message length, concatenation is switched on. 
williamr@2
   111
	 */
williamr@2
   112
		ESmsFlagOptimizeConcatenation16BitReference=0x10,
williamr@2
   113
		};
williamr@2
   114
williamr@2
   115
/** Flags that indicate whether a message is stored. */
williamr@2
   116
	enum TMobileSmsStorage
williamr@2
   117
		{
williamr@2
   118
	/** No storage. */
williamr@2
   119
		ESmsNoStorage=0x00,
williamr@2
   120
	/** SIM storage. */
williamr@2
   121
		ESmsSIMStorage=0x04,
williamr@2
   122
	/** Phone storage. */
williamr@2
   123
		ESmsPhoneStorage=0x08,
williamr@2
   124
	/** Combined storage. */
williamr@2
   125
		ESmsCombinedStorage=0x0C
williamr@2
   126
		};
williamr@2
   127
williamr@2
   128
	enum TTimeIntervalsRepresentedInSeconds
williamr@2
   129
		{
williamr@2
   130
		E15MinutesRepresentedInSeconds = 15 * 60,
williamr@2
   131
		EMaximumSeconds                = 79 * E15MinutesRepresentedInSeconds
williamr@2
   132
		                                      // Harmonised with maximum offset allowed for
williamr@2
   133
                                              // Service Centre Time Stamp per 23.040 V4.4 Sect 9.2.3.11.
williamr@2
   134
		};
williamr@2
   135
williamr@2
   136
williamr@2
   137
public:
williamr@2
   138
	IMPORT_C static CSmsMessage* NewL(RFs& aFs, const TGsmSms& aGsmSms,CSmsBufferBase* aBuffer, TBool aIsRPError=EFalse,TBool aIsMobileTerminated=ETrue);
williamr@2
   139
	IMPORT_C static CSmsMessage* NewL(RFs& aFs, CSmsPDU::TSmsPDUType aType,CSmsBufferBase* aBuffer,TBool aIsRPError=EFalse);
williamr@2
   140
	IMPORT_C ~CSmsMessage();
williamr@2
   141
williamr@2
   142
	inline CSmsPDU::TSmsPDUType Type() const;
williamr@2
   143
	inline TBool IsComplete() const;
williamr@2
   144
	inline TBool IsDecoded() const;
williamr@2
   145
	inline TMobileSmsStorage Storage() const;
williamr@2
   146
	inline void SetStorage(TMobileSmsStorage aStorage);
williamr@2
   147
	inline NMobileSmsStore::TMobileSmsStoreStatus Status() const;
williamr@2
   148
	inline void SetStatus(NMobileSmsStore::TMobileSmsStoreStatus aStatus);
williamr@2
   149
	inline TInt LogServerId() const;
williamr@2
   150
	inline void SetLogServerId(TInt aId);
williamr@2
   151
	inline const TTime& Time() const;
williamr@2
   152
	inline void SetTime(const TTime& aTime);
williamr@2
   153
	IMPORT_C TTimeIntervalSeconds UTCOffset() const;
williamr@2
   154
	IMPORT_C TBool SetUTCOffset(const TTimeIntervalSeconds& aTimeOffset);
williamr@2
   155
    IMPORT_C void  SetDecodedOnSIM(TBool aOnSim);
williamr@2
   156
    IMPORT_C TBool DecodedOnSim();
williamr@2
   157
    IMPORT_C void  SetForwardToClient(TBool aForward);
williamr@2
   158
    IMPORT_C TBool ForwardToClient();
williamr@2
   159
williamr@2
   160
	inline CSmsPDU& SmsPDU();
williamr@2
   161
	inline const CSmsPDU& SmsPDU() const;
williamr@2
   162
williamr@2
   163
	inline TPtrC ServiceCenterAddress() const;
williamr@2
   164
	inline void SetServiceCenterAddressL(const TDesC& aAddress);
williamr@2
   165
	inline void ParsedServiceCenterAddress(TGsmSmsTelNumber& aParsedAddress) const;
williamr@2
   166
	inline void SetParsedServiceCenterAddressL(const TGsmSmsTelNumber& aParsedAddress);
williamr@2
   167
williamr@2
   168
	inline TPtrC ToFromAddress() const;
williamr@2
   169
	inline void SetToFromAddressL(const TDesC& aAddress);
williamr@2
   170
	inline void ParsedToFromAddress(TGsmSmsTelNumber& aParsedAddress) const;
williamr@2
   171
	inline void SetParsedToFromAddressL(const TGsmSmsTelNumber& aParsedAddress);
williamr@2
   172
williamr@2
   173
	IMPORT_C void InternalizeWithoutBufferL(RReadStream& aStream);
williamr@2
   174
	IMPORT_C void ExternalizeWithoutBufferL(RWriteStream& aStream) const;
williamr@2
   175
williamr@2
   176
	IMPORT_C void InternalizeL(RReadStream& aStream);
williamr@2
   177
	IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   178
williamr@2
   179
	inline CSmsBufferBase& Buffer();
williamr@2
   180
	inline const CSmsBufferBase& Buffer() const;
williamr@2
   181
williamr@2
   182
//  Functions related to encoding/decoding the text buffer
williamr@2
   183
	IMPORT_C TBool TextPresent() const;
williamr@2
   184
	IMPORT_C TInt NumMessagePDUsL();
williamr@2
   185
	IMPORT_C TInt MaxMessageLength() const;
williamr@2
   186
	IMPORT_C TInt MessageLengthL();
williamr@2
   187
	IMPORT_C void GetEncodingInfoL(TInt& aPdus, TInt& aUnconvertedChars,
williamr@2
   188
                                   TInt& aDowngradedChars, TInt& aFreeUDUnitsInLastPDU);
williamr@2
   189
williamr@2
   190
	IMPORT_C void UserDataSettings(TSmsUserDataSettings& aSettings) const;
williamr@2
   191
	IMPORT_C void SetUserDataSettingsL(const TSmsUserDataSettings& aSettings);
williamr@2
   192
	IMPORT_C void OptimizeSettingsL(TInt aOptions);
williamr@2
   193
williamr@2
   194
	IMPORT_C TSmsEncoding Alternative7bitEncoding() const;
williamr@2
   195
	IMPORT_C TInt SetAlternative7bitEncoding(TSmsEncoding aEncoding);
williamr@2
   196
	IMPORT_C TBool IsSupportedL(const TDesC& aDes,TInt& aNumberOfUnconvertibleCharacters, TInt& aIndexOfFirstUnconvertibleCharacter);
williamr@2
   197
	IMPORT_C TBool IsSupportedL(const TDesC& aDes, TInt& aNumberOfUnconvertibleCharacters,
williamr@2
   198
			                    TInt& aNumberOfDowngradedCharacters,
williamr@2
   199
			                    TInt& aNumberRequiringAlternativeEncoding,
williamr@2
   200
			                    TInt& aIndexOfFirstUnconvertibleCharacter) const;
williamr@2
   201
williamr@2
   202
	IMPORT_C void EncodeMessagePDUsL(CArrayFix<TGsmSms>& aSmsArray, TInt aReference=0);
williamr@2
   203
	IMPORT_C void DecodeMessagePDUsL(const CArrayFix<TGsmSms>& aSmsArray);
williamr@2
   204
	IMPORT_C const RPointerArray<const CEmsInformationElement>& GetEMSInformationElementsL()const;
williamr@2
   205
	IMPORT_C void AddEMSInformationElementL(const CEmsInformationElement& aEmsIE);
williamr@2
   206
	IMPORT_C RPointerArray<CEmsInformationElement>* RemoveEMSInformationElementsL(const TUint aStartPosition,const TSmsId aEmsId);
williamr@2
   207
	IMPORT_C CEmsInformationElement* RemoveEMSInformationElementL(const TUint aStartPosition,const TSmsId aEmsId);
williamr@2
   208
	IMPORT_C void ResetEMSL();
williamr@2
   209
	IMPORT_C TBool EncodeIntoSinglePDUL(CArrayFix<TGsmSms>& aSmsArray);
williamr@2
   210
	IMPORT_C void CopyEmsElementsL(CSmsMessage& aToMessage) const;
williamr@2
   211
	IMPORT_C void AddSlotL(const TGsmSmsSlotEntry& aSlot);
williamr@2
   212
	IMPORT_C TBool MatchSlots(const CArrayFixFlat<TGsmSmsSlotEntry>& aSlotArray);
williamr@2
   213
// E-mail header
williamr@2
   214
 	IMPORT_C void AddEmailHeaderL(const TDesC& aEmailHeader,const TDesC& aEmailBody);
williamr@2
   215
 	IMPORT_C TBool IsEmailHeader() const;
williamr@2
   216
 	IMPORT_C TBool GetEmailHeaderL(HBufC** aEmailHeader,HBufC** aEmailBody);
williamr@2
   217
 	void InstallEmailHeaderInformationElementL(CSmsUserData& aUserData,TInt& aHeaderLength);
williamr@2
   218
 	void InstallEmailHeaderInformationElementL(CSmsCommand& aCommand,TInt& aHeaderLength);
williamr@2
   219
	inline void Set16BitConcatenation(TBool aIs16BitConcatenation);
williamr@2
   220
	inline TBool Is16BitConcatenation()const;
williamr@2
   221
	IMPORT_C void UpdateSlotsL(TDesC8& aBuf);
williamr@2
   222
// Version information
williamr@2
   223
	IMPORT_C TInt Version();
williamr@2
   224
	// from this point downwards, all functions should be published internally only
williamr@2
   225
	IMPORT_C TInt SetVersion(TInt aVersion);
williamr@2
   226
 	IMPORT_C void InternalizeWithoutBufferAndVersionL(RReadStream& aStream);
williamr@2
   227
	IMPORT_C void ExternalizeWithoutBufferAndVersionL(RWriteStream& aStream) const;
williamr@2
   228
 	IMPORT_C void InternalizeBufferL(RReadStream& aStream);
williamr@2
   229
	IMPORT_C void ExternalizeBufferL(RWriteStream& aStream) const;
williamr@2
   230
 	IMPORT_C void InternalizeVersionL(RReadStream& aStream);
williamr@2
   231
	IMPORT_C void ExternalizeVersionL(RWriteStream& aStream) const;
williamr@2
   232
williamr@4
   233
    void* AdditionalInfo() {return (void*)iAdditionalInfo;};
williamr@2
   234
    IMPORT_C CSmsIEOperation& GetOperationsForIEL(CSmsInformationElement::TSmsInformationElementIdentifier) const;
williamr@2
   235
    IMPORT_C CSmsNonIEOperation& GetOperationsForNonIEL(TSmsNonIEIdentifier) const;
williamr@2
   236
    
williamr@2
   237
  	IMPORT_C TSmsStatusReportScheme Scheme() const;
williamr@2
   238
	IMPORT_C void DecodePartialCompleteMessagePDUsL(const CArrayFix<TGsmSms>& aSmsArray, TBool aLastPartialCompleteMsg);
williamr@2
   239
williamr@2
   240
private:
williamr@2
   241
williamr@2
   242
	CSmsMessage(RFs& aFs, CSmsBufferBase* aBuffer);
williamr@2
   243
	void ConstructL(const TGsmSms& aGsmSms, TBool aIsRPError,TBool aIsMobileTerminated);
williamr@2
   244
	void ConstructL(CSmsPDU::TSmsPDUType aType,TBool aIsRPError);
williamr@2
   245
williamr@2
   246
	void CreateControlIEOperationsClassesL();
williamr@2
   247
	void CreateControlNonIEOperationsClassesL();
williamr@2
   248
williamr@2
   249
	inline void SetIsComplete(TBool aIsComplete);
williamr@2
   250
	inline void SetIsDecoded(TBool aIsDecoded);
williamr@2
   251
williamr@2
   252
williamr@2
   253
	inline TBool BinaryData() const;
williamr@2
   254
	TInt ConvertedBufferLengthL(const CSmsBufferBase& aBuffer);
williamr@2
   255
	void EncodeBufferL(CArrayFix<TGsmSms>& aSmsArray,TInt aReference,const CSmsBufferBase& aBuffer,
williamr@2
   256
			           TInt& aUnconvertedChars, TInt& aDowngradedChars,
williamr@2
   257
			           TInt& aFreeUDUnitsInLastPDU, TBool aDoEncode=ETrue);
williamr@2
   258
	void DecodeBufferL(CArrayPtr<CSmsPDU>& aSmsPDUArray,CSmsBufferBase& aBuffer);
williamr@2
   259
	TBool EncodeIntoSinglePDUL(CArrayFix<TGsmSms>& aSmsArray, TInt& aUnconvertedChars,
williamr@2
   260
			                   TInt& aDowngradedChars, TInt& aFreeUDUnitsInLastPDU);
williamr@2
   261
	void PrepareCommandMessageL(void);
williamr@2
   262
	void InstallEmsInformationElementsL(CSmsUserData& aUserData, TInt aStartPosition);
williamr@2
   263
	void InstallEmsInformationElementsL(CSmsCommand& aCommand, TInt aStartPosition);
williamr@2
   264
	void InstallControlInformationElementsL(CSmsUserData& aUserData, TInt aSegmentSequenceNum);
williamr@2
   265
	void InstallControlInformationElementsL(CSmsCommand& aCommand);
williamr@4
   266
	TBool AddEMSInformationElementsToMultiSegmentMessageL(CSmsEMSBufferSegmenter& aSegmenter, TUint& aCharsAdded,
williamr@4
   267
			                                              TBool aDoEncode, TSmsEncoding& aEncoding,
williamr@4
   268
			                                              RPointerArray<CEmsInformationElement>& aCorrectedFormatingIEArray,
williamr@4
   269
			                                              TUint& aCurEMSIEno, TUint& aBaseAddr);
williamr@2
   270
	TBool AddEMSInformationElementsToSingleSegmentMessageL(CSmsEMSBufferSegmenter& aSegmenter,
williamr@2
   271
			                                               TSmsEncoding aEncoding);
williamr@4
   272
	void AddControlInformationElementsToMultiSegmentMessageL(TBool aDoEncode);
williamr@4
   273
	void AddControlInformationElementsToMultiSegmentMessageL(TSmsInformationElementCategories::TInformationElementCategory aCategory, TBool aMandatoryInPDU, TBool aDoEncode);
williamr@4
   274
	void AddCurrentPDUToPDUArrayL(TBool aDoEncode);
williamr@2
   275
	TBool AddIEToUserDataL(CEmsInformationElement* aIe, TInt aCharsAlreadyAdded,TUint& aCharsAddedToCurrentPDU,CSmsEMSBufferSegmenter& aSeg);
williamr@2
   276
	TInt FillPduL(CSmsEMSBufferSegmenter& aSeg, TInt aNumChars, TSmsEncoding aEncoding);
williamr@2
   277
	TInt NumMessageEmsPDUsL();
williamr@2
   278
	void CorrectFormattingL(TUint aCharsAddedToCurrentPDU,RPointerArray<CEmsInformationElement>& aCorrectedFormatingIEArray,TUint aBaseAddr);
williamr@2
   279
	void CorrectFormattingInSinglePDUL();
williamr@2
   280
	void ResetWorkingPDUL();
williamr@2
   281
	TBool CanBeRemoved(const CEmsInformationElement& aIE, TUint aIEIndex);
williamr@2
   282
	void AddEmsUserPromptL(const CEmsUserPrompt& aEmsIE);
williamr@2
   283
	void AddEmsObjectDistributionL(const CEmsObjectDistribution& aObjectDistributionIE);
williamr@2
   284
	void UpdateUserPromptAndODIElementsStartPosition();
williamr@2
   285
	TInt AddReceivedEmsInformationElement(CEmsInformationElement* aIE);
williamr@4
   286
	TSmsStatusReportScheme FindSchemeL(const CArrayPtr<CSmsPDU>& aSmsPDUArray);
williamr@2
   287
	void InstallTPSRRInformationL(const CArrayPtr<CSmsPDU>& aSmsPDUArray, TInt aSegmentSequenceNum);
williamr@2
   288
	void EncodingTPSRRFromSchemesIntoSinglePDUL();
williamr@2
   289
	void DecodeOnlyTextL(CArrayPtr<CSmsPDU>& aSmsPDUArray,CSmsBufferBase& aBuffer);
williamr@2
   290
	void AddIncompleteMessageInfoL(TInt aStartPDU, TInt aEndPDU, TBool aLastPartialCompleteMsg);
williamr@2
   291
	void MergeAlternative7bitEncoding(TSmsEncoding aEncoding) const;
williamr@2
   292
williamr@2
   293
private:
williamr@2
   294
	enum TSmsMessageFlags
williamr@2
   295
		{
williamr@2
   296
		ESmsFlagIsComplete=0x01,
williamr@2
   297
		ESmsFlagIsDecoded=0x02,
williamr@2
   298
williamr@2
   299
		ESmsStorageMask=0x0C,
williamr@2
   300
		ESmsUTCOffsetSecondGranularityMask  =0x1FFFF0,//Bits needed to represent 79 * 15 * 60 seconds
williamr@2
   301
		ESmsUTCOffsetSignBit                =0x200000
williamr@2
   302
		};
williamr@2
   303
williamr@2
   304
	enum TTimeBitMaskOffsets
williamr@2
   305
		{
williamr@2
   306
		ESecondBitOffset   =  4,
williamr@2
   307
		ESignBitOffset     = 21
williamr@2
   308
		};
williamr@2
   309
williamr@2
   310
    enum TDecodedOnSimBit
williamr@2
   311
        {
williamr@2
   312
        EDecodedOnSimBit = 0x80000000
williamr@2
   313
        };
williamr@2
   314
williamr@2
   315
    enum TForwardToClientBit
williamr@2
   316
        {
williamr@2
   317
        EForwardToClientBit = 0x40000000
williamr@2
   318
        };
williamr@2
   319
williamr@2
   320
williamr@2
   321
private:
williamr@2
   322
williamr@2
   323
	TInt iFlags;
williamr@2
   324
	NMobileSmsStore::TMobileSmsStoreStatus iStatus;
williamr@2
   325
	TInt iLogServerId;
williamr@2
   326
	TTime iTime;
williamr@2
   327
	CSmsPDU* iSmsPDU;
williamr@2
   328
	CSmsBufferBase* iBuffer;
williamr@2
   329
	RFs& iFs;
williamr@2
   330
williamr@2
   331
	TBool iIs16BitConcatenation;
williamr@2
   332
	RPointerArray<CEmsInformationElement>* iInformationElementArray;
williamr@2
   333
	CCnvCharacterSetConverter* iCharacterSetConverter;
williamr@2
   334
williamr@2
   335
public:
williamr@4
   336
	CArrayFixFlat<TGsmSmsSlotEntry> iSlotArray; //< Array for slots
williamr@2
   337
/**
williamr@2
   338
 *  SMS versions
williamr@2
   339
 */
williamr@2
   340
	enum TSmsMessageVersion
williamr@2
   341
		{
williamr@2
   342
	/** The default value. */
williamr@2
   343
		ESmsMessageV0, 
williamr@2
   344
	/** Release 6 SMS Support */	
williamr@2
   345
		ESmsMessageV1, 
williamr@2
   346
	/** Latest version */
williamr@2
   347
		ESmsMessageV2,
williamr@2
   348
	/**	Incomplete Class0 Information Support	*/
williamr@2
   349
		ESmsMessageV3,
williamr@2
   350
		ESmsIncompleteClass0MessageV = ESmsMessageV3,
williamr@2
   351
	/** National language 7bit encoding support */
williamr@2
   352
		ESmsMessageV4
williamr@2
   353
		// for all other versions the corresponding enum values would be added i.e. ESmsMessageV5, etc. 
williamr@2
   354
		};
williamr@2
   355
williamr@2
   356
protected:
williamr@2
   357
williamr@4
   358
	/**
williamr@4
   359
	 *  iVersion is the version of CSmsMessage. This parameter will be
williamr@4
   360
	 *  used to identify what iAdditionalInfo points to for that particular
williamr@4
   361
	 *  version of CSmsMessage
williamr@4
   362
	 */
williamr@2
   363
	TInt iVersion;
williamr@2
   364
williamr@4
   365
	/**
williamr@4
   366
	 *  iAdditionalInfo would point to any new added data structure.
williamr@4
   367
	 *  iVersion would identify which data structure is valid for that
williamr@4
   368
	 *   *  particular version of CSmsMessage 
williamr@4
   369
	 */
williamr@4
   370
	CSmsMessageAdditionalAttributes*  iAdditionalInfo;
williamr@2
   371
	};
williamr@2
   372
williamr@2
   373
#include <gsmumsg.inl>
williamr@2
   374
williamr@2
   375
#endif // !defined __GSMUMSG_H__