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