telephonyserver/etelpacketdata/inc/etelpckt.h
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelpacketdata/inc/etelpckt.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1949 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// ETel Multimode Packet Data API 
+// MBMS Broadcast,GPRS Release 97/98, CDMAOne, CDMA2000, Release 99 and Release 4.
+// Copyright (c) Symbian Software Ltd. 2001-2009.  All rights reserved.
+// 
+//
+
+#if !defined(__ETELPCKT_H__)
+#define __ETELPCKT_H__
+
+#include <e32base.h>
+#include <s32mem.h>
+#include <etel.h>
+#include <cdblen.h>
+#include <exterror.h>
+#include <etelutils.h>
+#include <mbmstypes.h>
+
+//
+//  Global constants and types
+// 
+
+// General
+// Passed into RTelServer::IsSupportedByModule()
+/**
+Unique Packet Data API Identifier for Packet API version 1.0.
+
+@publishedPartner
+@released
+*/
+const TInt KETelExtPcktV1 = 4000;	
+/**
+Unique Packet Data API Identifier for Packet API version 2.0.
+
+@publishedPartner
+@released
+*/
+
+const TInt KETelExtPcktV2 = 8000;	 
+
+
+/**
+Unique Packet Data API Identifier for Packet API version 3.0.
+aka 3GPP Release 5 support
+
+@publishedPartner
+@released
+*/
+const TInt KETelExtPcktV3 = 12000;	 
+ 
+
+// GPRS-specific causes for Session Management (Annex I, 3GPP TS 24.008)
+/** This cause is sent to the MS if it requests an IMSI attachment for GPRS services, 
+but is not allowed to operate GPRS services.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsServicesNotAllowed=KErrGsmMobilityManagementBase-7;
+/** This cause is sent to the MS if it requests a combined IMSI attach for GPRS 
+and non-GPRS services, but is not allowed to operate either of them. 
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsAndNonGprsServicesNotAllowed=KErrGsmMobilityManagementBase-8;
+/** This cause is sent to the MS when the network cannot derive the MS's identity 
+from the P-TMSI in case of an inter-SGSN routing area update.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsMSIdentityCannotBeDerivedByTheNetwork=KErrGsmMobilityManagementBase-9;
+/** This cause is sent to the MS either if the network has implicitly detached 
+the MS, e.g. some while after the Mobile reachable timer has expired, or if 
+the GMM context data relating to the subscription does not exist in the SGSN, 
+e.g. because of a SGSN restart.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsMSImplicitlyDetached=KErrGsmMobilityManagementBase-10;
+/** This cause is sent to the MS if it requests a combined GPRS attachment or routing 
+is updating in a PLMN where the MSC is temporarily not reachable via the GPRS 
+part of the GSM network.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsMSCTemporarilyNotReachable=KErrGsmMobilityManagementBase-16;
+/** The PDP context is deactivated because of a LLC or SNDCP failure.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsLlcOrSndcpFailure=KErrGsmMobilityManagementBase-25;
+/** Insufficient GPRS resources are available for the request to complete successfully.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsInsufficientResources=KErrGsmMobilityManagementBase-26;
+/** Access Point Name is either missing from the Activation request or is unknown.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsMissingorUnknownAPN=KErrGsmMobilityManagementBase-27;
+/** The PDP address supplied with the Activation request is unknown.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsUnknownPDPAddress=KErrGsmMobilityManagementBase-28;
+/** User authentication has failed.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsUserAuthenticationFailure=KErrGsmMobilityManagementBase-29;
+/** The GGSN has rejected the activation request for some reason.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsActivationRejectedByGGSN=KErrGsmMobilityManagementBase-30;
+/** The activation request has been rejected for an unspecified reason.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsActivationRejected=KErrGsmMobilityManagementBase-31;
+/** The requested service is not supported by the PLMN.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsServiceOptionNotSupported=KErrGsmMobilityManagementBase-32;
+/** There is no active subscription to the requested service.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsRequestedServiceOptionNotSubscribed=KErrGsmMobilityManagementBase-33;
+/** The service is temporarily out of order.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsServiceOptionTemporarilyOutOfOrder=KErrGsmMobilityManagementBase-34;
+/** The NSAPI supplied with the activation request is not unique.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsNSAPIAlreadyUsed=KErrGsmMobilityManagementBase-35;
+/** The context has been deactivated successfully.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsRegularContextDeactivation=KErrGsmMobilityManagementBase-36;
+/** The Quality of Service requested has not been accepted.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsQoSNotAccepted=KErrGsmMobilityManagementBase-37;	
+/** The GPRS network is requesting reactivation of a context.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsReactivationRequested=KErrGsmMobilityManagementBase-39;
+/** The feature is not supported.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsFeatureNotSupported=KErrGsmMobilityManagementBase-40;
+/** There is a semantic error in the TFT operation.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsSemanticErrorInTFTOperation=KErrGsmMobilityManagementBase-41;
+/** There is a syntactical error in the TFT operation.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsSyntacticalErrorInTFTOperation=KErrGsmMobilityManagementBase-42;
+/** The PDP context activation request is not active. 
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsUnknownPDPContext=KErrGsmMobilityManagementBase-43;
+/** There is one or more semantic errors in packet filter(s) of the TFT.
+ 
+@publishedPartner
+@released
+*/
+const TInt KErrGprsSemanticErrorsInPacketFilters=KErrGsmMobilityManagementBase-44;
+/** There is one or more syntactical errors in packet filter(s) of the TFT.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsSyntacticalErrorInPacketFilters=KErrGsmMobilityManagementBase-45;
+/** The GPRS network has already activated a PDP context without TFT.
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsPDPContextWithoutTFTAlreadyActivated=KErrGsmMobilityManagementBase-46;
+
+// UMTS-specific cause values for Call control (Annex H, 3GPP TS 24.008)
+/** QoS not available.
+
+@publishedPartner
+@released
+*/
+const TInt KErrUmtsQoSNotAvailable=KErrGsmMobilityManagementBase-49;
+
+/** Maximum number of PDP contexts supported by phone exceeded.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrUmtsMaxNumOfContextExceededByPhone=KErrGsmMobilityManagementBase-50;
+/** Maximum number of PDP contexts supported by the network exceeded.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrUmtsMaxNumOfContextExceededByNetwork=KErrGsmMobilityManagementBase-51;
+/** Phone is in offline mode.  
+
+@publishedPartner
+@released
+*/
+const TInt KErrGprsOfflineMode=KErrGsmMobilityManagementBase-52;
+/** 
+ * MBMS network support does not exist.
+ * @publishedPartner
+ * @released
+ */
+const TInt KErrMbmsNotSupported=KErrGsmMobilityManagementBase-53;
+/**
+ * Specific MBMS service is not available.  
+ * @publishedPartner
+ * @released
+ */
+const TInt KErrMbmsServiceUnavailable=KErrGsmMobilityManagementBase-54;
+/**
+ * Preempts low priority MBMS/Non-MBMS service.  
+ * @publishedPartner
+ * @released
+ */
+const TInt KErrMbmsServicePreempted=KErrGsmMobilityManagementBase-55;
+/**
+ * One or more invalid MBMS service entry supplied.  
+ * @publishedPartner
+ * @released
+ */
+const TInt KErrMbmsImpreciseServiceEntries=KErrGsmMobilityManagementBase-56;
+
+class TPacketDataConfigBase 
+/** Base class for the packet configuration classes.
+
+The Context configuration, QoS profile (Requested and Negotiated) and QoS 
+Capabilities classes inherit from this class. It is outside the scope of all 
+the Packet data classes. 
+
+To allow future configuration structures (e.g. TContextConfigWCDMA, 
+TContextConfigPDC, etc.) to be added in such a way that a completely different 
+structure may be defined and passed into the same functions as this one, all 
+existing configuration structures are derived from this thin base class 
+which provides just one function, ExtensionId(). This function returns the 
+one protected member variable, iExtensionId. A new structure would define an 
+associated new constant to be set in iExtensionId on construction, which would 
+then be queried by the TSY prior to unpackaging the structure. 
+
+@see RPacketContext::TContextConfigCDMA 
+@see RPacketContext::TContextConfigR99_R4  
+@see RPacketContext::TContextConfig_R5
+@see RPacketContext::TContextConfigMbmsV1
+
+@publishedPartner
+@released
+
+*/
+	{
+public:
+	/**
+	Flags identifying the different packet networks.
+	*/
+	enum 
+		{
+		/**
+		GPRS Release 97/98 packet network.
+		*/
+		KConfigGPRS= 0x01,				
+		/**
+		CDMA and CDMA2000 packet networks.
+		@deprecated 9.5
+		*/
+		KConfigCDMA = 0x02,		
+		/**
+		GPRS/UMTS Release 99 and UMTS Release 4 networks.
+		*/ 
+		KConfigRel99Rel4 = 0x04,
+		/**
+		UMTS/IMS 3GPP Release 5 networks.
+		*/ 
+		KConfigRel5 = 0x05,	
+		/**
+		MBMS networks
+		*/
+		KConfigMBMS = 0x06		
+		};
+		
+	/** This member returns the type of class.
+	
+	@return The type of class. */
+	inline TInt ExtensionId(){return iExtensionId;};
+protected:
+	/**
+	Defines the type of class: either KConfigGPRS, KConfigCDMA or KConfigRel99Rel4,
+	which identifies the type of packet network (GPRS R97/98, CDMA, Release 99 or 4 or 5)
+	*/
+	TInt iExtensionId;	
+	};
+
+class TConnectionInfoBase 
+/** Base class for the configuration info classes. It is outside the scope of 
+all the Packet data classes. 
+
+To allow future connection information structures (e.g. TConnectionInfoV2, 
+TConnectionInfoV3, etc.) to be added and as a result information carried by the 
+structure can be increased. All information structures are derived from this 
+thin base class which provides just one function, ExtensionId(). This function 
+returns the protected member variable, iExtensionId. A new structure would 
+define an associated new constant to be set in iExtensionId on construction, 
+which would then be queried by the TSY prior to unpackaging the structure. 
+
+@see RPacketContext::TConnectionInfoV1
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	/**
+	Flags identifying the different connection information structures
+	*/
+	enum 
+		{
+		/**
+		Connection information version 1.
+		*/
+		KConnectionInfoV1 = 0x01
+		};
+		
+	/** Return the type of class.
+	*
+	@return The version of class. 
+	*/
+	inline TInt ExtensionId(){return iExtensionId;};
+	
+public:
+	/** A bit-wise sum of TConnectionInfoFlags indicating which of the optional 
+	fields contain valid data. */
+    TUint32 iValid;        	
+	
+protected:
+	/** Defines the type of class. */
+	TInt iExtensionId;	
+	};
+
+class TPacketBase
+/** 
+Base class for the Packet data ETel API parameters which are version dependent
+(version 2 onwards). Note that even though the 7.0 version of the API does not define
+version dependent classes, this implementation HAS been employed in the v7.0S version
+(V2.0) of the API.
+
+The TPacketBase::ExtensionId() method is used to determine which version of a packaged
+parameter has been created. 
+Note that the TPacketDataConfigBase::ExtensionId() method returns a packet network 
+type.
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	IMPORT_C TInt ExtensionId() const;
+protected:
+	TPacketBase();
+	TInt iExtensionId;					//< Extension identifier
+	};
+											   
+class TPacketType
+/**
+Base class for all the V1 parameter types.
+
+@publishedPartner
+@released
+*/
+{
+public:
+	IMPORT_C TInt ExtensionId() const;
+protected:
+	TPacketType();
+	void InternalizeL(RReadStream& aStream);
+	void ExternalizeL(RWriteStream& aStream) const;
+protected:
+	TInt iExtensionId;
+};
+	
+struct TClientId
+/**Holds the session and subsession handles which would be used  
+within the 2-phase list retrieval mechanism. During both the phases, 
+the client-side API code will pass down the TClientId so that TSY can use
+this information to match the first phase of the request to the second phase. */
+	{
+	/** The handle to the underlying RTelServer session. */
+	TInt iSessionHandle;
+	/** The handle to the sub-session to which this API request relates. */
+	TInt iSubSessionHandle;
+	};	
+		
+class RPacketService;
+class CPacketContextPtrHolder;
+class RPacketContext : public RTelSubSessionBase
+/** Defines the context and the configuration of a connection to the network's 
+packet-switched service. 
+
+The functionality associated with the context of a packet-switched connection 
+(configuring, modifying, activating, etc) are encapsulated within this class.
+
+Each instance of this class has an RPacketService parent, to which it belongs.
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	IMPORT_C RPacketContext();
+	IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
+	IMPORT_C TInt OpenExistingContext(RPacketService& aPacketNetwork,const TDesC& aContextName);	
+	IMPORT_C void Close();
+// 
+//	Nested classes dealing with context configurations for each network type
+//
+	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.
+	enum {KMaxPDPAddressLength = KCommsDbSvrMaxFieldLength}; 
+	enum 
+		{
+		KPdpDataCompression		= 0x01,
+		KPdpHeaderCompression	= 0x02
+		};
+
+/** Buffer to hold the GSN address.
+
+@see KGSNNameLength */
+	typedef TBuf8<KGSNNameLength> TGSNAddress;				//< GPRS Support Node (GSN) name
+/** Buffer to hold the protocol address.
+
+@see KMaxPDPAddressLength */
+	typedef TBuf8<KMaxPDPAddressLength> TProtocolAddress;	//< GPRS Rel97/98, CDMA, Rel99 and Rel4.
+
+	//
+	// TProtocolType - defines the protocol used to connect to the packet data gateway
+	// 
+/** Defines the protocol used to connect to the packet data gateway.
+
+Modes: GRPS */
+	enum TProtocolType
+		{
+	/** IPv4 type gateway.
+	
+	Modes: GRPS */
+		EPdpTypeIPv4,	
+	/** IPv6 type gateway.
+	
+	Modes: GPRS */
+		EPdpTypeIPv6,	
+	/** X.25 type gateway.
+	
+	Modes: GPRS */
+		EPdpTypeX25,	
+	/** PPP type gateway.
+	
+	Modes: GRPS, CDMA */
+		EPdpTypePPP,	
+	/** CDPD type gateway.
+	
+	Modes: CDMA 
+	@deprecated 9.5
+	*/
+		EPdpTypeCDPD
+		};
+
+	//
+	// TServiceOption - service option numbers are CDMA specific and used in the API to 
+	// identify the various packet data services available on the CDMA packet network.
+	// 
+/** Service option numbers identify the various packet data services available 
+on the CDMA packet network.
+
+Modes: CDMA
+@deprecated 9.5
+ */
+	enum TServiceOption
+		{
+	/** Service Options 7 and 15, 8-16. */
+		KLowSpeedData		   = 0x01,	
+	/** Service Options 22-25 IP and 26-29 CDPD. */
+		KHighSpeedData	 	   = 0x02,	
+	/** Service Option 33 on CDMA2000 network only. */
+		KHighSpeedCDMA2000Data = 0x04	
+		};
+
+	/** Anonymous access required.
+
+	Modes: GRPS, CDMA */
+	enum TAnonymousAccess
+		{
+	/** Anonymous access not applicable.
+	
+	Modes: GRPS, CDMA */
+		ENotApplicable,
+	/** Anonymous access required.
+	
+	Modes: GRPS */
+		ERequired,		
+	/** Anonymous access not required.
+	
+	Modes: GPRS */
+		ENotRequired	
+		};
+
+	enum { KMaxAuthDataLength = 50 };
+	/** Buffer for various sorts of authorisation data since version 2 of the API.
+	
+	Supported from v7.0S.
+	*/
+	typedef TBuf8<KMaxAuthDataLength> TAuthData;
+
+	//
+	// TAuthProtocol - this enables the client to set the protocol type used on the context
+	// 
+	enum TAuthProtocol
+        {
+        EProtocolNone,
+        EProtocolPAP,
+        EProtocolCHAP
+        };
+
+	//
+	// TAuthInfo - this enables the client to set the authentication data used on the context
+	//
+	struct TAuthInfo
+		{
+		TAuthProtocol iProtocol;
+        TAuthData iUsername;
+        TAuthData iPassword;
+		};
+
+	//
+	// TDnsInfoV2 - this class enables the client to set the primary and secondary DNS server
+	// names used on the context 
+	//
+	class TDnsInfoV2 : public TPacketBase
+	/**
+	Enables the client to set the primary and secondary DNS server
+	names used on the context since version 2 of the API.
+	
+	Supported from v7.0S.
+
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TDnsInfoV2();
+	public:
+		/** Primary DNS server name.*/
+		TProtocolAddress iPrimaryDns;
+		/** Secondary DNS server name.*/
+		TProtocolAddress iSecondaryDns;
+		};
+	/**
+	DNS information package since version 2 of the API.
+	
+	Supported from v7.0S.
+	*/
+	typedef TPckg<TDnsInfoV2> TTDnsInfoV2Pckg;
+
+	//
+	//  - this buffer can be used to store protocol related data
+	// (such as "PPP config options") which do not fit into the other fields of the
+	// TProtocolConfigOptionV2 class (see below).  The length of the buffer is based on
+	// the previous buffer used (before TProtocolConfigOptionV2 was implemented), which 
+	// was based on 3GPP TS 24.008 (253 octets).
+	//
+	enum {KMiscProtocolBufferLength = 253};
+	typedef TBuf8<KMiscProtocolBufferLength> TMiscProtocolBuffer;
+		
+	class TProtocolConfigOptionV2 : public TPacketBase
+	/**
+	Holds authentication data encapsulated in TAuthInfo, as 
+	well as further data that may be required for CHAP protocol 
+	authentication, such a challenge and response, since version
+	2 of the API.
+	
+	Can contain the DNS server names, the username, password, 
+	and CHAP associated data.
+
+	Normal authentication uses only TAuthInfo::iUsername and 
+	TAuthInfo::iPassword. The other parameters are for secure 
+	authentication. 
+
+	The maximum combined length of the TAuthInfo::iUsername 
+	and the secure information (iPassword or iResponse) is 50 bytes.
+	
+	Rather than keep the Protocol Config Option as a buffer it 
+	is encapsulated as a class. This enables data extraction to 
+	occur easily.
+	
+	Supported from v7.0S. 
+
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TProtocolConfigOptionV2();
+	public:
+		/** Authentication data.*/
+		TAuthInfo iAuthInfo;
+		/** The pseudorandom data that is chosen by the client.*/
+		TAuthData iChallenge;
+		/** Calculated by the client with the MD5 algorithm using 
+		iChallenge, iId and iPassword.*/
+		TAuthData iResponse;
+		/** A one byte identifier that is chosen by the client.*/
+		TUint8 iId;
+		/** Primary and secondary DNS server names since version 2 
+		of the API.*/
+		TDnsInfoV2 iDnsAddresses;
+		TMiscProtocolBuffer iMiscBuffer;
+		};
+		
+	
+	class TContextConfigGPRS : public TPacketDataConfigBase
+	/**
+	Context configurations for GPRS packet data support. 
+	
+	Contains all the data necessary to configure a context on a GPRS network or 
+	UMTS packet network.
+
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TContextConfigGPRS();
+	public:
+		/** The GPRS protocol type. The default value is EpdpTypeIPv4.
+	
+		@see TProtocolType */
+		TProtocolType iPdpType;
+		/** The GPRS Access point name. The default value is an empty string.
+	
+		@see TGSNAddress */
+		TGSNAddress iAccessPointName;
+		/** The GPRS protocol address. The default value is an empty string.
+	
+		@see TProtocolAddress */
+		TProtocolAddress iPdpAddress;		
+		/** The GRPS compression. This is a bit-wise sum of the wanted compression. The 
+		default value is 0.
+	
+		@see KPdpDataCompression
+		@see KPdpHeaderCompression */
+		TUint iPdpCompression;
+		/** Anonymous access requested. The default value is ENotRequired.
+	
+		@see TAnonymousAccess */
+		TAnonymousAccess iAnonymousAccessReqd;
+		/** Use Edge. The default value is EFalse. True for EGPRS.*/
+		TBool iUseEdge; // 
+		/** Protocol configuration options for version 2 of the API.
+		
+		Supported from v7.0S.*/
+		TProtocolConfigOptionV2 iProtocolConfigOption;
+		/** Network initiated context indication. */
+		TBool iNWIContext;
+		};
+	
+  	
+   	/**
+	Identifiers for Packet Flow Context.  See Table 10.5.161/3GPP TS 24.008.
+   	*/
+   	enum TPacketFlowIdentifier
+   		{
+   		/**
+   		Best Effort
+   		*/
+   		EBestEffort,
+		/**
+		Signalling
+		*/
+		ESignalling,
+		/**
+		Sms
+		*/
+   		ESms
+   		};
+   		
+  	class TContextConfigR99_R4 : public TPacketDataConfigBase
+	/**
+	Enables Release 99 and Release 4 context configuration for version 2 of 
+  	the API.
+  	
+  	Contains all the data necessary to configure a context on a R99/R4 packet 
+  	network. 
+  	
+  	Supported from v7.0S.
+
+	@publishedPartner
+	@released
+  	*/
+  		{
+  	public:
+  		IMPORT_C TContextConfigR99_R4();
+  	public:
+  		/** The Rel99/Rel4 protocol type. The default value is EpdpTypeIPv4.*/
+  		TProtocolType iPdpType;
+  		/** The Rel99/Rel4 access point name. The default is an empty string.*/
+  		TGSNAddress iAccessPointName;
+  		/** The Rel99/Rel4 protocol address. The default value is an empty string.*/
+  		TProtocolAddress iPdpAddress;		
+  		/** Use Edge. The default is EFalse. True for EGPRS.*/
+   		TBool iUseEdge; 
+   		/** Protocol configuration options.*/
+		TProtocolConfigOptionV2 iProtocolConfigOption;
+		TBool iNWIContext; // Network initiated context indication.
+		TPacketFlowIdentifier iPFI; // Packet Flow indicator.
+		};
+
+	class TContextConfigCDMA : public TPacketDataConfigBase
+	/**
+	Enables context configurations for CDMA and CDMA2000 packet data 
+	and high speed packet data support. 
+	
+	Contains all the data necessary to configure a context on a CDMA packet 
+	network.
+
+	@publishedPartner
+	@released
+	@deprecated 9.5
+	*/
+		{
+	public:
+		IMPORT_C TContextConfigCDMA();
+	public:
+	/** Identifies the CDMA packet service option range (Low, High, High CDMA2000). 
+	The default value is KLowSpeedData.
+	
+	@see TServiceOption */
+		TUint			iServiceOption; 
+	/** The CDMA protocol type, either PPP or CDPD. The default value is EPdpTypePPP.
+	
+	@see TProtocolType */
+		TProtocolType	iProtocolType;	
+		};
+
+	// Configuration-related calls
+	IMPORT_C void SetConfig(TRequestStatus& aStatus, const TDesC8& aConfig) const;
+	IMPORT_C void GetConfig(TRequestStatus& aStatus, TDes8& aConfig) const;
+	IMPORT_C void NotifyConfigChanged(TRequestStatus& aStatus, TDes8& aConfig) const;
+	IMPORT_C void Activate(TRequestStatus& aStatus) const;
+	IMPORT_C void Deactivate(TRequestStatus& aStatus) const;
+	IMPORT_C void Delete(TRequestStatus& aStatus) const;
+	IMPORT_C void LoanCommPort(TRequestStatus& aStatus, RCall::TCommPort& aDataPort) const; // Deprecated method.
+	IMPORT_C void RecoverCommPort(TRequestStatus& aStatus) const; // Deprecated method.
+	IMPORT_C void GetDnsInfo(TRequestStatus& aStatus, TDes8& aDnsInfo) const; 
+
+
+
+	enum TContextStatus
+		{
+	/** Current status is unknown. */
+		EStatusUnknown,
+	/** Context is not activated. */
+		EStatusInactive,
+	/** Context is currently being activated. */
+		EStatusActivating,
+	/** Context is active. */
+		EStatusActive,
+	/** Context is currently being deactivated. */
+		EStatusDeactivating,		
+	/** Context is suspended. */
+		EStatusSuspended,
+	/** Context has been deleted. */
+		EStatusDeleted,
+	/** Context is currently in data receiving mode.The service transitions 
+		to this state when the data transmission starts.This is expected 
+		to happen after some time of arrival of SESSION START message from the network.
+	    Note : Applicable only to MBMS context */	
+		EStatusReceiving
+		};
+
+	IMPORT_C TInt GetStatus(TContextStatus& aContextStatus) const;
+	IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TContextStatus& aContextStatus);
+	IMPORT_C TInt GetProfileName(TName& aQoSProfile) const;
+
+	struct TDataVolume 
+/** Holds the amount of sent and received data.
+
+The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */
+		{
+		TUint32 iBytesSent;
+	/** Overflow counter for the bytes sent.
+	
+	The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */
+		TUint32 iOverflowCounterSent;
+	/** The number of bytes received.
+	
+	The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */
+		TUint32 iBytesReceived;
+	/** Overflow counter for the bytes received.
+	
+	The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */
+		TUint32 iOverflowCounterReceived;
+		};
+
+	struct TNotifyDataTransferredRequest
+		{
+		TUint iRcvdGranularity;
+		TUint iSentGranularity;
+		};
+
+    /** 
+    Determines which fields in the TConnectionInfoXXX parameter class are valid.
+    
+    @see TConnectionInfoV1 
+    */
+	enum TConnectionInfoFlags
+		{
+    	/** The HSDPA category field is valid in the connection info class.
+    	
+    	Modes: WCDMA */
+		KHSDPACategory		= 0x00000001,
+		
+    	/** The HSUPA category field is valid in the connection info class.
+    	
+    	Modes: WCDMA */		
+		KHSUPACategory		= 0x00000002
+        };
+
+  	class TConnectionInfoV1 : public TConnectionInfoBase
+	/**
+	Connection info class is used to carry miscellaneous information about data connection.
+  	
+  	Contains all kind of packet data connection related information that is useful for
+  	ETel API clients.
+  	
+  	Supported from v9.5.
+
+	@publishedPartner
+	@released
+  	*/
+  		{
+  	public:
+  		IMPORT_C TConnectionInfoV1();
+  	public:
+        /**HSDPA UE category as defined in 3GPP TS 25.306 Table 5.1a: "FDD 
+        HS-DSCH physical layer categories". Value "0" means HSDPA is not used,
+        value "1" means category 1, value "2" means category 2 etc.*/
+        TUint iHSDPACategory;
+ 
+        /*HSUPA (E-DCH) UE category as defined in 3GPP TS 25.306 Table 5.1g: 
+        "FDD E-DCH physical layer categories". Value "0" means HSUPA is not used,
+        value "1" means category 1, value "2" means category 2 etc.*/       
+        TUint iHSUPACategory;
+		};
+
+
+	IMPORT_C TInt GetDataVolumeTransferred(TDataVolume& aVolume) const; // Deprecated method.
+	IMPORT_C void NotifyDataTransferred(TRequestStatus& aStatus, TDataVolume& aVolume, TUint aRcvdGranularity=0x1000,TUint aSentGranularity=0x1000) const; 
+	IMPORT_C void GetConnectionSpeed(TRequestStatus& aStatus, TUint& aRate) const; // get the current speed (bits per second) of the connection
+	IMPORT_C void NotifyConnectionSpeedChange(TRequestStatus& aStatus, TUint& aRate) const;  // notify client if there's a change in the connection speed
+
+	// N.B. the following 2 methoda are only supported if telephony was built with SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW macro
+    IMPORT_C void GetConnectionInfo(TRequestStatus& aStatus, TDes8& aInfo) const; // get connection information
+	IMPORT_C void NotifyConnectionInfoChange(TRequestStatus &aStatus, TDes8& aInfo) const; // notify client if connection information changes	
+
+	IMPORT_C TInt GetLastErrorCause(TInt& aError) const;
+
+	IMPORT_C void GetDataVolumeTransferred(TRequestStatus& aStatus, TDataVolume& aVolume) const; // Recommended method variant.
+	
+	class TDataChannelV2 : public TPacketBase
+	/**
+	Contains data channel parameters.
+	
+	Contains the information previously returned by	LoanCommPort() 
+	(iCsy and iPort), as well as the new information which is generated 
+	by context creation, e.g. the context (data channel) identity, 
+	for version 2 of the API.  
+
+	It is passed as a packaged parameter to RPacketContext::InitialiseContext().
+	
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TDataChannelV2();
+	public:
+		/**CSY name.
+		@deprecated Data previously used by LoanDataPort() in version 1 of the API.*/
+		TFileName iCsy;		
+		/**Port name 
+		@deprecated Data previously used by LoanDataPort(). */
+		TName iPort;			
+		/**Context Identity.
+		The Channel name information returned by the lower layers (Nif). */
+		TName iChannelId;	
+		};
+	/** 
+	Data channel package since version 2 of the API.
+
+	Supported from v7.0S.
+	*/
+	typedef TPckg<TDataChannelV2> TDataChannelV2Pckg;	
+
+	IMPORT_C void InitialiseContext(TRequestStatus& aStatus, TDes8& aDataChannelV2Pckg) const; // This method supersedes the LoanCommPort() and RecoverCommPort() methods.
+
+	enum {KIPAddressSize = 16};				   //< TIPAddress size
+	/**
+	Array to hold either IPv4 or IPv6 address or Subnet mask since version 2 of the API.
+	
+	Supported from v7.0S.
+	*/	
+	typedef TUint8 TIPAddress[KIPAddressSize]; 
+	
+	
+	class TPacketFilterV2 : public TPacketBase
+	/**
+	Packet filter package since version 2 of the API.
+
+	Contains member data compatible with parameters required for configuring 
+	a packet filter on a Rel99/R4 packet network. 
+
+	Inherits from the TPacketBase class to make it future 
+	proof (extensible).
+
+	Supported from v7.0S.
+
+	@publishedPartner
+	@released
+	*/
+
+		{
+	public:
+		IMPORT_C TPacketFilterV2();
+	public:
+		/** Packet filter identifier. Value range: 1 - 8.*/
+		TInt iId;						
+		/** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/
+		TInt iEvaluationPrecedenceIndex;	
+		/** Domain Source address.*/
+		TIPAddress iSrcAddr;				
+		/** Domain Subnet mask.*/
+		TIPAddress iSrcAddrSubnetMask;		
+		/** Protocol number (IPv4) or Next Header (IPv6) field of incoming packets. 
+		Value range 0 - 255.*/
+		TInt iProtocolNumberOrNextHeader;	 
+		/** Minimum source port number of incoming packets. Value range 0 - 65535.*/
+		TInt iSrcPortMin;					 
+		/** Maximum source port number of incoming packets. Value range 0 - 65535.*/
+		TInt iSrcPortMax;					 
+		/** Lowest destination port number of incoming packets. Value range 0 - 65535.*/
+		TInt iDestPortMin;					
+		/** Maximum destination port number of incoming packets. Value range 0 - 65535.*/
+		TInt iDestPortMax;					 
+		/** Security Parameter Index, 32-bit field.*/
+		TUint32 iIPSecSPI;					
+		/** Type of Service (IPv4) or Traffic Class (IPv6). 
+		1 octet TOS/Traffic class + 1 octet TOS/Traffic class Mask.*/
+		TUint16 iTOSorTrafficClass;			 
+		/** Flow label (IPv6 only) of incoming packets. 3 octets with 20-bit field 
+		containing the flow label.*/
+		TUint32 iFlowLabel;					
+		};
+	/** Packaged TPacketFilterV2.*/
+	typedef TPckg<TPacketFilterV2> TPacketFilterV2Pckg;	
+		
+	
+	/**
+	Maximum length of DNS Fully Qualified Domain Name (RFC 1123)
+	
+	@publishedPartner
+	*/
+	enum TFQDNLength
+	{
+	KMaxFQDNLength=255,
+	};
+	
+	typedef TBuf8<KMaxFQDNLength> TAuthorizationToken;
+	
+	/**
+	Packet Filter type identifier.
+	
+	@publishedPartner
+	@released
+	*/
+	enum TPacketFilterType
+		{
+		/** Unknown filter type.*/
+		EPacketFilterTypeUnknown,
+		/** Filter Type One.*/
+		EPacketFilterTypeOne,
+		/** Filter Type Two.*/
+		EPacketFilterTypeTwo,
+		/** Filter Type Three.*/
+		EPacketFilterTypeThree,
+		};
+		
+	class TPacketFilterV3 : public TPacketFilterV2
+	/**
+	Packet filter that supports packet filter types.
+	Contains member data compatible with parameters required
+    for configuring a packet filter on a Rel99/R4/R5 packet network. . 
+
+	Inherits from the TPacketFilterV2 class.
+
+	Supported from 9.1
+
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TPacketFilterV3(TPacketFilterType aType);
+		IMPORT_C TPacketFilterV3();
+		enum TPacketFilterDataBitmapPos
+			{
+			/** Bitmap for Domain Source address.*/
+			EPacketFilterSrcAddr						= 0x001,
+			/** Bitmap for Domain Subnet mask.*/
+			EPacketFilterSrcAddrSubnetMask			= 0x002,
+			/** Bitmap for Protocol number (IPv4) or Next Header (IPv6) field of incoming packets.*/
+			EPacketFilterProtocolNumberOrNextHeader	= 0x004,
+			/** Bitmap for Minimum source port number of incoming packets.*/
+			EPacketFilterSrcPortMin					= 0x008,
+			/** Bitmap for Maximum source port number of incoming packets.*/
+			EPacketFilterSrcPortMax					= 0x010,
+			/** Bitmap for Lowest destination port number of incoming packets.*/
+			EPacketFilterDestPortMin					= 0x020,
+			/** Bitmap for Maximum destination port number of incoming packets.*/
+			EPacketFilterDestPortMax					= 0x040,
+			/** Bitmap for Security Parameter Index.*/
+			EPacketFilterIPSecSPI					= 0x080,
+			/** Bitmap for Type of Service (IPv4) or Traffic Class (IPv6).*/
+			EPacketFilterTOSorTrafficClass			= 0x100,
+			/** Bitmap for Flow label (IPv6 only) of incoming packets.*/
+			EPacketFilterFlowLabel					= 0x200,
+			};
+			
+		inline TBool IsPresent(TPacketFilterDataBitmapPos aDataMemberBitmapPos);
+		inline void Reset(TPacketFilterDataBitmapPos aDataMemberBitmapPos);
+		inline void Reset();
+	public:
+		/** Packet filter identifier. Value range: 1 - 8.*/
+		using TPacketFilterV2::iId;
+		/** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/
+		using TPacketFilterV2::iEvaluationPrecedenceIndex;
+	
+	public:
+		
+		IMPORT_C TBool SetSrcAddr(TIPAddress &aSrcAddr);
+		IMPORT_C TBool SetSrcAddrSubnetMask(TIPAddress &aSrcAddrSubnetMask);
+		
+		IMPORT_C TBool SetProtocolNumberOrNextHeader(TInt aProtocolNumberOrNextHeader);
+		
+		IMPORT_C TBool SetSrcPortMin(TInt aSrcPortMin);
+		IMPORT_C TBool SetSrcPortMax(TInt aSrcPortMax);
+		
+		IMPORT_C TBool SetDestPortMin(TInt aDestPortMin);
+		IMPORT_C TBool SetDestPortMax(TInt aDestPortMax);
+		
+		IMPORT_C TBool SetSPI(TUint32 aIPSecSPI);
+		
+		IMPORT_C TBool SetTOSorTrafficClass(TUint16 aTOSorTrafficClass);
+		IMPORT_C TBool SetFlowLabel(TUint32 aFlowLabel);
+		
+	
+	public:
+	
+		/** Return the Domain Source address. 
+		
+		@return Domain Source address.
+		*/
+		inline const TIPAddress& SrcAddr()
+		{
+			return iSrcAddr;
+		};
+		
+		/** Return the Domain Subnet mask.
+		
+		@return Domain Subnet mask.
+		*/
+		inline const TIPAddress& SrcAddrSubnetMask()
+		{
+			return iSrcAddrSubnetMask;
+		};
+				
+		inline TInt ProtocolNumberOrNextHeader();
+		
+		inline TInt SrcPortMin();
+		inline TInt SrcPortMax();
+		
+		inline TInt DestPortMin();
+		inline TInt DestPortMax();
+		
+		inline TUint32 SPI(); 
+		
+		inline TUint16 TOSorTrafficClass();
+		inline TUint32 FlowLabel();
+	protected:
+		/** Initialised in the constructor - type can be I, II or III
+		*/
+		TPacketFilterType iType;
+		/** Bitmap of allowed attributes set in the constructor in accordance to type
+		of the filter as defined in TS 23.060.
+		*/
+		TUint16 iAllowedDataBitmap;
+		/** Bitmap of data members that are set(initialised) - data member can be set
+		in allowed for the specified type of the filter only.
+		*/
+		TUint16 iPresentDataBitmap;
+		};
+	/** Packaged TPacketFilterV3.*/
+	typedef TPckg<TPacketFilterV3> TPacketFilterV3Pckg;	
+	
+	/**
+	Contains Authorization Token and associated Flow Identifiers.
+	Defines member data needed to set media authorization TFT parameters - single Authorization Token parameter 
+	followed by the list of Flow Identifier parameter(s), as defined in 3GPP TS 24.008. 
+	
+	Contains data member that's instance of TPacketBase class to make it future proof (extensible); In order to support serialization,
+	present implementation of TPacketBase has to be extended so that it supports methods needed (ExternalizeL()/InternalizeL()).
+	Supported from 9.1.
+
+	@publishedPartner
+	@released
+	*/
+	class CTFTMediaAuthorizationV3 : public CBase	
+		{
+	public:
+		IMPORT_C ~CTFTMediaAuthorizationV3();
+		IMPORT_C static CTFTMediaAuthorizationV3* NewL();			
+	public:	
+		IMPORT_C virtual void ExternalizeL(HBufC8*& aBuffer) const;
+		IMPORT_C virtual void InternalizeL(TDes8& aBuffer);
+		IMPORT_C TUint ExtensionId()const;
+
+
+		/** Flow identifier */	
+		struct TFlowIdentifier
+			{
+			/** Media component number. */
+			TUint16 iMediaComponentNumber;
+			/** IP flow number. */
+			TUint16 iIPFlowNumber;
+			};				
+		/** Authorization token */		
+		TAuthorizationToken iAuthorizationToken;			 
+		/** List of flow identifiers authorization token is granted for*/
+		RArray<TFlowIdentifier>	iFlowIds;
+	protected:
+		CTFTMediaAuthorizationV3();
+		TUint iExtensionId;
+		};
+	
+	IMPORT_C void AddMediaAuthorizationL(TRequestStatus& aStatus, CTFTMediaAuthorizationV3& aMediaAuthorization) const;
+	IMPORT_C void RemoveMediaAuthorization(TRequestStatus& aStatus, TAuthorizationToken& aAuthorizationToken) const;
+
+
+	IMPORT_C TInt OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName);
+	IMPORT_C void EnumeratePacketFilters(TRequestStatus& aStatus, TInt& aCount) const;
+	IMPORT_C void GetPacketFilterInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aPacketFilterInfo) const;
+	IMPORT_C void AddPacketFilter(TRequestStatus& aStatus, const TDesC8& aPacketFilterInfo) const;
+	IMPORT_C void RemovePacketFilter(TRequestStatus& aStatus, TInt aId) const;
+	IMPORT_C void ModifyActiveContext(TRequestStatus& aStatus) const;
+	IMPORT_C void CreateNewTFT(TRequestStatus& aStatus, const TInt aSize) const;
+	IMPORT_C void DeleteTFT(TRequestStatus& aStatus) const;
+	
+	
+	
+	/**
+	Protocol identifiers, as defined in 24.008, section 10.5.6.3
+	*/
+	enum TPcoProtocolId
+	{
+	/** PCO identifier for LCP.*/
+	EETelPcktProtocolLcpId = 0xc021,	
+	/** PCO identifier for PAP.*/
+	EETelPcktProtocolPapId = 0xc023,
+	/** PCO identifier for CHAP.*/
+	EETelPcktProtocolChapId = 0xc223,
+	/** PCO identifier for IPCP.*/
+	EETelPcktProtocolIpcpId = 0x8021
+	};
+
+	/**
+	PCO additional parameter identifiers in MS to network direction, as defined in 3GPP TS 24.008, section 10.5.6.3
+	*/
+	enum TPcoIDMSToNetwork
+	{
+	/** PCO MS additional parameter identifier for a PCSCF address request.*/
+	EEtelPcktPCSCFAddressRequest = 0x01,
+	/** PCO MS additional parameter identifier for an IM CN subsystem signalling flag.*/
+	EEtelPcktIMCNMSSubsystemSignallingFlag = 0x02,
+	/** PCO MS additional parameter identifier for a DNS server address request.*/
+	EEtelPcktDNSServerAddressRequest = 0x03,
+	/** Not currently supported.*/
+	EEtelPcktNotSupported = 0x04,
+	};
+
+	/**
+	PCO additional parameter identifiers in  network to MS direction, as defined in 3GPP TS 24.008, section 10.5.6.3
+	*/
+	enum TPcoIDNetworkToMS
+	{
+	/** PCO network additional parameter identifier for a PCSCF address.*/
+	EEtelPcktPCSCFAddress = 0x01,
+	/** PCO network additional parameter identifier for an IM CN subsystem signalling flag.*/
+	EEtelPcktIMCNNetworkSubsystemSignallingFlag = 0x02,
+	/** PCO network additional parameter identifier for a DNS server address.*/
+	EEtePcktDNSServerAddress= 0x03,
+	/** PCO network additional parameter identifier for a policy control rejection code.*/
+	EEtelPcktPolicyControlRejectionCode = 0x04,
+	};
+
+
+	/** 
+	Helper class that implements PCO IE identifier.
+	
+	@publishedPartner
+	@released
+	*/
+	class TPcoId : public MTlvItemIdType
+	{
+	public:
+		inline TPcoId();
+		inline TPcoId(TUint16 aId);
+		inline void ExternalizeL(TDes8&)const;
+		inline void InternalizeL(TDesC8&);
+		inline TUint SerializedLength() const;	
+		inline TUint16 Id()const;
+		inline void SetId(TUint16);
+		inline TBool IsEqual(const MTlvItemIdType& aOtherIdType)const;	
+	protected:
+		/** PCO Id*/
+  		TUint16 iId;
+	};
+	
+	/** 
+	Helper class that implements PCO IE identifier length.
+	
+	@publishedPartner
+	@released
+	*/
+	class TPcoItemDataLength: public MTlvItemDataLengthType
+	{
+	public:
+		inline TPcoItemDataLength();
+		inline TPcoItemDataLength(TUint8 aLen);
+		inline void SetDataLength(TUint aLength);
+		inline TUint DataLength() const;
+		inline void ExternalizeL(TDes8&) const;
+		inline void InternalizeL(TDesC8&);
+		inline TUint SerializedLength()const;
+	protected:
+		/** length of associated item data*/
+  		TUint8 iDataLength;
+	};
+
+	/** 
+	Identifiers for the type of data data compression applicable for SNDCP only, 
+	as defined in 3GPP TS  44.065, section 6.6.1.1.4. 
+	Values listed in the enumeration do not hold same numerical values as those defined in the specifications, 
+	as ENoDataComression and EManufacturerDefaultDataComression are introduced in order to be utilised when no 
+	compression and device default compression algorithm are needed, respectively. 
+	*/ 
+	enum TDataCompression 
+		{ 
+		/** 
+		No compression 
+		*/ 
+		ENoDataCompression,         
+		/** 
+		Compression algorithm preferred by the device manufacturer 
+		*/ 
+		EManufacturerDefaultDataCompression,         
+		/** 
+		V.42 bis 
+		*/ 
+		EV42, 
+        /** 
+        V.44   
+        */ 
+        EV44, 
+        };
+        
+	/** 
+	Identifiers for type of SNDCP & PDCP header compression as defined 
+	in 3GPP TS  44.065, section 6.5.1.1.4, 
+	Values listed in the enumeration do not hold same numerical values as those defined in the specifications, 
+	as ENoHeaderCompression and EManufacturerDefaultHeaderCompression are introduced in order to be utilised when no 
+	compression and device default compression algorithm are needed, respectively. 
+	*/ 
+	enum THeaderCompression 
+		{ 
+		/** 
+		No compression 
+		*/ 
+		ENoHeaderCompression,         
+		/** 
+		Compression algorithm preferred by the device manufacturer 
+		*/ 
+		EManufacturerDefaultHeaderCompression,         
+		/** 
+		Compression algorithm defined in RFC 1144 
+		*/ 
+		ERfc1144,         
+		/** 
+		Compression algorithm defined in RFC 2507 
+		*/ 
+		ERfc2507,         
+		/** 
+		Robust header compression algorithm defined in RFC 3095 
+		*/ 
+		ERohc,         
+		};
+
+	class TContextConfig_R5 : public TContextConfigR99_R4 
+	/** 
+	Reintroduces support for setting of header/data compression in SNDCP & PDCP         
+	Supported from v9.1. 
+	@publishedPartner 
+	@released
+	*/ 
+		{ 
+	public: 
+		IMPORT_C TContextConfig_R5(); 
+	         
+	public: 
+		/** defines whether SNDCP & PDCP header compression shall be utilised or not. 
+		If former is the case, it holds value of that defines compression algorithm to be exercised. 
+		The default value is ENone - no compression is needed. 
+		*/ 
+		THeaderCompression iPdpHeaderCompression; 
+		/** defines whether SNDCP data compression shall be utilised or not. 
+		If former is the case, it holds value of that defines compression algorithm to be exercised.                   
+		The default value is ENone - no compression is needed. 
+		*/ 
+		TDataCompression iPdpDataCompression; 
+		}; 
+	
+protected:
+	IMPORT_C virtual void ConstructL();
+	IMPORT_C virtual void Destruct();
+protected:
+	CPacketContextPtrHolder* iEtelPacketContextPtrHolder;
+	};
+
+//
+//                       MBMS Context 
+//
+class RPacketMbmsContext : public RPacketContext
+/** 
+Defines the MBMS context and the configuration of a connection to the network's 
+packet-switched service. 
+The functionality associated with the context of a MBMS connection is inherited 
+from RPacketContext class.
+The behaviour of OpenNewContext API is redefined.
+Every instance of this class has RPacketService as a base class.
+
+@publishedPartner
+@released
+*/	
+	{
+public:
+	IMPORT_C RPacketMbmsContext();
+	IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
+	IMPORT_C void Close();
+	friend class CRetrievePcktMbmsSessionList;
+	
+	class TContextConfigMbmsV1: public TPacketDataConfigBase
+	/**
+	Context configurations for MBMS support. 
+	
+	Contains all the data necessary to configure a context on a MBMS network.
+	
+	@see RPacketContext::SetConfig()
+	
+   	@publishedPartner
+	@released
+	*/	
+		{
+	public:
+		IMPORT_C TContextConfigMbmsV1();
+	public:
+		/** Input parameter : Temporary mobile group identity 
+		 * A unique name to an MBMS service
+		 */
+		TTmgi   iTmgi;
+		
+		/** Input Parameter : MBMS access bearer information 
+		 * @see TMbmsScope
+		 */
+		TMbmsScope	iMbmsAccessBearer;
+		
+		/** Input parameter : MBMS service priority options 
+		 * Specifies the priority of the MBMS service to be received.
+		 * @see  TMbmsServicePriority
+		 */
+		TMbmsServicePriority	iMbmsServicePriority;
+		
+		/** Input parameter : MBMS service mode 
+		 * @see TMbmsServiceMode
+		 */
+		TMbmsServiceMode	iMbmsServiceMode;
+		
+		/** Input parameter : MBMS session flag 
+		 * ETrue indicates that an MBMS service has one or more sessions. 
+		 */
+		TBool	iMbmsSessionFlag;
+     	};
+		
+    
+	//Packaged version of TContextConfigMbmsV1, used when this structure has to be passed via IPC.
+	typedef TPckg<TContextConfigMbmsV1> TContextConfigMbmsV1Pckg;
+	
+	IMPORT_C void UpdateMbmsSessionList(TRequestStatus& aStatus,const TMbmsAction aAction, const TMbmsSessionId aSessionId = 0) const;	
+	
+	class CMbmsSession : public CBase
+	/**
+	 * Captures the list of session(s) of an MBMS service.
+	 * @publishedPartner
+	 * @released
+	 */
+     	{
+     public:
+	     IMPORT_C static CMbmsSession* NewL();
+	     IMPORT_C void InternalizeL(const TDesC8& aBuffer);
+	     IMPORT_C void ExternalizeL(HBufC8*& aBuffer);
+	     IMPORT_C TUint ExtensionId() const;
+	     IMPORT_C ~CMbmsSession();
+     public:
+     	/**
+     	 * Output Parameter.
+     	 * Contains the list of sessions pertaining to the MBMS service.
+     	 */
+     	TMbmsSessionIdList iSessionIdList;
+     	/**
+     	 * Defines the type of the class
+     	 */
+     	TUint iExtensionId;
+     protected:
+     	CMbmsSession();
+     	};
+     
+	};
+
+class CPacketPtrHolder;
+class CPcktMbmsMonitoredServiceList;
+class RPacketService : public RTelSubSessionBase
+/**
+Defines a packet-switched connection to a packet network.
+
+This is the main packet network class. 
+It encapsulates functionality associated with controlling a packet-switched connection: 
+attaching, detaching, querying packet network capabilities, etc.
+@publishedPartner
+@released
+*/
+	{
+public:
+	IMPORT_C RPacketService();
+	IMPORT_C TInt Open(RPhone& aPhone);
+	IMPORT_C void Close();
+
+	IMPORT_C void NotifyContextAdded(TRequestStatus& aStatus, TDes& aContextId) const;
+	IMPORT_C void Attach(TRequestStatus& aStatus) const;	
+	IMPORT_C void Detach(TRequestStatus& aStatus) const;	
+
+	friend TInt RPacketContext::OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName);	//< This method calls the internal method RPacketService::PrepareOpenSecondary(const TDesC& aOriginalContextName)
+	friend TInt RPacketContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
+	friend TInt RPacketMbmsContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName);	
+
+	friend class CRetrievePcktMbmsMonitoredServices;
+	
+/** Defines the packet data connection status. */
+	enum TStatus
+		{
+	/** Unattached to network and inactive packet data connection. */
+		EStatusUnattached,	
+	/** Attached to network and inactive packet data connection. */
+		EStatusAttached,	
+	/** Attached to network and active packet data connection. */
+		EStatusActive,		
+	/** Attached to network and suspended packet data connection. */
+		EStatusSuspended	
+		};
+
+	IMPORT_C TInt GetStatus(TStatus& aPacketStatus) const;
+	IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TStatus& aPacketStatus) const;
+	IMPORT_C void NotifyContextActivationRequested(TRequestStatus& aStatus, TDes8& aContextParameters) const;
+	IMPORT_C void RejectActivationRequest(TRequestStatus& aStatus) const;
+
+	struct TContextInfo
+	/** Struct to contain the context information.
+
+	@see GetContextInfo() */
+		{
+		/** The name of the context.
+		
+		@see TName */
+		TName iName;
+		/** The current status of the context.
+		
+		@see RPacketContext::TContextStatus */
+		RPacketContext::TContextStatus iStatus;
+		};
+
+	IMPORT_C void EnumerateContexts(TRequestStatus& aStatus,TInt& aCount, TInt& aMaxAllowed) const; //< Enumerate all Primary and Secondary contexts (whether active or inactive)
+	IMPORT_C void GetContextInfo(TRequestStatus& aStatus, TInt aIndex, TContextInfo& aInfo) const;
+
+	//
+	//	Packet Network Registration and Availability
+	//
+	/** Packet Network Registration/Availability. */
+	enum TRegistrationStatus
+		{
+		/** Not registered and not searching for a network. A network may or may not be 
+		available. */
+		ENotRegisteredNotSearching,
+		/** Registered on a home network. */
+		ERegisteredOnHomeNetwork,
+		/** Not registered but searching for a network. */
+		ENotRegisteredSearching,
+		/** Registration denied. */
+		ERegistrationDenied,
+		/** Registration status unknown. */
+		EUnknown,
+		/** Registered on foreign network. */
+		ERegisteredRoaming,
+		/** Not registered or searching, but network available. */
+		ENotRegisteredButAvailable,	
+		/** Not registered or searching, and network not available. */
+		ENotRegisteredAndNotAvailable
+		};
+
+	IMPORT_C void GetNtwkRegStatus(TRequestStatus& aStatus, TRegistrationStatus& aRegistrationStatus) const;
+	IMPORT_C void NotifyChangeOfNtwkRegStatus(TRequestStatus& aStatus,TRegistrationStatus& aRegistrationStatus) const;
+
+	/** MS class configuration. */
+	enum TMSClass
+		{
+		/** Active simultaneous PS and CS calls supported (Class A). */
+		EMSClassDualMode,			
+		/** Active CS and Suspended PS simultaneous calls supported (Class B). */
+		EMSClassSuspensionRequired, 
+		/** Active CS or Active PS only call supported (Class C). */
+		EMSClassAlternateMode,		
+		/** Active CS only call supported (Class C). */
+		EMSClassCircuitSwitchedOnly,
+		/** Active PS only call supported (Class C) */
+		EMSClassPacketSwitchedOnly, 
+		/** Unknown what configuration is supported */
+		EMSClassUnknown				
+		};
+
+	IMPORT_C void GetMSClass(TRequestStatus& aStatus, TMSClass& aCurrentClass, TMSClass& aMaxClass) const;
+	IMPORT_C void SetMSClass(TRequestStatus& aStatus, TMSClass aClass) const;
+	IMPORT_C void NotifyMSClassChange(TRequestStatus& aStatus, TMSClass& aNewClass) const;
+
+	/** Static capabilities.
+
+	Modes: GPRS */
+	enum TStaticMiscCaps
+			{
+		//
+		// GPRS-specific
+		//
+			/** Suspend supported.
+			
+			Modes: GPRS */
+			KCapsSuspendSupported=0x0001,
+			/** Anonymous Access supported.
+			
+			Modes: GPRS */
+			KCapsAASupported=0x0002,
+			/** Network availability supported.
+			
+			Modes: GPRS */
+			KCapsNetworkAvailabilitySupported=0x0004,
+			/** Set default context supported.
+			
+			Modes: GPRS */
+			KCapsSetDefaultContextSupported=0x0008,
+			/** Change attach mode supported.
+			
+			Modes: GPRS */
+			KCapsChangeAttachModeSupported=0x0010,
+			/** Get data transferred supported.
+			
+			Modes: GPRS */
+			KCapsGetDataTransferredSupported=0x0020,
+			/** Notify data transferred supported
+			
+			Modes: GPRS */
+			KCapsNotifyDataTransferredSupported=0x0040,
+			/** Preferred bearer supported.
+			
+			Modes: GPRS */
+			KCapsPreferredBearerSupported=0x0080,
+			/** PDP data compression supported.
+			
+			Modes: GPRS */
+			KCapsPdpDataCompSupported=0x0100,
+			/** PDP header compression supported
+			
+			Modes: GPRS */
+			KCapsPdpHeaderCompSupported=0x0200,
+			/** MS class supported.
+			
+			Modes: GPRS */
+			KCapsMSClassSupported=0x0400,
+			/** Notify MS class changes supported.
+			
+			Modes: GPRS */
+			KCapsNotifyMSClassSupported=0x0800,
+		//
+		// CDMA Specific
+		//
+			/** Service Option (7,15) or (8,16).
+			
+			Modes: CDMA2000 
+			@deprecated 9.5
+			*/
+			KCapsCDMAOneLowSpeedDataSupported=0x00001000,	
+			/** Service Option (22-25) or (26-29).
+			
+			Modes: CDMA2000 
+			@deprecated 9.5
+			*/
+			KCapsCDMAOneHighSpeedDataSupported=0x00002000,	
+			/** Service Option 33 or 34.
+			
+			Modes: CDMA2000
+			@deprecated 9.5
+			 */
+			KCapsCDMA2000HighSpeedDataSupported=0x00004000,	
+			/** PPP protocol supported.
+			
+			Modes: CDMA2000 
+			@deprecated 9.5
+			*/
+			KCapsProtocolPPPSupported=0x00008000,
+			/** CDPD protocol supported
+			
+			Modes: CDMA2000 
+			@deprecated 9.5
+			*/
+			KCapsProtocolCDPDSupported=0x00010000,
+			/*@deprecated 9.5*/
+			KCapsPacketReleaseModeSupported=0x00020000,
+			/*@deprecated 9.5*/
+			KCapsNotifyReleaseModeChangeSupported=0x00040000,
+			
+			/** The phone supports HSDPA
+			
+			Modes: WCDMA */
+			KCapsHSDPASupported=0x00080000,
+			
+			/** The phone supports EGPRS
+			
+			Modes: GPRS/WCDMA */
+			KCapsEGPRSSupported=0x00100000,
+			
+			/** The phone supports HSUPA
+			
+			Modes: WCDMA */
+			KCapsHSUPASupported=0x00200000,
+			/** The phone supports MBMS
+			
+			Modes: GPRS/WCDMA */
+			KCapsMBMSSupported=0x00400000
+			};
+
+	IMPORT_C TInt GetStaticCaps(TUint& aCaps, RPacketContext::TProtocolType aPdpType) const;
+
+	/** Dynamic capabilities.
+
+	Modes: GPRS/CDMA */
+	enum TDynamicCaps
+		{
+		// Common GPRS and CDMA caps
+		/** Activate supported.
+		
+		Modes: GPRS/CDMA */
+		KCapsActivate=0x00000001,
+		/** Rx Circuit Switched call supported.
+		
+		Modes: GPRS/CDMA */
+		KCapsRxCSCall=0x00000002,
+		/** RX context activation request supported.
+		
+		Modes: GPRS/CDMA */
+		KCapsRxContextActivationReq=0x00000004,
+		// GPRS-specific caps
+		/** Manual attach supported.
+		
+		Modes: GPRS */
+		KCapsManualAttach=0x00000008,
+		/** Manual detach supported.
+		
+		Modes: GPRS */
+		KCapsManualDetach=0x00000010,
+		/** SMS transfer supported.
+		
+		Modes: GPRS */
+		KCapsSMSTransfer=0x00000020,
+		// CDMA-specific caps
+		/** Service Option (7,15) or (8,16).
+		
+		Modes: CDMA
+		 @deprecated 9.5
+		 */
+		KCapsCDMAOneLowSpeedDataAllowed=0x00000040,
+		/** Service Option (22-25) or (26-29).
+		
+		Modes: CDMA
+		@deprecated 9.5
+		 */
+		KCapsCDMAOneHighSpeedDataAllowed=0x00000080,
+		/** Service Option 33 or 34.
+		
+		Modes: CDMA 
+		@deprecated 9.5
+		*/
+		KCapsCDMA2000HighSpeedDataAllowed=0x00000100,
+		
+		/** HSDPA is currently being used
+		
+		Modes: WCDMA */
+		KCapsHSDPA=0x00000200,
+		
+		/** EGPRS is currently being used
+		
+		Modes: GPRS/WCDMA  */
+		KCapsEGPRS=0x00000400,
+		
+		/** HSUPA is currently being used
+		
+		Modes: WCDMA */
+		KCapsHSUPA=0x00000800,
+		
+		/** MBMS is currently being used
+		
+		Modes: GPRS/WCDMA */
+		KCapsMBMS=0x00001000
+		
+		};
+	
+	/** Typedef to hold the RPacketService::TDynamicCaps. */
+	typedef TUint TDynamicCapsFlags;
+
+	IMPORT_C TInt GetDynamicCaps(TDynamicCapsFlags& aCaps) const;
+	IMPORT_C void NotifyDynamicCapsChange(TRequestStatus& aStatus, TDynamicCapsFlags& aCaps) const;
+
+	/** The preferred bearer. */
+	enum TPreferredBearer
+		{
+		/** Packet Switched (PS) bearer preferred. */
+		EBearerPacketSwitched,
+		/** Circuit Switched (CS) bearer preferred. */
+		EBearerCircuitSwitched
+		};
+
+	IMPORT_C void SetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer aBearer) const;
+	IMPORT_C TInt GetPreferredBearer(TPreferredBearer& aBearer) const;// Deprecated method.
+	
+	IMPORT_C void GetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer& aBearer) const; // Recommended method variant
+
+	/** Defines when the attachment to the GPRS network should occur.
+
+	Modes: GPRS */
+	enum TAttachMode
+		{
+		/** The phone will attach to the packet network whenever it can. */
+		EAttachWhenPossible,// instruct phone stack to attach to packet network whenever it can
+		/** The phone will attach to the packet network only when required (e.g. when activating 
+		a connection). */
+		EAttachWhenNeeded	// instruct phone stack to attach to network only when required
+		};
+
+	IMPORT_C TInt SetAttachMode(TAttachMode aMode) const;  // Deprecated method.
+	IMPORT_C TInt GetAttachMode(TAttachMode& aMode) const; // Deprecated method.
+	IMPORT_C TInt SetDefaultContextParams(const TDesC8& aPckg) const; // Deprecated method.
+	IMPORT_C TInt GetDefaultContextParams(TDes8& aPckg) const; // Deprecated method.
+
+	IMPORT_C void SetAttachMode(TRequestStatus& aStatus, TAttachMode aMode) const; // Recommended method variant
+	IMPORT_C void GetAttachMode(TRequestStatus& aStatus, TAttachMode& aMode) const; // Recommended method variant
+	IMPORT_C void NotifyAttachModeChange(TRequestStatus& aStatus, TAttachMode& aMode) const;
+	IMPORT_C void SetDefaultContextParams(TRequestStatus& aStatus, const TDesC8& aPckg) const; // Recommended method variant
+	IMPORT_C void GetDefaultContextParams(TRequestStatus& aStatus, TDes8& aPckg) const; // Recommended method variant
+
+	enum TPacketReleaseMode
+		{
+		EReleaseModeUnknown,
+		EReleaseModeUnregistered,
+		EReleaseMode97_98,
+		EReleaseMode99,
+		EReleaseMode4,
+		/*@deprecated 9.5*/
+		EReleaseModeCDMA2000
+		};
+
+	IMPORT_C void GetCurrentReleaseMode(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const;
+	IMPORT_C void NotifyReleaseModeChange(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const;
+
+	enum TContextType
+		{
+		EUnspecified,		//< Unspecified context type
+		EInternalContext,	//< Internally created context
+		EExternalContext	//< Externally created context
+		};
+
+	
+	class TNifInfoV2 : public TPacketBase
+	/**
+	Rel99/R4 Network information class. This V2 class inherits from the 
+	TPacketBase class to make it future proof (extensible).
+	@publishedPartner
+	@released
+	*/
+		{
+	public:
+		IMPORT_C TNifInfoV2();							//< Constructor
+	public:
+		TName iContextName;								//< The name of any defined context for this Network Interface
+		TInt iNumberOfContexts;							//< Number of contexts belonging to the Network Interface
+		RPacketContext::TContextStatus iNifStatus;		//< Status of the Network Interface
+		RPacketContext::TProtocolAddress iPdpAddress;	//< PDP address of the interface
+		TContextType iContextType;						//< Context type (internally or externally created)
+		};
+	typedef TPckg<TNifInfoV2> TNifInfoV2Pckg;			//< TNifInfoV2 package
+
+	// Internal API/TSY struct, used by GetContextNameInNif() method
+	struct TContextNameInNif
+		{
+		TInt iIndex;				//< Integer specifying a context within a Nif.
+		TName iExistingContextName;	//< Existing Context name.
+		};
+
+	IMPORT_C void EnumerateNifs(TRequestStatus& aStatus, TInt& aCount) const;
+	IMPORT_C void GetNifInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aNifInfoV2) const;
+	IMPORT_C void EnumerateContextsInNif(TRequestStatus& aStatus, const TDesC& aExistingContextName, TInt& aCount) const;
+	IMPORT_C void GetContextNameInNif(TRequestStatus& aStatus,  const TDesC& aExistingContextName, TInt aIndex, TDes& aContextName) const;
+	IMPORT_C void DeactivateNIF(TRequestStatus& aStatus, const TDesC& aContextName) const;
+
+//
+//
+// MBMS Service Availability
+//
+//
+	
+	class TMbmsServiceAvailabilityV1 : public TPacketType
+	/**
+	Holds the service availability parameters needed to register with TSY
+	for the services to be monitored.
+	
+	@publishedPartner
+	@released
+	*/
+		{
+	public:	
+		IMPORT_C TMbmsServiceAvailabilityV1();
+	public:
+		void InternalizeL(RReadStream& aStream);
+		void ExternalizeL(RWriteStream& aStream) const;
+	public:
+		/** Input Parameter : Temporary Mobile Group Identity */
+		TTmgi	iTmgi;
+		
+		/** Input Parameter : MBMS service mode */
+		TMbmsServiceMode iMbmsServiceMode;
+		
+		/** Output Parameter : MBMS availability status */
+		TMbmsAvailabilityStatus iMbmsAvailabilityStatus;
+		
+		/** Input Parameter : MBMS access bearer information */
+		TMbmsScope iMbmsAccessBearer;
+		};
+	
+	//Packaged version of TMbmsServiceAvailabilityV1, used when this structure has to be passed via IPC.
+	typedef TPckg<TMbmsServiceAvailabilityV1> TMbmsServiceAvailabilityV1Pckg;
+		
+	IMPORT_C void NotifyMbmsServiceAvailabilityChange(TRequestStatus& aReqStatus) const;
+	IMPORT_C void UpdateMbmsMonitorServiceListL (TRequestStatus& aReqStatus, const TMbmsAction aAction, CPcktMbmsMonitoredServiceList* aList = NULL) const;		
+	IMPORT_C void GetMbmsNetworkServiceStatus(TRequestStatus& aStatus, TBool aAttemptAttach, TMbmsNetworkServiceStatus& aServiceStatus) const;
+	IMPORT_C void NotifyMbmsNetworkServiceStatusChange(TRequestStatus& aStatus, TMbmsNetworkServiceStatus& aServiceStatus) const;
+	IMPORT_C void EnumerateMbmsMonitorServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const;
+	IMPORT_C void EnumerateMbmsActiveServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const;
+protected:
+	IMPORT_C virtual void ConstructL();
+	IMPORT_C virtual void Destruct();
+private:
+	TInt PrepareOpenSecondary(const TDesC& aOriginalContextName); //< Internal method, not for Client use
+	CPacketPtrHolder* iEtelPacketPtrHolder;
+	RMutex iMutex;   //< Internal mutex, used to prevent concurent use of PrepareOpenSecondary() and OpenNewContext()
+	};
+	
+#include <etelpckt.inl>
+#endif