epoc32/include/gsmuelem.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
permissions -rw-r--r--
Final list of Symbian^2 public API header files
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 define the classes for the different PDU elements
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 __GSMUELEM_H__
williamr@2
    25
#define __GSMUELEM_H__
williamr@2
    26
williamr@2
    27
// Includes
williamr@2
    28
williamr@2
    29
#include <e32std.h>
williamr@2
    30
#include <e32base.h>
williamr@2
    31
#include <charconv.h>
williamr@2
    32
#include <gsmunmspacemobph.h>
williamr@2
    33
williamr@2
    34
class RFs;
williamr@2
    35
class RReadStream;
williamr@2
    36
class RWriteStream;
williamr@2
    37
class CSmsEMSBufferSegmenter;
williamr@2
    38
williamr@2
    39
williamr@2
    40
// class declarations
williamr@2
    41
williamr@2
    42
/**
williamr@2
    43
 *  Decoding error.
williamr@2
    44
 *  @publishedAll
williamr@2
    45
 *  @released 
williamr@2
    46
 */
williamr@2
    47
const TInt KErrGsmuDecoding = KErrCorrupt;
williamr@2
    48
/**
williamr@2
    49
 *  @internalComponent
williamr@2
    50
 */
williamr@2
    51
_LIT8(KMOSES,"\x40\x4d\x64\xd3\x50\x00");
williamr@2
    52
/**
williamr@2
    53
 *  @internalComponent
williamr@2
    54
 */
williamr@2
    55
_LIT16(KNETWORK,"NETWORK");
williamr@2
    56
williamr@2
    57
williamr@2
    58
// Constants
williamr@2
    59
/**
williamr@2
    60
 *  @internalComponent
williamr@2
    61
 */
williamr@2
    62
const TUint8 KSms7BitAlphabetEscapeChar=0x1b;
williamr@2
    63
williamr@2
    64
williamr@2
    65
/**
williamr@2
    66
 *  Thin wrapper over TLex8 to provide leaving functions when getting the next
williamr@2
    67
 *  character(s).
williamr@2
    68
 *  
williamr@2
    69
 *  These functions leave with KErrGsmuDecoding if there are insufficient characters
williamr@2
    70
 *  remaining.
williamr@2
    71
 *  @publishedAll
williamr@2
    72
 *  @released
williamr@2
    73
 */
williamr@2
    74
class TGsmuLex8 : public TLex8
williamr@2
    75
	{
williamr@2
    76
	public:
williamr@2
    77
		TGsmuLex8(const TDesC8& aSource);
williamr@2
    78
		TUint8 GetL();
williamr@2
    79
		void IncL(TInt aNumber = 1);
williamr@2
    80
		TPtrC8 NextWithNoIncL(TInt aLength) const;
williamr@2
    81
		TPtrC8 NextWithNoIncL(TInt aLength, TBool aAcceptTruncation) const;		
williamr@2
    82
		TPtrC8 NextAndIncL(TInt aLength);
williamr@2
    83
williamr@2
    84
	private:
williamr@2
    85
		inline void LeaveL() const;
williamr@2
    86
	};
williamr@2
    87
williamr@2
    88
williamr@2
    89
/**
williamr@2
    90
 *  Base class for performing all operations on octets.
williamr@2
    91
 *  @publishedAll
williamr@2
    92
 *  @released 
williamr@2
    93
 */
williamr@2
    94
class TSmsOctet
williamr@2
    95
	{
williamr@2
    96
public:
williamr@2
    97
	inline TSmsOctet(TInt aValue);
williamr@2
    98
	inline TSmsOctet(TUint8 aValue = 0);
williamr@2
    99
	inline operator TInt() const;
williamr@2
   100
	const TSmsOctet& operator = (TInt aValue);
williamr@2
   101
	inline void FillSemiOctets(TInt aNum);
williamr@2
   102
	inline TInt SemiOctetsToNum() const;
williamr@2
   103
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
   104
	inline void DecodeL(TGsmuLex8& aPdu);
williamr@2
   105
	inline void InternalizeL(RReadStream& aStream);
williamr@2
   106
	inline void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   107
protected:
williamr@2
   108
	/** Octet value. */
williamr@2
   109
	TUint8 iValue;
williamr@2
   110
	};
williamr@2
   111
williamr@2
   112
williamr@2
   113
/**
williamr@2
   114
 *  Bit masks for key first octet of an SMS PDU
williamr@2
   115
 *  @publishedAll
williamr@2
   116
 *  @released
williamr@2
   117
 */
williamr@2
   118
class TSmsFirstOctet : public TSmsOctet
williamr@2
   119
	{
williamr@2
   120
public:
williamr@2
   121
/** TP-MTI (Message Type Indicator) First octet of all SMS PDUs. */
williamr@2
   122
	enum TSmsMTI
williamr@2
   123
		{
williamr@2
   124
	/** SMS-DELIVER or SMS-DELIVER-REPORT message. */
williamr@2
   125
		ESmsMTIDeliverOrDeliverReport=0x00,
williamr@2
   126
	/** SMS-SUBMIT or SMS-SUBMIT-REPORT message. */
williamr@2
   127
		ESmsMTISubmitOrSubmitReport=0x01,
williamr@2
   128
	/** SMS-STATUS or SMS-COMMAND message. */
williamr@2
   129
		ESmsMTIStatusReportOrCommand=0x02,
williamr@2
   130
williamr@2
   131
	/** Mask for these bit flags. */
williamr@2
   132
		ESmsMTIMask=0x03
williamr@2
   133
		};
williamr@2
   134
williamr@2
   135
/**
williamr@2
   136
 *  TP-UDHI (User Data Header Indicator) Found in first octet of
williamr@2
   137
 *  Submit and Deliver and possibly, Deliver Report and Status Report. 
williamr@2
   138
 */
williamr@2
   139
	enum TSmsUDHI
williamr@2
   140
		{
williamr@2
   141
	/** User data header indicator not present. */
williamr@2
   142
		ESmsUDHIHeaderNotPresent=0x00,
williamr@2
   143
	/** User data header indicator present. */
williamr@2
   144
		ESmsUDHIHeaderPresent=0x40,
williamr@2
   145
williamr@2
   146
	/** Mask for these bit flags. */
williamr@2
   147
		ESmsUDHIMask=0x40
williamr@2
   148
		};
williamr@2
   149
williamr@2
   150
/** TP-RP (Reply Path) Found in first octet of Submit and Deliver. */
williamr@2
   151
	enum TSmsReplyPath
williamr@2
   152
		{
williamr@2
   153
	/** Reply path does not exist. */
williamr@2
   154
		ESmsReplyPathNone=0x00,
williamr@2
   155
	/** Reply path exists. */
williamr@2
   156
		ESmsReplyPathExists=0x080,
williamr@2
   157
williamr@2
   158
	/** Mask for these bit flags. */
williamr@2
   159
		ESmsReplyPathMask=0x80
williamr@2
   160
		};
williamr@2
   161
williamr@2
   162
/** TP-MMS (More Messages To Send) Found in Deliver and Status Report. */
williamr@2
   163
	enum TSmsMoreMessagesToSend
williamr@2
   164
		{
williamr@2
   165
	/** More messages to send. */
williamr@2
   166
		ESmsMoreMessagesToSend=0x00,
williamr@2
   167
	/** No more messages to send. */
williamr@2
   168
		ESmsNoMoreMessagesToSend=0x04,
williamr@2
   169
williamr@2
   170
	/** Mask for these bit flags. */
williamr@2
   171
		ESmsMoreMessagesToSendMask=0x04,
williamr@2
   172
		};
williamr@2
   173
williamr@2
   174
/** T-SRI (Status Report Indicator) Found in Status Report. */
williamr@2
   175
	enum TSmsStatusReportIndicator
williamr@2
   176
		{
williamr@2
   177
	/** Status report is not going to be returned. */
williamr@2
   178
		ESmsStatusReportNotReturned=0x00,
williamr@2
   179
	/** Status report is going to be returned. */
williamr@2
   180
		ESmsStatusReportReturned=0x20,
williamr@2
   181
williamr@2
   182
	/** Mask for these bit flags. */
williamr@2
   183
		ESmsStatusReportIndicatorMask=0x20
williamr@2
   184
		};
williamr@2
   185
williamr@2
   186
/** TP-RD bit flags. */
williamr@2
   187
	enum TSmsRejectDuplicates
williamr@2
   188
		/**
williamr@2
   189
		 *  T-RD (Reject Duplicates) Found in Submit
williamr@2
   190
		 */
williamr@2
   191
		{
williamr@2
   192
	/** Accept duplicates. */
williamr@2
   193
		ESmsAcceptDuplicates=0x00,
williamr@2
   194
	/** Reject duplicates. */
williamr@2
   195
		ESmsRejectDuplicates=0x04,
williamr@2
   196
williamr@2
   197
	/** Mask for these bit flags. */
williamr@2
   198
		ESmsRejectDuplicatesMask=0x04
williamr@2
   199
		};
williamr@2
   200
williamr@2
   201
/** T-SRQ (Status Report Qualifier). Found in Status Report. */
williamr@2
   202
	enum TSmsStatusReportQualifier
williamr@2
   203
		{
williamr@2
   204
	/** Status report result of submit. */
williamr@2
   205
		ESmsStatusReportResultOfSubmit=0x00,
williamr@2
   206
	/** Status report result of command. */
williamr@2
   207
		ESmsStatusReportResultOfCommand=0x20,
williamr@2
   208
williamr@2
   209
	/** Mask for these bit flags. */
williamr@2
   210
		ESmsStatusReportQualifierMask=0x20
williamr@2
   211
		};
williamr@2
   212
williamr@2
   213
/** TP-VPF (Validity Period Format). Found in Submit. */
williamr@2
   214
	enum TSmsValidityPeriodFormat
williamr@2
   215
		{
williamr@2
   216
	/** TP-VP field not present. */
williamr@2
   217
		ESmsVPFNone=0x00,
williamr@2
   218
	/** TP-VP field present. Enhanced format (7 octets). */
williamr@2
   219
		ESmsVPFEnhanced=0x08,	// was ESmsVPFReserved, the new GSM spec!
williamr@2
   220
	/** TP-VP field present, relative validity format. */
williamr@2
   221
		ESmsVPFInteger=0x10,    // relative validity period
williamr@2
   222
	/** TP-VP field present, absolute validity format. */
williamr@2
   223
		ESmsVPFSemiOctet=0x18,  // absolute validity period
williamr@2
   224
williamr@2
   225
	/** Mask for these bit flags. */
williamr@2
   226
		ESmsVPFMask=0x18
williamr@2
   227
		};
williamr@2
   228
williamr@2
   229
/** TP-SRR (Status Report Request) Found in Submit and Command. */
williamr@2
   230
	enum TSmsStatusReportRequest
williamr@2
   231
		{
williamr@2
   232
	/** Status report is not requested. */
williamr@2
   233
		ESmsStatusReportNotRequested=0x00,
williamr@2
   234
	/** Status report is requested. */
williamr@2
   235
		ESmsStatusReportRequested=0x20,
williamr@2
   236
williamr@2
   237
	/** Mask for these bit flags. */
williamr@2
   238
		ESmsStatusReportRequestMask=0x20
williamr@2
   239
		};
williamr@2
   240
williamr@2
   241
public:
williamr@2
   242
	TSmsFirstOctet(TInt aValue=0);
williamr@2
   243
	const TSmsFirstOctet& operator = (TInt aValue);  //  Review
williamr@2
   244
	};
williamr@2
   245
williamr@2
   246
williamr@2
   247
/**
williamr@2
   248
 *  TP-FCS (Failure Cause) octet. For Deliver and Submit errors
williamr@2
   249
 *  @publishedAll
williamr@2
   250
 *  @released
williamr@2
   251
 */
williamr@2
   252
class TSmsFailureCause : public TSmsOctet
williamr@2
   253
	{
williamr@2
   254
public:
williamr@2
   255
/** TP-FCS flags. */
williamr@2
   256
	enum TSmsFailureCauseError
williamr@2
   257
		{
williamr@2
   258
//  Reserved values
williamr@2
   259
//		....
williamr@2
   260
//		....
williamr@2
   261
//  PID errors
williamr@2
   262
	/** Telematic interworking not supported. */
williamr@2
   263
		ESmsPIDErrorTelematicInterworkingNotSupported=0x80,
williamr@2
   264
	/** Short message Type 0 not supported. */
williamr@2
   265
		ESmsPIDErrorShortMessageType0NotSupported=0x81,
williamr@2
   266
	/** Cannot replace short message. */
williamr@2
   267
		ESmsPIDErrorCannotReplaceShortMessage=0x82,
williamr@2
   268
	/** Reserved. */
williamr@2
   269
		ESmsPIDErrorReserved1=0x83,
williamr@2
   270
	/** Reserved. */
williamr@2
   271
		ESmsPIDErrorReserved2=0x84,
williamr@2
   272
	/** Reserved. */
williamr@2
   273
		ESmsPIDErrorReserved3=0x85,
williamr@2
   274
	/** Reserved. */
williamr@2
   275
		ESmsPIDErrorReserved4=0x86,
williamr@2
   276
	/** Reserved. */
williamr@2
   277
		ESmsPIDErrorReserved5=0x87,
williamr@2
   278
	/** Reserved. */
williamr@2
   279
		ESmsPIDErrorReserved6=0x88,
williamr@2
   280
	/** Reserved. */
williamr@2
   281
		ESmsPIDErrorReserved7=0x89,
williamr@2
   282
	/** Reserved. */
williamr@2
   283
		ESmsPIDErrorReserved8=0x8A,
williamr@2
   284
	/** Reserved. */
williamr@2
   285
		ESmsPIDErrorReserved9=0x8B,
williamr@2
   286
	/** Reserved. */
williamr@2
   287
		ESmsPIDErrorReserved10=0x8C,
williamr@2
   288
	/** Reserved. */
williamr@2
   289
		ESmsPIDErrorReserved11=0x8D,
williamr@2
   290
	/** Reserved. */
williamr@2
   291
		ESmsPIDErrorReserved12=0x8E,
williamr@2
   292
	/** Unspecified TP-PID error. */
williamr@2
   293
		ESmsPIDErrorUnspecified=0x8F,
williamr@2
   294
//  DCS errors
williamr@2
   295
	/** Data coding scheme (alphabet) not supported. */
williamr@2
   296
		ESmsDCSErrorAlphabetNotSupported=0x90,
williamr@2
   297
	/** Message class not supported. */
williamr@2
   298
		ESmsDCSErrorMessageClassNotSupported=0x91,
williamr@2
   299
	/** Reserved. */
williamr@2
   300
		ESmsDCSErrorReserved1=0x92,
williamr@2
   301
	/** Reserved. */
williamr@2
   302
		ESmsDCSErrorReserved2=0x93,
williamr@2
   303
	/** Reserved. */
williamr@2
   304
		ESmsDCSErrorReserved3=0x94,
williamr@2
   305
	/** Reserved. */
williamr@2
   306
		ESmsDCSErrorReserved4=0x95,
williamr@2
   307
	/** Reserved. */
williamr@2
   308
		ESmsDCSErrorReserved5=0x96,
williamr@2
   309
	/** Reserved. */
williamr@2
   310
		ESmsDCSErrorReserved6=0x97,
williamr@2
   311
	/** Reserved. */
williamr@2
   312
		ESmsDCSErrorReserved7=0x98,
williamr@2
   313
	/** Reserved. */
williamr@2
   314
		ESmsDCSErrorReserved8=0x99,
williamr@2
   315
	/** Reserved. */
williamr@2
   316
		ESmsDCSErrorReserved9=0x9A,
williamr@2
   317
	/** Reserved. */
williamr@2
   318
		ESmsDCSErrorReserved10=0x9B,
williamr@2
   319
	/** Reserved. */
williamr@2
   320
		ESmsDCSErrorReserved11=0x9C,
williamr@2
   321
	/** Reserved. */
williamr@2
   322
		ESmsDCSErrorReserved12=0x9D,
williamr@2
   323
	/** Reserved. */
williamr@2
   324
		ESmsDCSErrorReserved13=0x9E,
williamr@2
   325
	/** Reserved. */
williamr@2
   326
		ESmsDCSErrorUnspecified=0x9F,
williamr@2
   327
//  CommandErrors
williamr@2
   328
	/** Command cannot be actioned. */
williamr@2
   329
		ESmsCommandErrorCannotBeActioned=0xA0,
williamr@2
   330
	/** Command unsupported. */
williamr@2
   331
		ESmsCommandErrorUnsupported=0xA1,
williamr@2
   332
	/** Reserved. */
williamr@2
   333
		ESmsCommandErrorReserved1=0xA2,
williamr@2
   334
	/** Reserved. */
williamr@2
   335
		ESmsCommandErrorReserved2=0xA3,
williamr@2
   336
	/** Reserved. */
williamr@2
   337
		ESmsCommandErrorReserved3=0xA4,
williamr@2
   338
	/** Reserved. */
williamr@2
   339
		ESmsCommandErrorReserved4=0xA5,
williamr@2
   340
	/** Reserved. */
williamr@2
   341
		ESmsCommandErrorReserved5=0xA6,
williamr@2
   342
	/** Reserved. */
williamr@2
   343
		ESmsCommandErrorReserved6=0xA7,
williamr@2
   344
	/** Reserved. */
williamr@2
   345
		ESmsCommandErrorReserved7=0xA8,
williamr@2
   346
	/** Reserved. */
williamr@2
   347
		ESmsCommandErrorReserved8=0xA9,
williamr@2
   348
	/** Reserved. */
williamr@2
   349
		ESmsCommandErrorReserved9=0xAA,
williamr@2
   350
	/** Reserved. */
williamr@2
   351
		ESmsCommandErrorReserved10=0xAB,
williamr@2
   352
	/** Reserved. */
williamr@2
   353
		ESmsCommandErrorReserved11=0xAC,
williamr@2
   354
	/** Reserved. */
williamr@2
   355
		ESmsCommandErrorReserved12=0xAD,
williamr@2
   356
	/** Reserved. */
williamr@2
   357
		ESmsCommandErrorReserved13=0xAE,
williamr@2
   358
	/** Unspecified TP-Command error. */
williamr@2
   359
		ESmsCommandErrorUnspecified=0xAF,
williamr@2
   360
//
williamr@2
   361
	/** PDU not supported. */
williamr@2
   362
		ESmsErrorPDUNotSupported=0xB0,
williamr@2
   363
//  Reserved values
williamr@2
   364
//		....
williamr@2
   365
//		....
williamr@2
   366
	/** SC busy. */
williamr@2
   367
		ESmsErrorSCBusy=0xC0,
williamr@2
   368
	/** No SC subscription. */
williamr@2
   369
		ESmsErrorNoSCSubscription=0xC1,
williamr@2
   370
	/** SC system failure. */
williamr@2
   371
		ESmsErrorNoSCSystemFailure=0xC2,
williamr@2
   372
	/** Invalid SME address. */
williamr@2
   373
		ESmsErrorInvalidSMEAddress=0xC3,
williamr@2
   374
	/** Destination SME barred. */
williamr@2
   375
		ESmsErrorDestinationSMEBarred=0xC4,
williamr@2
   376
	/** SM Rejected-Duplicate SM. */
williamr@2
   377
		ESmsErrorSMRejectedDuplicateSM=0xC5,
williamr@2
   378
	/** TP-VPF not supported. */
williamr@2
   379
		ESmsErrorVPFNotSupported=0xC6,
williamr@2
   380
	/** TP-VP not supported. */
williamr@2
   381
		ESmsErrorVPNotSupported=0xC7,
williamr@2
   382
//  Reserved values
williamr@2
   383
//		....
williamr@2
   384
//		....
williamr@2
   385
	/** SIM SMS storage full. */
williamr@2
   386
		ESmsErrorSIMSMSStorageFull=0xD0,
williamr@2
   387
	/** No SMS storage capability in (U)SIM. */
williamr@2
   388
		ESmsErrorNoSMSStorageCapabilityOnSIM=0xD1,
williamr@2
   389
	/** Error in MS. */
williamr@2
   390
		ESmsErrorErrorInMS=0xD2,
williamr@2
   391
	/** Memory Capacity Exceeded. */
williamr@2
   392
		ESmsErrorMemoryCapacityExceded=0xD3,
williamr@2
   393
	/** (U)SIM Application Toolkit Busy. */
williamr@2
   394
		ESmsErrorSIMApplicationToolkitBusy=0xD4,
williamr@2
   395
	/** (U)SIM data download error. */
williamr@2
   396
		ESmsErrorSIMDataDownloadError=0xD5,
williamr@2
   397
//  Reserved values
williamr@2
   398
//		....
williamr@2
   399
//		....
williamr@2
   400
	/** Value specific to an application. */
williamr@2
   401
		ESmsApplicationError1=0xE0,
williamr@2
   402
	/** Value specific to an application. */
williamr@2
   403
		ESmsApplicationError2=0xE1,
williamr@2
   404
	/** Value specific to an application. */
williamr@2
   405
		ESmsApplicationError3=0xE2,
williamr@2
   406
	/** Value specific to an application. */
williamr@2
   407
		ESmsApplicationError4=0xE3,
williamr@2
   408
	/** Value specific to an application. */
williamr@2
   409
		ESmsApplicationError5=0xE4,
williamr@2
   410
	/** Value specific to an application. */
williamr@2
   411
		ESmsApplicationError6=0xE5,
williamr@2
   412
	/** Value specific to an application. */
williamr@2
   413
		ESmsApplicationError7=0xE6,
williamr@2
   414
	/** Value specific to an application. */
williamr@2
   415
		ESmsApplicationError8=0xE7,
williamr@2
   416
	/** Value specific to an application. */
williamr@2
   417
		ESmsApplicationError9=0xE8,
williamr@2
   418
	/** Value specific to an application. */
williamr@2
   419
		ESmsApplicationError10=0xE9,
williamr@2
   420
	/** Value specific to an application. */
williamr@2
   421
		ESmsApplicationError11=0xEA,
williamr@2
   422
	/** Value specific to an application. */
williamr@2
   423
		ESmsApplicationError12=0xEB,
williamr@2
   424
	/** Value specific to an application. */
williamr@2
   425
		ESmsApplicationError13=0xEC,
williamr@2
   426
	/** Value specific to an application. */
williamr@2
   427
		ESmsApplicationError14=0xED,
williamr@2
   428
	/** Value specific to an application. */
williamr@2
   429
		ESmsApplicationError15=0xEE,
williamr@2
   430
	/** Value specific to an application. */
williamr@2
   431
		ESmsApplicationError16=0xEF,
williamr@2
   432
	/** Value specific to an application. */
williamr@2
   433
		ESmsApplicationError17=0xF0,
williamr@2
   434
	/** Value specific to an application. */
williamr@2
   435
		ESmsApplicationError18=0xF1,
williamr@2
   436
	/** Value specific to an application. */
williamr@2
   437
		ESmsApplicationError19=0xF2,
williamr@2
   438
	/** Value specific to an application. */
williamr@2
   439
		ESmsApplicationError20=0xF3,
williamr@2
   440
	/** Value specific to an application. */
williamr@2
   441
		ESmsApplicationError21=0xF4,
williamr@2
   442
	/** Value specific to an application. */
williamr@2
   443
		ESmsApplicationError22=0xF5,
williamr@2
   444
	/** Value specific to an application. */
williamr@2
   445
		ESmsApplicationError23=0xF6,
williamr@2
   446
	/** Value specific to an application. */
williamr@2
   447
		ESmsApplicationError24=0xF7,
williamr@2
   448
	/** Value specific to an application. */
williamr@2
   449
		ESmsApplicationError25=0xF8,
williamr@2
   450
	/** Value specific to an application. */
williamr@2
   451
		ESmsApplicationError26=0xF9,
williamr@2
   452
	/** Value specific to an application. */
williamr@2
   453
		ESmsApplicationError27=0xFA,
williamr@2
   454
	/** Value specific to an application. */
williamr@2
   455
		ESmsApplicationError28=0xFB,
williamr@2
   456
	/** Value specific to an application. */
williamr@2
   457
		ESmsApplicationError29=0xFC,
williamr@2
   458
	/** Value specific to an application. */
williamr@2
   459
		ESmsApplicationError30=0xFD,
williamr@2
   460
	/** Value specific to an application. */
williamr@2
   461
		ESmsApplicationError31=0xFE,
williamr@2
   462
//
williamr@2
   463
	/** Unspecified error cause. */
williamr@2
   464
		ESmsErrorUnspecified=0xFF,
williamr@2
   465
williamr@2
   466
	/**	@internalComponent	*/
williamr@2
   467
		ESmsErrorFree=0x100
williamr@2
   468
		};
williamr@2
   469
public:
williamr@2
   470
	TSmsFailureCause();
williamr@2
   471
	inline TInt Error() const;
williamr@2
   472
	inline void SetError(TSmsFailureCauseError aError);
williamr@2
   473
	};
williamr@2
   474
williamr@2
   475
williamr@2
   476
/**
williamr@2
   477
 *  TP-ST (Status Report) octet. Found in Status Report
williamr@2
   478
 *  @publishedAll
williamr@2
   479
 *  @released
williamr@2
   480
 */
williamr@2
   481
class TSmsStatus : public TSmsOctet
williamr@2
   482
	{
williamr@2
   483
public:
williamr@2
   484
/** TP-ST flag values. */
williamr@2
   485
	enum TSmsStatusValue
williamr@2
   486
		{
williamr@2
   487
//  Short message transaction completed
williamr@2
   488
	/** Short message received by the SME. */
williamr@2
   489
		ESmsShortMessageReceivedBySME=0x00,
williamr@2
   490
	/**
williamr@2
   491
	 *  Short message forwarded by the SC to the SME but the SC is unable to confirm
williamr@2
   492
	 *  	delivery. 
williamr@2
   493
	 */
williamr@2
   494
		ESmsShortMessageForwardedBySCToSMEButUnconfirmedBySC=0x01,
williamr@2
   495
	/** Short message replaced by the SC. */
williamr@2
   496
		ESmsShortMessageReplacedBySC=0x02,
williamr@2
   497
//  Reserved values
williamr@2
   498
//		....
williamr@2
   499
//		....
williamr@2
   500
//  Temporary error, SC still trying to transfer SM
williamr@2
   501
	/** Temporary error, SC still trying to transfer SM: congestion. */
williamr@2
   502
		ESmsTempError1StatusCongestion=0x20,
williamr@2
   503
	/** Temporary error, SC still trying to transfer SM: SME busy. */
williamr@2
   504
		ESmsTempError1StatusSMEBusy=0x21,
williamr@2
   505
	/** Temporary error, SC still trying to transfer SM: No response from SME. */
williamr@2
   506
		ESmsTempError1StatusNoResponseFromSME=0x22,
williamr@2
   507
	/** Temporary error, SC still trying to transfer SM: Service rejected. */
williamr@2
   508
		ESmsTempError1StatusServiceRejected=0x23,
williamr@2
   509
	/** Temporary error, SC still trying to transfer SM: Quality of service not available. */
williamr@2
   510
		ESmsTempError1StatusQualityOfServiceNotAvailable=0x24,
williamr@2
   511
	/** Temporary error, SC still trying to transfer SM: Error in SME. */
williamr@2
   512
		ESmsTempError1StatusErrorInSME=0x25,
williamr@2
   513
//  Reserved values
williamr@2
   514
//		....
williamr@2
   515
//		....
williamr@2
   516
//  Permanent error, SC is not making any more transfer attempts
williamr@2
   517
	/**
williamr@2
   518
	 *  Permanent error, SC is not making any more transfer attempts: Remote procedure
williamr@2
   519
	 *  	error. 
williamr@2
   520
	 */
williamr@2
   521
		ESmsPermErrorRemoteProcedureError=0x40,
williamr@2
   522
	/**
williamr@2
   523
	 *  Permanent error, SC is not making any more transfer attempts: Incompatible
williamr@2
   524
	 *  	destination. 
williamr@2
   525
	 */
williamr@2
   526
		ESmsPermErrorIncompatibleDestination=0x41,
williamr@2
   527
	/**
williamr@2
   528
	 *  Permanent error, SC is not making any more transfer attempts: Connection rejected
williamr@2
   529
	 *  	by SME. 
williamr@2
   530
	 */
williamr@2
   531
		ESmsPermErrorConnectionRejectedBySME=0x42,
williamr@2
   532
	/** Permanent error, SC is not making any more transfer attempts: Not obtainable. */
williamr@2
   533
		ESmsPermErrorNotObtainable=0x43,
williamr@2
   534
	/**
williamr@2
   535
	 *  Permanent error, SC is not making any more transfer attempts: Quality of service
williamr@2
   536
	 *  	not available. 
williamr@2
   537
	 */
williamr@2
   538
		ESmsPermErrorQualityOfServiceNotAvailable2=0x44,
williamr@2
   539
	/**
williamr@2
   540
	 *  Permanent error, SC is not making any more transfer attempts: No interworking
williamr@2
   541
	 *  	available. 
williamr@2
   542
	 */
williamr@2
   543
		ESmsPermErrorNoInterworkingAvailable=0x45,
williamr@2
   544
	/**
williamr@2
   545
	 *  Permanent error, SC is not making any more transfer attempts: SM Validity Period
williamr@2
   546
	 *  	Expired. 
williamr@2
   547
	 */
williamr@2
   548
		ESmsPermErrorSMValidityPeriodExpired=0x46,
williamr@2
   549
	/**
williamr@2
   550
	 *  Permanent error, SC is not making any more transfer attempts: SM Deleted by
williamr@2
   551
	 *  	originating SME. 
williamr@2
   552
	 */
williamr@2
   553
		ESmsPermErrorSMDeletedByOriginatingSME=0x47,
williamr@2
   554
	/**
williamr@2
   555
	 *  Permanent error, SC is not making any more transfer attempts: SM Deleted by
williamr@2
   556
	 *  	SC Administration. 
williamr@2
   557
	 */
williamr@2
   558
		ESmsPermErrorSMDeletedBySCAdministration=0x48,
williamr@2
   559
	/** Permanent error, SC is not making any more transfer attempts: SM does not exist. */
williamr@2
   560
		ESmsPermErrorDoesNotExist=0x49,
williamr@2
   561
//  Reserved values
williamr@2
   562
//		....
williamr@2
   563
//		....
williamr@2
   564
//  Temporary error, SC is not making any more transfer attempts
williamr@2
   565
	/** Temporary error, SC is not making any more transfer attempts: Congestion. */
williamr@2
   566
		ESmsTempError2Congestion=0x60,
williamr@2
   567
	/** Temporary error, SC is not making any more transfer attempts: SME Busy. */
williamr@2
   568
		ESmsTempError2SMEBusy=0x61,
williamr@2
   569
	/**
williamr@2
   570
	 *  Temporary error, SC is not making any more transfer attempts: No response from
williamr@2
   571
	 *  	SME. 
williamr@2
   572
	 */
williamr@2
   573
		ESmsTempError2NoResponseFromSME=0x62,
williamr@2
   574
	/** Temporary error, SC is not making any more transfer attempts: Service rejected. */
williamr@2
   575
		ESmsTempError2ServiceRejected=0x63,
williamr@2
   576
	/**
williamr@2
   577
	 *  Temporary error, SC is not making any more transfer attempts: Quality of service
williamr@2
   578
	 *  	not available. 
williamr@2
   579
	 */
williamr@2
   580
		ESmsTempError2QualityOfServiceNotAvailable=0x64,
williamr@2
   581
	/** Temporary error, SC is not making any more transfer attempts: Error in SME. */
williamr@2
   582
		ESmsTempError2ErrorInSME=0x65,
williamr@2
   583
//  Reserved values
williamr@2
   584
//		....
williamr@2
   585
//		....
williamr@2
   586
		};
williamr@2
   587
public:
williamr@2
   588
	TSmsStatus();
williamr@2
   589
	inline TSmsStatus::TSmsStatusValue Status() const;
williamr@2
   590
	inline void SetStatus(TSmsStatusValue aValue);
williamr@2
   591
	};
williamr@2
   592
williamr@2
   593
williamr@2
   594
/**
williamr@2
   595
 *  TP-PI octet. Found in Reports and Commands
williamr@2
   596
 *  @publishedAll
williamr@2
   597
 *  @released
williamr@2
   598
 */
williamr@2
   599
class TSmsParameterIndicator : public TSmsOctet
williamr@2
   600
	{
williamr@2
   601
public:
williamr@2
   602
/** TP-PI bit flags. */
williamr@2
   603
	enum TSmsPIBits
williamr@2
   604
		{
williamr@2
   605
	/** Protocol identifier present. */
williamr@2
   606
		ESmsPIDProtocolIdentifierPresent=0x01,
williamr@2
   607
	/** Data coding scheme present. */
williamr@2
   608
		ESmsPIDDataCodingSchemePresent=0x02,
williamr@2
   609
	/** User data present. */
williamr@2
   610
		ESmsPIDUserDataPresent=0x04,
williamr@2
   611
	/** Reserved. */
williamr@2
   612
		ESmsPIDReserved1=0x08,
williamr@2
   613
	/** Reserved. */
williamr@2
   614
		ESmsPIDReserved2=0x10,
williamr@2
   615
	/** Reserved. */
williamr@2
   616
		ESmsPIDReserved3=0x20,
williamr@2
   617
	/** Reserved. */
williamr@2
   618
		ESmsPIDReserved4=0x40,
williamr@2
   619
	/** Extension. */
williamr@2
   620
		ESmsPIDExtension=0x80
williamr@2
   621
		};
williamr@2
   622
public:
williamr@2
   623
	TSmsParameterIndicator();
williamr@2
   624
	inline TBool Extension() const;
williamr@2
   625
	inline void SetExtension(TBool aExtension);
williamr@2
   626
	inline TBool UserDataPresent() const;
williamr@2
   627
	inline void SetUserDataPresent(TBool aPresent);
williamr@2
   628
	inline TBool DataCodingSchemePresent() const;
williamr@2
   629
	inline void SetDataCodingSchemePresent(TBool aPresent);
williamr@2
   630
	inline TBool ProtocolIdentifierPresent() const;
williamr@2
   631
	inline void SetProtocolIdentifierPresent(TBool aPresent);
williamr@2
   632
	};
williamr@2
   633
williamr@2
   634
// TSmsPID - conversion (None, Fax, Mail, etc.)
williamr@2
   635
williamr@2
   636
/**
williamr@2
   637
 *  TP-PID PDU octet. Found in ALL 6 message types.
williamr@2
   638
 *  @publishedAll
williamr@2
   639
 *  @released
williamr@2
   640
 */
williamr@2
   641
class TSmsProtocolIdentifier : public TSmsOctet
williamr@2
   642
	{
williamr@2
   643
public:
williamr@2
   644
/** PID bits 7-6, which determine the meaning of the lower order bits. */
williamr@2
   645
	enum TSmsPIDType
williamr@2
   646
		{
williamr@2
   647
	/** Telematic interworking. */
williamr@2
   648
		ESmsPIDTelematicInterworking=0x00,
williamr@2
   649
	/** Short message. */
williamr@2
   650
		ESmsPIDShortMessageType=0x40,
williamr@2
   651
	/** Reserved. */
williamr@2
   652
		ESmsPIDReserved=0x80,
williamr@2
   653
	/** SC specific use. */
williamr@2
   654
		ESmsPIDSCSpecificUse=0xC0,
williamr@2
   655
williamr@2
   656
	/** Mask of bits 7-6. */
williamr@2
   657
		ESmsPIDTypeMask=0xC0
williamr@2
   658
		};
williamr@2
   659
williamr@2
   660
/** Telematic device indicator flags. Bit 5 - When Bit 7 = 0, Bit 6 = 0 */
williamr@2
   661
	enum TSmsTelematicDeviceIndicator
williamr@2
   662
		{
williamr@2
   663
	/** No telematic device. */
williamr@2
   664
		ESmsNoTelematicDevice=0x00,
williamr@2
   665
	/** Telematic device. */
williamr@2
   666
		ESmsTelematicDevice=0x20,
williamr@2
   667
williamr@2
   668
	/** Telematic device indicator mask. */
williamr@2
   669
		EPIDTelematicDeviceIndicatorMask=0x20
williamr@2
   670
		};
williamr@2
   671
williamr@2
   672
/** Telematic Interworking device type flags. Bits 4-0 - When Bit 5 = 1*/
williamr@2
   673
	enum TSmsTelematicDeviceType
williamr@2
   674
		{
williamr@2
   675
	/** Device type is specific to this SC. */
williamr@2
   676
		ESmsSCSpecificDevice=0x00,
williamr@2
   677
	/** Telex. */
williamr@2
   678
		ESmsTelex=0x01,
williamr@2
   679
	/** Group 3 telefax. */
williamr@2
   680
		ESmsGroup3TeleFax=0x02,
williamr@2
   681
	/** Group 4 telefax. */
williamr@2
   682
		ESmsGroup4TeleFax=0x03,
williamr@2
   683
	/** Voice telephone. */
williamr@2
   684
		ESmsVoiceTelephone=0x04,
williamr@2
   685
	/** ERMES. */
williamr@2
   686
		ESmsERMES=0x05,
williamr@2
   687
	/** National Paging System. */
williamr@2
   688
		ESmsNationalPagingSystem=0x06,
williamr@2
   689
	/** Videotex. */
williamr@2
   690
		ESmsVideotex=0x07,
williamr@2
   691
	/** Teletex, carrier unspecified. */
williamr@2
   692
		ESmsTeletexCarrierUnspecified=0x08,
williamr@2
   693
	/** Teletex, PSPDN. */
williamr@2
   694
		ESmsTeletexPSPDN=0x09,
williamr@2
   695
	/** Teletex, CSPDN. */
williamr@2
   696
		ESmsTeletexCSPDN=0x0A,
williamr@2
   697
	/** Teletex, in analog PSTN. */
williamr@2
   698
		ESmsTeletexAnaloguePSTN=0x0B,
williamr@2
   699
	/** Teletex, in digital ISDN */
williamr@2
   700
		ESmsTeletexDigitalISDN=0x0C,
williamr@2
   701
	/** UCI (Universal Computer Interface, ETSI DE/PS 3 01-3). */
williamr@2
   702
		ESmsUCI=0x0D,
williamr@2
   703
	/** Reserved. */
williamr@2
   704
		ESmsReserved1=0x0E,
williamr@2
   705
	/** Reserved. */
williamr@2
   706
		ESmsReserved2=0x0F,
williamr@2
   707
	/** A message handling facility. */
williamr@2
   708
		ESmsMessageHandlingFacility=0x10,
williamr@2
   709
	/** X.400 message handling system. */
williamr@2
   710
		ESmsX400MessageHandlingSystem=0x11,
williamr@2
   711
	/** Internet Electronic Mail. */
williamr@2
   712
		ESmsInternetElectronicMail=0x12,
williamr@2
   713
	/** Reserved. */
williamr@2
   714
		ESmsReserved3=0x13,
williamr@2
   715
	/** Reserved. */
williamr@2
   716
		ESmsReserved4=0x14,
williamr@2
   717
	/** Reserved. */
williamr@2
   718
		ESmsReserved5=0x15,
williamr@2
   719
	/** Reserved. */
williamr@2
   720
		ESmsReserved6=0x16,
williamr@2
   721
	/** Reserved. */
williamr@2
   722
		ESmsReserved7=0x17,
williamr@2
   723
	/** Value specific to each SC. */
williamr@2
   724
		ESmsSCSpecific1=0x18,
williamr@2
   725
	/** Value specific to each SC. */
williamr@2
   726
		ESmsSCSpecific2=0x19,
williamr@2
   727
	/** Value specific to each SC. */
williamr@2
   728
		ESmsSCSpecific3=0x1A,
williamr@2
   729
	/** Value specific to each SC. */
williamr@2
   730
		ESmsSCSpecific4=0x1B,
williamr@2
   731
	/** Value specific to each SC. */
williamr@2
   732
		ESmsSCSpecific5=0x1C,
williamr@2
   733
	/** Value specific to each SC. */
williamr@2
   734
		ESmsSCSpecific6=0x1D,
williamr@2
   735
	/** Value specific to each SC. */
williamr@2
   736
		ESmsSCSpecific7=0x1E,
williamr@2
   737
	/** Value specific to each SC. */
williamr@2
   738
		ESmsGsmMobileStation=0x1F,
williamr@2
   739
williamr@2
   740
	/** Mask for telematic device type bits. */
williamr@2
   741
		ESmsTelematicDeviceTypeMask=0x1F
williamr@2
   742
		};
williamr@2
   743
williamr@2
   744
/** SM-AL protocol flag. No Telematic Interworking. Bits 4-0 - When Bit 5 = 0*/
williamr@2
   745
	enum TSmsShortMessageALProtocol
williamr@2
   746
		{
williamr@2
   747
	/** Mask for SM-AL protocol flag bit. */
williamr@2
   748
		ESmsShortMessageALProtocolMask=0x0F
williamr@2
   749
		};
williamr@2
   750
williamr@2
   751
/** Short Message Type flags. Bits 5-0 - When Bit 7 = 1, Bit 6 = 0*/
williamr@2
   752
	enum TSmsShortMessageType
williamr@2
   753
		{
williamr@2
   754
	/** Short Message Type 0. */
williamr@2
   755
		ESmsShortMessageType0=0x00,
williamr@2
   756
	/** Replace Short Message Type 1. */
williamr@2
   757
		ESmsReplaceShortMessageType1=0x01,
williamr@2
   758
	/** Replace Short Message Type 2. */
williamr@2
   759
		ESmsReplaceShortMessageType2=0x02,
williamr@2
   760
	/** Replace Short Message Type 3. */
williamr@2
   761
		ESmsReplaceShortMessageType3=0x03,
williamr@2
   762
	/** Replace Short Message Type 4. */
williamr@2
   763
		ESmsReplaceShortMessageType4=0x04,
williamr@2
   764
	/** Replace Short Message Type 5. */
williamr@2
   765
		ESmsReplaceShortMessageType5=0x05,
williamr@2
   766
	/** Replace Short Message Type 6. */
williamr@2
   767
		ESmsReplaceShortMessageType6=0x06,
williamr@2
   768
	/** Replace Short Message Type 7. */
williamr@2
   769
		ESmsReplaceShortMessageType7=0x07,
williamr@2
   770
//  Reserved values
williamr@2
   771
//		....
williamr@2
   772
//		....
williamr@2
   773
	/** Return Call Message. */
williamr@2
   774
		ESmsReturnCallMesage=0x1F,
williamr@2
   775
//  Reserved values
williamr@2
   776
//		....
williamr@2
   777
//		....
williamr@2
   778
		ESmsAnsi136RData=0x3C,
williamr@2
   779
 		ESmsMEDataDownload=0x3D,
williamr@2
   780
	/** ME De-personalization Short Message. */
williamr@2
   781
		ESmsMEDepersonalizationShortMessage=0x3E,
williamr@2
   782
	/** ME Data download. */
williamr@2
   783
		ESmsSIMDataDownLoad=0x3F,
williamr@2
   784
williamr@2
   785
//		ESmsShortMessageTypeMask=0x1F
williamr@2
   786
	/** Mask for Short Message type bits. */
williamr@2
   787
		ESmsShortMessageTypeMask=0x3F
williamr@2
   788
		};
williamr@2
   789
public:
williamr@2
   790
	TSmsProtocolIdentifier();
williamr@2
   791
	inline TSmsPIDType PIDType() const;
williamr@2
   792
	inline void SetPIDType(TSmsPIDType aSmsPIDType);
williamr@2
   793
	TSmsTelematicDeviceIndicator TelematicDeviceIndicator() const;
williamr@2
   794
	void SetTelematicDeviceIndicator(TSmsTelematicDeviceIndicator aIndicator);
williamr@2
   795
	TSmsTelematicDeviceType TelematicDeviceType() const;
williamr@2
   796
	void SetTelematicDeviceType(TSmsTelematicDeviceType aDeviceType);
williamr@2
   797
	TInt ShortMessageALProtocol() const;
williamr@2
   798
	void SetShortMessageALProtocol(TSmsShortMessageALProtocol aProtocol);
williamr@2
   799
	TInt ShortMessageType() const;
williamr@2
   800
	void SetShortMessageType(TSmsShortMessageType aShortMessageType);
williamr@2
   801
	};
williamr@2
   802
williamr@2
   803
williamr@2
   804
/**
williamr@2
   805
 *  TP-DCS Data Coding Scheme defined in 3GPP TS 23.038.
williamr@2
   806
 *  
williamr@2
   807
 *  The data coding scheme is not always present in an GSM SMS PDU (CSmsPDU).
williamr@2
   808
 *  It is always present for a SUBMIT (CSmsSubmit) and a DELIVER (CSmsDeliver),
williamr@2
   809
 *  and is sometimes present for a DELIVER REPORT (CSmsDeliverReport), a SUBMIT
williamr@2
   810
 *  REPORT (CSmsSubmitReport) or a STATUS REPORT (CSmsStatusReport), depending
williamr@2
   811
 *  on the parameter indicator (TSmsParameterIndicator).
williamr@2
   812
 *  @publishedAll
williamr@2
   813
 *  @released 
williamr@2
   814
 */
williamr@2
   815
class TSmsDataCodingScheme : public TSmsOctet
williamr@2
   816
	{
williamr@2
   817
public:
williamr@2
   818
/** Flags for bits 7-4, which determine the meaning of the lower order bits. */
williamr@2
   819
	enum TSmsDCSBits7To4
williamr@2
   820
		{
williamr@2
   821
	/** Text is uncompressed, no class information. */
williamr@2
   822
		ESmsDCSTextUncompressedWithNoClassInfo=0x00,
williamr@2
   823
	/** Text is uncompressed, class information present. */
williamr@2
   824
		ESmsDCSTextUncompressedWithClassInfo=0x10,
williamr@2
   825
	/** Text is compressed, no class information. */
williamr@2
   826
		ESmsDCSTextCompressedWithNoClassInfo=0x20,
williamr@2
   827
	/** Text is compressed, class information present. */
williamr@2
   828
		ESmsDCSTextCompressedWithClassInfo=0x30,
williamr@2
   829
williamr@2
   830
	/** Auto Deletion, Text is uncompressed, no class information. */
williamr@2
   831
		ESmsDCSAutoDelNoClassInfoUncompressedText=0x40,
williamr@2
   832
	/** Auto Deletion, Text is uncompressed, class information present. */
williamr@2
   833
		ESmsDCSAutoDelClassInfoUncompressedText=0x50,
williamr@2
   834
	/** Auto Deletion, Text is compressed, no class information. */
williamr@2
   835
		ESmsDCSAutoDelNoClassInfoCompressedText=0x60,
williamr@2
   836
	/** Auto Deletion, Text is compressed, class information present. */
williamr@2
   837
		ESmsDCSAutoDelClassInfoTextCompressedText=0x70,
williamr@2
   838
williamr@2
   839
	/** Reserved. */
williamr@2
   840
		ESmsDCSReserved1=0x40,
williamr@2
   841
	/** Reserved. */
williamr@2
   842
		ESmsDCSReserved2=0x50,
williamr@2
   843
	/** Reserved. */
williamr@2
   844
		ESmsDCSReserved3=0x60,
williamr@2
   845
	/** Reserved. */
williamr@2
   846
		ESmsDCSReserved4=0x70,
williamr@2
   847
	/** Reserved. */
williamr@2
   848
		ESmsDCSReserved5=0x80,
williamr@2
   849
	/** Reserved. */
williamr@2
   850
		ESmsDCSReserved6=0x90,
williamr@2
   851
	/** Reserved. */
williamr@2
   852
		ESmsDCSReserved7=0xA0,
williamr@2
   853
	/** Reserved. */
williamr@2
   854
		ESmsDCSReserved8=0xB0,
williamr@2
   855
williamr@2
   856
williamr@2
   857
williamr@2
   858
	/** Message Waiting Indication Group: Discard Message. */
williamr@2
   859
		ESmsDCSMessageWaitingIndicationDiscardMessage=0xC0,
williamr@2
   860
williamr@2
   861
	/** Message Waiting Indication Group (7 bit). */
williamr@2
   862
		ESmsDCSMessageWaitingIndication7Bit=0xD0,  //  7 bit User data
williamr@2
   863
	/** Message Waiting Indication Group (UCS2). */
williamr@2
   864
		ESmsDCSMessageWaitingIndicationUCS2=0xE0,  //  unicode User data
williamr@2
   865
williamr@2
   866
	/** Text uncompressed, 7 bit or 8 bit. */
williamr@2
   867
		ESmsDCSTextUncompressed7BitOr8Bit=0xF0,
williamr@2
   868
williamr@2
   869
	/** Masks bits 7 to 4. */
williamr@2
   870
		ESmsDCSBits7To4Mask=0xF0
williamr@2
   871
		};
williamr@2
   872
williamr@2
   873
/** Message Marked for Automatic Deletion */
williamr@2
   874
    enum TAutomaticDeletionGroup
williamr@2
   875
        {
williamr@2
   876
        ESmsDCSAutomaticDeletion     = 0x40,
williamr@2
   877
        ESmsDCSAutomaticDeletionMask = 0xC0
williamr@2
   878
        };
williamr@2
   879
williamr@2
   880
/** Alphabet bit flags. */
williamr@2
   881
	enum TSmsAlphabet
williamr@2
   882
		{
williamr@2
   883
	/** GSM 7 bit default alphabet. */
williamr@2
   884
		ESmsAlphabet7Bit=0x00,
williamr@2
   885
	/** 8-bit data. */
williamr@2
   886
		ESmsAlphabet8Bit=0x04,
williamr@2
   887
	/** UCS2. */
williamr@2
   888
		ESmsAlphabetUCS2=0x08,
williamr@2
   889
	/** Reserved. */
williamr@2
   890
		ESmsAlphabetReserved=0x0C,
williamr@2
   891
williamr@2
   892
	/** Mask for these bit flags. */
williamr@2
   893
		ESmsAlphabetMask=0x0C,
williamr@2
   894
		};
williamr@2
   895
/** Message Class bit flags. */
williamr@2
   896
	enum TSmsClass
williamr@2
   897
		{
williamr@2
   898
	/** Class 0. */
williamr@2
   899
		ESmsClass0=0x00,
williamr@2
   900
	/** Class 1. */
williamr@2
   901
		ESmsClass1=0x01,
williamr@2
   902
	/** Class 2. */
williamr@2
   903
		ESmsClass2=0x02,
williamr@2
   904
	/** Class 3. */
williamr@2
   905
		ESmsClass3=0x03,
williamr@2
   906
williamr@2
   907
	/** Mask for these bit flags. */
williamr@2
   908
		ESmsClassMask=0x03,
williamr@2
   909
		};
williamr@2
   910
williamr@2
   911
/** Indication Sense bit flags. */
williamr@2
   912
	enum TSmsIndicationState
williamr@2
   913
		{
williamr@2
   914
	/** Indication inactive. */
williamr@2
   915
		ESmsIndicationInactive=0x00,
williamr@2
   916
	/** Indication active. */
williamr@2
   917
		ESmsIndicationActive=0x08,
williamr@2
   918
williamr@2
   919
	/** Mask for these bit flags. */
williamr@2
   920
		ESmsIndicationStateMask=0x08
williamr@2
   921
		};
williamr@2
   922
/** Indication Type bit flags. */
williamr@2
   923
	enum TSmsIndicationType
williamr@2
   924
		{
williamr@2
   925
	/** Voicemail Message Waiting. */
williamr@2
   926
		ESmsVoicemailMessageWaiting=0x00,
williamr@2
   927
	/** Fax Message Waiting. */
williamr@2
   928
		ESmsFaxMessageWaiting=0x01,
williamr@2
   929
	/** Electronic Mail Message Waiting. */
williamr@2
   930
		ESmsElectronicMailMessageWaiting=0x02,
williamr@2
   931
	/** Other Message Waiting. */
williamr@2
   932
		ESmsFaxOtherMessageWaiting=0x03,
williamr@2
   933
williamr@2
   934
	/** Mask for these bit flags. */
williamr@2
   935
		ESmsIndicationTypeMask=0x03
williamr@2
   936
		};
williamr@2
   937
williamr@2
   938
public:
williamr@2
   939
	TSmsDataCodingScheme();
williamr@2
   940
	inline TSmsDCSBits7To4 Bits7To4() const;
williamr@2
   941
	inline void SetBits7To4(TSmsDCSBits7To4 aBits7To4);
williamr@2
   942
//  Normal SMS settings
williamr@2
   943
	TBool TextCompressed() const;
williamr@2
   944
	void SetTextCompressed(TBool aCompressed);
williamr@2
   945
	TSmsAlphabet Alphabet() const;
williamr@2
   946
	void SetAlphabet(TSmsAlphabet aAlphabet);
williamr@2
   947
	TBool Class(TSmsClass& aClass) const;
williamr@2
   948
	void SetClass(TBool aClassDefined,TSmsClass aClass);
williamr@2
   949
//  Message waiting settings
williamr@2
   950
	TSmsIndicationState IndicationState() const;
williamr@2
   951
	void SetIndicationState(TSmsIndicationState aState);
williamr@2
   952
	TSmsIndicationType IndicationType() const;
williamr@2
   953
	void SetIndicationType(TSmsIndicationType aType);
williamr@2
   954
	};
williamr@2
   955
williamr@2
   956
williamr@2
   957
/**
williamr@2
   958
 *  Specifies alternative 7bit encoding combinations to use if the default
williamr@2
   959
 *  GSM encoding cannot encode the message as 7bit without data loss.
williamr@2
   960
 * 
williamr@2
   961
 *  @publishedAll
williamr@2
   962
 *  @released 
williamr@2
   963
 */
williamr@2
   964
enum TSmsEncoding
williamr@2
   965
	{
williamr@2
   966
	/** Default value meaning that no alternative encoding would be used. */
williamr@2
   967
	ESmsEncodingNone = 0,
williamr@2
   968
	
williamr@2
   969
	/**
williamr@2
   970
	 *  Allows the use of the Turkish Single Shift table in place of the
williamr@2
   971
	 *  default GSM shift table.
williamr@2
   972
	 * 
williamr@2
   973
	 *  @note If used during encoding there will be a 3 octet cost in the User Data
williamr@2
   974
	 *        Header.
williamr@2
   975
	 */
williamr@2
   976
	ESmsEncodingTurkishSingleShift = 0x11,
williamr@2
   977
williamr@2
   978
	/**
williamr@2
   979
	 *  Allows the use of the Turkish Locking Shift table in place of the
williamr@2
   980
	 *  default GSM alphabet table.
williamr@2
   981
	 * 
williamr@2
   982
	 *  @note If used during encoding there will be a 3 octet cost in the User Data
williamr@2
   983
	 *        Header.
williamr@2
   984
	 *  @note This encoding should only be used if the relevant national
williamr@2
   985
	 *        regulatory body has requested its use.
williamr@2
   986
	 */
williamr@2
   987
	ESmsEncodingTurkishLockingShift	= 0x12,
williamr@2
   988
williamr@2
   989
    /**
williamr@2
   990
     *  Allows the use of the Turkish Locking Shift and/or the Turkish Single
williamr@2
   991
     *  Shift tables in place of the default GSM alphabet and shift tables.
williamr@2
   992
	 * 
williamr@2
   993
	 *  @note If used during encoding there will be a 3 or 6 octet cost in the User Data
williamr@2
   994
	 *        Header.
williamr@2
   995
	 *  @note This encoding should only be used if the relevant national
williamr@2
   996
	 *        regulatory body has requested its use.
williamr@2
   997
	 */
williamr@2
   998
	ESmsEncodingTurkishLockingAndSingleShift = 0x13,
williamr@2
   999
williamr@2
  1000
	/**
williamr@2
  1001
	 *  Allows the use of the Spanish Single Shift table in place of the
williamr@2
  1002
	 *  default GSM shift table.
williamr@2
  1003
	 * 
williamr@2
  1004
	 *  @note If used during encoding there will be a 3 octet cost in the User Data
williamr@2
  1005
	 *        Header.
williamr@2
  1006
	 */
williamr@2
  1007
	ESmsEncodingSpanishSingleShift = 0x21,
williamr@2
  1008
williamr@2
  1009
	/**
williamr@2
  1010
	 *  Allows the use of the Portuguese Single Shift table in place of the
williamr@2
  1011
	 *  default GSM shift table.
williamr@2
  1012
	 * 
williamr@2
  1013
	 *  @note If used during encoding there will be a 3 octet cost in the User Data
williamr@2
  1014
	 *        Header.
williamr@2
  1015
	 */
williamr@2
  1016
	ESmsEncodingPortugueseSingleShift = 0x31,
williamr@2
  1017
williamr@2
  1018
	/**
williamr@2
  1019
	 *  Allows the use of the Portuguese Locking Shift table in place of the
williamr@2
  1020
	 *  default GSM alphabet table.
williamr@2
  1021
	 * 
williamr@2
  1022
	 *  @note If used during encoding there will be a 3 octet cost in the User Data
williamr@2
  1023
	 *        Header.
williamr@2
  1024
	 *  @note This encoding should only be used if the relevant national
williamr@2
  1025
	 *        regulatory body has requested its use.
williamr@2
  1026
	 */
williamr@2
  1027
	ESmsEncodingPortugueseLockingShift = 0x32,
williamr@2
  1028
williamr@2
  1029
    /**
williamr@2
  1030
     *  Allows the use of the Portuguese Locking Shift and/or the Portuguese Single
williamr@2
  1031
     *  Shift tables in place of the default GSM alphabet and shift tables.
williamr@2
  1032
	 * 
williamr@2
  1033
	 *  @note If used during encoding there will be a 3 or 6 octet cost in the User Data
williamr@2
  1034
	 *        Header.
williamr@2
  1035
	 *  @note This encoding should only be used if the relevant national
williamr@2
  1036
	 *        regulatory body has requested its use.
williamr@2
  1037
	 */
williamr@2
  1038
	ESmsEncodingPortugueseLockingAndSingleShift = 0x33
williamr@2
  1039
	};
williamr@2
  1040
williamr@2
  1041
williamr@2
  1042
/**
williamr@2
  1043
 *  GSM National Language Identifiers.
williamr@2
  1044
 * 
williamr@2
  1045
 *  @publishedAll
williamr@2
  1046
 *  @released 
williamr@2
  1047
 */
williamr@2
  1048
enum TSmsNationalLanguageIdentifier
williamr@2
  1049
	{
williamr@2
  1050
	/** Turkish. */
williamr@2
  1051
	ESmsNationalLanguageIdentifierTurkish = 1,
williamr@2
  1052
williamr@2
  1053
	/** Spanish. */
williamr@2
  1054
	ESmsNationalLanguageIdentifierSpanish = 2,
williamr@2
  1055
williamr@2
  1056
	/** Portuguese. */
williamr@2
  1057
	ESmsNationalLanguageIdentifierPortuguese = 3
williamr@2
  1058
	};
williamr@2
  1059
williamr@2
  1060
williamr@2
  1061
/**
williamr@2
  1062
 *  Utility to provide piecewise character set conversion to / from unpacked user
williamr@2
  1063
 *  data elements.
williamr@2
  1064
 *  @publishedAll
williamr@2
  1065
 *  @released 
williamr@2
  1066
 */
williamr@2
  1067
class CSmsAlphabetConverter : public CBase
williamr@2
  1068
	{
williamr@2
  1069
public:
williamr@2
  1070
// Construction and destruction methods
williamr@2
  1071
	IMPORT_C static CSmsAlphabetConverter* NewLC(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsDataCodingScheme::TSmsAlphabet aSmsAlphabet,TBool aIsBinary);
williamr@2
  1072
	IMPORT_C ~CSmsAlphabetConverter();
williamr@2
  1073
williamr@2
  1074
// Enumerated types and structs
williamr@2
  1075
/**
williamr@2
  1076
 *  Indicates whether there is a fixed relationship between the number of characters
williamr@2
  1077
 *  and user data elements.
williamr@2
  1078
 *  
williamr@2
  1079
 *  For example, Unicode characters always map to a single SMS UCS2 character,
williamr@2
  1080
 *  while a Unicode character might map to one, two or more SMS 7-bit User Data
williamr@2
  1081
 *  Elements (extended 7-bit characters). 
williamr@2
  1082
 */
williamr@2
  1083
	enum TSmsAlphabetWidthConversion
williamr@2
  1084
		{
williamr@2
  1085
	/** Fixed relationship. */
williamr@2
  1086
		ESmsAlphabetWidthConversionFixed,
williamr@2
  1087
	/** Variable relationship. */
williamr@2
  1088
		ESmsAlphabetWidthConversionVariable
williamr@2
  1089
		};
williamr@2
  1090
williamr@2
  1091
	struct TSmsAlphabetConversionProperties
williamr@2
  1092
/**
williamr@2
  1093
 *  Holds the number of user data elements required for conversion from a single
williamr@2
  1094
 *  native character.
williamr@2
  1095
 *  
williamr@2
  1096
 *  This value is applicable only if the iWidthConversion parameter is ESmsAlphabetWidthConversionFixed. 
williamr@2
  1097
 */
williamr@2
  1098
		{
williamr@2
  1099
	/** Alphabet width conversion. */
williamr@2
  1100
		TSmsAlphabetWidthConversion iWidthConversion;
williamr@2
  1101
	/** Number of user data elements required for conversion from a single native character */
williamr@2
  1102
		TInt iUDElementsPerNativeCharacter;
williamr@2
  1103
		};
williamr@2
  1104
williamr@2
  1105
public:
williamr@2
  1106
// Conversion methods
williamr@2
  1107
	void ConversionPropertiesL(TSmsAlphabetConversionProperties& aConversionProperties) const;
williamr@2
  1108
	IMPORT_C TPtrC8 ConvertFromNativeL(const TDesC& aNativeCharacters);
williamr@2
  1109
	IMPORT_C TPtrC8 ConvertFromNativeL(const TDesC& aNativeCharacters,
williamr@2
  1110
	                                   TSmsEncoding aEncoding,
williamr@2
  1111
	                                   TInt& aNumberOfUnconvertibleCharacters,
williamr@2
  1112
	                                   TInt& aNumberOfDowngradedCharacters);
williamr@2
  1113
	IMPORT_C TPtrC ConvertToNativeL(const TDesC8& aUDElements);
williamr@2
  1114
	IMPORT_C TPtrC ConvertToNativeL(const TDesC8& aUDElements, TSmsEncoding aEncoding);
williamr@2
  1115
williamr@2
  1116
	TBool IsSupportedL(TChar aChar);
williamr@2
  1117
	TBool IsSupportedL(const TDesC& aDes, TInt& aNumberOfUnconvertibleCharacters,
williamr@2
  1118
			           TInt& aIndexOfFirstUnconvertibleCharacter);
williamr@2
  1119
williamr@2
  1120
	TBool IsSupportedL(TChar aChar, TSmsEncoding aEncoding, TBool& aIsDowngrade,
williamr@2
  1121
			           TBool& aRequiresAlternativeEncoding);
williamr@2
  1122
	TBool IsSupportedL(const TDesC& aDes, TSmsEncoding aEncoding,
williamr@2
  1123
			           TInt& aNumberOfUnconvertibleCharacters,
williamr@2
  1124
			           TInt& aNumberOfDowngradedCharacters,
williamr@2
  1125
			           TInt& aNumberRequiringAlternativeEncoding,
williamr@2
  1126
			           TInt& aIndexOfFirstUnconvertibleCharacter);
williamr@2
  1127
	
williamr@2
  1128
// Alternative Encoding methods
williamr@2
  1129
	TSmsEncoding FindBestAlternativeEncodingL(const TDesC& aNativeCharacters,
williamr@2
  1130
											  TSmsEncoding aSuggestedEncoding);
williamr@2
  1131
	void ConfirmAlternativeEncoderL(TSmsEncoding aEncoding) const;
williamr@2
  1132
	
williamr@2
  1133
// Unconverted buffer methods
williamr@2
  1134
	inline void ResetUnconvertedNativeCharacters();
williamr@2
  1135
	inline void ResetUnconvertedUDElements();
williamr@2
  1136
	inline TPtrC UnconvertedNativeCharacters();
williamr@2
  1137
	inline TPtrC8 UnconvertedUDElements();
williamr@2
  1138
williamr@2
  1139
// Getter / setters
williamr@2
  1140
	inline TSmsDataCodingScheme::TSmsAlphabet Alphabet() const;
williamr@2
  1141
williamr@2
  1142
private:
williamr@2
  1143
// Private construction methods
williamr@2
  1144
	CSmsAlphabetConverter(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsDataCodingScheme::TSmsAlphabet aSmsAlphabet,TBool aIsBinary);
williamr@2
  1145
	void ConstructL();
williamr@2
  1146
williamr@2
  1147
// Private conversion preparation methods
williamr@2
  1148
	void PrepareForConversionFromNativeL(TSmsEncoding aEncoding);
williamr@2
  1149
	void PrepareForConversionToNativeL(TSmsEncoding aEncoding);
williamr@2
  1150
williamr@2
  1151
// Private Alternative Encoding methods
williamr@2
  1152
	void GetAlternativeEncoderIDL(TSmsEncoding aEncoding, TUint& aEncoderID) const;
williamr@2
  1153
williamr@2
  1154
// Private buffer helper methods
williamr@2
  1155
	TPtr16 CheckAllocBufferL(HBufC16** aBuffer,TInt aMaxLength,TInt aUsedLength);
williamr@2
  1156
	TPtr8 CheckAllocBufferL(HBufC8** aBuffer,TInt aMaxLength,TInt aUsedLength);
williamr@2
  1157
williamr@2
  1158
// Private constants
williamr@2
  1159
	enum
williamr@2
  1160
		{
williamr@2
  1161
		KMaxSmsAlphabetConversionRetries=4
williamr@2
  1162
		};
williamr@2
  1163
williamr@2
  1164
	enum
williamr@2
  1165
		{
williamr@2
  1166
		KMinSmsAlphabetConversionAllocIncrement=4
williamr@2
  1167
		};
williamr@2
  1168
williamr@2
  1169
private:
williamr@2
  1170
williamr@2
  1171
	CCnvCharacterSetConverter& iCharacterSetConverter;
williamr@2
  1172
	RFs& iFs;
williamr@2
  1173
	TSmsDataCodingScheme::TSmsAlphabet iSmsAlphabet;
williamr@2
  1174
	TBool iIsBinary;
williamr@2
  1175
	HBufC* iConvertedNativeCharacters;
williamr@2
  1176
	HBufC8* iConvertedUDElements;
williamr@2
  1177
	HBufC* iUnconvertedNativeCharacters;
williamr@2
  1178
	TPtr iUnconvertedNativeCharactersPtr;
williamr@2
  1179
	HBufC8* iUnconvertedUDElements;
williamr@2
  1180
	TPtr8 iUnconvertedUDElementsPtr;
williamr@2
  1181
	};
williamr@2
  1182
williamr@2
  1183
williamr@2
  1184
/** Type-of-number, as defined in ETSI 3GPP TS 23.040. */
williamr@2
  1185
enum TGsmSmsTypeOfNumber
williamr@2
  1186
	{
williamr@2
  1187
	/**
williamr@2
  1188
	 *  Unknown, used when the user or network has no a priori information about the
williamr@2
  1189
	 *  numbering plan.
williamr@2
  1190
	 *  In this case, the Address-Value field is organized according to the network
williamr@2
  1191
	 *  	dialling plan, e.g. prefix or escape digits might be present. 
williamr@2
  1192
	 */
williamr@2
  1193
	EGsmSmsTONUnknown=0x00,
williamr@2
  1194
	/**
williamr@2
  1195
	 *  International number.
williamr@2
  1196
	 *  The international format shall be accepted also when the message is destined
williamr@2
  1197
	 *  	to a recipient in the same country as the MSC or as the SGSN. 
williamr@2
  1198
	 */
williamr@2
  1199
		EGsmSmsTONInternationalNumber=0x10,
williamr@2
  1200
	/**
williamr@2
  1201
	 *  National number.
williamr@2
  1202
	 *  	Prefix or escape digits shall not be included. 
williamr@2
  1203
	 */
williamr@2
  1204
		EGsmSmsTONNationalNumber=0x20,
williamr@2
  1205
	/**
williamr@2
  1206
	 *  Network specific number.
williamr@2
  1207
	 *  Administration/service number specific to the serving network, e.g. used to
williamr@2
  1208
	 *  	access an operator. 
williamr@2
  1209
	 */
williamr@2
  1210
		EGsmSmsTONNetworkSpecificNumber=0x30,
williamr@2
  1211
	/**
williamr@2
  1212
	 *  Subscriber number.
williamr@2
  1213
	 *  Used when a specific short number representation is stored in one or more
williamr@2
  1214
	 *  SCs as part of a higher layer application. (Note that "Subscriber number"
williamr@2
  1215
	 *  	shall only be used in connection with the proper PID referring to this application). 
williamr@2
  1216
	 */
williamr@2
  1217
		EGsmSmsTONSubscriberNumber=0x40,
williamr@2
  1218
	/**
williamr@2
  1219
	 *  Alpha-numeric.
williamr@2
  1220
	 *  	Coded according to 3GPP TS 23.038 - GSM 7-bit default alphabet. 
williamr@2
  1221
	 */
williamr@2
  1222
		EGsmSmsTONAlphaNumeric=0x50,
williamr@2
  1223
		EGsmSmsTONAbbreviatedNumber=0x60,		///< Abbreviated number
williamr@2
  1224
		EGsmSmsTONReserverved=0x70,				///< Reserved for extension
williamr@2
  1225
	};
williamr@2
  1226
williamr@2
  1227
/** Numbering-plan-identification defined in ETSI 3GPP TS 23.040. */
williamr@2
  1228
enum TGsmSmsNumberingPlanIdentification
williamr@2
  1229
	{
williamr@2
  1230
	/** Unknown. */
williamr@2
  1231
	EGsmSmsNPIUnknown=0x00,
williamr@2
  1232
	/** ISDN telephone numbering plan. */
williamr@2
  1233
	EGsmSmsNPIISDNTelephoneNumberingPlan=0x01,
williamr@2
  1234
	/** Data numbering plan. */
williamr@2
  1235
	EGsmSmsNPIDataNumberingPlan=0x03,
williamr@2
  1236
	/** Telex numbering plan. */
williamr@2
  1237
	EGsmSmsNPITelexNumberingPlan=0x04,
williamr@2
  1238
	/** National numbering plan. */
williamr@2
  1239
	EGsmSmsNPINationalNumberingPlan=0x08,
williamr@2
  1240
	/** Private numbering plan. */
williamr@2
  1241
	EGsmSmsNPIPrivateNumberingPlan=0x09,
williamr@2
  1242
	/** ERMES numbering plan. */
williamr@2
  1243
	EGsmSmsNPIERMESNumberingPlan=0x0A,
williamr@2
  1244
	/** Reserved for extension. */
williamr@2
  1245
	EGsmSmsNPIReservedForExtension=0x0F,
williamr@2
  1246
	};
williamr@2
  1247
williamr@2
  1248
williamr@2
  1249
/**
williamr@2
  1250
 *  Type-of-address field defined in ETSI 3GPP TS 23.040
williamr@2
  1251
 *  @publishedAll
williamr@2
  1252
 *  @released
williamr@2
  1253
 */
williamr@2
  1254
class TGsmSmsTypeOfAddress : public TSmsOctet
williamr@2
  1255
	{
williamr@2
  1256
	public:
williamr@2
  1257
williamr@2
  1258
    	enum
williamr@2
  1259
    		{
williamr@2
  1260
    		EGsmSmsFirstBitMask=0x80,
williamr@2
  1261
    		EGsmSmsTONMask=0x70,
williamr@2
  1262
    		EGsmSmsNPIMask=0x0F
williamr@2
  1263
    		};
williamr@2
  1264
williamr@2
  1265
	public:
williamr@2
  1266
williamr@2
  1267
		inline TGsmSmsTypeOfAddress(TInt aValue = EGsmSmsFirstBitMask);
williamr@2
  1268
		inline TGsmSmsTypeOfAddress(TGsmSmsTypeOfNumber aTon, TGsmSmsNumberingPlanIdentification aNPI);
williamr@2
  1269
williamr@2
  1270
		inline TGsmSmsTypeOfNumber TON() const;
williamr@2
  1271
		inline void SetTON(TGsmSmsTypeOfNumber aTON);
williamr@2
  1272
williamr@2
  1273
		inline TGsmSmsNumberingPlanIdentification NPI() const;
williamr@2
  1274
	/**
williamr@2
  1275
	 *  Sets the numbering plan identification.
williamr@2
  1276
	 *  	@param aNPI Numbering plan identification 
williamr@2
  1277
	 */
williamr@2
  1278
		inline void SetNPI(TGsmSmsNumberingPlanIdentification aNPI);
williamr@2
  1279
williamr@2
  1280
	/**
williamr@2
  1281
	 *  Converts type of number and numbering plan identification information from
williamr@2
  1282
	 *  the type of address parameter to the NMobilePhone::TMobileTON and NMobilePhone::TMobileNPI
williamr@2
  1283
	 *  format.
williamr@2
  1284
	 *  
williamr@2
  1285
	 *  @param aTON On return, type of number
williamr@2
  1286
	 *  	@param aNPI On return, numbering plan identification 
williamr@2
  1287
	 */
williamr@2
  1288
		IMPORT_C void ConvertToETelMM(NMobilePhone::TMobileTON& aTON, NMobilePhone::TMobileNPI& aNPI) const;
williamr@2
  1289
	/**
williamr@2
  1290
	 *  Sets type of number and numbering plan identification information from values
williamr@2
  1291
	 *  specified in NMobilePhone::TMobileTON and NMobilePhone::TMobileNPI formats.
williamr@2
  1292
	 *  
williamr@2
  1293
	 *  @param aTON Type of number
williamr@2
  1294
	 *  	@param aNPI Numbering plan identification 
williamr@2
  1295
	 */
williamr@2
  1296
		IMPORT_C void SetFromETelMM(NMobilePhone::TMobileTON aTON, NMobilePhone::TMobileNPI aNPI);
williamr@2
  1297
	};
williamr@2
  1298
williamr@2
  1299
/** Maximum length of a Service Centre address = 21, as defined in ETSI GSM 04.11. */
williamr@2
  1300
const TInt TGsmSmsTelNumberMaxLen = 21;
williamr@2
  1301
williamr@2
  1302
williamr@2
  1303
/**
williamr@2
  1304
 *  Encapsulation of basic address information
williamr@2
  1305
 *  @publishedAll
williamr@2
  1306
 *  @released
williamr@2
  1307
 */
williamr@2
  1308
class TGsmSmsTelNumber
williamr@2
  1309
	{
williamr@2
  1310
	public:
williamr@2
  1311
        /**
williamr@2
  1312
         *  @internalComponent
williamr@2
  1313
         *  If the address is an alphanumeric address,
williamr@2
  1314
         *  it can represent a voice message waiting indicator
williamr@2
  1315
         *  as defined in the Common PCN Handset Specification
williamr@2
  1316
         *  v4.2. The specification allows other indicators
williamr@2
  1317
         *          to be defined in the future.
williamr@2
  1318
         */
williamr@2
  1319
        enum TTypeOfIndicator
williamr@2
  1320
        {
williamr@2
  1321
        EVoiceMessageWaitingIndicator = 0
williamr@2
  1322
        };
williamr@2
  1323
williamr@2
  1324
        private:
williamr@2
  1325
    	enum TCPHSIndicatorTypeByte
williamr@2
  1326
        {
williamr@2
  1327
        ECPSHIndicatorTypeBitMask             = 0x7E,
williamr@2
  1328
        ECPSHVoiceMailId                      = 0x10,
williamr@2
  1329
        ECPHSIndicatorSettingBit              = 0x01,
williamr@2
  1330
        ECPHSVoiceMailSettingSpareBit         = 0x80
williamr@2
  1331
        };
williamr@2
  1332
williamr@2
  1333
        enum TCPHSIndicatorIdByte
williamr@2
  1334
        {
williamr@2
  1335
        ECPSHIndicatorIdBitMask               = 0x7E,
williamr@2
  1336
        ECPSHIndicatorId                      = 0x00,
williamr@2
  1337
        ECPSHIndicatorIdSettingBit            = 0x01,
williamr@2
  1338
        ECTSHVoiceMailIndicatorSpareBit       = 0x80
williamr@2
  1339
        };
williamr@2
  1340
williamr@2
  1341
        enum TCPHSByteIndex
williamr@2
  1342
        {
williamr@2
  1343
        ECPHSLength                   = 0,
williamr@2
  1344
        ECPHSAddressType              = 1,
williamr@2
  1345
        ECPHSAddressIndicatorType     = 2,
williamr@2
  1346
        ECPHSAddressIndicatorId       = 3,
williamr@2
  1347
        ECPHSSizeOfAddressField       = 4
williamr@2
  1348
        };
williamr@2
  1349
williamr@2
  1350
	public:
williamr@2
  1351
		inline   TGsmSmsTelNumber();
williamr@2
  1352
williamr@2
  1353
		IMPORT_C TBool IsInstanceOf(TTypeOfIndicator aType);
williamr@2
  1354
williamr@2
  1355
	public:
williamr@2
  1356
williamr@2
  1357
		TGsmSmsTypeOfAddress iTypeOfAddress;		///< The type-of-address of iTelNumber
williamr@2
  1358
		TBuf<TGsmSmsTelNumberMaxLen> iTelNumber;	///< Telephone number, in format of iTypeOfAddress
williamr@2
  1359
	};
williamr@2
  1360
williamr@2
  1361
williamr@2
  1362
/**
williamr@2
  1363
 *  CSmsAddress - address of the recipient or SC
williamr@2
  1364
 *  @publishedAll
williamr@2
  1365
 *  @released
williamr@2
  1366
 */
williamr@2
  1367
class CSmsAddress : public CBase
williamr@2
  1368
	{
williamr@2
  1369
public:
williamr@2
  1370
	enum
williamr@2
  1371
		{
williamr@2
  1372
		KSmsAddressMaxAddressValueLength=10,// octets
williamr@2
  1373
		KSmsAddressMaxAddressLength = 12 // address length, type and address value
williamr@2
  1374
		};
williamr@2
  1375
public:
williamr@2
  1376
	static CSmsAddress* NewL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
williamr@2
  1377
	~CSmsAddress();
williamr@2
  1378
	TPtrC Address() const;
williamr@2
  1379
	void SetAddressL(const TDesC& aAddress);
williamr@2
  1380
	void ParsedAddress(TGsmSmsTelNumber& aParsedAddress) const;
williamr@2
  1381
	void SetParsedAddressL(const TGsmSmsTelNumber& aParsedAddress);
williamr@2
  1382
williamr@2
  1383
	void SetRawAddressL(TGsmSmsTypeOfAddress aTypeOfAddress, TPtrC aBuffer);
williamr@2
  1384
	TGsmSmsTypeOfAddress& TypeOfAddress();
williamr@2
  1385
williamr@2
  1386
	TUint8 SizeL();
williamr@2
  1387
williamr@2
  1388
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1389
	void DecodeL(TGsmuLex8& aPdu);
williamr@2
  1390
	void InternalizeL(RReadStream& aStream);
williamr@2
  1391
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1392
private:
williamr@2
  1393
	CSmsAddress(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs);
williamr@2
  1394
	void NewBufferL(TInt aLength);
williamr@2
  1395
	void DoSetParsedAddressL(const TDesC& aAddress);
williamr@2
  1396
private:
williamr@2
  1397
williamr@2
  1398
	CCnvCharacterSetConverter& iCharacterSetConverter;
williamr@2
  1399
	RFs& iFs;
williamr@2
  1400
	TGsmSmsTypeOfAddress iTypeOfAddress;
williamr@2
  1401
	HBufC* iBuffer;
williamr@2
  1402
	};
williamr@2
  1403
williamr@2
  1404
williamr@2
  1405
/**
williamr@2
  1406
 *  TP-SCTS Service Center Time Stamp Found in Deliver, Submit Report, Status Report,
williamr@2
  1407
 *  @publishedAll
williamr@2
  1408
 *  @released
williamr@2
  1409
 */
williamr@2
  1410
class TSmsServiceCenterTimeStamp
williamr@2
  1411
	{
williamr@2
  1412
public:
williamr@2
  1413
	enum {KSmsMaxTimeZoneNumQuarterHours=79};
williamr@2
  1414
/** Time zone offset sign bit. */
williamr@2
  1415
	enum TSmsTimeZoneSignBit
williamr@2
  1416
		{
williamr@2
  1417
	/** Positive offset. */
williamr@2
  1418
		ESmsTimeZonePositive=0x00,
williamr@2
  1419
	/** Negative offset. */
williamr@2
  1420
		ESmsTimeZoneNegative=0x08,
williamr@2
  1421
williamr@2
  1422
	/** Mask for these bit flags. */
williamr@2
  1423
		ESmsTimeZoneSignBitMask=0x08
williamr@2
  1424
		};
williamr@2
  1425
public:
williamr@2
  1426
	TSmsServiceCenterTimeStamp();
williamr@2
  1427
	inline TInt TimeOffset() const;
williamr@2
  1428
	void SetTimeOffset(TInt aNumQuarterHours);
williamr@2
  1429
	inline const TTime& Time() const;
williamr@2
  1430
	inline void SetTime(const TTime& aTime);
williamr@2
  1431
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1432
	void DecodeL(TGsmuLex8& aPdu, TInt& aTimeError);
williamr@2
  1433
	void InternalizeL(RReadStream& aStream);
williamr@2
  1434
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1435
private:
williamr@2
  1436
	TTime iTime;
williamr@2
  1437
	TInt iTimeZoneNumQuarterHours;
williamr@2
  1438
	};
williamr@2
  1439
williamr@2
  1440
williamr@2
  1441
/**
williamr@2
  1442
 *  TP-VP Validity Period Found in SUBMIT PDUs.
williamr@2
  1443
 *  
williamr@2
  1444
 *  The validy period format is encoded in the first octet of the PDU, so the
williamr@2
  1445
 *  class takes a reference to a TSmsFirstOctet. The validty period specifies
williamr@2
  1446
 *  the length of time the PDU lives in the service center if the PDU cannot be
williamr@2
  1447
 *  immediately delivered.
williamr@2
  1448
 *  @publishedAll
williamr@2
  1449
 *  @released 
williamr@2
  1450
 */
williamr@2
  1451
class TSmsValidityPeriod
williamr@2
  1452
	{
williamr@2
  1453
public:
williamr@2
  1454
/** Validity period units (in minutes). */
williamr@2
  1455
	enum TValidityPeriodUnitInMinutes
williamr@2
  1456
		{
williamr@2
  1457
	/** Five minutes. */
williamr@2
  1458
		EFiveMinuteUnitInMinutes=5,
williamr@2
  1459
	/** 30 minutes. */
williamr@2
  1460
		EHalfHourUnitInMinutes=30,
williamr@2
  1461
	/** 1 day. */
williamr@2
  1462
		EOneDayUnitInMinutes=1440,
williamr@2
  1463
	/** 1 week. */
williamr@2
  1464
		EOneWeekUnitInMinutes=7*EOneDayUnitInMinutes
williamr@2
  1465
		};
williamr@2
  1466
/** Limits for validity period units (in minutes). */
williamr@2
  1467
	enum TValidityPeriodUnitLimitInMinutes
williamr@2
  1468
		{
williamr@2
  1469
	/** Limit for 5 minute validity period unit. */
williamr@2
  1470
		EFiveMinuteUnitLimitInMinutes=24*EHalfHourUnitInMinutes,
williamr@2
  1471
	/** Limit for 30 minute validity period unit. */
williamr@2
  1472
		EHalfHourUnitLimitInMinutes=EOneDayUnitInMinutes,
williamr@2
  1473
	/** Limit for 1 day validity period unit. */
williamr@2
  1474
		EOneDayUnitLimitInMinutes=30*EOneDayUnitInMinutes,
williamr@2
  1475
	/** Limit for 1 week validity period unit. */
williamr@2
  1476
		EOneWeekUnitLimitInMinutes=63*EOneWeekUnitInMinutes
williamr@2
  1477
		};
williamr@2
  1478
/** Limits for validity period units. */
williamr@2
  1479
	enum TValidityPeriodLimit
williamr@2
  1480
		{
williamr@2
  1481
	/** Limit for 5 minute validity period unit. */
williamr@2
  1482
		EFiveMinuteUnitLimit=143,
williamr@2
  1483
	/** Limit for 30 minute validity period unit. */
williamr@2
  1484
		EHalfHourUnitLimit=167,
williamr@2
  1485
	/** Limit for 1 day validity period unit. */
williamr@2
  1486
		EOneDayUnitLimit=196,
williamr@2
  1487
	/** Limit for 1 week validity period unit. */
williamr@2
  1488
		EOneWeekUnitLimit=255
williamr@2
  1489
		};
williamr@2
  1490
public:
williamr@2
  1491
	TSmsValidityPeriod(TSmsFirstOctet& aFirstOctet);
williamr@2
  1492
	inline TSmsFirstOctet::TSmsValidityPeriodFormat ValidityPeriodFormat() const;
williamr@2
  1493
	inline void SetValidityPeriodFormat(TSmsFirstOctet::TSmsValidityPeriodFormat aValidityPeriodFormat);
williamr@2
  1494
	inline const TTimeIntervalMinutes& TimeIntervalMinutes() const;
williamr@2
  1495
	inline void SetTimeIntervalMinutes(const TTimeIntervalMinutes& aTimeIntervalMinutes);
williamr@2
  1496
	TTime Time() const;
williamr@2
  1497
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1498
	void DecodeL(TGsmuLex8& aPdu);
williamr@2
  1499
	void InternalizeL(RReadStream& aStream);
williamr@2
  1500
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1501
private:
williamr@2
  1502
	TSmsFirstOctet& iFirstOctet;
williamr@2
  1503
	TTimeIntervalMinutes iTimeIntervalMinutes;
williamr@2
  1504
	};
williamr@2
  1505
williamr@2
  1506
class CEmsInformationElement;
williamr@2
  1507
williamr@2
  1508
/**
williamr@2
  1509
 *  SMS element defined in TP-UD octet.
williamr@2
  1510
 *  
williamr@2
  1511
 *  This element is found in Deliver, Deliver Report, Submit, Submit Report, Status
williamr@2
  1512
 *  Report and Command type messages.
williamr@2
  1513
 *  @publishedAll
williamr@2
  1514
 *  @released 
williamr@2
  1515
 */
williamr@2
  1516
class CSmsInformationElement : public CBase
williamr@2
  1517
	{
williamr@2
  1518
public:
williamr@2
  1519
/** TP-UD Information Element Identifier. */
williamr@2
  1520
	enum TSmsInformationElementIdentifier
williamr@2
  1521
		{
williamr@2
  1522
	/** Concatenated short messages, 8-bit reference number. */
williamr@2
  1523
		ESmsIEIConcatenatedShortMessages8BitReference=0x00,
williamr@2
  1524
	/** Special SMS Message Indication. */
williamr@2
  1525
		ESmsIEISpecialSMSMessageIndication=0x01,
williamr@2
  1526
	/** Reserved. */
williamr@2
  1527
		ESmsIEIReserved=0x02,
williamr@2
  1528
	/** Value not used to avoid misinterpretation as line feed character. */
williamr@2
  1529
		ESmsIEIValueNotUsed=0x03,
williamr@2
  1530
	/** Application port addressing scheme, 8 bit address. */
williamr@2
  1531
		ESmsIEIApplicationPortAddressing8Bit=0x04,
williamr@2
  1532
	/** Application port addressing scheme, 16 bit address */
williamr@2
  1533
		ESmsIEIApplicationPortAddressing16Bit=0x05,
williamr@2
  1534
	/** SMSC Control Parameters. */
williamr@2
  1535
		ESmsIEISMSCControlParameters=0x06,
williamr@2
  1536
	/** UDH Source Indicator. */
williamr@2
  1537
		ESmsIEIUDHSourceIndicator=0x07,
williamr@2
  1538
	/** Concatenated short message, 16-bit reference number. */
williamr@2
  1539
		ESmsIEIConcatenatedShortMessages16BitReference=0x08,
williamr@2
  1540
	/** Wireless Control Message Protocol. */
williamr@2
  1541
		ESmsIEIWirelessControlMessageProtocol=0x09,
williamr@2
  1542
		ESmsIEIRFC822EmailHeader=0x20,
williamr@2
  1543
williamr@2
  1544
williamr@2
  1545
//	Enhanced SMS IE
williamr@2
  1546
		ESmsEnhancedTextFormatting=0x0A,
williamr@2
  1547
		ESmsEnhancedPredefinedSound=0x0B,
williamr@2
  1548
		ESmsEnhancedUserDefinedSound=0x0C,
williamr@2
  1549
		ESmsEnhancedPredefinedAnimation=0x0D,
williamr@2
  1550
		ESmsEnhancedLargeAnimation=0x0E,
williamr@2
  1551
		ESmsEnhancedSmallAnimation=0x0F,
williamr@2
  1552
		ESmsEnhancedLargePicture=0x10,
williamr@2
  1553
		ESmsEnhancedSmallPicture=0x11,
williamr@2
  1554
		ESmsEnhancedVariablePicture=0x12,
williamr@2
  1555
		ESmsEnhancedUserPromptIndicator=0x13,
williamr@2
  1556
		ESmsEnhancedExtendedObject=0x14,
williamr@2
  1557
		ESmsEnhancedReusedExtendedObject=0x15,
williamr@2
  1558
		ESmsEnhancedCompressionControl=0x16,
williamr@2
  1559
		ESmsEnhancedODI=0x17,
williamr@2
  1560
		ESmsEnhancedStandardWVG=0x18,
williamr@2
  1561
		ESmsEnhancedCharacterSizeWVG=0x19,
williamr@2
  1562
		ESmsEnhancedextendedObjectDataRequest=0x1A,
williamr@2
  1563
williamr@2
  1564
//  Control Information Elements
williamr@2
  1565
williamr@2
  1566
		ESmsHyperLinkFormat = 0x21,
williamr@2
  1567
		ESmsReplyAddressFormat = 0x22,
williamr@2
  1568
		ESmsEnhanceVoiceMailInformation = 0x23,
williamr@2
  1569
		ESmsNationalLanguageSingleShift = 0x24,
williamr@2
  1570
		ESmsNationalLanguageLockingShift = 0x25,
williamr@2
  1571
williamr@2
  1572
//  Reserved values
williamr@2
  1573
//		....
williamr@2
  1574
//		....
williamr@2
  1575
	/** SIM Toolkit Security Header 1. */
williamr@2
  1576
		ESmsIEISIMToolkitSecurityHeaders1=0x70,
williamr@2
  1577
	/** SIM Toolkit Security Header 2. */
williamr@2
  1578
		ESmsIEISIMToolkitSecurityHeaders2=0x71,
williamr@2
  1579
	/** SIM Toolkit Security Header 3. */
williamr@2
  1580
		ESmsIEISIMToolkitSecurityHeaders3=0x72,
williamr@2
  1581
	/** SIM Toolkit Security Header 4. */
williamr@2
  1582
		ESmsIEISIMToolkitSecurityHeaders4=0x73,
williamr@2
  1583
	/** SIM Toolkit Security Header 5. */
williamr@2
  1584
		ESmsIEISIMToolkitSecurityHeaders5=0x74,
williamr@2
  1585
	/** SIM Toolkit Security Header 6. */
williamr@2
  1586
		ESmsIEISIMToolkitSecurityHeaders6=0x75,
williamr@2
  1587
	/** SIM Toolkit Security Header 7. */
williamr@2
  1588
		ESmsIEISIMToolkitSecurityHeaders7=0x76,
williamr@2
  1589
	/** SIM Toolkit Security Header 8. */
williamr@2
  1590
		ESmsIEISIMToolkitSecurityHeaders8=0x77,
williamr@2
  1591
	/** SIM Toolkit Security Header 9. */
williamr@2
  1592
		ESmsIEISIMToolkitSecurityHeaders9=0x78,
williamr@2
  1593
	/** SIM Toolkit Security Header 10. */
williamr@2
  1594
		ESmsIEISIMToolkitSecurityHeaders10=0x79,
williamr@2
  1595
	/** SIM Toolkit Security Header 11. */
williamr@2
  1596
		ESmsIEISIMToolkitSecurityHeaders11=0x7A,
williamr@2
  1597
	/** SIM Toolkit Security Header 12. */
williamr@2
  1598
		ESmsIEISIMToolkitSecurityHeaders12=0x7B,
williamr@2
  1599
	/** SIM Toolkit Security Header 13. */
williamr@2
  1600
		ESmsIEISIMToolkitSecurityHeaders13=0x7C,
williamr@2
  1601
	/** SIM Toolkit Security Header 14. */
williamr@2
  1602
		ESmsIEISIMToolkitSecurityHeaders14=0x7D,
williamr@2
  1603
	/** SIM Toolkit Security Header 15. */
williamr@2
  1604
		ESmsIEISIMToolkitSecurityHeaders15=0x7E,
williamr@2
  1605
	/** SIM Toolkit Security Header 16. */
williamr@2
  1606
		ESmsIEISIMToolkitSecurityHeaders16=0x7F,
williamr@2
  1607
	/** SME to SME specific use 1. */
williamr@2
  1608
		ESmsIEISMEToSMESpecificUse1=0x80,
williamr@2
  1609
	/** SME to SME specific use 2. */
williamr@2
  1610
		ESmsIEISMEToSMESpecificUse2=0x81,
williamr@2
  1611
	/** SME to SME specific use 3. */
williamr@2
  1612
		ESmsIEISMEToSMESpecificUse3=0x82,
williamr@2
  1613
	/** SME to SME specific use 4. */
williamr@2
  1614
		ESmsIEISMEToSMESpecificUse4=0x83,
williamr@2
  1615
	/** SME to SME specific use 5. */
williamr@2
  1616
		ESmsIEISMEToSMESpecificUse5=0x84,
williamr@2
  1617
	/** SME to SME specific use 6. */
williamr@2
  1618
		ESmsIEISMEToSMESpecificUse6=0x85,
williamr@2
  1619
	/** SME to SME specific use 7. */
williamr@2
  1620
		ESmsIEISMEToSMESpecificUse7=0x86,
williamr@2
  1621
	/** SME to SME specific use 8. */
williamr@2
  1622
		ESmsIEISMEToSMESpecificUse8=0x87,
williamr@2
  1623
	/** SME to SME specific use 9. */
williamr@2
  1624
		ESmsIEISMEToSMESpecificUse9=0x88,
williamr@2
  1625
	/** SME to SME specific use 10. */
williamr@2
  1626
		ESmsIEISMEToSMESpecificUse10=0x89,
williamr@2
  1627
	/** SME to SME specific use 11. */
williamr@2
  1628
		ESmsIEISMEToSMESpecificUse11=0x8A,
williamr@2
  1629
	/** SME to SME specific use 12. */
williamr@2
  1630
		ESmsIEISMEToSMESpecificUse12=0x8B,
williamr@2
  1631
	/** SME to SME specific use 13. */
williamr@2
  1632
		ESmsIEISMEToSMESpecificUse13=0x8C,
williamr@2
  1633
	/** SME to SME specific use 14. */
williamr@2
  1634
		ESmsIEISMEToSMESpecificUse14=0x8D,
williamr@2
  1635
	/** SME to SME specific use 15. */
williamr@2
  1636
		ESmsIEISMEToSMESpecificUse15=0x8E,
williamr@2
  1637
	/** SME to SME specific use 16. */
williamr@2
  1638
		ESmsIEISMEToSMESpecificUse16=0x8F,
williamr@2
  1639
	/** SME to SME specific use 17. */
williamr@2
  1640
		ESmsIEISMEToSMESpecificUse17=0x90,
williamr@2
  1641
	/** SME to SME specific use 18. */
williamr@2
  1642
		ESmsIEISMEToSMESpecificUse18=0x91,
williamr@2
  1643
	/** SME to SME specific use 19. */
williamr@2
  1644
		ESmsIEISMEToSMESpecificUse19=0x92,
williamr@2
  1645
	/** SME to SME specific use 20. */
williamr@2
  1646
		ESmsIEISMEToSMESpecificUse20=0x93,
williamr@2
  1647
	/** SME to SME specific use 21. */
williamr@2
  1648
		ESmsIEISMEToSMESpecificUse21=0x94,
williamr@2
  1649
	/** SME to SME specific use 22. */
williamr@2
  1650
		ESmsIEISMEToSMESpecificUse22=0x95,
williamr@2
  1651
	/** SME to SME specific use 23. */
williamr@2
  1652
		ESmsIEISMEToSMESpecificUse23=0x96,
williamr@2
  1653
	/** SME to SME specific use 24. */
williamr@2
  1654
		ESmsIEISMEToSMESpecificUse24=0x97,
williamr@2
  1655
	/** SME to SME specific use 25. */
williamr@2
  1656
		ESmsIEISMEToSMESpecificUse25=0x98,
williamr@2
  1657
	/** SME to SME specific use 26. */
williamr@2
  1658
		ESmsIEISMEToSMESpecificUse26=0x99,
williamr@2
  1659
	/** SME to SME specific use 27. */
williamr@2
  1660
		ESmsIEISMEToSMESpecificUse27=0x9A,
williamr@2
  1661
	/** SME to SME specific use 28. */
williamr@2
  1662
		ESmsIEISMEToSMESpecificUse28=0x9B,
williamr@2
  1663
	/** SME to SME specific use 29. */
williamr@2
  1664
		ESmsIEISMEToSMESpecificUse29=0x9C,
williamr@2
  1665
	/** SME to SME specific use 30. */
williamr@2
  1666
		ESmsIEISMEToSMESpecificUse30=0x9D,
williamr@2
  1667
	/** SME to SME specific use 31. */
williamr@2
  1668
		ESmsIEISMEToSMESpecificUse31=0x9E,
williamr@2
  1669
	/** SME to SME specific use 32. */
williamr@2
  1670
		ESmsIEISMEToSMESpecificUse32=0x9F,
williamr@2
  1671
//  Reserved values
williamr@2
  1672
//		....
williamr@2
  1673
//		....
williamr@2
  1674
	/** SC specific use 1. */
williamr@2
  1675
		ESmsIEISCSpecificUse1=0xC0,
williamr@2
  1676
	/** SC specific use 2. */
williamr@2
  1677
		ESmsIEISCSpecificUse2=0xC1,
williamr@2
  1678
	/** SC specific use 3. */
williamr@2
  1679
		ESmsIEISCSpecificUse3=0xC2,
williamr@2
  1680
	/** SC specific use 4. */
williamr@2
  1681
		ESmsIEISCSpecificUse4=0xC3,
williamr@2
  1682
	/** SC specific use 5. */
williamr@2
  1683
		ESmsIEISCSpecificUse5=0xC4,
williamr@2
  1684
	/** SC specific use 6. */
williamr@2
  1685
		ESmsIEISCSpecificUse6=0xC5,
williamr@2
  1686
	/** SC specific use 7. */
williamr@2
  1687
		ESmsIEISCSpecificUse7=0xC6,
williamr@2
  1688
	/** SC specific use 8. */
williamr@2
  1689
		ESmsIEISCSpecificUse8=0xC7,
williamr@2
  1690
	/** SC specific use 9. */
williamr@2
  1691
		ESmsIEISCSpecificUse9=0xC8,
williamr@2
  1692
	/** SC specific use 10. */
williamr@2
  1693
		ESmsIEISCSpecificUse10=0xC9,
williamr@2
  1694
	/** SC specific use 11. */
williamr@2
  1695
		ESmsIEISCSpecificUse11=0xCA,
williamr@2
  1696
	/** SC specific use 12. */
williamr@2
  1697
		ESmsIEISCSpecificUse12=0xCB,
williamr@2
  1698
	/** SC specific use 13. */
williamr@2
  1699
		ESmsIEISCSpecificUse13=0xCC,
williamr@2
  1700
	/** SC specific use 14. */
williamr@2
  1701
		ESmsIEISCSpecificUse14=0xCD,
williamr@2
  1702
	/** SC specific use 15. */
williamr@2
  1703
		ESmsIEISCSpecificUse15=0xCE,
williamr@2
  1704
	/** SC specific use 16. */
williamr@2
  1705
		ESmsIEISCSpecificUse16=0xCF,
williamr@2
  1706
	/** SC specific use 17. */
williamr@2
  1707
		ESmsIEISCSpecificUse17=0xD0,
williamr@2
  1708
	/** SC specific use 18. */
williamr@2
  1709
		ESmsIEISCSpecificUse18=0xD1,
williamr@2
  1710
	/** SC specific use 19. */
williamr@2
  1711
		ESmsIEISCSpecificUse19=0xD2,
williamr@2
  1712
	/** SC specific use 20. */
williamr@2
  1713
		ESmsIEISCSpecificUse20=0xD3,
williamr@2
  1714
	/** SC specific use 21. */
williamr@2
  1715
		ESmsIEISCSpecificUse21=0xD4,
williamr@2
  1716
	/** SC specific use 22. */
williamr@2
  1717
		ESmsIEISCSpecificUse22=0xD5,
williamr@2
  1718
	/** SC specific use 23. */
williamr@2
  1719
		ESmsIEISCSpecificUse23=0xD6,
williamr@2
  1720
	/** SC specific use 24. */
williamr@2
  1721
		ESmsIEISCSpecificUse24=0xD7,
williamr@2
  1722
	/** SC specific use 25. */
williamr@2
  1723
		ESmsIEISCSpecificUse25=0xD8,
williamr@2
  1724
	/** SC specific use 26. */
williamr@2
  1725
		ESmsIEISCSpecificUse26=0xD9,
williamr@2
  1726
	/** SC specific use 27. */
williamr@2
  1727
		ESmsIEISCSpecificUse27=0xDA,
williamr@2
  1728
	/** SC specific use 28. */
williamr@2
  1729
		ESmsIEISCSpecificUse28=0xDB,
williamr@2
  1730
	/** SC specific use 29. */
williamr@2
  1731
		ESmsIEISCSpecificUse29=0xDC,
williamr@2
  1732
	/** SC specific use 30. */
williamr@2
  1733
		ESmsIEISCSpecificUse30=0xDD,
williamr@2
  1734
	/** SC specific use 31. */
williamr@2
  1735
		ESmsIEISCSpecificUse31=0xDE,
williamr@2
  1736
	/** SC specific use 32. */
williamr@2
  1737
		ESmsIEISCSpecificUse32=0xDF,
williamr@2
  1738
	/**
williamr@2
  1739
	 *  @internalComponent
williamr@2
  1740
	 */
williamr@2
  1741
		ESmsIEMaximum = 0xFF
williamr@2
  1742
		};
williamr@2
  1743
williamr@2
  1744
public:
williamr@2
  1745
	// Exported functions
williamr@2
  1746
	IMPORT_C TSmsInformationElementIdentifier Identifier() const;
williamr@2
  1747
	IMPORT_C TPtr8 Data();
williamr@2
  1748
	IMPORT_C const TDesC8& Data() const;
williamr@2
  1749
public:
williamr@2
  1750
	static CSmsInformationElement* NewL(TSmsInformationElementIdentifier aIdentifier,const TDesC8& aData);
williamr@2
  1751
	static CSmsInformationElement* NewL();
williamr@2
  1752
	~CSmsInformationElement();
williamr@2
  1753
williamr@2
  1754
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1755
	void DecodeL(TGsmuLex8& aPdu);
williamr@2
  1756
	void InternalizeL(RReadStream& aStream);
williamr@2
  1757
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1758
	void ConstructL(const TDesC8& aData);
williamr@2
  1759
	TUint Length() const;
williamr@2
  1760
protected:
williamr@2
  1761
	void NewDataL(TInt aLength);
williamr@2
  1762
	inline CSmsInformationElement(TSmsInformationElementIdentifier aInformationElementIdentifier);
williamr@2
  1763
protected:
williamr@2
  1764
	TSmsOctet iIdentifier;
williamr@2
  1765
	HBufC8* iData;
williamr@2
  1766
	};
williamr@2
  1767
williamr@2
  1768
williamr@2
  1769
/**
williamr@2
  1770
 *  @internalComponent
williamr@2
  1771
 *  
williamr@2
  1772
 *  TSmsInformationElementCategories
williamr@2
  1773
 *  
williamr@2
  1774
 *  This class specifies where information elements are located SMS Messages.
williamr@2
  1775
 *  
williamr@2
  1776
 *  It specifies which PDUs each information element can be located in.
williamr@2
  1777
 *  
williamr@2
  1778
 *  The SMS stack uses this information when encoding and decoding SMS messages.
williamr@2
  1779
 */
williamr@2
  1780
class TSmsInformationElementCategories
williamr@2
  1781
    {
williamr@2
  1782
public:
williamr@2
  1783
williamr@2
  1784
    // Comment, table approach probably is not necessary here.
williamr@2
  1785
    // Simply use a switch statement as cannot index directly into table.
williamr@2
  1786
williamr@2
  1787
    enum TInformationElementCategory
williamr@2
  1788
    {
williamr@2
  1789
        EEmsInformationElement,
williamr@2
  1790
        ECtrlMandatoryInEveryPDUAndWithIdenticalValues,    // e.g. Port Addresses
williamr@2
  1791
        ECtrlMandatoryInEveryPDUMultipleInstancesPerPDU,   // e.g. Special SMS Message Indication
williamr@2
  1792
        ECtrlMandatoryInEveryPDUButWithValueSpecificToPDU, // e.g. Email Header / Concatenation Elements, SMSC Parameters
williamr@2
  1793
        ECtrlMandatoryIn1stPDUOnly,                        // e.g. Reply Address
williamr@2
  1794
        ECtrlSingleInstanceOnly,                           // e.g. Enhanced Voice Mail
williamr@2
  1795
        ECtrlMultipleInstancesAllowed,                     // e.g. Hyperlink format
williamr@2
  1796
        ENumberOfCategories
williamr@2
  1797
    };
williamr@2
  1798
williamr@2
  1799
typedef CSmsInformationElement::TSmsInformationElementIdentifier TInformationElementId;
williamr@2
  1800
williamr@2
  1801
private:
williamr@2
  1802
    enum TIndexToCategory
williamr@2
  1803
    {
williamr@2
  1804
        EIndexEmsInformationElement,
williamr@2
  1805
        EIndexCtrlMandatoryInEveryPDUAndWithIdenticalValues,
williamr@2
  1806
        EIndexCtrlMandatoryInEveryPDUMultipleInstancesPerPDU,
williamr@2
  1807
        EIndexCtrlMandatoryInEveryPDUButWithValueSpecificToPDU,
williamr@2
  1808
        EIndexCtrlMandatoryIn1stPDUOnly,
williamr@2
  1809
        EIndexCtrlSingleInstanceOnly,
williamr@2
  1810
        EIndexCtrlMultipleInstancesAllowed,
williamr@2
  1811
        EIndexCtrlOptionalInEveryPDUWithValueSpecificToPDU,
williamr@2
  1812
        ENumberOfIndices
williamr@2
  1813
    };
williamr@2
  1814
williamr@2
  1815
public:
williamr@2
  1816
    static TBool GetCategoryDefinition(TInformationElementId aId, TInformationElementCategory& aCategory);
williamr@2
  1817
private:
williamr@2
  1818
    static TBool TranslateCategoryToIndex(TInformationElementId aId, TInt& index);
williamr@2
  1819
    TSmsInformationElementCategories()  {};
williamr@2
  1820
    ~TSmsInformationElementCategories() {};
williamr@2
  1821
    void operator=(TSmsInformationElementCategories& aCategory) {(void) aCategory;  };
williamr@2
  1822
    TBool operator==(TSmsInformationElementCategories& aCategory){(void) aCategory; return EFalse; };
williamr@2
  1823
    static const TInformationElementCategory categories[ENumberOfIndices];
williamr@2
  1824
    };
williamr@2
  1825
williamr@2
  1826
williamr@2
  1827
/**
williamr@2
  1828
 *  @internalComponent
williamr@2
  1829
 */
williamr@2
  1830
typedef CSmsInformationElement::TSmsInformationElementIdentifier TSmsId;
williamr@2
  1831
williamr@2
  1832
williamr@2
  1833
/**
williamr@2
  1834
 *  Mobile originated SMS sent to the network requesting an action or information
williamr@2
  1835
 *  on the status of a previously sent SUBMIT.
williamr@2
  1836
 *  
williamr@2
  1837
 *  This is internal and not intended for use.
williamr@2
  1838
 *  @publishedAll
williamr@2
  1839
 *  @released 
williamr@2
  1840
 */
williamr@2
  1841
class CSmsCommandData : public CBase
williamr@2
  1842
	{
williamr@2
  1843
public:
williamr@2
  1844
	enum {KSmsMaxDataSize=157};
williamr@2
  1845
public:
williamr@2
  1846
	static CSmsCommandData* NewL(TSmsFirstOctet& aFirstOctet);
williamr@2
  1847
	~CSmsCommandData();
williamr@2
  1848
williamr@2
  1849
	inline TInt NumInformationElements() const;
williamr@2
  1850
	CSmsInformationElement& InformationElement(TInt aIndex) const;
williamr@2
  1851
	CSmsInformationElement*& InformationElementPtr(TInt aIndex);
williamr@2
  1852
	TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,
williamr@2
  1853
		TInt& aIndex) const;
williamr@2
  1854
	void AddInformationElementL(const TSmsId aIdentifier,const TDesC8& aData);
williamr@2
  1855
	void RemoveInformationElement(TInt aIndex);
williamr@2
  1856
williamr@2
  1857
	inline TInt MaxDataLength() const;
williamr@2
  1858
	TPtrC8 Data() const;
williamr@2
  1859
	void SetDataL(const TDesC8& aData);
williamr@2
  1860
williamr@2
  1861
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1862
	void DecodeL(TGsmuLex8& aPdu);
williamr@2
  1863
	void InternalizeL(RReadStream& aStream);
williamr@2
  1864
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1865
private:
williamr@2
  1866
	CSmsCommandData(TSmsFirstOctet& aFirstOctet);
williamr@2
  1867
williamr@2
  1868
	TInt HeaderLength() const;
williamr@2
  1869
	TInt TotalHeaderLengthInUDLUnits() const;
williamr@2
  1870
williamr@2
  1871
	TBool HeaderPresent() const;
williamr@2
  1872
	void SetHeaderPresent(TBool aHeaderPresent);
williamr@2
  1873
williamr@2
  1874
private:
williamr@2
  1875
	TSmsFirstOctet& iFirstOctet;
williamr@2
  1876
	CArrayPtrFlat <CSmsInformationElement> iInformationElementArray;
williamr@2
  1877
	HBufC8* iBuffer;
williamr@2
  1878
	};
williamr@2
  1879
williamr@2
  1880
williamr@2
  1881
/**
williamr@2
  1882
 *  Enumerations and operations for SMS commands.
williamr@2
  1883
 *  @publishedAll
williamr@2
  1884
 *  @released 
williamr@2
  1885
 */
williamr@2
  1886
class TSmsCommandType : public TSmsOctet
williamr@2
  1887
	{
williamr@2
  1888
public:
williamr@2
  1889
/** Command types. */
williamr@2
  1890
	enum TSmsCommandTypeValue
williamr@2
  1891
		{
williamr@2
  1892
	/** Enquiry. */
williamr@2
  1893
		ESmsCommandTypeEnquiry=0x00,
williamr@2
  1894
	/** Cancel. */
williamr@2
  1895
		ESmsCommandTypeCancel=0x01,
williamr@2
  1896
	/** Delete. */
williamr@2
  1897
		ESmsCommandTypeDelete=0x02,
williamr@2
  1898
	/** Enable Status Report Request. */
williamr@2
  1899
		ESmsCommandTypeEnableStatusReportRequest=0x03
williamr@2
  1900
//  Reserved values
williamr@2
  1901
//		....
williamr@2
  1902
//		....
williamr@2
  1903
		};
williamr@2
  1904
public:
williamr@2
  1905
	TSmsCommandType();
williamr@2
  1906
	inline TInt CommandType() const;
williamr@2
  1907
	inline void SetCommandType(TSmsCommandTypeValue aType);
williamr@2
  1908
	};
williamr@2
  1909
williamr@2
  1910
williamr@2
  1911
/**
williamr@2
  1912
 *  Operations on the User Data described in TP-UD.
williamr@2
  1913
 *  @publishedAll
williamr@2
  1914
 *  @released 
williamr@2
  1915
 */
williamr@2
  1916
class CSmsUserData : public CBase
williamr@2
  1917
	{
williamr@2
  1918
public:
williamr@2
  1919
	enum {KSmsMaxUserDataSize=140};
williamr@2
  1920
williamr@2
  1921
public:
williamr@2
  1922
	static CSmsUserData* NewL(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsFirstOctet& aFirstOctet,const TSmsDataCodingScheme& aDataCodingScheme);
williamr@2
  1923
	~CSmsUserData();
williamr@2
  1924
williamr@2
  1925
	inline TInt NumInformationElements() const;
williamr@2
  1926
	IMPORT_C  CSmsInformationElement& InformationElement(TInt aIndex) const;
williamr@2
  1927
	IMPORT_C TBool InformationElementIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,TInt& aIndex) const;
williamr@2
  1928
	IMPORT_C TBool InformationElementLastIndex(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier,TInt& aIndex) const;
williamr@2
  1929
	IMPORT_C void AddInformationElementL(TSmsId aIdentifier,const TDesC8& aData);
williamr@2
  1930
	IMPORT_C void RemoveInformationElement(TInt aIndex);
williamr@2
  1931
	void InformationElementIndicesL(CSmsInformationElement::TSmsInformationElementIdentifier aIdentifier, CArrayFixFlat<TInt>& aIndices) const;
williamr@2
  1932
williamr@2
  1933
	// EMS related methods
williamr@2
  1934
	void AddEmsInformationElementL(CEmsInformationElement* aIe); // takes ownership od aIe;
williamr@2
  1935
	TBool EmsInformationElementWillFitL(CEmsInformationElement* aIe,CSmsEMSBufferSegmenter& aSeg,TUint& aCharsAddedToCurrentPDU);
williamr@2
  1936
	// Control Information Element related methods
williamr@2
  1937
	TBool ControlInformationElementWillFitL(CSmsInformationElement* aIe);
williamr@2
  1938
	void UpdateInformationElementArrayL(TSmsId aIdentifier,const TDesC8& aData);
williamr@2
  1939
	CSmsInformationElement*& InformationElementPtr(TInt aIndex);
williamr@2
  1940
williamr@2
  1941
	TInt MaxPackedUDUnitsInBodyRemaining() const;
williamr@2
  1942
	TInt MaxPackedUDUnitsInBodyRemaining(TUint totalHeaderLengthInUDLUnits) const;
williamr@2
  1943
williamr@2
  1944
	IMPORT_C TInt MaxBodyLengthInChars() const;
williamr@2
  1945
	IMPORT_C TPtrC8 Body() const;
williamr@2
  1946
	IMPORT_C void SetBodyL(const TDesC8& aBody);
williamr@2
  1947
	void AppendBodyL(const TDesC8& aExtraBody);
williamr@2
  1948
williamr@2
  1949
	IMPORT_C TBool IsSupportedL(TChar aChar);
williamr@2
  1950
	IMPORT_C TBool IsSupportedL(const TDesC& aDes, TInt& aNumberOfUnconvertibleCharacters,
williamr@2
  1951
			                    TInt& aIndexOfFirstUnconvertibleCharacter) const;
williamr@2
  1952
williamr@2
  1953
	IMPORT_C TBool IsSupportedL(const TDesC& aDes, TSmsEncoding aEncoding,
williamr@2
  1954
								TInt& aNumberOfUnconvertibleCharacters,
williamr@2
  1955
			                    TInt& aNumberOfDowngradedCharacters,
williamr@2
  1956
			                    TInt& aNumberRequiringAlternativeEncoding,
williamr@2
  1957
			                    TInt& aIndexOfFirstUnconvertibleCharacter) const;
williamr@2
  1958
williamr@2
  1959
	TBool IsBinaryData() const;
williamr@2
  1960
williamr@2
  1961
	TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  1962
	void DecodeL(TGsmuLex8& aPdu);
williamr@2
  1963
	void DecodeL(TGsmuLex8& aPdu, TBool aAcceptTruncation);
williamr@2
  1964
	void InternalizeL(RReadStream& aStream);
williamr@2
  1965
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
  1966
private:
williamr@2
  1967
	CSmsUserData(CCnvCharacterSetConverter& aCharacterSetConverter,RFs& aFs,TSmsFirstOctet& aFirstOctet,const TSmsDataCodingScheme& aDataCodingScheme);
williamr@2
  1968
	void ConstructL();
williamr@2
  1969
	TInt HeaderLength() const;
williamr@2
  1970
	TInt TotalHeaderLengthInUDLUnits() const;
williamr@2
  1971
	TInt BodyLengthInUDLUnits() const;
williamr@2
  1972
	void NewBodyL(TInt aLengthInChars);
williamr@2
  1973
	TBool HeaderPresent() const;
williamr@2
  1974
	void SetHeaderPresent(TBool aHeaderPresent);
williamr@2
  1975
	TInt TotalHeaderLengthInUDLUnits(TInt aIElen) const;
williamr@2
  1976
williamr@2
  1977
private:
williamr@2
  1978
williamr@2
  1979
	CCnvCharacterSetConverter& iCharacterSetConverter;
williamr@2
  1980
	RFs& iFs;
williamr@2
  1981
williamr@2
  1982
	TSmsFirstOctet& iFirstOctet;
williamr@2
  1983
	const TSmsDataCodingScheme& iDataCodingScheme;
williamr@2
  1984
	CArrayPtrFlat<CSmsInformationElement> iInformationElementArray;
williamr@2
  1985
	HBufC8* iBody;
williamr@2
  1986
	};
williamr@2
  1987
williamr@2
  1988
 enum TSmsMessageIndicationType
williamr@2
  1989
	{
williamr@2
  1990
	EGsmSmsVoiceMessageWaiting            =0x00,
williamr@2
  1991
	EGsmSmsFaxMessageWaiting              =0x01,
williamr@2
  1992
	EGsmSmsElectronicMailMessageWaiting   =0x02,
williamr@2
  1993
	EGsmSmsExtendedMessageTypeWaiting     =0x03,
williamr@2
  1994
	};
williamr@2
  1995
williamr@2
  1996
 enum TExtendedSmsIndicationType
williamr@2
  1997
	{
williamr@2
  1998
	EGsmSmsNoExtendedMessageTypeIndication=0x00,
williamr@2
  1999
	EGsmSmsVideoMessageWaiting            =0x01,
williamr@2
  2000
	EGsmSmsExtendedIndicationType2        =0x02,
williamr@2
  2001
	EGsmSmsExtendedIndicationType3        =0x03,
williamr@2
  2002
	EGsmSmsExtendedIndicationType4        =0x04,
williamr@2
  2003
	EGsmSmsExtendedIndicationType5        =0x05,
williamr@2
  2004
	EGsmSmsExtendedIndicationType6        =0x06,
williamr@2
  2005
	EGsmSmsExtendedIndicationType7        =0x07
williamr@2
  2006
	};
williamr@2
  2007
williamr@2
  2008
enum TSmsSpecialMessageIndicationTypeMask
williamr@2
  2009
    {
williamr@2
  2010
    /** Define a mask for the bits representing */
williamr@2
  2011
    /** the TSmsMessageIndicationType and the   */
williamr@2
  2012
    /** TExtendedSmsIndicationType              */
williamr@2
  2013
    EGsmSmsSpecialMessageIndicationTypeMask = 0x1F
williamr@2
  2014
    };
williamr@2
  2015
williamr@2
  2016
 enum TSmsMessageProfileType
williamr@2
  2017
    {
williamr@2
  2018
    EGsmSmsProfileId1 =0x00,
williamr@2
  2019
    EGsmSmsProfileId2 =0x01,
williamr@2
  2020
    EGsmSmsProfileId3 =0x02,
williamr@2
  2021
    EGsmSmsProfileId4 =0x03
williamr@2
  2022
    };
williamr@2
  2023
williamr@2
  2024
 enum TVoiceMailInfoType
williamr@2
  2025
    {
williamr@2
  2026
    EGsmSmsVoiceMailNotification       = 0x00,
williamr@2
  2027
    EGsmSmsVoiceMailDeleteConfirmation = 0x01
williamr@2
  2028
    };
williamr@2
  2029
    
williamr@2
  2030
 /** SMSC Control Parameters Selective Status Report For Each Segment. Found in Submit. */		
williamr@2
  2031
 enum TSmsSMSCControlParameters
williamr@2
  2032
	{
williamr@2
  2033
 /** Status Report for short message transaction completed. */
williamr@2
  2034
	ESmsStatusReportTransactionCompleted=0x01,
williamr@2
  2035
 /** Status Report for permanent error when Service Centre is not making any more transfer attempts. */	
williamr@2
  2036
	ESmsStatusReportPermanentError=0x02,
williamr@2
  2037
 /** Status Report for temporary error when Service Centre is not making any more transfer attempts. */
williamr@2
  2038
	ESmsStatusReportTemporaryError=0x04,
williamr@2
  2039
 /** Status Report for temporary error when Service Centre is still trying to transfer message segment. */
williamr@2
  2040
	ESmsStatusReportTemporaryErrorSCTrying=0x08,
williamr@2
  2041
 /** This is not Supported.
williamr@2
  2042
 	Reserved for future use. */
williamr@2
  2043
	ESmsStatusReportForFutureUse1=0x10,
williamr@2
  2044
 /** This is not Supported. 
williamr@2
  2045
 	Reserved for future use. */
williamr@2
  2046
	ESmsStatusReportForFutureUse2=0x20,
williamr@2
  2047
 /** This is not Supported. 
williamr@2
  2048
 	A Status Report generated by this Short Message, due to a permanent error or last temporary error, 
williamr@2
  2049
	 cancels the SRR of the rest of the Short Messages in a concatenated message. */
williamr@2
  2050
	ESmsStatusReportCancelRestSRR=0x40,
williamr@2
  2051
 /** This is not Supported. 
williamr@2
  2052
 	Include original UDH into the Status Report. */
williamr@2
  2053
	ESmsStatusReportIncludeOriginalUDH=0x80,
williamr@2
  2054
 /** Mask. The 4 least significant bits, which are supported, are set. */
williamr@2
  2055
 	ESmsSMSCControlParametersMask=0x0F	
williamr@2
  2056
 	};
williamr@2
  2057
williamr@2
  2058
williamr@2
  2059
/** Non Information Element Identifiers. */
williamr@2
  2060
 enum TSmsNonIEIdentifier
williamr@2
  2061
 	{
williamr@2
  2062
 	ESmsTPSRRParameter = 0x00,
williamr@2
  2063
	ESmsIncompleteClass0MessageParameter = 0x01
williamr@2
  2064
	};
williamr@2
  2065
williamr@2
  2066
williamr@2
  2067
/** Status Report Scheme*/
williamr@2
  2068
enum TSmsStatusReportScheme
williamr@2
  2069
	{
williamr@2
  2070
	EDefaultScheme = 0x00,
williamr@2
  2071
	ETPSRRScheme = 0x01,
williamr@2
  2072
	EControlParametersScheme = 0x10
williamr@2
  2073
	};
williamr@2
  2074
williamr@2
  2075
williamr@2
  2076
/**
williamr@2
  2077
 *  This is the base class for Enhanced Voice Mail Notifications and
williamr@2
  2078
 *  Enhanced Voice Mail Delete Confirmations. It encapsulates
williamr@2
  2079
 *  the attributes and encoding / decoding algorithms common to
williamr@2
  2080
 *  both types of Enhanced Voice Mail Information Element.
williamr@2
  2081
 *  
williamr@2
  2082
 *  @publishedAll
williamr@2
  2083
 */
williamr@2
  2084
class CEnhancedVoiceMailBoxInformation : public CBase
williamr@2
  2085
{
williamr@2
  2086
public:
williamr@2
  2087
   enum {KSmsMaxEnhancedVoiceMailSize = CSmsUserData::KSmsMaxUserDataSize - 3};
williamr@2
  2088
  // allow space in user data for the following bytes: user data header length, IE ID, IE Length
williamr@2
  2089
public:
williamr@2
  2090
    IMPORT_C TVoiceMailInfoType Type() const;
williamr@2
  2091
    IMPORT_C void   SetProfile(TSmsMessageProfileType aProfile);
williamr@2
  2092
    IMPORT_C TSmsMessageProfileType Profile() const;
williamr@2
  2093
    IMPORT_C void   SetStorage(TBool aIsStored);
williamr@2
  2094
    IMPORT_C TBool  Store() const;
williamr@2
  2095
    IMPORT_C void   SetAlmostMaximumCapacity(TBool aIsAlmostFull);
williamr@2
  2096
    IMPORT_C TBool  AlmostMaximumCapacity() const;
williamr@2
  2097
    IMPORT_C void   SetMaximumCapacity(TBool aIsFull);
williamr@2
  2098
    IMPORT_C TBool  MaximumCapacity() const;
williamr@2
  2099
    IMPORT_C TBool  ExtensionIndicator() const;
williamr@2
  2100
    IMPORT_C void   SetAccessAddressL(const TDesC& aParsedAddress);
williamr@2
  2101
    IMPORT_C void   SetParsedAccessAddressL(const TGsmSmsTelNumber& aParsedAddress);
williamr@2
  2102
    IMPORT_C TPtrC  AccessAddress() const;
williamr@2
  2103
    IMPORT_C void   ParsedAccessAddress(TGsmSmsTelNumber& aParsedAddress) const;
williamr@2
  2104
    IMPORT_C void   SetNumberOfVoiceMessages(TUint8 aNumber);
williamr@2
  2105
    IMPORT_C TUint8 NumberOfVoiceMessages() const;
williamr@2
  2106
williamr@2
  2107
    static   CEnhancedVoiceMailBoxInformation* NewL();
williamr@2
  2108
    virtual  ~CEnhancedVoiceMailBoxInformation();
williamr@2
  2109
williamr@2
  2110
    virtual TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
williamr@2
  2111
    virtual void DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
williamr@2
  2112
protected:
williamr@2
  2113
    CEnhancedVoiceMailBoxInformation();
williamr@2
  2114
    CEnhancedVoiceMailBoxInformation(TVoiceMailInfoType aTVoiceMailInfoType);
williamr@2
  2115
williamr@2
  2116
    CEnhancedVoiceMailBoxInformation(const CEnhancedVoiceMailBoxInformation&);
williamr@2
  2117
    TBool operator==(const CEnhancedVoiceMailBoxInformation&);
williamr@2
  2118
    void operator=(const CEnhancedVoiceMailBoxInformation&);
williamr@2
  2119
williamr@2
  2120
    void ConstructL();
williamr@2
  2121
    void NewBufferL(TInt aLength);
williamr@2
  2122
    void DoSetParsedAddressL(const TDesC& aAddress);
williamr@2
  2123
protected:
williamr@2
  2124
    TVoiceMailInfoType iType;
williamr@2
  2125
    TBool iOctet1Bit1;
williamr@2
  2126
    TSmsMessageProfileType iProfile;
williamr@2
  2127
    TBool iStorage;
williamr@2
  2128
    TBool iAlmostFull;
williamr@2
  2129
    TBool iFull;
williamr@2
  2130
    TBool iExtensionIndicator;
williamr@2
  2131
williamr@2
  2132
    HBufC* iAccessAddress;
williamr@2
  2133
    TGsmSmsTypeOfAddress iTypeOfAddress;
williamr@2
  2134
williamr@2
  2135
    TUint8 iNumberOfVoiceMessages;
williamr@2
  2136
private:
williamr@2
  2137
enum TBitMasks
williamr@2
  2138
	{
williamr@2
  2139
	EMask1Bit  = 0x01,
williamr@2
  2140
	EMask2Bits = 0x03,
williamr@2
  2141
	EMask4Bits = 0x0F
williamr@2
  2142
	};
williamr@2
  2143
};
williamr@2
  2144
williamr@2
  2145
williamr@2
  2146
/**
williamr@2
  2147
 *  This class encapsulates the attributes of a VM Notification as described in 23.040 V6.5.0.
williamr@2
  2148
 *  It is used as one of the attributes a Enhanced Voice Mail Notification.
williamr@2
  2149
 *  
williamr@2
  2150
 *  @publishedAll
williamr@2
  2151
 */
williamr@2
  2152
class CVoiceMailNotification : public CBase
williamr@2
  2153
{
williamr@2
  2154
public:
williamr@2
  2155
    IMPORT_C void    SetMessageId(TUint16 aMessageId);
williamr@2
  2156
    IMPORT_C TUint16 MessageId() const;
williamr@2
  2157
    IMPORT_C void    SetMessageLength(TUint8 aLength);
williamr@2
  2158
    IMPORT_C TUint8  MessageLength() const;
williamr@2
  2159
    IMPORT_C void    SetRetentionDays(TUint8 aDays);
williamr@2
  2160
    IMPORT_C TUint8  RetentionDays() const;
williamr@2
  2161
    IMPORT_C void    SetPriorityIndication(TBool aPriority);
williamr@2
  2162
    IMPORT_C TBool   PriorityIndication() const;
williamr@2
  2163
    IMPORT_C TBool   MessageExtensionIndication() const;
williamr@2
  2164
    IMPORT_C void    SetCallingLineIdentityL(TDesC& aLineIdentity);
williamr@2
  2165
    IMPORT_C TPtrC   CallingLineIdentity() const;
williamr@2
  2166
    IMPORT_C void    SetParsedCallingLineIdentityL(TGsmSmsTelNumber& aParsedAddress);
williamr@2
  2167
    IMPORT_C void    ParsedCallingLineIdentity(TGsmSmsTelNumber& aParsedAddress) const;
williamr@2
  2168
williamr@2
  2169
    IMPORT_C static  CVoiceMailNotification* NewL();
williamr@2
  2170
    IMPORT_C virtual ~CVoiceMailNotification();
williamr@2
  2171
williamr@2
  2172
    TUint8  SizeL(CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
williamr@2
  2173
williamr@2
  2174
    virtual TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
williamr@2
  2175
    virtual void    DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
williamr@2
  2176
protected:
williamr@2
  2177
    CVoiceMailNotification();
williamr@2
  2178
    CVoiceMailNotification(const CVoiceMailNotification&);
williamr@2
  2179
    TBool    operator==(const CVoiceMailNotification&);
williamr@2
  2180
    void    operator=(const CVoiceMailNotification&);
williamr@2
  2181
    void    ConstructL();
williamr@2
  2182
    void    NewBufferL(TInt aLength);
williamr@2
  2183
    void    NewExtensionL(TInt aLength);
williamr@2
  2184
williamr@2
  2185
    void DoSetParsedAddressL(const TDesC& aAddress);
williamr@2
  2186
protected:
williamr@2
  2187
    TUint16 iMessageId;
williamr@2
  2188
    TUint8  iMessageLength;
williamr@2
  2189
    TUint8  iRetentionDays;
williamr@2
  2190
    TBool   iOctetN8Bit1;
williamr@2
  2191
    TBool   iPriorityIndication;
williamr@2
  2192
    TBool   iMessageExtensionIndicator;
williamr@2
  2193
williamr@2
  2194
    HBufC*  iCallingLineIdentity;
williamr@2
  2195
    TGsmSmsTypeOfAddress iTypeOfAddress;
williamr@2
  2196
williamr@2
  2197
    HBufC*  iExtension;
williamr@2
  2198
private:
williamr@2
  2199
 enum TBitMasks
williamr@2
  2200
	{
williamr@2
  2201
	EMask1Bit  = 0x01,
williamr@2
  2202
	EMask2Bits = 0x03,
williamr@2
  2203
	EMask4Bits = 0x0F,
williamr@2
  2204
	EMask5Bits = 0x1F
williamr@2
  2205
	};
williamr@2
  2206
};
williamr@2
  2207
williamr@2
  2208
williamr@2
  2209
/**
williamr@2
  2210
 *  This class encapsulates the attributes of an Enhanced Voice Mail Notification as described in
williamr@2
  2211
 *  9.2.3.24.13.1. An enhanced voice mail notification is added to a CSmsMessage using the
williamr@2
  2212
 *  interface provided by the class CSmsEnhancedVoiceMailOperations.
williamr@2
  2213
 *  
williamr@2
  2214
 *  Clients should be aware that 23.040 v6.5.0 specifies that this information element must fit into the
williamr@2
  2215
 *  user data field of a single PDU. The amount of space available in the user data field depends on both
williamr@2
  2216
 *  the number and size of the mandatory information elements that must also be present.
williamr@2
  2217
 *  Intuitively the largest Enhanced Voice Mail information element can be added when no mandatory information
williamr@2
  2218
 *  elements need to be encoded in the PDU. To achieve this, the CSmsMessage must be configured with
williamr@2
  2219
 *  only the Enhanced Voice Mail Information Element and no other information elements or text.
williamr@2
  2220
 *  
williamr@2
  2221
 *  @publishedAll
williamr@2
  2222
 */
williamr@2
  2223
class CEnhancedVoiceMailNotification : public CEnhancedVoiceMailBoxInformation
williamr@2
  2224
{
williamr@2
  2225
public:
williamr@2
  2226
    enum {KMaxNumberOfNotifications = 15};
williamr@2
  2227
protected:
williamr@2
  2228
    enum {KSmsNotificationBitMask = 0x0F};
williamr@2
  2229
    // bits mask for bit representing the number of voice mail notifications.
williamr@2
  2230
public:
williamr@2
  2231
    IMPORT_C TUint8   NumberOfVoiceMails();
williamr@2
  2232
    IMPORT_C RPointerArray<CVoiceMailNotification>& GetVoiceMailNotifications();
williamr@2
  2233
williamr@2
  2234
    IMPORT_C static  CEnhancedVoiceMailNotification* NewL();
williamr@2
  2235
    IMPORT_C ~CEnhancedVoiceMailNotification();
williamr@2
  2236
williamr@2
  2237
    TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
williamr@2
  2238
    void    DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
williamr@2
  2239
protected:
williamr@2
  2240
    CEnhancedVoiceMailNotification();
williamr@2
  2241
    CEnhancedVoiceMailNotification(const CEnhancedVoiceMailNotification&);
williamr@2
  2242
    TBool operator==(const CEnhancedVoiceMailNotification&);
williamr@2
  2243
    void operator=(const CEnhancedVoiceMailNotification&);
williamr@2
  2244
    void NewExtensionL(TInt aLength);
williamr@2
  2245
    void ConstructL();
williamr@2
  2246
protected:
williamr@2
  2247
    TUint  iNumberOfVMNotifications;
williamr@2
  2248
    HBufC* iExtension;
williamr@2
  2249
    RPointerArray<CVoiceMailNotification>* iNotifications;
williamr@2
  2250
};
williamr@2
  2251
williamr@2
  2252
williamr@2
  2253
/**
williamr@2
  2254
 *  This class encapsulates the attributes of a VM Deletion  as described in 23.040 V6.5.0.
williamr@2
  2255
 *  9.2.3.24.13.1.
williamr@2
  2256
 *  
williamr@2
  2257
 *  It is used as one of the attributes of a Enhanced Voice Mail Delete Confirmation.
williamr@2
  2258
 *  
williamr@2
  2259
 *  @publishedAll
williamr@2
  2260
 */
williamr@2
  2261
class CVoiceMailDeletion : public CBase
williamr@2
  2262
{
williamr@2
  2263
public:
williamr@2
  2264
    IMPORT_C void    SetMessageId(TUint16 aMessageId);
williamr@2
  2265
    IMPORT_C TUint16 MessageId() const;
williamr@2
  2266
    IMPORT_C TBool   MessageExtensionIndication() const;
williamr@2
  2267
williamr@2
  2268
    IMPORT_C static  CVoiceMailDeletion* NewL();
williamr@2
  2269
    IMPORT_C virtual ~CVoiceMailDeletion();
williamr@2
  2270
    TUint8 SizeL();
williamr@2
  2271
williamr@2
  2272
	virtual TUint8* EncodeL(TUint8* aPtr) const;
williamr@2
  2273
    virtual void DecodeL(TGsmuLex8& aVoiceMailInfo);
williamr@2
  2274
protected:
williamr@2
  2275
    CVoiceMailDeletion();
williamr@2
  2276
    CVoiceMailDeletion(const CVoiceMailDeletion&);
williamr@2
  2277
    TBool operator==(const CVoiceMailDeletion&);
williamr@2
  2278
    void operator=(const CVoiceMailDeletion&);
williamr@2
  2279
williamr@2
  2280
    void ConstructL();
williamr@2
  2281
    void NewBufferL(TInt aLength);
williamr@2
  2282
protected:
williamr@2
  2283
    TUint   iMessageId;
williamr@2
  2284
    TBool   iExtensionIndicator;
williamr@2
  2285
    HBufC*  iExtension;
williamr@2
  2286
};
williamr@2
  2287
williamr@2
  2288
williamr@2
  2289
/**
williamr@2
  2290
 *  This class encapsulates the attributes of an Enhanced Voice Delete Confirmation as described in
williamr@2
  2291
 *  9.2.3.24.13.2. An enhanced voice delete confirmation is added to a CSmsMessage using the
williamr@2
  2292
 *  interface provided by the class CSmsEnhancedVoiceMailOperations.
williamr@2
  2293
 *  
williamr@2
  2294
 *  @publishedAll
williamr@2
  2295
 */
williamr@2
  2296
class CEnhancedVoiceMailDeleteConfirmations : public
williamr@2
  2297
      CEnhancedVoiceMailBoxInformation
williamr@2
  2298
{
williamr@2
  2299
public:
williamr@2
  2300
    enum {KMaxNumberOfNotifications = 31};
williamr@2
  2301
protected:
williamr@2
  2302
    enum {KSmsNotificationBitMask = 0x1F};
williamr@2
  2303
    // bits mask for bit representing the number of voice mail deletions.
williamr@2
  2304
public:
williamr@2
  2305
    IMPORT_C TUint8  NumberOfDeletes();
williamr@2
  2306
    IMPORT_C RPointerArray<CVoiceMailDeletion>& GetVoiceMailDeletions();
williamr@2
  2307
williamr@2
  2308
    IMPORT_C static CEnhancedVoiceMailDeleteConfirmations* NewL();
williamr@2
  2309
    IMPORT_C ~CEnhancedVoiceMailDeleteConfirmations();
williamr@2
  2310
williamr@2
  2311
	TUint8* EncodeL(TUint8* aPtr, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs) const;
williamr@2
  2312
    void    DecodeL(TGsmuLex8& aVoiceMailInfo, CCnvCharacterSetConverter& aCharacterSetConverter, RFs& aFs);
williamr@2
  2313
protected:
williamr@2
  2314
    CEnhancedVoiceMailDeleteConfirmations();
williamr@2
  2315
    CEnhancedVoiceMailDeleteConfirmations(const CEnhancedVoiceMailDeleteConfirmations&);
williamr@2
  2316
    TBool operator==(const CEnhancedVoiceMailDeleteConfirmations&);
williamr@2
  2317
    void operator=(const CEnhancedVoiceMailDeleteConfirmations&);
williamr@2
  2318
williamr@2
  2319
    void ConstructL();
williamr@2
  2320
    void NewExtensionL(TInt aLength);
williamr@2
  2321
protected:
williamr@2
  2322
    HBufC*  iExtension;
williamr@2
  2323
    RPointerArray<CVoiceMailDeletion>* iVoiceMailDeletions;
williamr@2
  2324
};
williamr@2
  2325
williamr@2
  2326
williamr@2
  2327
#include <gsmuelem.inl>
williamr@2
  2328
williamr@2
  2329
#endif // !defined __GSMUELEM_H__