telephonyserver/etelpacketdata/inc/etelpckt.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // ETel Multimode Packet Data API 
       
    15 // MBMS Broadcast,GPRS Release 97/98, CDMAOne, CDMA2000, Release 99 and Release 4.
       
    16 // Copyright (c) Symbian Software Ltd. 2001-2009.  All rights reserved.
       
    17 // 
       
    18 //
       
    19 
       
    20 #if !defined(__ETELPCKT_H__)
       
    21 #define __ETELPCKT_H__
       
    22 
       
    23 #include <e32base.h>
       
    24 #include <s32mem.h>
       
    25 #include <etel.h>
       
    26 #include <cdblen.h>
       
    27 #include <exterror.h>
       
    28 #include <etelutils.h>
       
    29 #include <mbmstypes.h>
       
    30 
       
    31 //
       
    32 //  Global constants and types
       
    33 // 
       
    34 
       
    35 // General
       
    36 // Passed into RTelServer::IsSupportedByModule()
       
    37 /**
       
    38 Unique Packet Data API Identifier for Packet API version 1.0.
       
    39 
       
    40 @publishedPartner
       
    41 @released
       
    42 */
       
    43 const TInt KETelExtPcktV1 = 4000;	
       
    44 /**
       
    45 Unique Packet Data API Identifier for Packet API version 2.0.
       
    46 
       
    47 @publishedPartner
       
    48 @released
       
    49 */
       
    50 
       
    51 const TInt KETelExtPcktV2 = 8000;	 
       
    52 
       
    53 
       
    54 /**
       
    55 Unique Packet Data API Identifier for Packet API version 3.0.
       
    56 aka 3GPP Release 5 support
       
    57 
       
    58 @publishedPartner
       
    59 @released
       
    60 */
       
    61 const TInt KETelExtPcktV3 = 12000;	 
       
    62  
       
    63 
       
    64 // GPRS-specific causes for Session Management (Annex I, 3GPP TS 24.008)
       
    65 /** This cause is sent to the MS if it requests an IMSI attachment for GPRS services, 
       
    66 but is not allowed to operate GPRS services.  
       
    67 
       
    68 @publishedPartner
       
    69 @released
       
    70 */
       
    71 const TInt KErrGprsServicesNotAllowed=KErrGsmMobilityManagementBase-7;
       
    72 /** This cause is sent to the MS if it requests a combined IMSI attach for GPRS 
       
    73 and non-GPRS services, but is not allowed to operate either of them. 
       
    74 
       
    75 @publishedPartner
       
    76 @released
       
    77 */
       
    78 const TInt KErrGprsAndNonGprsServicesNotAllowed=KErrGsmMobilityManagementBase-8;
       
    79 /** This cause is sent to the MS when the network cannot derive the MS's identity 
       
    80 from the P-TMSI in case of an inter-SGSN routing area update.  
       
    81 
       
    82 @publishedPartner
       
    83 @released
       
    84 */
       
    85 const TInt KErrGprsMSIdentityCannotBeDerivedByTheNetwork=KErrGsmMobilityManagementBase-9;
       
    86 /** This cause is sent to the MS either if the network has implicitly detached 
       
    87 the MS, e.g. some while after the Mobile reachable timer has expired, or if 
       
    88 the GMM context data relating to the subscription does not exist in the SGSN, 
       
    89 e.g. because of a SGSN restart.  
       
    90 
       
    91 @publishedPartner
       
    92 @released
       
    93 */
       
    94 const TInt KErrGprsMSImplicitlyDetached=KErrGsmMobilityManagementBase-10;
       
    95 /** This cause is sent to the MS if it requests a combined GPRS attachment or routing 
       
    96 is updating in a PLMN where the MSC is temporarily not reachable via the GPRS 
       
    97 part of the GSM network.  
       
    98 
       
    99 @publishedPartner
       
   100 @released
       
   101 */
       
   102 const TInt KErrGprsMSCTemporarilyNotReachable=KErrGsmMobilityManagementBase-16;
       
   103 /** The PDP context is deactivated because of a LLC or SNDCP failure.  
       
   104 
       
   105 @publishedPartner
       
   106 @released
       
   107 */
       
   108 const TInt KErrGprsLlcOrSndcpFailure=KErrGsmMobilityManagementBase-25;
       
   109 /** Insufficient GPRS resources are available for the request to complete successfully.  
       
   110 
       
   111 @publishedPartner
       
   112 @released
       
   113 */
       
   114 const TInt KErrGprsInsufficientResources=KErrGsmMobilityManagementBase-26;
       
   115 /** Access Point Name is either missing from the Activation request or is unknown.  
       
   116 
       
   117 @publishedPartner
       
   118 @released
       
   119 */
       
   120 const TInt KErrGprsMissingorUnknownAPN=KErrGsmMobilityManagementBase-27;
       
   121 /** The PDP address supplied with the Activation request is unknown.  
       
   122 
       
   123 @publishedPartner
       
   124 @released
       
   125 */
       
   126 const TInt KErrGprsUnknownPDPAddress=KErrGsmMobilityManagementBase-28;
       
   127 /** User authentication has failed.  
       
   128 
       
   129 @publishedPartner
       
   130 @released
       
   131 */
       
   132 const TInt KErrGprsUserAuthenticationFailure=KErrGsmMobilityManagementBase-29;
       
   133 /** The GGSN has rejected the activation request for some reason.  
       
   134 
       
   135 @publishedPartner
       
   136 @released
       
   137 */
       
   138 const TInt KErrGprsActivationRejectedByGGSN=KErrGsmMobilityManagementBase-30;
       
   139 /** The activation request has been rejected for an unspecified reason.  
       
   140 
       
   141 @publishedPartner
       
   142 @released
       
   143 */
       
   144 const TInt KErrGprsActivationRejected=KErrGsmMobilityManagementBase-31;
       
   145 /** The requested service is not supported by the PLMN.
       
   146 
       
   147 @publishedPartner
       
   148 @released
       
   149 */
       
   150 const TInt KErrGprsServiceOptionNotSupported=KErrGsmMobilityManagementBase-32;
       
   151 /** There is no active subscription to the requested service.
       
   152 
       
   153 @publishedPartner
       
   154 @released
       
   155 */
       
   156 const TInt KErrGprsRequestedServiceOptionNotSubscribed=KErrGsmMobilityManagementBase-33;
       
   157 /** The service is temporarily out of order.
       
   158 
       
   159 @publishedPartner
       
   160 @released
       
   161 */
       
   162 const TInt KErrGprsServiceOptionTemporarilyOutOfOrder=KErrGsmMobilityManagementBase-34;
       
   163 /** The NSAPI supplied with the activation request is not unique.  
       
   164 
       
   165 @publishedPartner
       
   166 @released
       
   167 */
       
   168 const TInt KErrGprsNSAPIAlreadyUsed=KErrGsmMobilityManagementBase-35;
       
   169 /** The context has been deactivated successfully.  
       
   170 
       
   171 @publishedPartner
       
   172 @released
       
   173 */
       
   174 const TInt KErrGprsRegularContextDeactivation=KErrGsmMobilityManagementBase-36;
       
   175 /** The Quality of Service requested has not been accepted.  
       
   176 
       
   177 @publishedPartner
       
   178 @released
       
   179 */
       
   180 const TInt KErrGprsQoSNotAccepted=KErrGsmMobilityManagementBase-37;	
       
   181 /** The GPRS network is requesting reactivation of a context.  
       
   182 
       
   183 @publishedPartner
       
   184 @released
       
   185 */
       
   186 const TInt KErrGprsReactivationRequested=KErrGsmMobilityManagementBase-39;
       
   187 /** The feature is not supported.  
       
   188 
       
   189 @publishedPartner
       
   190 @released
       
   191 */
       
   192 const TInt KErrGprsFeatureNotSupported=KErrGsmMobilityManagementBase-40;
       
   193 /** There is a semantic error in the TFT operation.
       
   194 
       
   195 @publishedPartner
       
   196 @released
       
   197 */
       
   198 const TInt KErrGprsSemanticErrorInTFTOperation=KErrGsmMobilityManagementBase-41;
       
   199 /** There is a syntactical error in the TFT operation.
       
   200 
       
   201 @publishedPartner
       
   202 @released
       
   203 */
       
   204 const TInt KErrGprsSyntacticalErrorInTFTOperation=KErrGsmMobilityManagementBase-42;
       
   205 /** The PDP context activation request is not active. 
       
   206 
       
   207 @publishedPartner
       
   208 @released
       
   209 */
       
   210 const TInt KErrGprsUnknownPDPContext=KErrGsmMobilityManagementBase-43;
       
   211 /** There is one or more semantic errors in packet filter(s) of the TFT.
       
   212  
       
   213 @publishedPartner
       
   214 @released
       
   215 */
       
   216 const TInt KErrGprsSemanticErrorsInPacketFilters=KErrGsmMobilityManagementBase-44;
       
   217 /** There is one or more syntactical errors in packet filter(s) of the TFT.
       
   218 
       
   219 @publishedPartner
       
   220 @released
       
   221 */
       
   222 const TInt KErrGprsSyntacticalErrorInPacketFilters=KErrGsmMobilityManagementBase-45;
       
   223 /** The GPRS network has already activated a PDP context without TFT.
       
   224 
       
   225 @publishedPartner
       
   226 @released
       
   227 */
       
   228 const TInt KErrGprsPDPContextWithoutTFTAlreadyActivated=KErrGsmMobilityManagementBase-46;
       
   229 
       
   230 // UMTS-specific cause values for Call control (Annex H, 3GPP TS 24.008)
       
   231 /** QoS not available.
       
   232 
       
   233 @publishedPartner
       
   234 @released
       
   235 */
       
   236 const TInt KErrUmtsQoSNotAvailable=KErrGsmMobilityManagementBase-49;
       
   237 
       
   238 /** Maximum number of PDP contexts supported by phone exceeded.  
       
   239 
       
   240 @publishedPartner
       
   241 @released
       
   242 */
       
   243 const TInt KErrUmtsMaxNumOfContextExceededByPhone=KErrGsmMobilityManagementBase-50;
       
   244 /** Maximum number of PDP contexts supported by the network exceeded.  
       
   245 
       
   246 @publishedPartner
       
   247 @released
       
   248 */
       
   249 const TInt KErrUmtsMaxNumOfContextExceededByNetwork=KErrGsmMobilityManagementBase-51;
       
   250 /** Phone is in offline mode.  
       
   251 
       
   252 @publishedPartner
       
   253 @released
       
   254 */
       
   255 const TInt KErrGprsOfflineMode=KErrGsmMobilityManagementBase-52;
       
   256 /** 
       
   257  * MBMS network support does not exist.
       
   258  * @publishedPartner
       
   259  * @released
       
   260  */
       
   261 const TInt KErrMbmsNotSupported=KErrGsmMobilityManagementBase-53;
       
   262 /**
       
   263  * Specific MBMS service is not available.  
       
   264  * @publishedPartner
       
   265  * @released
       
   266  */
       
   267 const TInt KErrMbmsServiceUnavailable=KErrGsmMobilityManagementBase-54;
       
   268 /**
       
   269  * Preempts low priority MBMS/Non-MBMS service.  
       
   270  * @publishedPartner
       
   271  * @released
       
   272  */
       
   273 const TInt KErrMbmsServicePreempted=KErrGsmMobilityManagementBase-55;
       
   274 /**
       
   275  * One or more invalid MBMS service entry supplied.  
       
   276  * @publishedPartner
       
   277  * @released
       
   278  */
       
   279 const TInt KErrMbmsImpreciseServiceEntries=KErrGsmMobilityManagementBase-56;
       
   280 
       
   281 class TPacketDataConfigBase 
       
   282 /** Base class for the packet configuration classes.
       
   283 
       
   284 The Context configuration, QoS profile (Requested and Negotiated) and QoS 
       
   285 Capabilities classes inherit from this class. It is outside the scope of all 
       
   286 the Packet data classes. 
       
   287 
       
   288 To allow future configuration structures (e.g. TContextConfigWCDMA, 
       
   289 TContextConfigPDC, etc.) to be added in such a way that a completely different 
       
   290 structure may be defined and passed into the same functions as this one, all 
       
   291 existing configuration structures are derived from this thin base class 
       
   292 which provides just one function, ExtensionId(). This function returns the 
       
   293 one protected member variable, iExtensionId. A new structure would define an 
       
   294 associated new constant to be set in iExtensionId on construction, which would 
       
   295 then be queried by the TSY prior to unpackaging the structure. 
       
   296 
       
   297 @see RPacketContext::TContextConfigCDMA 
       
   298 @see RPacketContext::TContextConfigR99_R4  
       
   299 @see RPacketContext::TContextConfig_R5
       
   300 @see RPacketContext::TContextConfigMbmsV1
       
   301 
       
   302 @publishedPartner
       
   303 @released
       
   304 
       
   305 */
       
   306 	{
       
   307 public:
       
   308 	/**
       
   309 	Flags identifying the different packet networks.
       
   310 	*/
       
   311 	enum 
       
   312 		{
       
   313 		/**
       
   314 		GPRS Release 97/98 packet network.
       
   315 		*/
       
   316 		KConfigGPRS= 0x01,				
       
   317 		/**
       
   318 		CDMA and CDMA2000 packet networks.
       
   319 		@deprecated 9.5
       
   320 		*/
       
   321 		KConfigCDMA = 0x02,		
       
   322 		/**
       
   323 		GPRS/UMTS Release 99 and UMTS Release 4 networks.
       
   324 		*/ 
       
   325 		KConfigRel99Rel4 = 0x04,
       
   326 		/**
       
   327 		UMTS/IMS 3GPP Release 5 networks.
       
   328 		*/ 
       
   329 		KConfigRel5 = 0x05,	
       
   330 		/**
       
   331 		MBMS networks
       
   332 		*/
       
   333 		KConfigMBMS = 0x06		
       
   334 		};
       
   335 		
       
   336 	/** This member returns the type of class.
       
   337 	
       
   338 	@return The type of class. */
       
   339 	inline TInt ExtensionId(){return iExtensionId;};
       
   340 protected:
       
   341 	/**
       
   342 	Defines the type of class: either KConfigGPRS, KConfigCDMA or KConfigRel99Rel4,
       
   343 	which identifies the type of packet network (GPRS R97/98, CDMA, Release 99 or 4 or 5)
       
   344 	*/
       
   345 	TInt iExtensionId;	
       
   346 	};
       
   347 
       
   348 class TConnectionInfoBase 
       
   349 /** Base class for the configuration info classes. It is outside the scope of 
       
   350 all the Packet data classes. 
       
   351 
       
   352 To allow future connection information structures (e.g. TConnectionInfoV2, 
       
   353 TConnectionInfoV3, etc.) to be added and as a result information carried by the 
       
   354 structure can be increased. All information structures are derived from this 
       
   355 thin base class which provides just one function, ExtensionId(). This function 
       
   356 returns the protected member variable, iExtensionId. A new structure would 
       
   357 define an associated new constant to be set in iExtensionId on construction, 
       
   358 which would then be queried by the TSY prior to unpackaging the structure. 
       
   359 
       
   360 @see RPacketContext::TConnectionInfoV1
       
   361 
       
   362 @publishedPartner
       
   363 @released
       
   364 */
       
   365 	{
       
   366 public:
       
   367 	/**
       
   368 	Flags identifying the different connection information structures
       
   369 	*/
       
   370 	enum 
       
   371 		{
       
   372 		/**
       
   373 		Connection information version 1.
       
   374 		*/
       
   375 		KConnectionInfoV1 = 0x01
       
   376 		};
       
   377 		
       
   378 	/** Return the type of class.
       
   379 	*
       
   380 	@return The version of class. 
       
   381 	*/
       
   382 	inline TInt ExtensionId(){return iExtensionId;};
       
   383 	
       
   384 public:
       
   385 	/** A bit-wise sum of TConnectionInfoFlags indicating which of the optional 
       
   386 	fields contain valid data. */
       
   387     TUint32 iValid;        	
       
   388 	
       
   389 protected:
       
   390 	/** Defines the type of class. */
       
   391 	TInt iExtensionId;	
       
   392 	};
       
   393 
       
   394 class TPacketBase
       
   395 /** 
       
   396 Base class for the Packet data ETel API parameters which are version dependent
       
   397 (version 2 onwards). Note that even though the 7.0 version of the API does not define
       
   398 version dependent classes, this implementation HAS been employed in the v7.0S version
       
   399 (V2.0) of the API.
       
   400 
       
   401 The TPacketBase::ExtensionId() method is used to determine which version of a packaged
       
   402 parameter has been created. 
       
   403 Note that the TPacketDataConfigBase::ExtensionId() method returns a packet network 
       
   404 type.
       
   405 
       
   406 @publishedPartner
       
   407 @released
       
   408 */
       
   409 	{
       
   410 public:
       
   411 	IMPORT_C TInt ExtensionId() const;
       
   412 protected:
       
   413 	TPacketBase();
       
   414 	TInt iExtensionId;					//< Extension identifier
       
   415 	};
       
   416 											   
       
   417 class TPacketType
       
   418 /**
       
   419 Base class for all the V1 parameter types.
       
   420 
       
   421 @publishedPartner
       
   422 @released
       
   423 */
       
   424 {
       
   425 public:
       
   426 	IMPORT_C TInt ExtensionId() const;
       
   427 protected:
       
   428 	TPacketType();
       
   429 	void InternalizeL(RReadStream& aStream);
       
   430 	void ExternalizeL(RWriteStream& aStream) const;
       
   431 protected:
       
   432 	TInt iExtensionId;
       
   433 };
       
   434 	
       
   435 struct TClientId
       
   436 /**Holds the session and subsession handles which would be used  
       
   437 within the 2-phase list retrieval mechanism. During both the phases, 
       
   438 the client-side API code will pass down the TClientId so that TSY can use
       
   439 this information to match the first phase of the request to the second phase. */
       
   440 	{
       
   441 	/** The handle to the underlying RTelServer session. */
       
   442 	TInt iSessionHandle;
       
   443 	/** The handle to the sub-session to which this API request relates. */
       
   444 	TInt iSubSessionHandle;
       
   445 	};	
       
   446 		
       
   447 class RPacketService;
       
   448 class CPacketContextPtrHolder;
       
   449 class RPacketContext : public RTelSubSessionBase
       
   450 /** Defines the context and the configuration of a connection to the network's 
       
   451 packet-switched service. 
       
   452 
       
   453 The functionality associated with the context of a packet-switched connection 
       
   454 (configuring, modifying, activating, etc) are encapsulated within this class.
       
   455 
       
   456 Each instance of this class has an RPacketService parent, to which it belongs.
       
   457 
       
   458 @publishedPartner
       
   459 @released
       
   460 */
       
   461 	{
       
   462 public:
       
   463 	IMPORT_C RPacketContext();
       
   464 	IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
       
   465 	IMPORT_C TInt OpenExistingContext(RPacketService& aPacketNetwork,const TDesC& aContextName);	
       
   466 	IMPORT_C void Close();
       
   467 // 
       
   468 //	Nested classes dealing with context configurations for each network type
       
   469 //
       
   470 	enum {KGSNNameLength = 252};	// 3GPP TS 24.008, section 10.5.6.1 gives a range of 3 - 102 octets for the APN. 252 has been chosen as an adequate value for practical purposes.
       
   471 	enum {KMaxPDPAddressLength = KCommsDbSvrMaxFieldLength}; 
       
   472 	enum 
       
   473 		{
       
   474 		KPdpDataCompression		= 0x01,
       
   475 		KPdpHeaderCompression	= 0x02
       
   476 		};
       
   477 
       
   478 /** Buffer to hold the GSN address.
       
   479 
       
   480 @see KGSNNameLength */
       
   481 	typedef TBuf8<KGSNNameLength> TGSNAddress;				//< GPRS Support Node (GSN) name
       
   482 /** Buffer to hold the protocol address.
       
   483 
       
   484 @see KMaxPDPAddressLength */
       
   485 	typedef TBuf8<KMaxPDPAddressLength> TProtocolAddress;	//< GPRS Rel97/98, CDMA, Rel99 and Rel4.
       
   486 
       
   487 	//
       
   488 	// TProtocolType - defines the protocol used to connect to the packet data gateway
       
   489 	// 
       
   490 /** Defines the protocol used to connect to the packet data gateway.
       
   491 
       
   492 Modes: GRPS */
       
   493 	enum TProtocolType
       
   494 		{
       
   495 	/** IPv4 type gateway.
       
   496 	
       
   497 	Modes: GRPS */
       
   498 		EPdpTypeIPv4,	
       
   499 	/** IPv6 type gateway.
       
   500 	
       
   501 	Modes: GPRS */
       
   502 		EPdpTypeIPv6,	
       
   503 	/** X.25 type gateway.
       
   504 	
       
   505 	Modes: GPRS */
       
   506 		EPdpTypeX25,	
       
   507 	/** PPP type gateway.
       
   508 	
       
   509 	Modes: GRPS, CDMA */
       
   510 		EPdpTypePPP,	
       
   511 	/** CDPD type gateway.
       
   512 	
       
   513 	Modes: CDMA 
       
   514 	@deprecated 9.5
       
   515 	*/
       
   516 		EPdpTypeCDPD
       
   517 		};
       
   518 
       
   519 	//
       
   520 	// TServiceOption - service option numbers are CDMA specific and used in the API to 
       
   521 	// identify the various packet data services available on the CDMA packet network.
       
   522 	// 
       
   523 /** Service option numbers identify the various packet data services available 
       
   524 on the CDMA packet network.
       
   525 
       
   526 Modes: CDMA
       
   527 @deprecated 9.5
       
   528  */
       
   529 	enum TServiceOption
       
   530 		{
       
   531 	/** Service Options 7 and 15, 8-16. */
       
   532 		KLowSpeedData		   = 0x01,	
       
   533 	/** Service Options 22-25 IP and 26-29 CDPD. */
       
   534 		KHighSpeedData	 	   = 0x02,	
       
   535 	/** Service Option 33 on CDMA2000 network only. */
       
   536 		KHighSpeedCDMA2000Data = 0x04	
       
   537 		};
       
   538 
       
   539 	/** Anonymous access required.
       
   540 
       
   541 	Modes: GRPS, CDMA */
       
   542 	enum TAnonymousAccess
       
   543 		{
       
   544 	/** Anonymous access not applicable.
       
   545 	
       
   546 	Modes: GRPS, CDMA */
       
   547 		ENotApplicable,
       
   548 	/** Anonymous access required.
       
   549 	
       
   550 	Modes: GRPS */
       
   551 		ERequired,		
       
   552 	/** Anonymous access not required.
       
   553 	
       
   554 	Modes: GPRS */
       
   555 		ENotRequired	
       
   556 		};
       
   557 
       
   558 	enum { KMaxAuthDataLength = 50 };
       
   559 	/** Buffer for various sorts of authorisation data since version 2 of the API.
       
   560 	
       
   561 	Supported from v7.0S.
       
   562 	*/
       
   563 	typedef TBuf8<KMaxAuthDataLength> TAuthData;
       
   564 
       
   565 	//
       
   566 	// TAuthProtocol - this enables the client to set the protocol type used on the context
       
   567 	// 
       
   568 	enum TAuthProtocol
       
   569         {
       
   570         EProtocolNone,
       
   571         EProtocolPAP,
       
   572         EProtocolCHAP
       
   573         };
       
   574 
       
   575 	//
       
   576 	// TAuthInfo - this enables the client to set the authentication data used on the context
       
   577 	//
       
   578 	struct TAuthInfo
       
   579 		{
       
   580 		TAuthProtocol iProtocol;
       
   581         TAuthData iUsername;
       
   582         TAuthData iPassword;
       
   583 		};
       
   584 
       
   585 	//
       
   586 	// TDnsInfoV2 - this class enables the client to set the primary and secondary DNS server
       
   587 	// names used on the context 
       
   588 	//
       
   589 	class TDnsInfoV2 : public TPacketBase
       
   590 	/**
       
   591 	Enables the client to set the primary and secondary DNS server
       
   592 	names used on the context since version 2 of the API.
       
   593 	
       
   594 	Supported from v7.0S.
       
   595 
       
   596 	@publishedPartner
       
   597 	@released
       
   598 	*/
       
   599 		{
       
   600 	public:
       
   601 		IMPORT_C TDnsInfoV2();
       
   602 	public:
       
   603 		/** Primary DNS server name.*/
       
   604 		TProtocolAddress iPrimaryDns;
       
   605 		/** Secondary DNS server name.*/
       
   606 		TProtocolAddress iSecondaryDns;
       
   607 		};
       
   608 	/**
       
   609 	DNS information package since version 2 of the API.
       
   610 	
       
   611 	Supported from v7.0S.
       
   612 	*/
       
   613 	typedef TPckg<TDnsInfoV2> TTDnsInfoV2Pckg;
       
   614 
       
   615 	//
       
   616 	//  - this buffer can be used to store protocol related data
       
   617 	// (such as "PPP config options") which do not fit into the other fields of the
       
   618 	// TProtocolConfigOptionV2 class (see below).  The length of the buffer is based on
       
   619 	// the previous buffer used (before TProtocolConfigOptionV2 was implemented), which 
       
   620 	// was based on 3GPP TS 24.008 (253 octets).
       
   621 	//
       
   622 	enum {KMiscProtocolBufferLength = 253};
       
   623 	typedef TBuf8<KMiscProtocolBufferLength> TMiscProtocolBuffer;
       
   624 		
       
   625 	class TProtocolConfigOptionV2 : public TPacketBase
       
   626 	/**
       
   627 	Holds authentication data encapsulated in TAuthInfo, as 
       
   628 	well as further data that may be required for CHAP protocol 
       
   629 	authentication, such a challenge and response, since version
       
   630 	2 of the API.
       
   631 	
       
   632 	Can contain the DNS server names, the username, password, 
       
   633 	and CHAP associated data.
       
   634 
       
   635 	Normal authentication uses only TAuthInfo::iUsername and 
       
   636 	TAuthInfo::iPassword. The other parameters are for secure 
       
   637 	authentication. 
       
   638 
       
   639 	The maximum combined length of the TAuthInfo::iUsername 
       
   640 	and the secure information (iPassword or iResponse) is 50 bytes.
       
   641 	
       
   642 	Rather than keep the Protocol Config Option as a buffer it 
       
   643 	is encapsulated as a class. This enables data extraction to 
       
   644 	occur easily.
       
   645 	
       
   646 	Supported from v7.0S. 
       
   647 
       
   648 	@publishedPartner
       
   649 	@released
       
   650 	*/
       
   651 		{
       
   652 	public:
       
   653 		IMPORT_C TProtocolConfigOptionV2();
       
   654 	public:
       
   655 		/** Authentication data.*/
       
   656 		TAuthInfo iAuthInfo;
       
   657 		/** The pseudorandom data that is chosen by the client.*/
       
   658 		TAuthData iChallenge;
       
   659 		/** Calculated by the client with the MD5 algorithm using 
       
   660 		iChallenge, iId and iPassword.*/
       
   661 		TAuthData iResponse;
       
   662 		/** A one byte identifier that is chosen by the client.*/
       
   663 		TUint8 iId;
       
   664 		/** Primary and secondary DNS server names since version 2 
       
   665 		of the API.*/
       
   666 		TDnsInfoV2 iDnsAddresses;
       
   667 		TMiscProtocolBuffer iMiscBuffer;
       
   668 		};
       
   669 		
       
   670 	
       
   671 	class TContextConfigGPRS : public TPacketDataConfigBase
       
   672 	/**
       
   673 	Context configurations for GPRS packet data support. 
       
   674 	
       
   675 	Contains all the data necessary to configure a context on a GPRS network or 
       
   676 	UMTS packet network.
       
   677 
       
   678 	@publishedPartner
       
   679 	@released
       
   680 	*/
       
   681 		{
       
   682 	public:
       
   683 		IMPORT_C TContextConfigGPRS();
       
   684 	public:
       
   685 		/** The GPRS protocol type. The default value is EpdpTypeIPv4.
       
   686 	
       
   687 		@see TProtocolType */
       
   688 		TProtocolType iPdpType;
       
   689 		/** The GPRS Access point name. The default value is an empty string.
       
   690 	
       
   691 		@see TGSNAddress */
       
   692 		TGSNAddress iAccessPointName;
       
   693 		/** The GPRS protocol address. The default value is an empty string.
       
   694 	
       
   695 		@see TProtocolAddress */
       
   696 		TProtocolAddress iPdpAddress;		
       
   697 		/** The GRPS compression. This is a bit-wise sum of the wanted compression. The 
       
   698 		default value is 0.
       
   699 	
       
   700 		@see KPdpDataCompression
       
   701 		@see KPdpHeaderCompression */
       
   702 		TUint iPdpCompression;
       
   703 		/** Anonymous access requested. The default value is ENotRequired.
       
   704 	
       
   705 		@see TAnonymousAccess */
       
   706 		TAnonymousAccess iAnonymousAccessReqd;
       
   707 		/** Use Edge. The default value is EFalse. True for EGPRS.*/
       
   708 		TBool iUseEdge; // 
       
   709 		/** Protocol configuration options for version 2 of the API.
       
   710 		
       
   711 		Supported from v7.0S.*/
       
   712 		TProtocolConfigOptionV2 iProtocolConfigOption;
       
   713 		/** Network initiated context indication. */
       
   714 		TBool iNWIContext;
       
   715 		};
       
   716 	
       
   717   	
       
   718    	/**
       
   719 	Identifiers for Packet Flow Context.  See Table 10.5.161/3GPP TS 24.008.
       
   720    	*/
       
   721    	enum TPacketFlowIdentifier
       
   722    		{
       
   723    		/**
       
   724    		Best Effort
       
   725    		*/
       
   726    		EBestEffort,
       
   727 		/**
       
   728 		Signalling
       
   729 		*/
       
   730 		ESignalling,
       
   731 		/**
       
   732 		Sms
       
   733 		*/
       
   734    		ESms
       
   735    		};
       
   736    		
       
   737   	class TContextConfigR99_R4 : public TPacketDataConfigBase
       
   738 	/**
       
   739 	Enables Release 99 and Release 4 context configuration for version 2 of 
       
   740   	the API.
       
   741   	
       
   742   	Contains all the data necessary to configure a context on a R99/R4 packet 
       
   743   	network. 
       
   744   	
       
   745   	Supported from v7.0S.
       
   746 
       
   747 	@publishedPartner
       
   748 	@released
       
   749   	*/
       
   750   		{
       
   751   	public:
       
   752   		IMPORT_C TContextConfigR99_R4();
       
   753   	public:
       
   754   		/** The Rel99/Rel4 protocol type. The default value is EpdpTypeIPv4.*/
       
   755   		TProtocolType iPdpType;
       
   756   		/** The Rel99/Rel4 access point name. The default is an empty string.*/
       
   757   		TGSNAddress iAccessPointName;
       
   758   		/** The Rel99/Rel4 protocol address. The default value is an empty string.*/
       
   759   		TProtocolAddress iPdpAddress;		
       
   760   		/** Use Edge. The default is EFalse. True for EGPRS.*/
       
   761    		TBool iUseEdge; 
       
   762    		/** Protocol configuration options.*/
       
   763 		TProtocolConfigOptionV2 iProtocolConfigOption;
       
   764 		TBool iNWIContext; // Network initiated context indication.
       
   765 		TPacketFlowIdentifier iPFI; // Packet Flow indicator.
       
   766 		};
       
   767 
       
   768 	class TContextConfigCDMA : public TPacketDataConfigBase
       
   769 	/**
       
   770 	Enables context configurations for CDMA and CDMA2000 packet data 
       
   771 	and high speed packet data support. 
       
   772 	
       
   773 	Contains all the data necessary to configure a context on a CDMA packet 
       
   774 	network.
       
   775 
       
   776 	@publishedPartner
       
   777 	@released
       
   778 	@deprecated 9.5
       
   779 	*/
       
   780 		{
       
   781 	public:
       
   782 		IMPORT_C TContextConfigCDMA();
       
   783 	public:
       
   784 	/** Identifies the CDMA packet service option range (Low, High, High CDMA2000). 
       
   785 	The default value is KLowSpeedData.
       
   786 	
       
   787 	@see TServiceOption */
       
   788 		TUint			iServiceOption; 
       
   789 	/** The CDMA protocol type, either PPP or CDPD. The default value is EPdpTypePPP.
       
   790 	
       
   791 	@see TProtocolType */
       
   792 		TProtocolType	iProtocolType;	
       
   793 		};
       
   794 
       
   795 	// Configuration-related calls
       
   796 	IMPORT_C void SetConfig(TRequestStatus& aStatus, const TDesC8& aConfig) const;
       
   797 	IMPORT_C void GetConfig(TRequestStatus& aStatus, TDes8& aConfig) const;
       
   798 	IMPORT_C void NotifyConfigChanged(TRequestStatus& aStatus, TDes8& aConfig) const;
       
   799 	IMPORT_C void Activate(TRequestStatus& aStatus) const;
       
   800 	IMPORT_C void Deactivate(TRequestStatus& aStatus) const;
       
   801 	IMPORT_C void Delete(TRequestStatus& aStatus) const;
       
   802 	IMPORT_C void LoanCommPort(TRequestStatus& aStatus, RCall::TCommPort& aDataPort) const; // Deprecated method.
       
   803 	IMPORT_C void RecoverCommPort(TRequestStatus& aStatus) const; // Deprecated method.
       
   804 	IMPORT_C void GetDnsInfo(TRequestStatus& aStatus, TDes8& aDnsInfo) const; 
       
   805 
       
   806 
       
   807 
       
   808 	enum TContextStatus
       
   809 		{
       
   810 	/** Current status is unknown. */
       
   811 		EStatusUnknown,
       
   812 	/** Context is not activated. */
       
   813 		EStatusInactive,
       
   814 	/** Context is currently being activated. */
       
   815 		EStatusActivating,
       
   816 	/** Context is active. */
       
   817 		EStatusActive,
       
   818 	/** Context is currently being deactivated. */
       
   819 		EStatusDeactivating,		
       
   820 	/** Context is suspended. */
       
   821 		EStatusSuspended,
       
   822 	/** Context has been deleted. */
       
   823 		EStatusDeleted,
       
   824 	/** Context is currently in data receiving mode.The service transitions 
       
   825 		to this state when the data transmission starts.This is expected 
       
   826 		to happen after some time of arrival of SESSION START message from the network.
       
   827 	    Note : Applicable only to MBMS context */	
       
   828 		EStatusReceiving
       
   829 		};
       
   830 
       
   831 	IMPORT_C TInt GetStatus(TContextStatus& aContextStatus) const;
       
   832 	IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TContextStatus& aContextStatus);
       
   833 	IMPORT_C TInt GetProfileName(TName& aQoSProfile) const;
       
   834 
       
   835 	struct TDataVolume 
       
   836 /** Holds the amount of sent and received data.
       
   837 
       
   838 The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */
       
   839 		{
       
   840 		TUint32 iBytesSent;
       
   841 	/** Overflow counter for the bytes sent.
       
   842 	
       
   843 	The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */
       
   844 		TUint32 iOverflowCounterSent;
       
   845 	/** The number of bytes received.
       
   846 	
       
   847 	The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */
       
   848 		TUint32 iBytesReceived;
       
   849 	/** Overflow counter for the bytes received.
       
   850 	
       
   851 	The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */
       
   852 		TUint32 iOverflowCounterReceived;
       
   853 		};
       
   854 
       
   855 	struct TNotifyDataTransferredRequest
       
   856 		{
       
   857 		TUint iRcvdGranularity;
       
   858 		TUint iSentGranularity;
       
   859 		};
       
   860 
       
   861     /** 
       
   862     Determines which fields in the TConnectionInfoXXX parameter class are valid.
       
   863     
       
   864     @see TConnectionInfoV1 
       
   865     */
       
   866 	enum TConnectionInfoFlags
       
   867 		{
       
   868     	/** The HSDPA category field is valid in the connection info class.
       
   869     	
       
   870     	Modes: WCDMA */
       
   871 		KHSDPACategory		= 0x00000001,
       
   872 		
       
   873     	/** The HSUPA category field is valid in the connection info class.
       
   874     	
       
   875     	Modes: WCDMA */		
       
   876 		KHSUPACategory		= 0x00000002
       
   877         };
       
   878 
       
   879   	class TConnectionInfoV1 : public TConnectionInfoBase
       
   880 	/**
       
   881 	Connection info class is used to carry miscellaneous information about data connection.
       
   882   	
       
   883   	Contains all kind of packet data connection related information that is useful for
       
   884   	ETel API clients.
       
   885   	
       
   886   	Supported from v9.5.
       
   887 
       
   888 	@publishedPartner
       
   889 	@released
       
   890   	*/
       
   891   		{
       
   892   	public:
       
   893   		IMPORT_C TConnectionInfoV1();
       
   894   	public:
       
   895         /**HSDPA UE category as defined in 3GPP TS 25.306 Table 5.1a: "FDD 
       
   896         HS-DSCH physical layer categories". Value "0" means HSDPA is not used,
       
   897         value "1" means category 1, value "2" means category 2 etc.*/
       
   898         TUint iHSDPACategory;
       
   899  
       
   900         /*HSUPA (E-DCH) UE category as defined in 3GPP TS 25.306 Table 5.1g: 
       
   901         "FDD E-DCH physical layer categories". Value "0" means HSUPA is not used,
       
   902         value "1" means category 1, value "2" means category 2 etc.*/       
       
   903         TUint iHSUPACategory;
       
   904 		};
       
   905 
       
   906 
       
   907 	IMPORT_C TInt GetDataVolumeTransferred(TDataVolume& aVolume) const; // Deprecated method.
       
   908 	IMPORT_C void NotifyDataTransferred(TRequestStatus& aStatus, TDataVolume& aVolume, TUint aRcvdGranularity=0x1000,TUint aSentGranularity=0x1000) const; 
       
   909 	IMPORT_C void GetConnectionSpeed(TRequestStatus& aStatus, TUint& aRate) const; // get the current speed (bits per second) of the connection
       
   910 	IMPORT_C void NotifyConnectionSpeedChange(TRequestStatus& aStatus, TUint& aRate) const;  // notify client if there's a change in the connection speed
       
   911 
       
   912 	// N.B. the following 2 methoda are only supported if telephony was built with SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW macro
       
   913     IMPORT_C void GetConnectionInfo(TRequestStatus& aStatus, TDes8& aInfo) const; // get connection information
       
   914 	IMPORT_C void NotifyConnectionInfoChange(TRequestStatus &aStatus, TDes8& aInfo) const; // notify client if connection information changes	
       
   915 
       
   916 	IMPORT_C TInt GetLastErrorCause(TInt& aError) const;
       
   917 
       
   918 	IMPORT_C void GetDataVolumeTransferred(TRequestStatus& aStatus, TDataVolume& aVolume) const; // Recommended method variant.
       
   919 	
       
   920 	class TDataChannelV2 : public TPacketBase
       
   921 	/**
       
   922 	Contains data channel parameters.
       
   923 	
       
   924 	Contains the information previously returned by	LoanCommPort() 
       
   925 	(iCsy and iPort), as well as the new information which is generated 
       
   926 	by context creation, e.g. the context (data channel) identity, 
       
   927 	for version 2 of the API.  
       
   928 
       
   929 	It is passed as a packaged parameter to RPacketContext::InitialiseContext().
       
   930 	
       
   931 	@publishedPartner
       
   932 	@released
       
   933 	*/
       
   934 		{
       
   935 	public:
       
   936 		IMPORT_C TDataChannelV2();
       
   937 	public:
       
   938 		/**CSY name.
       
   939 		@deprecated Data previously used by LoanDataPort() in version 1 of the API.*/
       
   940 		TFileName iCsy;		
       
   941 		/**Port name 
       
   942 		@deprecated Data previously used by LoanDataPort(). */
       
   943 		TName iPort;			
       
   944 		/**Context Identity.
       
   945 		The Channel name information returned by the lower layers (Nif). */
       
   946 		TName iChannelId;	
       
   947 		};
       
   948 	/** 
       
   949 	Data channel package since version 2 of the API.
       
   950 
       
   951 	Supported from v7.0S.
       
   952 	*/
       
   953 	typedef TPckg<TDataChannelV2> TDataChannelV2Pckg;	
       
   954 
       
   955 	IMPORT_C void InitialiseContext(TRequestStatus& aStatus, TDes8& aDataChannelV2Pckg) const; // This method supersedes the LoanCommPort() and RecoverCommPort() methods.
       
   956 
       
   957 	enum {KIPAddressSize = 16};				   //< TIPAddress size
       
   958 	/**
       
   959 	Array to hold either IPv4 or IPv6 address or Subnet mask since version 2 of the API.
       
   960 	
       
   961 	Supported from v7.0S.
       
   962 	*/	
       
   963 	typedef TUint8 TIPAddress[KIPAddressSize]; 
       
   964 	
       
   965 	
       
   966 	class TPacketFilterV2 : public TPacketBase
       
   967 	/**
       
   968 	Packet filter package since version 2 of the API.
       
   969 
       
   970 	Contains member data compatible with parameters required for configuring 
       
   971 	a packet filter on a Rel99/R4 packet network. 
       
   972 
       
   973 	Inherits from the TPacketBase class to make it future 
       
   974 	proof (extensible).
       
   975 
       
   976 	Supported from v7.0S.
       
   977 
       
   978 	@publishedPartner
       
   979 	@released
       
   980 	*/
       
   981 
       
   982 		{
       
   983 	public:
       
   984 		IMPORT_C TPacketFilterV2();
       
   985 	public:
       
   986 		/** Packet filter identifier. Value range: 1 - 8.*/
       
   987 		TInt iId;						
       
   988 		/** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/
       
   989 		TInt iEvaluationPrecedenceIndex;	
       
   990 		/** Domain Source address.*/
       
   991 		TIPAddress iSrcAddr;				
       
   992 		/** Domain Subnet mask.*/
       
   993 		TIPAddress iSrcAddrSubnetMask;		
       
   994 		/** Protocol number (IPv4) or Next Header (IPv6) field of incoming packets. 
       
   995 		Value range 0 - 255.*/
       
   996 		TInt iProtocolNumberOrNextHeader;	 
       
   997 		/** Minimum source port number of incoming packets. Value range 0 - 65535.*/
       
   998 		TInt iSrcPortMin;					 
       
   999 		/** Maximum source port number of incoming packets. Value range 0 - 65535.*/
       
  1000 		TInt iSrcPortMax;					 
       
  1001 		/** Lowest destination port number of incoming packets. Value range 0 - 65535.*/
       
  1002 		TInt iDestPortMin;					
       
  1003 		/** Maximum destination port number of incoming packets. Value range 0 - 65535.*/
       
  1004 		TInt iDestPortMax;					 
       
  1005 		/** Security Parameter Index, 32-bit field.*/
       
  1006 		TUint32 iIPSecSPI;					
       
  1007 		/** Type of Service (IPv4) or Traffic Class (IPv6). 
       
  1008 		1 octet TOS/Traffic class + 1 octet TOS/Traffic class Mask.*/
       
  1009 		TUint16 iTOSorTrafficClass;			 
       
  1010 		/** Flow label (IPv6 only) of incoming packets. 3 octets with 20-bit field 
       
  1011 		containing the flow label.*/
       
  1012 		TUint32 iFlowLabel;					
       
  1013 		};
       
  1014 	/** Packaged TPacketFilterV2.*/
       
  1015 	typedef TPckg<TPacketFilterV2> TPacketFilterV2Pckg;	
       
  1016 		
       
  1017 	
       
  1018 	/**
       
  1019 	Maximum length of DNS Fully Qualified Domain Name (RFC 1123)
       
  1020 	
       
  1021 	@publishedPartner
       
  1022 	*/
       
  1023 	enum TFQDNLength
       
  1024 	{
       
  1025 	KMaxFQDNLength=255,
       
  1026 	};
       
  1027 	
       
  1028 	typedef TBuf8<KMaxFQDNLength> TAuthorizationToken;
       
  1029 	
       
  1030 	/**
       
  1031 	Packet Filter type identifier.
       
  1032 	
       
  1033 	@publishedPartner
       
  1034 	@released
       
  1035 	*/
       
  1036 	enum TPacketFilterType
       
  1037 		{
       
  1038 		/** Unknown filter type.*/
       
  1039 		EPacketFilterTypeUnknown,
       
  1040 		/** Filter Type One.*/
       
  1041 		EPacketFilterTypeOne,
       
  1042 		/** Filter Type Two.*/
       
  1043 		EPacketFilterTypeTwo,
       
  1044 		/** Filter Type Three.*/
       
  1045 		EPacketFilterTypeThree,
       
  1046 		};
       
  1047 		
       
  1048 	class TPacketFilterV3 : public TPacketFilterV2
       
  1049 	/**
       
  1050 	Packet filter that supports packet filter types.
       
  1051 	Contains member data compatible with parameters required
       
  1052     for configuring a packet filter on a Rel99/R4/R5 packet network. . 
       
  1053 
       
  1054 	Inherits from the TPacketFilterV2 class.
       
  1055 
       
  1056 	Supported from 9.1
       
  1057 
       
  1058 	@publishedPartner
       
  1059 	@released
       
  1060 	*/
       
  1061 		{
       
  1062 	public:
       
  1063 		IMPORT_C TPacketFilterV3(TPacketFilterType aType);
       
  1064 		IMPORT_C TPacketFilterV3();
       
  1065 		enum TPacketFilterDataBitmapPos
       
  1066 			{
       
  1067 			/** Bitmap for Domain Source address.*/
       
  1068 			EPacketFilterSrcAddr						= 0x001,
       
  1069 			/** Bitmap for Domain Subnet mask.*/
       
  1070 			EPacketFilterSrcAddrSubnetMask			= 0x002,
       
  1071 			/** Bitmap for Protocol number (IPv4) or Next Header (IPv6) field of incoming packets.*/
       
  1072 			EPacketFilterProtocolNumberOrNextHeader	= 0x004,
       
  1073 			/** Bitmap for Minimum source port number of incoming packets.*/
       
  1074 			EPacketFilterSrcPortMin					= 0x008,
       
  1075 			/** Bitmap for Maximum source port number of incoming packets.*/
       
  1076 			EPacketFilterSrcPortMax					= 0x010,
       
  1077 			/** Bitmap for Lowest destination port number of incoming packets.*/
       
  1078 			EPacketFilterDestPortMin					= 0x020,
       
  1079 			/** Bitmap for Maximum destination port number of incoming packets.*/
       
  1080 			EPacketFilterDestPortMax					= 0x040,
       
  1081 			/** Bitmap for Security Parameter Index.*/
       
  1082 			EPacketFilterIPSecSPI					= 0x080,
       
  1083 			/** Bitmap for Type of Service (IPv4) or Traffic Class (IPv6).*/
       
  1084 			EPacketFilterTOSorTrafficClass			= 0x100,
       
  1085 			/** Bitmap for Flow label (IPv6 only) of incoming packets.*/
       
  1086 			EPacketFilterFlowLabel					= 0x200,
       
  1087 			};
       
  1088 			
       
  1089 		inline TBool IsPresent(TPacketFilterDataBitmapPos aDataMemberBitmapPos);
       
  1090 		inline void Reset(TPacketFilterDataBitmapPos aDataMemberBitmapPos);
       
  1091 		inline void Reset();
       
  1092 	public:
       
  1093 		/** Packet filter identifier. Value range: 1 - 8.*/
       
  1094 		using TPacketFilterV2::iId;
       
  1095 		/** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/
       
  1096 		using TPacketFilterV2::iEvaluationPrecedenceIndex;
       
  1097 	
       
  1098 	public:
       
  1099 		
       
  1100 		IMPORT_C TBool SetSrcAddr(TIPAddress &aSrcAddr);
       
  1101 		IMPORT_C TBool SetSrcAddrSubnetMask(TIPAddress &aSrcAddrSubnetMask);
       
  1102 		
       
  1103 		IMPORT_C TBool SetProtocolNumberOrNextHeader(TInt aProtocolNumberOrNextHeader);
       
  1104 		
       
  1105 		IMPORT_C TBool SetSrcPortMin(TInt aSrcPortMin);
       
  1106 		IMPORT_C TBool SetSrcPortMax(TInt aSrcPortMax);
       
  1107 		
       
  1108 		IMPORT_C TBool SetDestPortMin(TInt aDestPortMin);
       
  1109 		IMPORT_C TBool SetDestPortMax(TInt aDestPortMax);
       
  1110 		
       
  1111 		IMPORT_C TBool SetSPI(TUint32 aIPSecSPI);
       
  1112 		
       
  1113 		IMPORT_C TBool SetTOSorTrafficClass(TUint16 aTOSorTrafficClass);
       
  1114 		IMPORT_C TBool SetFlowLabel(TUint32 aFlowLabel);
       
  1115 		
       
  1116 	
       
  1117 	public:
       
  1118 	
       
  1119 		/** Return the Domain Source address. 
       
  1120 		
       
  1121 		@return Domain Source address.
       
  1122 		*/
       
  1123 		inline const TIPAddress& SrcAddr()
       
  1124 		{
       
  1125 			return iSrcAddr;
       
  1126 		};
       
  1127 		
       
  1128 		/** Return the Domain Subnet mask.
       
  1129 		
       
  1130 		@return Domain Subnet mask.
       
  1131 		*/
       
  1132 		inline const TIPAddress& SrcAddrSubnetMask()
       
  1133 		{
       
  1134 			return iSrcAddrSubnetMask;
       
  1135 		};
       
  1136 				
       
  1137 		inline TInt ProtocolNumberOrNextHeader();
       
  1138 		
       
  1139 		inline TInt SrcPortMin();
       
  1140 		inline TInt SrcPortMax();
       
  1141 		
       
  1142 		inline TInt DestPortMin();
       
  1143 		inline TInt DestPortMax();
       
  1144 		
       
  1145 		inline TUint32 SPI(); 
       
  1146 		
       
  1147 		inline TUint16 TOSorTrafficClass();
       
  1148 		inline TUint32 FlowLabel();
       
  1149 	protected:
       
  1150 		/** Initialised in the constructor - type can be I, II or III
       
  1151 		*/
       
  1152 		TPacketFilterType iType;
       
  1153 		/** Bitmap of allowed attributes set in the constructor in accordance to type
       
  1154 		of the filter as defined in TS 23.060.
       
  1155 		*/
       
  1156 		TUint16 iAllowedDataBitmap;
       
  1157 		/** Bitmap of data members that are set(initialised) - data member can be set
       
  1158 		in allowed for the specified type of the filter only.
       
  1159 		*/
       
  1160 		TUint16 iPresentDataBitmap;
       
  1161 		};
       
  1162 	/** Packaged TPacketFilterV3.*/
       
  1163 	typedef TPckg<TPacketFilterV3> TPacketFilterV3Pckg;	
       
  1164 	
       
  1165 	/**
       
  1166 	Contains Authorization Token and associated Flow Identifiers.
       
  1167 	Defines member data needed to set media authorization TFT parameters - single Authorization Token parameter 
       
  1168 	followed by the list of Flow Identifier parameter(s), as defined in 3GPP TS 24.008. 
       
  1169 	
       
  1170 	Contains data member that's instance of TPacketBase class to make it future proof (extensible); In order to support serialization,
       
  1171 	present implementation of TPacketBase has to be extended so that it supports methods needed (ExternalizeL()/InternalizeL()).
       
  1172 	Supported from 9.1.
       
  1173 
       
  1174 	@publishedPartner
       
  1175 	@released
       
  1176 	*/
       
  1177 	class CTFTMediaAuthorizationV3 : public CBase	
       
  1178 		{
       
  1179 	public:
       
  1180 		IMPORT_C ~CTFTMediaAuthorizationV3();
       
  1181 		IMPORT_C static CTFTMediaAuthorizationV3* NewL();			
       
  1182 	public:	
       
  1183 		IMPORT_C virtual void ExternalizeL(HBufC8*& aBuffer) const;
       
  1184 		IMPORT_C virtual void InternalizeL(TDes8& aBuffer);
       
  1185 		IMPORT_C TUint ExtensionId()const;
       
  1186 
       
  1187 
       
  1188 		/** Flow identifier */	
       
  1189 		struct TFlowIdentifier
       
  1190 			{
       
  1191 			/** Media component number. */
       
  1192 			TUint16 iMediaComponentNumber;
       
  1193 			/** IP flow number. */
       
  1194 			TUint16 iIPFlowNumber;
       
  1195 			};				
       
  1196 		/** Authorization token */		
       
  1197 		TAuthorizationToken iAuthorizationToken;			 
       
  1198 		/** List of flow identifiers authorization token is granted for*/
       
  1199 		RArray<TFlowIdentifier>	iFlowIds;
       
  1200 	protected:
       
  1201 		CTFTMediaAuthorizationV3();
       
  1202 		TUint iExtensionId;
       
  1203 		};
       
  1204 	
       
  1205 	IMPORT_C void AddMediaAuthorizationL(TRequestStatus& aStatus, CTFTMediaAuthorizationV3& aMediaAuthorization) const;
       
  1206 	IMPORT_C void RemoveMediaAuthorization(TRequestStatus& aStatus, TAuthorizationToken& aAuthorizationToken) const;
       
  1207 
       
  1208 
       
  1209 	IMPORT_C TInt OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName);
       
  1210 	IMPORT_C void EnumeratePacketFilters(TRequestStatus& aStatus, TInt& aCount) const;
       
  1211 	IMPORT_C void GetPacketFilterInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aPacketFilterInfo) const;
       
  1212 	IMPORT_C void AddPacketFilter(TRequestStatus& aStatus, const TDesC8& aPacketFilterInfo) const;
       
  1213 	IMPORT_C void RemovePacketFilter(TRequestStatus& aStatus, TInt aId) const;
       
  1214 	IMPORT_C void ModifyActiveContext(TRequestStatus& aStatus) const;
       
  1215 	IMPORT_C void CreateNewTFT(TRequestStatus& aStatus, const TInt aSize) const;
       
  1216 	IMPORT_C void DeleteTFT(TRequestStatus& aStatus) const;
       
  1217 	
       
  1218 	
       
  1219 	
       
  1220 	/**
       
  1221 	Protocol identifiers, as defined in 24.008, section 10.5.6.3
       
  1222 	*/
       
  1223 	enum TPcoProtocolId
       
  1224 	{
       
  1225 	/** PCO identifier for LCP.*/
       
  1226 	EETelPcktProtocolLcpId = 0xc021,	
       
  1227 	/** PCO identifier for PAP.*/
       
  1228 	EETelPcktProtocolPapId = 0xc023,
       
  1229 	/** PCO identifier for CHAP.*/
       
  1230 	EETelPcktProtocolChapId = 0xc223,
       
  1231 	/** PCO identifier for IPCP.*/
       
  1232 	EETelPcktProtocolIpcpId = 0x8021
       
  1233 	};
       
  1234 
       
  1235 	/**
       
  1236 	PCO additional parameter identifiers in MS to network direction, as defined in 3GPP TS 24.008, section 10.5.6.3
       
  1237 	*/
       
  1238 	enum TPcoIDMSToNetwork
       
  1239 	{
       
  1240 	/** PCO MS additional parameter identifier for a PCSCF address request.*/
       
  1241 	EEtelPcktPCSCFAddressRequest = 0x01,
       
  1242 	/** PCO MS additional parameter identifier for an IM CN subsystem signalling flag.*/
       
  1243 	EEtelPcktIMCNMSSubsystemSignallingFlag = 0x02,
       
  1244 	/** PCO MS additional parameter identifier for a DNS server address request.*/
       
  1245 	EEtelPcktDNSServerAddressRequest = 0x03,
       
  1246 	/** Not currently supported.*/
       
  1247 	EEtelPcktNotSupported = 0x04,
       
  1248 	};
       
  1249 
       
  1250 	/**
       
  1251 	PCO additional parameter identifiers in  network to MS direction, as defined in 3GPP TS 24.008, section 10.5.6.3
       
  1252 	*/
       
  1253 	enum TPcoIDNetworkToMS
       
  1254 	{
       
  1255 	/** PCO network additional parameter identifier for a PCSCF address.*/
       
  1256 	EEtelPcktPCSCFAddress = 0x01,
       
  1257 	/** PCO network additional parameter identifier for an IM CN subsystem signalling flag.*/
       
  1258 	EEtelPcktIMCNNetworkSubsystemSignallingFlag = 0x02,
       
  1259 	/** PCO network additional parameter identifier for a DNS server address.*/
       
  1260 	EEtePcktDNSServerAddress= 0x03,
       
  1261 	/** PCO network additional parameter identifier for a policy control rejection code.*/
       
  1262 	EEtelPcktPolicyControlRejectionCode = 0x04,
       
  1263 	};
       
  1264 
       
  1265 
       
  1266 	/** 
       
  1267 	Helper class that implements PCO IE identifier.
       
  1268 	
       
  1269 	@publishedPartner
       
  1270 	@released
       
  1271 	*/
       
  1272 	class TPcoId : public MTlvItemIdType
       
  1273 	{
       
  1274 	public:
       
  1275 		inline TPcoId();
       
  1276 		inline TPcoId(TUint16 aId);
       
  1277 		inline void ExternalizeL(TDes8&)const;
       
  1278 		inline void InternalizeL(TDesC8&);
       
  1279 		inline TUint SerializedLength() const;	
       
  1280 		inline TUint16 Id()const;
       
  1281 		inline void SetId(TUint16);
       
  1282 		inline TBool IsEqual(const MTlvItemIdType& aOtherIdType)const;	
       
  1283 	protected:
       
  1284 		/** PCO Id*/
       
  1285   		TUint16 iId;
       
  1286 	};
       
  1287 	
       
  1288 	/** 
       
  1289 	Helper class that implements PCO IE identifier length.
       
  1290 	
       
  1291 	@publishedPartner
       
  1292 	@released
       
  1293 	*/
       
  1294 	class TPcoItemDataLength: public MTlvItemDataLengthType
       
  1295 	{
       
  1296 	public:
       
  1297 		inline TPcoItemDataLength();
       
  1298 		inline TPcoItemDataLength(TUint8 aLen);
       
  1299 		inline void SetDataLength(TUint aLength);
       
  1300 		inline TUint DataLength() const;
       
  1301 		inline void ExternalizeL(TDes8&) const;
       
  1302 		inline void InternalizeL(TDesC8&);
       
  1303 		inline TUint SerializedLength()const;
       
  1304 	protected:
       
  1305 		/** length of associated item data*/
       
  1306   		TUint8 iDataLength;
       
  1307 	};
       
  1308 
       
  1309 	/** 
       
  1310 	Identifiers for the type of data data compression applicable for SNDCP only, 
       
  1311 	as defined in 3GPP TS  44.065, section 6.6.1.1.4. 
       
  1312 	Values listed in the enumeration do not hold same numerical values as those defined in the specifications, 
       
  1313 	as ENoDataComression and EManufacturerDefaultDataComression are introduced in order to be utilised when no 
       
  1314 	compression and device default compression algorithm are needed, respectively. 
       
  1315 	*/ 
       
  1316 	enum TDataCompression 
       
  1317 		{ 
       
  1318 		/** 
       
  1319 		No compression 
       
  1320 		*/ 
       
  1321 		ENoDataCompression,         
       
  1322 		/** 
       
  1323 		Compression algorithm preferred by the device manufacturer 
       
  1324 		*/ 
       
  1325 		EManufacturerDefaultDataCompression,         
       
  1326 		/** 
       
  1327 		V.42 bis 
       
  1328 		*/ 
       
  1329 		EV42, 
       
  1330         /** 
       
  1331         V.44   
       
  1332         */ 
       
  1333         EV44, 
       
  1334         };
       
  1335         
       
  1336 	/** 
       
  1337 	Identifiers for type of SNDCP & PDCP header compression as defined 
       
  1338 	in 3GPP TS  44.065, section 6.5.1.1.4, 
       
  1339 	Values listed in the enumeration do not hold same numerical values as those defined in the specifications, 
       
  1340 	as ENoHeaderCompression and EManufacturerDefaultHeaderCompression are introduced in order to be utilised when no 
       
  1341 	compression and device default compression algorithm are needed, respectively. 
       
  1342 	*/ 
       
  1343 	enum THeaderCompression 
       
  1344 		{ 
       
  1345 		/** 
       
  1346 		No compression 
       
  1347 		*/ 
       
  1348 		ENoHeaderCompression,         
       
  1349 		/** 
       
  1350 		Compression algorithm preferred by the device manufacturer 
       
  1351 		*/ 
       
  1352 		EManufacturerDefaultHeaderCompression,         
       
  1353 		/** 
       
  1354 		Compression algorithm defined in RFC 1144 
       
  1355 		*/ 
       
  1356 		ERfc1144,         
       
  1357 		/** 
       
  1358 		Compression algorithm defined in RFC 2507 
       
  1359 		*/ 
       
  1360 		ERfc2507,         
       
  1361 		/** 
       
  1362 		Robust header compression algorithm defined in RFC 3095 
       
  1363 		*/ 
       
  1364 		ERohc,         
       
  1365 		};
       
  1366 
       
  1367 	class TContextConfig_R5 : public TContextConfigR99_R4 
       
  1368 	/** 
       
  1369 	Reintroduces support for setting of header/data compression in SNDCP & PDCP         
       
  1370 	Supported from v9.1. 
       
  1371 	@publishedPartner 
       
  1372 	@released
       
  1373 	*/ 
       
  1374 		{ 
       
  1375 	public: 
       
  1376 		IMPORT_C TContextConfig_R5(); 
       
  1377 	         
       
  1378 	public: 
       
  1379 		/** defines whether SNDCP & PDCP header compression shall be utilised or not. 
       
  1380 		If former is the case, it holds value of that defines compression algorithm to be exercised. 
       
  1381 		The default value is ENone - no compression is needed. 
       
  1382 		*/ 
       
  1383 		THeaderCompression iPdpHeaderCompression; 
       
  1384 		/** defines whether SNDCP data compression shall be utilised or not. 
       
  1385 		If former is the case, it holds value of that defines compression algorithm to be exercised.                   
       
  1386 		The default value is ENone - no compression is needed. 
       
  1387 		*/ 
       
  1388 		TDataCompression iPdpDataCompression; 
       
  1389 		}; 
       
  1390 	
       
  1391 protected:
       
  1392 	IMPORT_C virtual void ConstructL();
       
  1393 	IMPORT_C virtual void Destruct();
       
  1394 protected:
       
  1395 	CPacketContextPtrHolder* iEtelPacketContextPtrHolder;
       
  1396 	};
       
  1397 
       
  1398 //
       
  1399 //                       MBMS Context 
       
  1400 //
       
  1401 class RPacketMbmsContext : public RPacketContext
       
  1402 /** 
       
  1403 Defines the MBMS context and the configuration of a connection to the network's 
       
  1404 packet-switched service. 
       
  1405 The functionality associated with the context of a MBMS connection is inherited 
       
  1406 from RPacketContext class.
       
  1407 The behaviour of OpenNewContext API is redefined.
       
  1408 Every instance of this class has RPacketService as a base class.
       
  1409 
       
  1410 @publishedPartner
       
  1411 @released
       
  1412 */	
       
  1413 	{
       
  1414 public:
       
  1415 	IMPORT_C RPacketMbmsContext();
       
  1416 	IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
       
  1417 	IMPORT_C void Close();
       
  1418 	friend class CRetrievePcktMbmsSessionList;
       
  1419 	
       
  1420 	class TContextConfigMbmsV1: public TPacketDataConfigBase
       
  1421 	/**
       
  1422 	Context configurations for MBMS support. 
       
  1423 	
       
  1424 	Contains all the data necessary to configure a context on a MBMS network.
       
  1425 	
       
  1426 	@see RPacketContext::SetConfig()
       
  1427 	
       
  1428    	@publishedPartner
       
  1429 	@released
       
  1430 	*/	
       
  1431 		{
       
  1432 	public:
       
  1433 		IMPORT_C TContextConfigMbmsV1();
       
  1434 	public:
       
  1435 		/** Input parameter : Temporary mobile group identity 
       
  1436 		 * A unique name to an MBMS service
       
  1437 		 */
       
  1438 		TTmgi   iTmgi;
       
  1439 		
       
  1440 		/** Input Parameter : MBMS access bearer information 
       
  1441 		 * @see TMbmsScope
       
  1442 		 */
       
  1443 		TMbmsScope	iMbmsAccessBearer;
       
  1444 		
       
  1445 		/** Input parameter : MBMS service priority options 
       
  1446 		 * Specifies the priority of the MBMS service to be received.
       
  1447 		 * @see  TMbmsServicePriority
       
  1448 		 */
       
  1449 		TMbmsServicePriority	iMbmsServicePriority;
       
  1450 		
       
  1451 		/** Input parameter : MBMS service mode 
       
  1452 		 * @see TMbmsServiceMode
       
  1453 		 */
       
  1454 		TMbmsServiceMode	iMbmsServiceMode;
       
  1455 		
       
  1456 		/** Input parameter : MBMS session flag 
       
  1457 		 * ETrue indicates that an MBMS service has one or more sessions. 
       
  1458 		 */
       
  1459 		TBool	iMbmsSessionFlag;
       
  1460      	};
       
  1461 		
       
  1462     
       
  1463 	//Packaged version of TContextConfigMbmsV1, used when this structure has to be passed via IPC.
       
  1464 	typedef TPckg<TContextConfigMbmsV1> TContextConfigMbmsV1Pckg;
       
  1465 	
       
  1466 	IMPORT_C void UpdateMbmsSessionList(TRequestStatus& aStatus,const TMbmsAction aAction, const TMbmsSessionId aSessionId = 0) const;	
       
  1467 	
       
  1468 	class CMbmsSession : public CBase
       
  1469 	/**
       
  1470 	 * Captures the list of session(s) of an MBMS service.
       
  1471 	 * @publishedPartner
       
  1472 	 * @released
       
  1473 	 */
       
  1474      	{
       
  1475      public:
       
  1476 	     IMPORT_C static CMbmsSession* NewL();
       
  1477 	     IMPORT_C void InternalizeL(const TDesC8& aBuffer);
       
  1478 	     IMPORT_C void ExternalizeL(HBufC8*& aBuffer);
       
  1479 	     IMPORT_C TUint ExtensionId() const;
       
  1480 	     IMPORT_C ~CMbmsSession();
       
  1481      public:
       
  1482      	/**
       
  1483      	 * Output Parameter.
       
  1484      	 * Contains the list of sessions pertaining to the MBMS service.
       
  1485      	 */
       
  1486      	TMbmsSessionIdList iSessionIdList;
       
  1487      	/**
       
  1488      	 * Defines the type of the class
       
  1489      	 */
       
  1490      	TUint iExtensionId;
       
  1491      protected:
       
  1492      	CMbmsSession();
       
  1493      	};
       
  1494      
       
  1495 	};
       
  1496 
       
  1497 class CPacketPtrHolder;
       
  1498 class CPcktMbmsMonitoredServiceList;
       
  1499 class RPacketService : public RTelSubSessionBase
       
  1500 /**
       
  1501 Defines a packet-switched connection to a packet network.
       
  1502 
       
  1503 This is the main packet network class. 
       
  1504 It encapsulates functionality associated with controlling a packet-switched connection: 
       
  1505 attaching, detaching, querying packet network capabilities, etc.
       
  1506 @publishedPartner
       
  1507 @released
       
  1508 */
       
  1509 	{
       
  1510 public:
       
  1511 	IMPORT_C RPacketService();
       
  1512 	IMPORT_C TInt Open(RPhone& aPhone);
       
  1513 	IMPORT_C void Close();
       
  1514 
       
  1515 	IMPORT_C void NotifyContextAdded(TRequestStatus& aStatus, TDes& aContextId) const;
       
  1516 	IMPORT_C void Attach(TRequestStatus& aStatus) const;	
       
  1517 	IMPORT_C void Detach(TRequestStatus& aStatus) const;	
       
  1518 
       
  1519 	friend TInt RPacketContext::OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName);	//< This method calls the internal method RPacketService::PrepareOpenSecondary(const TDesC& aOriginalContextName)
       
  1520 	friend TInt RPacketContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
       
  1521 	friend TInt RPacketMbmsContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
       
  1522 
       
  1523 	friend class CRetrievePcktMbmsMonitoredServices;
       
  1524 	
       
  1525 /** Defines the packet data connection status. */
       
  1526 	enum TStatus
       
  1527 		{
       
  1528 	/** Unattached to network and inactive packet data connection. */
       
  1529 		EStatusUnattached,	
       
  1530 	/** Attached to network and inactive packet data connection. */
       
  1531 		EStatusAttached,	
       
  1532 	/** Attached to network and active packet data connection. */
       
  1533 		EStatusActive,		
       
  1534 	/** Attached to network and suspended packet data connection. */
       
  1535 		EStatusSuspended	
       
  1536 		};
       
  1537 
       
  1538 	IMPORT_C TInt GetStatus(TStatus& aPacketStatus) const;
       
  1539 	IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TStatus& aPacketStatus) const;
       
  1540 	IMPORT_C void NotifyContextActivationRequested(TRequestStatus& aStatus, TDes8& aContextParameters) const;
       
  1541 	IMPORT_C void RejectActivationRequest(TRequestStatus& aStatus) const;
       
  1542 
       
  1543 	struct TContextInfo
       
  1544 	/** Struct to contain the context information.
       
  1545 
       
  1546 	@see GetContextInfo() */
       
  1547 		{
       
  1548 		/** The name of the context.
       
  1549 		
       
  1550 		@see TName */
       
  1551 		TName iName;
       
  1552 		/** The current status of the context.
       
  1553 		
       
  1554 		@see RPacketContext::TContextStatus */
       
  1555 		RPacketContext::TContextStatus iStatus;
       
  1556 		};
       
  1557 
       
  1558 	IMPORT_C void EnumerateContexts(TRequestStatus& aStatus,TInt& aCount, TInt& aMaxAllowed) const; //< Enumerate all Primary and Secondary contexts (whether active or inactive)
       
  1559 	IMPORT_C void GetContextInfo(TRequestStatus& aStatus, TInt aIndex, TContextInfo& aInfo) const;
       
  1560 
       
  1561 	//
       
  1562 	//	Packet Network Registration and Availability
       
  1563 	//
       
  1564 	/** Packet Network Registration/Availability. */
       
  1565 	enum TRegistrationStatus
       
  1566 		{
       
  1567 		/** Not registered and not searching for a network. A network may or may not be 
       
  1568 		available. */
       
  1569 		ENotRegisteredNotSearching,
       
  1570 		/** Registered on a home network. */
       
  1571 		ERegisteredOnHomeNetwork,
       
  1572 		/** Not registered but searching for a network. */
       
  1573 		ENotRegisteredSearching,
       
  1574 		/** Registration denied. */
       
  1575 		ERegistrationDenied,
       
  1576 		/** Registration status unknown. */
       
  1577 		EUnknown,
       
  1578 		/** Registered on foreign network. */
       
  1579 		ERegisteredRoaming,
       
  1580 		/** Not registered or searching, but network available. */
       
  1581 		ENotRegisteredButAvailable,	
       
  1582 		/** Not registered or searching, and network not available. */
       
  1583 		ENotRegisteredAndNotAvailable
       
  1584 		};
       
  1585 
       
  1586 	IMPORT_C void GetNtwkRegStatus(TRequestStatus& aStatus, TRegistrationStatus& aRegistrationStatus) const;
       
  1587 	IMPORT_C void NotifyChangeOfNtwkRegStatus(TRequestStatus& aStatus,TRegistrationStatus& aRegistrationStatus) const;
       
  1588 
       
  1589 	/** MS class configuration. */
       
  1590 	enum TMSClass
       
  1591 		{
       
  1592 		/** Active simultaneous PS and CS calls supported (Class A). */
       
  1593 		EMSClassDualMode,			
       
  1594 		/** Active CS and Suspended PS simultaneous calls supported (Class B). */
       
  1595 		EMSClassSuspensionRequired, 
       
  1596 		/** Active CS or Active PS only call supported (Class C). */
       
  1597 		EMSClassAlternateMode,		
       
  1598 		/** Active CS only call supported (Class C). */
       
  1599 		EMSClassCircuitSwitchedOnly,
       
  1600 		/** Active PS only call supported (Class C) */
       
  1601 		EMSClassPacketSwitchedOnly, 
       
  1602 		/** Unknown what configuration is supported */
       
  1603 		EMSClassUnknown				
       
  1604 		};
       
  1605 
       
  1606 	IMPORT_C void GetMSClass(TRequestStatus& aStatus, TMSClass& aCurrentClass, TMSClass& aMaxClass) const;
       
  1607 	IMPORT_C void SetMSClass(TRequestStatus& aStatus, TMSClass aClass) const;
       
  1608 	IMPORT_C void NotifyMSClassChange(TRequestStatus& aStatus, TMSClass& aNewClass) const;
       
  1609 
       
  1610 	/** Static capabilities.
       
  1611 
       
  1612 	Modes: GPRS */
       
  1613 	enum TStaticMiscCaps
       
  1614 			{
       
  1615 		//
       
  1616 		// GPRS-specific
       
  1617 		//
       
  1618 			/** Suspend supported.
       
  1619 			
       
  1620 			Modes: GPRS */
       
  1621 			KCapsSuspendSupported=0x0001,
       
  1622 			/** Anonymous Access supported.
       
  1623 			
       
  1624 			Modes: GPRS */
       
  1625 			KCapsAASupported=0x0002,
       
  1626 			/** Network availability supported.
       
  1627 			
       
  1628 			Modes: GPRS */
       
  1629 			KCapsNetworkAvailabilitySupported=0x0004,
       
  1630 			/** Set default context supported.
       
  1631 			
       
  1632 			Modes: GPRS */
       
  1633 			KCapsSetDefaultContextSupported=0x0008,
       
  1634 			/** Change attach mode supported.
       
  1635 			
       
  1636 			Modes: GPRS */
       
  1637 			KCapsChangeAttachModeSupported=0x0010,
       
  1638 			/** Get data transferred supported.
       
  1639 			
       
  1640 			Modes: GPRS */
       
  1641 			KCapsGetDataTransferredSupported=0x0020,
       
  1642 			/** Notify data transferred supported
       
  1643 			
       
  1644 			Modes: GPRS */
       
  1645 			KCapsNotifyDataTransferredSupported=0x0040,
       
  1646 			/** Preferred bearer supported.
       
  1647 			
       
  1648 			Modes: GPRS */
       
  1649 			KCapsPreferredBearerSupported=0x0080,
       
  1650 			/** PDP data compression supported.
       
  1651 			
       
  1652 			Modes: GPRS */
       
  1653 			KCapsPdpDataCompSupported=0x0100,
       
  1654 			/** PDP header compression supported
       
  1655 			
       
  1656 			Modes: GPRS */
       
  1657 			KCapsPdpHeaderCompSupported=0x0200,
       
  1658 			/** MS class supported.
       
  1659 			
       
  1660 			Modes: GPRS */
       
  1661 			KCapsMSClassSupported=0x0400,
       
  1662 			/** Notify MS class changes supported.
       
  1663 			
       
  1664 			Modes: GPRS */
       
  1665 			KCapsNotifyMSClassSupported=0x0800,
       
  1666 		//
       
  1667 		// CDMA Specific
       
  1668 		//
       
  1669 			/** Service Option (7,15) or (8,16).
       
  1670 			
       
  1671 			Modes: CDMA2000 
       
  1672 			@deprecated 9.5
       
  1673 			*/
       
  1674 			KCapsCDMAOneLowSpeedDataSupported=0x00001000,	
       
  1675 			/** Service Option (22-25) or (26-29).
       
  1676 			
       
  1677 			Modes: CDMA2000 
       
  1678 			@deprecated 9.5
       
  1679 			*/
       
  1680 			KCapsCDMAOneHighSpeedDataSupported=0x00002000,	
       
  1681 			/** Service Option 33 or 34.
       
  1682 			
       
  1683 			Modes: CDMA2000
       
  1684 			@deprecated 9.5
       
  1685 			 */
       
  1686 			KCapsCDMA2000HighSpeedDataSupported=0x00004000,	
       
  1687 			/** PPP protocol supported.
       
  1688 			
       
  1689 			Modes: CDMA2000 
       
  1690 			@deprecated 9.5
       
  1691 			*/
       
  1692 			KCapsProtocolPPPSupported=0x00008000,
       
  1693 			/** CDPD protocol supported
       
  1694 			
       
  1695 			Modes: CDMA2000 
       
  1696 			@deprecated 9.5
       
  1697 			*/
       
  1698 			KCapsProtocolCDPDSupported=0x00010000,
       
  1699 			/*@deprecated 9.5*/
       
  1700 			KCapsPacketReleaseModeSupported=0x00020000,
       
  1701 			/*@deprecated 9.5*/
       
  1702 			KCapsNotifyReleaseModeChangeSupported=0x00040000,
       
  1703 			
       
  1704 			/** The phone supports HSDPA
       
  1705 			
       
  1706 			Modes: WCDMA */
       
  1707 			KCapsHSDPASupported=0x00080000,
       
  1708 			
       
  1709 			/** The phone supports EGPRS
       
  1710 			
       
  1711 			Modes: GPRS/WCDMA */
       
  1712 			KCapsEGPRSSupported=0x00100000,
       
  1713 			
       
  1714 			/** The phone supports HSUPA
       
  1715 			
       
  1716 			Modes: WCDMA */
       
  1717 			KCapsHSUPASupported=0x00200000,
       
  1718 			/** The phone supports MBMS
       
  1719 			
       
  1720 			Modes: GPRS/WCDMA */
       
  1721 			KCapsMBMSSupported=0x00400000
       
  1722 			};
       
  1723 
       
  1724 	IMPORT_C TInt GetStaticCaps(TUint& aCaps, RPacketContext::TProtocolType aPdpType) const;
       
  1725 
       
  1726 	/** Dynamic capabilities.
       
  1727 
       
  1728 	Modes: GPRS/CDMA */
       
  1729 	enum TDynamicCaps
       
  1730 		{
       
  1731 		// Common GPRS and CDMA caps
       
  1732 		/** Activate supported.
       
  1733 		
       
  1734 		Modes: GPRS/CDMA */
       
  1735 		KCapsActivate=0x00000001,
       
  1736 		/** Rx Circuit Switched call supported.
       
  1737 		
       
  1738 		Modes: GPRS/CDMA */
       
  1739 		KCapsRxCSCall=0x00000002,
       
  1740 		/** RX context activation request supported.
       
  1741 		
       
  1742 		Modes: GPRS/CDMA */
       
  1743 		KCapsRxContextActivationReq=0x00000004,
       
  1744 		// GPRS-specific caps
       
  1745 		/** Manual attach supported.
       
  1746 		
       
  1747 		Modes: GPRS */
       
  1748 		KCapsManualAttach=0x00000008,
       
  1749 		/** Manual detach supported.
       
  1750 		
       
  1751 		Modes: GPRS */
       
  1752 		KCapsManualDetach=0x00000010,
       
  1753 		/** SMS transfer supported.
       
  1754 		
       
  1755 		Modes: GPRS */
       
  1756 		KCapsSMSTransfer=0x00000020,
       
  1757 		// CDMA-specific caps
       
  1758 		/** Service Option (7,15) or (8,16).
       
  1759 		
       
  1760 		Modes: CDMA
       
  1761 		 @deprecated 9.5
       
  1762 		 */
       
  1763 		KCapsCDMAOneLowSpeedDataAllowed=0x00000040,
       
  1764 		/** Service Option (22-25) or (26-29).
       
  1765 		
       
  1766 		Modes: CDMA
       
  1767 		@deprecated 9.5
       
  1768 		 */
       
  1769 		KCapsCDMAOneHighSpeedDataAllowed=0x00000080,
       
  1770 		/** Service Option 33 or 34.
       
  1771 		
       
  1772 		Modes: CDMA 
       
  1773 		@deprecated 9.5
       
  1774 		*/
       
  1775 		KCapsCDMA2000HighSpeedDataAllowed=0x00000100,
       
  1776 		
       
  1777 		/** HSDPA is currently being used
       
  1778 		
       
  1779 		Modes: WCDMA */
       
  1780 		KCapsHSDPA=0x00000200,
       
  1781 		
       
  1782 		/** EGPRS is currently being used
       
  1783 		
       
  1784 		Modes: GPRS/WCDMA  */
       
  1785 		KCapsEGPRS=0x00000400,
       
  1786 		
       
  1787 		/** HSUPA is currently being used
       
  1788 		
       
  1789 		Modes: WCDMA */
       
  1790 		KCapsHSUPA=0x00000800,
       
  1791 		
       
  1792 		/** MBMS is currently being used
       
  1793 		
       
  1794 		Modes: GPRS/WCDMA */
       
  1795 		KCapsMBMS=0x00001000
       
  1796 		
       
  1797 		};
       
  1798 	
       
  1799 	/** Typedef to hold the RPacketService::TDynamicCaps. */
       
  1800 	typedef TUint TDynamicCapsFlags;
       
  1801 
       
  1802 	IMPORT_C TInt GetDynamicCaps(TDynamicCapsFlags& aCaps) const;
       
  1803 	IMPORT_C void NotifyDynamicCapsChange(TRequestStatus& aStatus, TDynamicCapsFlags& aCaps) const;
       
  1804 
       
  1805 	/** The preferred bearer. */
       
  1806 	enum TPreferredBearer
       
  1807 		{
       
  1808 		/** Packet Switched (PS) bearer preferred. */
       
  1809 		EBearerPacketSwitched,
       
  1810 		/** Circuit Switched (CS) bearer preferred. */
       
  1811 		EBearerCircuitSwitched
       
  1812 		};
       
  1813 
       
  1814 	IMPORT_C void SetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer aBearer) const;
       
  1815 	IMPORT_C TInt GetPreferredBearer(TPreferredBearer& aBearer) const;// Deprecated method.
       
  1816 	
       
  1817 	IMPORT_C void GetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer& aBearer) const; // Recommended method variant
       
  1818 
       
  1819 	/** Defines when the attachment to the GPRS network should occur.
       
  1820 
       
  1821 	Modes: GPRS */
       
  1822 	enum TAttachMode
       
  1823 		{
       
  1824 		/** The phone will attach to the packet network whenever it can. */
       
  1825 		EAttachWhenPossible,// instruct phone stack to attach to packet network whenever it can
       
  1826 		/** The phone will attach to the packet network only when required (e.g. when activating 
       
  1827 		a connection). */
       
  1828 		EAttachWhenNeeded	// instruct phone stack to attach to network only when required
       
  1829 		};
       
  1830 
       
  1831 	IMPORT_C TInt SetAttachMode(TAttachMode aMode) const;  // Deprecated method.
       
  1832 	IMPORT_C TInt GetAttachMode(TAttachMode& aMode) const; // Deprecated method.
       
  1833 	IMPORT_C TInt SetDefaultContextParams(const TDesC8& aPckg) const; // Deprecated method.
       
  1834 	IMPORT_C TInt GetDefaultContextParams(TDes8& aPckg) const; // Deprecated method.
       
  1835 
       
  1836 	IMPORT_C void SetAttachMode(TRequestStatus& aStatus, TAttachMode aMode) const; // Recommended method variant
       
  1837 	IMPORT_C void GetAttachMode(TRequestStatus& aStatus, TAttachMode& aMode) const; // Recommended method variant
       
  1838 	IMPORT_C void NotifyAttachModeChange(TRequestStatus& aStatus, TAttachMode& aMode) const;
       
  1839 	IMPORT_C void SetDefaultContextParams(TRequestStatus& aStatus, const TDesC8& aPckg) const; // Recommended method variant
       
  1840 	IMPORT_C void GetDefaultContextParams(TRequestStatus& aStatus, TDes8& aPckg) const; // Recommended method variant
       
  1841 
       
  1842 	enum TPacketReleaseMode
       
  1843 		{
       
  1844 		EReleaseModeUnknown,
       
  1845 		EReleaseModeUnregistered,
       
  1846 		EReleaseMode97_98,
       
  1847 		EReleaseMode99,
       
  1848 		EReleaseMode4,
       
  1849 		/*@deprecated 9.5*/
       
  1850 		EReleaseModeCDMA2000
       
  1851 		};
       
  1852 
       
  1853 	IMPORT_C void GetCurrentReleaseMode(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const;
       
  1854 	IMPORT_C void NotifyReleaseModeChange(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const;
       
  1855 
       
  1856 	enum TContextType
       
  1857 		{
       
  1858 		EUnspecified,		//< Unspecified context type
       
  1859 		EInternalContext,	//< Internally created context
       
  1860 		EExternalContext	//< Externally created context
       
  1861 		};
       
  1862 
       
  1863 	
       
  1864 	class TNifInfoV2 : public TPacketBase
       
  1865 	/**
       
  1866 	Rel99/R4 Network information class. This V2 class inherits from the 
       
  1867 	TPacketBase class to make it future proof (extensible).
       
  1868 	@publishedPartner
       
  1869 	@released
       
  1870 	*/
       
  1871 		{
       
  1872 	public:
       
  1873 		IMPORT_C TNifInfoV2();							//< Constructor
       
  1874 	public:
       
  1875 		TName iContextName;								//< The name of any defined context for this Network Interface
       
  1876 		TInt iNumberOfContexts;							//< Number of contexts belonging to the Network Interface
       
  1877 		RPacketContext::TContextStatus iNifStatus;		//< Status of the Network Interface
       
  1878 		RPacketContext::TProtocolAddress iPdpAddress;	//< PDP address of the interface
       
  1879 		TContextType iContextType;						//< Context type (internally or externally created)
       
  1880 		};
       
  1881 	typedef TPckg<TNifInfoV2> TNifInfoV2Pckg;			//< TNifInfoV2 package
       
  1882 
       
  1883 	// Internal API/TSY struct, used by GetContextNameInNif() method
       
  1884 	struct TContextNameInNif
       
  1885 		{
       
  1886 		TInt iIndex;				//< Integer specifying a context within a Nif.
       
  1887 		TName iExistingContextName;	//< Existing Context name.
       
  1888 		};
       
  1889 
       
  1890 	IMPORT_C void EnumerateNifs(TRequestStatus& aStatus, TInt& aCount) const;
       
  1891 	IMPORT_C void GetNifInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aNifInfoV2) const;
       
  1892 	IMPORT_C void EnumerateContextsInNif(TRequestStatus& aStatus, const TDesC& aExistingContextName, TInt& aCount) const;
       
  1893 	IMPORT_C void GetContextNameInNif(TRequestStatus& aStatus,  const TDesC& aExistingContextName, TInt aIndex, TDes& aContextName) const;
       
  1894 	IMPORT_C void DeactivateNIF(TRequestStatus& aStatus, const TDesC& aContextName) const;
       
  1895 
       
  1896 //
       
  1897 //
       
  1898 // MBMS Service Availability
       
  1899 //
       
  1900 //
       
  1901 	
       
  1902 	class TMbmsServiceAvailabilityV1 : public TPacketType
       
  1903 	/**
       
  1904 	Holds the service availability parameters needed to register with TSY
       
  1905 	for the services to be monitored.
       
  1906 	
       
  1907 	@publishedPartner
       
  1908 	@released
       
  1909 	*/
       
  1910 		{
       
  1911 	public:	
       
  1912 		IMPORT_C TMbmsServiceAvailabilityV1();
       
  1913 	public:
       
  1914 		void InternalizeL(RReadStream& aStream);
       
  1915 		void ExternalizeL(RWriteStream& aStream) const;
       
  1916 	public:
       
  1917 		/** Input Parameter : Temporary Mobile Group Identity */
       
  1918 		TTmgi	iTmgi;
       
  1919 		
       
  1920 		/** Input Parameter : MBMS service mode */
       
  1921 		TMbmsServiceMode iMbmsServiceMode;
       
  1922 		
       
  1923 		/** Output Parameter : MBMS availability status */
       
  1924 		TMbmsAvailabilityStatus iMbmsAvailabilityStatus;
       
  1925 		
       
  1926 		/** Input Parameter : MBMS access bearer information */
       
  1927 		TMbmsScope iMbmsAccessBearer;
       
  1928 		};
       
  1929 	
       
  1930 	//Packaged version of TMbmsServiceAvailabilityV1, used when this structure has to be passed via IPC.
       
  1931 	typedef TPckg<TMbmsServiceAvailabilityV1> TMbmsServiceAvailabilityV1Pckg;
       
  1932 		
       
  1933 	IMPORT_C void NotifyMbmsServiceAvailabilityChange(TRequestStatus& aReqStatus) const;
       
  1934 	IMPORT_C void UpdateMbmsMonitorServiceListL (TRequestStatus& aReqStatus, const TMbmsAction aAction, CPcktMbmsMonitoredServiceList* aList = NULL) const;		
       
  1935 	IMPORT_C void GetMbmsNetworkServiceStatus(TRequestStatus& aStatus, TBool aAttemptAttach, TMbmsNetworkServiceStatus& aServiceStatus) const;
       
  1936 	IMPORT_C void NotifyMbmsNetworkServiceStatusChange(TRequestStatus& aStatus, TMbmsNetworkServiceStatus& aServiceStatus) const;
       
  1937 	IMPORT_C void EnumerateMbmsMonitorServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const;
       
  1938 	IMPORT_C void EnumerateMbmsActiveServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const;
       
  1939 protected:
       
  1940 	IMPORT_C virtual void ConstructL();
       
  1941 	IMPORT_C virtual void Destruct();
       
  1942 private:
       
  1943 	TInt PrepareOpenSecondary(const TDesC& aOriginalContextName); //< Internal method, not for Client use
       
  1944 	CPacketPtrHolder* iEtelPacketPtrHolder;
       
  1945 	RMutex iMutex;   //< Internal mutex, used to prevent concurent use of PrepareOpenSecondary() and OpenNewContext()
       
  1946 	};
       
  1947 	
       
  1948 #include <etelpckt.inl>
       
  1949 #endif