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