telephonyserver/etelpacketdata/cetel/etelQoS.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserver/etelpacketdata/cetel/etelQoS.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserver/etelpacketdata/cetel/etelQoS.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,469 +1,469 @@
-// Copyright (c) 1997-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 Quality of Service (QoS) Support
-// GPRS Rel97/98, CDMAOne, CDMA2000, GPRS/UMTS Rel99 and UMTS Rel4.
-// 
-//
-
-#include <et_clsvr.h>
-#include <etelext.h>
-
-// ETel Packet Data header files
-#include "etelQoS.h"
-#include "pcktptr.h"
-#include <pcktcs.h>
-
-// Used by ETel to instruct TSY to create a name for the newly opened object
-_LIT(KETelNewQoSName, "::");
-
-/***********************************************************************************/
-//
-// RPacketQoS
-//
-/***********************************************************************************/
-
-EXPORT_C RPacketQoS::RPacketQoS()
-	:iEtelPacketQoSPtrHolder(NULL)
-/** Standard constructor. */
-	{
-	}
-
-EXPORT_C void RPacketQoS::ConstructL()
-/**
- * This function creates an instance of CPacketQoSPtrHolder and assigns it to the 
- * iEtelPacketQoSPtrHolder pointer. 
- 
-@capability None
-*/
-	{
-	__ASSERT_ALWAYS(iEtelPacketQoSPtrHolder == NULL, PanicClient(EEtelPanicHandleNotClosed));
-	iEtelPacketQoSPtrHolder = CPacketQoSPtrHolder::NewL(CEtelPacketPtrHolder::EMaxNumPacketQoSPtrSlots, CEtelPacketPtrHolder::EMaxNumPacketQoSPtrCSlots);
-	}
-
-EXPORT_C void RPacketQoS::Destruct()
-/**
- * This function deletes and NULLs the iEtelPacketQoSPtrHolder pointer.
- 
-@capability None
-*/
-	{
-	delete iEtelPacketQoSPtrHolder;
-	iEtelPacketQoSPtrHolder = NULL;
-	}
-
-EXPORT_C TInt RPacketQoS::OpenNewQoS(RPacketContext& aPacketContext, TDes& aProfileName)
-//This function may be called by the client application.
-/** Creates a new QoS profile (i.e. RPacketQoS class instance). 
-
-An RPacketQoS may only be opened on an existing RPacketContext subsession. 
-
-When the new QoS profile is created, the TSY will assign it a unique name to it. The 
-client can use this name to uniquely identify the particular context.
-
-An opened RPacketContext must be closed explicitely by calling Close() to 
-prevent a resource (memory) leak.
-
-@param aPacketContext A reference to a previously instantiated RPacketContext, on 
-which to open the QoS profile.
-@param aProfileName On return, the unique QoS name.
-@return KErrNone if successful, a system-wide error code if not. 
-@capability None
-*/
-	{
-	RSessionBase session = aPacketContext.SessionHandle();
-
-	TRAPD(ret,ConstructL());
-	if (ret)
-		{
-		return ret;
-		}
-	TInt subSessionHandle=aPacketContext.SubSessionHandle();
-	__ASSERT_ALWAYS(subSessionHandle!=0,PanicClient(EEtelPanicNullHandle)); // client has no existing sub-session!
-	TPtrC name(KETelNewQoSName);	// necessary so that server knows to ask TSY for new name
-
-	SetSessionHandle(session);
-	ret = CreateSubSession(session,EEtelOpenFromSubSession,TIpcArgs(&name,&aProfileName,subSessionHandle));
-	if (ret)
-		Destruct();
-	return ret;
-	}
-
-EXPORT_C TInt RPacketQoS::OpenExistingQoS(RPacketContext& aPacketContext, const TDesC& aProfileName)
-//This function may be called by the client application.
-/** Opens a handle on an existing RPacketQoS object identified by the profile name.
-
-An opened RPacketContext must be closed explicitely by calling Close() to
-prevent a resource (memory) leak.
-
-@param aPacketContext This identifies to which RPacketContext the QoS profile
-to be opened belongs.
-@param aProfileName This uniquely identifies to ETel/TSY which existing RPacketQoS
-object the client wants to open. This name was previously assigned by the
-TSY when the specified RPacketQoS was originally created using RPacketQoS::OpenNewQoS().
-@return KErrNone if successful, KErrNotFound if the object does not exist. 
-@capability None
-*/
- 	{
-	RSessionBase session = aPacketContext.SessionHandle();
-
-	TRAPD(ret,ConstructL());
-	if (ret)
-		{
-		Destruct();
-		return ret;
-		}
-	TInt subSessionHandle=aPacketContext.SubSessionHandle();
-	__ASSERT_ALWAYS(subSessionHandle != 0,PanicClient(EEtelPanicNullHandle));
-	__ASSERT_ALWAYS(aProfileName.Length() != 0,PanicClient(KErrBadName));
-
-	SetSessionHandle(session);
-	ret = CreateSubSession(session,EEtelOpenByNameFromSubSession,TIpcArgs(&aProfileName,TIpcArgs::ENothing,subSessionHandle));
-	if (ret)
-		Destruct();
-	return ret;
-	}
-
-EXPORT_C void RPacketQoS::Close()
-//This function may be called by the client application.
-/** Closes the client's current sub-session with ETel.
-
-Any outstanding requests the client may have with ETel (notifications, for 
-example) will be automatically destroyed by ETel.
-
-An opened RPacketContext must be closed explicitly by calling Close() to 
-prevent a resource (memory) leak. 
-@capability None
-*/
-	{
-	CloseSubSession(EEtelClose);
-	Destruct();
-	}
-
-EXPORT_C void RPacketQoS::SetProfileParameters(TRequestStatus& aStatus, TDes8& aProfile) const
-//This asynchronous function may be called by the client application.
-/** Passes to the TSY all the parameters required to configure Quality of Service 
-for a particular context. 
-
-The parameters are passed via a TQoSGPRSRequested, TQoSCDMA2000Requested or 
-TQoSRequestedR99_R4 class, depending on the current network and packet-service.
-
-This is an asynchronous function call.
-
-The TQoSCapsxxxx classes inherit from TPacketDataConfigBase and therefore 
-contain an iExtensionId member data identifying whether they are a GPRS, 
-CDMA or R99_R4 configuration class.
-
-To determine how to correctly unpack the descriptor once it reaches the TSY, 
-the TSY must first cast the descriptor to a TPacketDataConfigBase pointer 
-and check the value of the iExtensionId parameter. Referring to this value 
-the TSY will then cast the descriptor to the correct TPacketDataConfigBase-
-derived class.
-
-Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSSetProfileParams) to 
-cancel a previously placed asynchronous SetProfileParameters() request.
-
-
-@param aStatus On completion, KErrNone if successful, a system-wide error 
-code if not.
-@param aProfile A TQoSGPRSRequested, TQoSCDMA2000Requested or TQoSR99_R4Requested 
-containing the configuration data, packaged inside a TPckg<> and passed as a 
-descriptor reference. 
-@capability WriteDeviceData
-@capability NetworkServices
-*/
-	{
-	Set(EPacketQoSSetProfileParams, aStatus, aProfile);
-	}
-
-EXPORT_C void RPacketQoS::GetProfileParameters(TRequestStatus& aStatus, TDes8& aProfile) const
-//This asynchronous function may be called by the client application.
-/** Retrieves the TSY/phone values of all parameters associated with a negotiated 
-QoS profile.
-
-This is an asynchronous function.
-
-QoS profile parameters are contained as member data in either a TQoSGPRSNegotiated, 
-TQoSCDMA2000Negotiated, or TQoSR99_R4Negotiated class, depending on the current packet 
-service. These T-classes are packaged inside a TPckg<> template class, enabling them to 
-be passed as a descriptor to the TSY. 
-
-The Negotiated QoS profile class derives from TPacketDataConfigBase and therefore contains
-iExtensionId member data identifying whether it is a GPRS, CDMA or R99_4 configuration 
-class. To determine how to correctly unpack the descriptor once it reaches the TSY, the 
-TSY must first cast the descriptor to a TPacketDataConfigBase pointer and check whether 
-the value of the iExtensionId parameter. Depending on this value, the TSY will then cast 
-the descriptor to the correct TPacketDataConfigBase-derived class.
-
-Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSGetProfileParams) to 
-cancel a previously placed asynchronous GetProfileParameters() request.
-
-
-@param aStatus On return, KErrNone if successful.
-@param aProfile On completion, a TQoSGPRSNegotiated, TQoSCDMA2000Negotiated or 
-TQoSR99_R4Negotiated containing the profile data, packaged inside a TPckg<> and 
-returned as a descriptor reference.
-
-@capability ReadDeviceData
-*/
-	{
-	Get(EPacketQoSGetProfileParams, aStatus, aProfile);
-	}
-
-EXPORT_C void RPacketQoS::GetProfileCapabilities(TRequestStatus& aStatus, TDes8& aProfileCaps) const
-//This asynchronous function may be called by the client application.
-/** Gets the Quality of Service capabilities for the current packet service. 
-
-Depending on the the packet service type, a TQoSCapsGPRS, TQoSCapsCDMA2000,  
-TQoSCapsR99_R4 or TQoSCapsR5 will be passed in. The TSY will assign a bitmask for each 
-parameter in the relevant TQoSCapsxxx class. This bitmask contains all values 
-which can be assigned to the particular parameter for the current packet 
-service and phone.
-
-This is an asynchronous function.
-
-The TQoSCapsxxxx classes inherit from TPacketDataConfigBase and therefore 
-contain iExtensionId member data identifying the configuration class 
-(GPRS Rel97/98, CDMA, Rel99 or Rel4).
-
-To determine how to correctly unpack the descriptor once it reaches the TSY, the 
-TSY must first cast the descriptor to a TPacketDataConfigBase pointer and check whether 
-the value of the iExtensionId parameter. Depending on this value, the TSY will then cast 
-the descriptor to the correct TPacketDataConfigBase-derived class.
-
-Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSGetProfileCaps) to cancel 
-a previously placed asynchronous GetProfileCapabilities() request.
-
-
-@param aStatus On completion, KErrNone if successful.
-@param aProfileCaps A reference to a TQoSCapsGPRS, TQosCapsCDMA2000,  
-TQoSCapsR99_R4 or TQoSCapsR5 packaged in a TPckg and returned as a descriptor. 
-
-@capability None
-*/
-	{
-	Get(EPacketQoSGetProfileCaps, aStatus, aProfileCaps);
-	}
-
-EXPORT_C void RPacketQoS::NotifyProfileChanged(TRequestStatus& aStatus, TDes8& aProfile) const
-//may be called by the client application.
-/**
-Notifies a client of a change in the negotiated QoS profile is received 
-by the TSY from the phone. 
-
-This is a asynchronous function.
-
-The new QoS profile returned will be either TQoSGPRSNegotiated, 
-TQoSCDMA2000Negotiated or TQoSR99_R4Negotiated, depending on the 
-current packet service. The TQoSxxxNegotiated class will contain 
-updated values for each QoS parameter.
- 
-If the client wishes to receive further notifications, NotifyProfileChanged() 
-must be called again. 
-
-Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSNotifyProfileChanged) 
-to cancel a previously placed asynchronous NotifyProfileChanged() request.
-
-
-@param aStatus On completion, KErrNone if successful.
-@param aProfile A descriptor reference to a TPckg<TQoSXXXNegotiated> object. 
-
-@capability ReadDeviceData
-*/
- 	{
-	Get(EPacketQoSNotifyProfileChanged, aStatus, aProfile);
-	}
-
-
-EXPORT_C RPacketQoS::TQoSCapsGPRS::TQoSCapsGPRS()
-:TPacketDataConfigBase(), iPrecedence(EUnspecifiedPrecedence), iDelay(EUnspecifiedDelayClass),
- iReliability(EUnspecifiedReliabilityClass), iPeak(EUnspecifiedPeakThroughput),
- iMean(EUnspecifiedMeanThroughput)
-/** Standard constructor. 
-
-@deprecated v9.3 Use RPacketQoS::TQoSCapsR99_R4::TQoSCapsR99_R4 or RPacketQoS::TQoSCapsR5::TQoSCapsR5 instead. 
-
-Initializes the GPRS QoS profile with default values. Sets iExtensionId to KConfigGPRS. 
-*/
-	{
-	iExtensionId = KConfigGPRS;
-	}
-
-EXPORT_C RPacketQoS::TQoSGPRSRequested::TQoSGPRSRequested()
-:TPacketDataConfigBase(), iReqPrecedence(EUnspecifiedPrecedence), iMinPrecedence(EUnspecifiedPrecedence),
- iReqDelay(EUnspecifiedDelayClass), iMinDelay(EUnspecifiedDelayClass),
- iReqReliability(EUnspecifiedReliabilityClass), iMinReliability(EUnspecifiedReliabilityClass),
- iReqPeakThroughput(EUnspecifiedPeakThroughput), iMinPeakThroughput(EUnspecifiedPeakThroughput),
- iReqMeanThroughput(EUnspecifiedMeanThroughput), iMinMeanThroughput(EUnspecifiedMeanThroughput)
-/**
-Standard constructor. 
-
-@deprecated v9.3 Use RPacketQoS::TQoSR99_R4Requested::TQoSR99_R4Requested or RPacketQoS::TQoSR5Requested::TQoSR5Requested instead.
-
-Initializes the requested and minimum GPRS QoS values to the defaults. 
-Sets the iExtensionId to KConfigGPRS. 
-*/
-	{
-	iExtensionId = KConfigGPRS;
-	}
-
-EXPORT_C RPacketQoS::TQoSGPRSNegotiated::TQoSGPRSNegotiated()
-:TPacketDataConfigBase(), iPrecedence(EUnspecifiedPrecedence), iDelay(EUnspecifiedDelayClass),
- iReliability(EUnspecifiedReliabilityClass), iPeakThroughput(EUnspecifiedPeakThroughput),
- iMeanThroughput(EUnspecifiedMeanThroughput)
-/** Standard constructor. 
-
-@deprecated v9.3 Use RPacketQoS::TQoSR99_R4Negotiated::TQoSR99_R4Negotiated or RPacketQoS::TQoSR5Negotiated::TQoSR5Negotiated instead.
-
-Initializes the negotiated GPRS QoS values to the defaults. 
-Sets iExtensionId to KConfigGPRS. */
-	{
-	iExtensionId = KConfigGPRS;
-	}
-
-EXPORT_C RPacketQoS::TQoSCapsCDMA2000::TQoSCapsCDMA2000()
-:TPacketDataConfigBase()
-/** Standard constructor. 
-
-Initializes the CDMA QoS profile with default values. Sets iExtensionId to KConfigGPRS. 
-*/
-	{
-	iExtensionId = KConfigCDMA;
-	}
-
-EXPORT_C RPacketQoS::TQoSCDMA2000Requested::TQoSCDMA2000Requested()
-:TPacketDataConfigBase()
-/** Standard constructor. 
-
-Initializes the requested CDMA QoS values to the defaults. Sets iExtensionId to KConfigCDMA. 
-*/
-	{
-	iExtensionId = KConfigCDMA;
-	}
-
-EXPORT_C RPacketQoS::TQoSCDMA2000Negotiated::TQoSCDMA2000Negotiated()
-:TPacketDataConfigBase()
-/** Standard constructor. Sets iExtentionId to KConfigCDMA. */
-	{
-	iExtensionId = KConfigCDMA;
-	}
-
-
-EXPORT_C RPacketQoS::TQoSCapsR99_R4::TQoSCapsR99_R4()
-: TPacketDataConfigBase(),
-  iTrafficClass(ETrafficClassUnspecified),
-  iDeliveryOrderReqd(EDeliveryOrderUnspecified),
-  iDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
-  iBER(EBERUnspecified),
-  iSDUErrorRatio(ESDUErrorRatioUnspecified),
-  iTrafficHandlingPriority(ETrafficPriorityUnspecified)
-/**
- * Constructor - All values are initialized to unspecified.
- */
-	{
-	iExtensionId = KConfigRel99Rel4;	
-	}
-
-EXPORT_C RPacketQoS::TQoSCapsR5::TQoSCapsR5()
-: TQoSCapsR99_R4(),
-  iSignallingIndication(EFalse),
-  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
-/**
- * Constructor - All values are initialized to unspecified.
- */
-	{
-	iExtensionId = KConfigRel5;	
-	}
-	
-EXPORT_C RPacketQoS::TQoSR99_R4Requested::TQoSR99_R4Requested()
-: TPacketDataConfigBase(),
-  iReqTrafficClass(ETrafficClassUnspecified),
-  iMinTrafficClass(ETrafficClassUnspecified),
-  iReqDeliveryOrderReqd(EDeliveryOrderUnspecified),
-  iMinDeliveryOrderReqd(EDeliveryOrderUnspecified),
-  iReqDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),	
-  iMinDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
-  iReqMaxSDUSize(0),						 
-  iMinAcceptableMaxSDUSize(0),
-  iReqBER(EBERUnspecified),
-  iMaxBER(EBERUnspecified),					
-  iReqSDUErrorRatio(ESDUErrorRatioUnspecified),
-  iMaxSDUErrorRatio(ESDUErrorRatioUnspecified),			
-  iReqTrafficHandlingPriority(ETrafficPriorityUnspecified),
-  iMinTrafficHandlingPriority(ETrafficPriorityUnspecified),
-  iReqTransferDelay(0),
-  iMaxTransferDelay(0)
-/**
- * Constructor - All values are initialized to unspecified or zero.
- */
-	{
-	iExtensionId = KConfigRel99Rel4;		
-
-	
-	iReqMaxRate.iUplinkRate = 0;			//< Range: 1kbps to 8640kbps in varying increments	
-	iReqMaxRate.iDownlinkRate = 0;			//< Range: 1kbps to 8640kbps in varying increments					
-	iMinAcceptableMaxRate.iUplinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments		
-	iMinAcceptableMaxRate.iDownlinkRate = 0;//< Range: 1kbps to 8640kbps in varying increments			
-	
-	iReqGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
-	iReqGuaranteedRate.iDownlinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments	
-	iMinGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
-	iMinGuaranteedRate.iDownlinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments	
-	}
-
-EXPORT_C RPacketQoS::TQoSR5Requested::TQoSR5Requested()
-: TQoSR99_R4Requested(),
-  iSignallingIndication(EFalse),
-  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
- /**
-  * Constructor - The values are initialized to zero and unknown.
-    Sets iExtentionId to KConfigRel5.
- */
-	{
-	iExtensionId = KConfigRel5;
-	}
-
-EXPORT_C RPacketQoS::TQoSR99_R4Negotiated::TQoSR99_R4Negotiated()
-: TPacketDataConfigBase(),
-  iTrafficClass(ETrafficClassUnspecified),
-  iDeliveryOrderReqd(EDeliveryOrderUnspecified),
-  iDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
-  iMaxSDUSize(0),
-  iBER(EBERUnspecified),
-  iSDUErrorRatio(ESDUErrorRatioUnspecified),
-  iTrafficHandlingPriority(ETrafficPriorityUnspecified),
-  iTransferDelay(0)
-/**
- * Constructor - All values are initialized to unspecified or zero.
- */
-	{
-	iExtensionId = KConfigRel99Rel4;	
-	
-	iMaxRate.iUplinkRate = 0;				//< Range: 1kbps to 8640kbps in varying increments	
-	iMaxRate.iDownlinkRate = 0;				//< Range: 1kbps to 8640kbps in varying increments	
-				
-	iGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
-	iGuaranteedRate.iDownlinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
-	}
-	
-EXPORT_C RPacketQoS::TQoSR5Negotiated::TQoSR5Negotiated()
-: TQoSR99_R4Negotiated(),
-  iSignallingIndication(EFalse),
-  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
- /**
-  * Constructor - The values are initialized to zero and unknown.
-    Sets iExtentionId to KConfigRel5.
- */
-	{
-	iExtensionId = KConfigRel5;
-	}
+// Copyright (c) 1997-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 Quality of Service (QoS) Support
+// GPRS Rel97/98, CDMAOne, CDMA2000, GPRS/UMTS Rel99 and UMTS Rel4.
+// 
+//
+
+#include <et_clsvr.h>
+#include <etelext.h>
+
+// ETel Packet Data header files
+#include "etelQoS.h"
+#include "pcktptr.h"
+#include <pcktcs.h>
+
+// Used by ETel to instruct TSY to create a name for the newly opened object
+_LIT(KETelNewQoSName, "::");
+
+/***********************************************************************************/
+//
+// RPacketQoS
+//
+/***********************************************************************************/
+
+EXPORT_C RPacketQoS::RPacketQoS()
+	:iEtelPacketQoSPtrHolder(NULL)
+/** Standard constructor. */
+	{
+	}
+
+EXPORT_C void RPacketQoS::ConstructL()
+/**
+ * This function creates an instance of CPacketQoSPtrHolder and assigns it to the 
+ * iEtelPacketQoSPtrHolder pointer. 
+ 
+@capability None
+*/
+	{
+	__ASSERT_ALWAYS(iEtelPacketQoSPtrHolder == NULL, PanicClient(EEtelPanicHandleNotClosed));
+	iEtelPacketQoSPtrHolder = CPacketQoSPtrHolder::NewL(CEtelPacketPtrHolder::EMaxNumPacketQoSPtrSlots, CEtelPacketPtrHolder::EMaxNumPacketQoSPtrCSlots);
+	}
+
+EXPORT_C void RPacketQoS::Destruct()
+/**
+ * This function deletes and NULLs the iEtelPacketQoSPtrHolder pointer.
+ 
+@capability None
+*/
+	{
+	delete iEtelPacketQoSPtrHolder;
+	iEtelPacketQoSPtrHolder = NULL;
+	}
+
+EXPORT_C TInt RPacketQoS::OpenNewQoS(RPacketContext& aPacketContext, TDes& aProfileName)
+//This function may be called by the client application.
+/** Creates a new QoS profile (i.e. RPacketQoS class instance). 
+
+An RPacketQoS may only be opened on an existing RPacketContext subsession. 
+
+When the new QoS profile is created, the TSY will assign it a unique name to it. The 
+client can use this name to uniquely identify the particular context.
+
+An opened RPacketContext must be closed explicitely by calling Close() to 
+prevent a resource (memory) leak.
+
+@param aPacketContext A reference to a previously instantiated RPacketContext, on 
+which to open the QoS profile.
+@param aProfileName On return, the unique QoS name.
+@return KErrNone if successful, a system-wide error code if not. 
+@capability None
+*/
+	{
+	RSessionBase session = aPacketContext.SessionHandle();
+
+	TRAPD(ret,ConstructL());
+	if (ret)
+		{
+		return ret;
+		}
+	TInt subSessionHandle=aPacketContext.SubSessionHandle();
+	__ASSERT_ALWAYS(subSessionHandle!=0,PanicClient(EEtelPanicNullHandle)); // client has no existing sub-session!
+	TPtrC name(KETelNewQoSName);	// necessary so that server knows to ask TSY for new name
+
+	SetSessionHandle(session);
+	ret = CreateSubSession(session,EEtelOpenFromSubSession,TIpcArgs(&name,&aProfileName,subSessionHandle));
+	if (ret)
+		Destruct();
+	return ret;
+	}
+
+EXPORT_C TInt RPacketQoS::OpenExistingQoS(RPacketContext& aPacketContext, const TDesC& aProfileName)
+//This function may be called by the client application.
+/** Opens a handle on an existing RPacketQoS object identified by the profile name.
+
+An opened RPacketContext must be closed explicitely by calling Close() to
+prevent a resource (memory) leak.
+
+@param aPacketContext This identifies to which RPacketContext the QoS profile
+to be opened belongs.
+@param aProfileName This uniquely identifies to ETel/TSY which existing RPacketQoS
+object the client wants to open. This name was previously assigned by the
+TSY when the specified RPacketQoS was originally created using RPacketQoS::OpenNewQoS().
+@return KErrNone if successful, KErrNotFound if the object does not exist. 
+@capability None
+*/
+ 	{
+	RSessionBase session = aPacketContext.SessionHandle();
+
+	TRAPD(ret,ConstructL());
+	if (ret)
+		{
+		Destruct();
+		return ret;
+		}
+	TInt subSessionHandle=aPacketContext.SubSessionHandle();
+	__ASSERT_ALWAYS(subSessionHandle != 0,PanicClient(EEtelPanicNullHandle));
+	__ASSERT_ALWAYS(aProfileName.Length() != 0,PanicClient(KErrBadName));
+
+	SetSessionHandle(session);
+	ret = CreateSubSession(session,EEtelOpenByNameFromSubSession,TIpcArgs(&aProfileName,TIpcArgs::ENothing,subSessionHandle));
+	if (ret)
+		Destruct();
+	return ret;
+	}
+
+EXPORT_C void RPacketQoS::Close()
+//This function may be called by the client application.
+/** Closes the client's current sub-session with ETel.
+
+Any outstanding requests the client may have with ETel (notifications, for 
+example) will be automatically destroyed by ETel.
+
+An opened RPacketContext must be closed explicitly by calling Close() to 
+prevent a resource (memory) leak. 
+@capability None
+*/
+	{
+	CloseSubSession(EEtelClose);
+	Destruct();
+	}
+
+EXPORT_C void RPacketQoS::SetProfileParameters(TRequestStatus& aStatus, TDes8& aProfile) const
+//This asynchronous function may be called by the client application.
+/** Passes to the TSY all the parameters required to configure Quality of Service 
+for a particular context. 
+
+The parameters are passed via a TQoSGPRSRequested, TQoSCDMA2000Requested or 
+TQoSRequestedR99_R4 class, depending on the current network and packet-service.
+
+This is an asynchronous function call.
+
+The TQoSCapsxxxx classes inherit from TPacketDataConfigBase and therefore 
+contain an iExtensionId member data identifying whether they are a GPRS, 
+CDMA or R99_R4 configuration class.
+
+To determine how to correctly unpack the descriptor once it reaches the TSY, 
+the TSY must first cast the descriptor to a TPacketDataConfigBase pointer 
+and check the value of the iExtensionId parameter. Referring to this value 
+the TSY will then cast the descriptor to the correct TPacketDataConfigBase-
+derived class.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSSetProfileParams) to 
+cancel a previously placed asynchronous SetProfileParameters() request.
+
+
+@param aStatus On completion, KErrNone if successful, a system-wide error 
+code if not.
+@param aProfile A TQoSGPRSRequested, TQoSCDMA2000Requested or TQoSR99_R4Requested 
+containing the configuration data, packaged inside a TPckg<> and passed as a 
+descriptor reference. 
+@capability WriteDeviceData
+@capability NetworkServices
+*/
+	{
+	Set(EPacketQoSSetProfileParams, aStatus, aProfile);
+	}
+
+EXPORT_C void RPacketQoS::GetProfileParameters(TRequestStatus& aStatus, TDes8& aProfile) const
+//This asynchronous function may be called by the client application.
+/** Retrieves the TSY/phone values of all parameters associated with a negotiated 
+QoS profile.
+
+This is an asynchronous function.
+
+QoS profile parameters are contained as member data in either a TQoSGPRSNegotiated, 
+TQoSCDMA2000Negotiated, or TQoSR99_R4Negotiated class, depending on the current packet 
+service. These T-classes are packaged inside a TPckg<> template class, enabling them to 
+be passed as a descriptor to the TSY. 
+
+The Negotiated QoS profile class derives from TPacketDataConfigBase and therefore contains
+iExtensionId member data identifying whether it is a GPRS, CDMA or R99_4 configuration 
+class. To determine how to correctly unpack the descriptor once it reaches the TSY, the 
+TSY must first cast the descriptor to a TPacketDataConfigBase pointer and check whether 
+the value of the iExtensionId parameter. Depending on this value, the TSY will then cast 
+the descriptor to the correct TPacketDataConfigBase-derived class.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSGetProfileParams) to 
+cancel a previously placed asynchronous GetProfileParameters() request.
+
+
+@param aStatus On return, KErrNone if successful.
+@param aProfile On completion, a TQoSGPRSNegotiated, TQoSCDMA2000Negotiated or 
+TQoSR99_R4Negotiated containing the profile data, packaged inside a TPckg<> and 
+returned as a descriptor reference.
+
+@capability ReadDeviceData
+*/
+	{
+	Get(EPacketQoSGetProfileParams, aStatus, aProfile);
+	}
+
+EXPORT_C void RPacketQoS::GetProfileCapabilities(TRequestStatus& aStatus, TDes8& aProfileCaps) const
+//This asynchronous function may be called by the client application.
+/** Gets the Quality of Service capabilities for the current packet service. 
+
+Depending on the the packet service type, a TQoSCapsGPRS, TQoSCapsCDMA2000,  
+TQoSCapsR99_R4 or TQoSCapsR5 will be passed in. The TSY will assign a bitmask for each 
+parameter in the relevant TQoSCapsxxx class. This bitmask contains all values 
+which can be assigned to the particular parameter for the current packet 
+service and phone.
+
+This is an asynchronous function.
+
+The TQoSCapsxxxx classes inherit from TPacketDataConfigBase and therefore 
+contain iExtensionId member data identifying the configuration class 
+(GPRS Rel97/98, CDMA, Rel99 or Rel4).
+
+To determine how to correctly unpack the descriptor once it reaches the TSY, the 
+TSY must first cast the descriptor to a TPacketDataConfigBase pointer and check whether 
+the value of the iExtensionId parameter. Depending on this value, the TSY will then cast 
+the descriptor to the correct TPacketDataConfigBase-derived class.
+
+Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSGetProfileCaps) to cancel 
+a previously placed asynchronous GetProfileCapabilities() request.
+
+
+@param aStatus On completion, KErrNone if successful.
+@param aProfileCaps A reference to a TQoSCapsGPRS, TQosCapsCDMA2000,  
+TQoSCapsR99_R4 or TQoSCapsR5 packaged in a TPckg and returned as a descriptor. 
+
+@capability None
+*/
+	{
+	Get(EPacketQoSGetProfileCaps, aStatus, aProfileCaps);
+	}
+
+EXPORT_C void RPacketQoS::NotifyProfileChanged(TRequestStatus& aStatus, TDes8& aProfile) const
+//may be called by the client application.
+/**
+Notifies a client of a change in the negotiated QoS profile is received 
+by the TSY from the phone. 
+
+This is a asynchronous function.
+
+The new QoS profile returned will be either TQoSGPRSNegotiated, 
+TQoSCDMA2000Negotiated or TQoSR99_R4Negotiated, depending on the 
+current packet service. The TQoSxxxNegotiated class will contain 
+updated values for each QoS parameter.
+ 
+If the client wishes to receive further notifications, NotifyProfileChanged() 
+must be called again. 
+
+Use RTelSubSessionBase::CancelAsyncRequest(EPacketQoSNotifyProfileChanged) 
+to cancel a previously placed asynchronous NotifyProfileChanged() request.
+
+
+@param aStatus On completion, KErrNone if successful.
+@param aProfile A descriptor reference to a TPckg<TQoSXXXNegotiated> object. 
+
+@capability ReadDeviceData
+*/
+ 	{
+	Get(EPacketQoSNotifyProfileChanged, aStatus, aProfile);
+	}
+
+
+EXPORT_C RPacketQoS::TQoSCapsGPRS::TQoSCapsGPRS()
+:TPacketDataConfigBase(), iPrecedence(EUnspecifiedPrecedence), iDelay(EUnspecifiedDelayClass),
+ iReliability(EUnspecifiedReliabilityClass), iPeak(EUnspecifiedPeakThroughput),
+ iMean(EUnspecifiedMeanThroughput)
+/** Standard constructor. 
+
+@deprecated v9.3 Use RPacketQoS::TQoSCapsR99_R4::TQoSCapsR99_R4 or RPacketQoS::TQoSCapsR5::TQoSCapsR5 instead. 
+
+Initializes the GPRS QoS profile with default values. Sets iExtensionId to KConfigGPRS. 
+*/
+	{
+	iExtensionId = KConfigGPRS;
+	}
+
+EXPORT_C RPacketQoS::TQoSGPRSRequested::TQoSGPRSRequested()
+:TPacketDataConfigBase(), iReqPrecedence(EUnspecifiedPrecedence), iMinPrecedence(EUnspecifiedPrecedence),
+ iReqDelay(EUnspecifiedDelayClass), iMinDelay(EUnspecifiedDelayClass),
+ iReqReliability(EUnspecifiedReliabilityClass), iMinReliability(EUnspecifiedReliabilityClass),
+ iReqPeakThroughput(EUnspecifiedPeakThroughput), iMinPeakThroughput(EUnspecifiedPeakThroughput),
+ iReqMeanThroughput(EUnspecifiedMeanThroughput), iMinMeanThroughput(EUnspecifiedMeanThroughput)
+/**
+Standard constructor. 
+
+@deprecated v9.3 Use RPacketQoS::TQoSR99_R4Requested::TQoSR99_R4Requested or RPacketQoS::TQoSR5Requested::TQoSR5Requested instead.
+
+Initializes the requested and minimum GPRS QoS values to the defaults. 
+Sets the iExtensionId to KConfigGPRS. 
+*/
+	{
+	iExtensionId = KConfigGPRS;
+	}
+
+EXPORT_C RPacketQoS::TQoSGPRSNegotiated::TQoSGPRSNegotiated()
+:TPacketDataConfigBase(), iPrecedence(EUnspecifiedPrecedence), iDelay(EUnspecifiedDelayClass),
+ iReliability(EUnspecifiedReliabilityClass), iPeakThroughput(EUnspecifiedPeakThroughput),
+ iMeanThroughput(EUnspecifiedMeanThroughput)
+/** Standard constructor. 
+
+@deprecated v9.3 Use RPacketQoS::TQoSR99_R4Negotiated::TQoSR99_R4Negotiated or RPacketQoS::TQoSR5Negotiated::TQoSR5Negotiated instead.
+
+Initializes the negotiated GPRS QoS values to the defaults. 
+Sets iExtensionId to KConfigGPRS. */
+	{
+	iExtensionId = KConfigGPRS;
+	}
+
+EXPORT_C RPacketQoS::TQoSCapsCDMA2000::TQoSCapsCDMA2000()
+:TPacketDataConfigBase()
+/** Standard constructor. 
+
+Initializes the CDMA QoS profile with default values. Sets iExtensionId to KConfigGPRS. 
+*/
+	{
+	iExtensionId = KConfigCDMA;
+	}
+
+EXPORT_C RPacketQoS::TQoSCDMA2000Requested::TQoSCDMA2000Requested()
+:TPacketDataConfigBase()
+/** Standard constructor. 
+
+Initializes the requested CDMA QoS values to the defaults. Sets iExtensionId to KConfigCDMA. 
+*/
+	{
+	iExtensionId = KConfigCDMA;
+	}
+
+EXPORT_C RPacketQoS::TQoSCDMA2000Negotiated::TQoSCDMA2000Negotiated()
+:TPacketDataConfigBase()
+/** Standard constructor. Sets iExtentionId to KConfigCDMA. */
+	{
+	iExtensionId = KConfigCDMA;
+	}
+
+
+EXPORT_C RPacketQoS::TQoSCapsR99_R4::TQoSCapsR99_R4()
+: TPacketDataConfigBase(),
+  iTrafficClass(ETrafficClassUnspecified),
+  iDeliveryOrderReqd(EDeliveryOrderUnspecified),
+  iDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
+  iBER(EBERUnspecified),
+  iSDUErrorRatio(ESDUErrorRatioUnspecified),
+  iTrafficHandlingPriority(ETrafficPriorityUnspecified)
+/**
+ * Constructor - All values are initialized to unspecified.
+ */
+	{
+	iExtensionId = KConfigRel99Rel4;	
+	}
+
+EXPORT_C RPacketQoS::TQoSCapsR5::TQoSCapsR5()
+: TQoSCapsR99_R4(),
+  iSignallingIndication(EFalse),
+  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
+/**
+ * Constructor - All values are initialized to unspecified.
+ */
+	{
+	iExtensionId = KConfigRel5;	
+	}
+	
+EXPORT_C RPacketQoS::TQoSR99_R4Requested::TQoSR99_R4Requested()
+: TPacketDataConfigBase(),
+  iReqTrafficClass(ETrafficClassUnspecified),
+  iMinTrafficClass(ETrafficClassUnspecified),
+  iReqDeliveryOrderReqd(EDeliveryOrderUnspecified),
+  iMinDeliveryOrderReqd(EDeliveryOrderUnspecified),
+  iReqDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),	
+  iMinDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
+  iReqMaxSDUSize(0),						 
+  iMinAcceptableMaxSDUSize(0),
+  iReqBER(EBERUnspecified),
+  iMaxBER(EBERUnspecified),					
+  iReqSDUErrorRatio(ESDUErrorRatioUnspecified),
+  iMaxSDUErrorRatio(ESDUErrorRatioUnspecified),			
+  iReqTrafficHandlingPriority(ETrafficPriorityUnspecified),
+  iMinTrafficHandlingPriority(ETrafficPriorityUnspecified),
+  iReqTransferDelay(0),
+  iMaxTransferDelay(0)
+/**
+ * Constructor - All values are initialized to unspecified or zero.
+ */
+	{
+	iExtensionId = KConfigRel99Rel4;		
+
+	
+	iReqMaxRate.iUplinkRate = 0;			//< Range: 1kbps to 8640kbps in varying increments	
+	iReqMaxRate.iDownlinkRate = 0;			//< Range: 1kbps to 8640kbps in varying increments					
+	iMinAcceptableMaxRate.iUplinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments		
+	iMinAcceptableMaxRate.iDownlinkRate = 0;//< Range: 1kbps to 8640kbps in varying increments			
+	
+	iReqGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
+	iReqGuaranteedRate.iDownlinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments	
+	iMinGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
+	iMinGuaranteedRate.iDownlinkRate = 0;	//< Range: 1kbps to 8640kbps in varying increments	
+	}
+
+EXPORT_C RPacketQoS::TQoSR5Requested::TQoSR5Requested()
+: TQoSR99_R4Requested(),
+  iSignallingIndication(EFalse),
+  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
+ /**
+  * Constructor - The values are initialized to zero and unknown.
+    Sets iExtentionId to KConfigRel5.
+ */
+	{
+	iExtensionId = KConfigRel5;
+	}
+
+EXPORT_C RPacketQoS::TQoSR99_R4Negotiated::TQoSR99_R4Negotiated()
+: TPacketDataConfigBase(),
+  iTrafficClass(ETrafficClassUnspecified),
+  iDeliveryOrderReqd(EDeliveryOrderUnspecified),
+  iDeliverErroneousSDU(EErroneousSDUDeliveryUnspecified),
+  iMaxSDUSize(0),
+  iBER(EBERUnspecified),
+  iSDUErrorRatio(ESDUErrorRatioUnspecified),
+  iTrafficHandlingPriority(ETrafficPriorityUnspecified),
+  iTransferDelay(0)
+/**
+ * Constructor - All values are initialized to unspecified or zero.
+ */
+	{
+	iExtensionId = KConfigRel99Rel4;	
+	
+	iMaxRate.iUplinkRate = 0;				//< Range: 1kbps to 8640kbps in varying increments	
+	iMaxRate.iDownlinkRate = 0;				//< Range: 1kbps to 8640kbps in varying increments	
+				
+	iGuaranteedRate.iUplinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
+	iGuaranteedRate.iDownlinkRate = 0;		//< Range: 1kbps to 8640kbps in varying increments	
+	}
+	
+EXPORT_C RPacketQoS::TQoSR5Negotiated::TQoSR5Negotiated()
+: TQoSR99_R4Negotiated(),
+  iSignallingIndication(EFalse),
+  iSourceStatisticsDescriptor(ESourceStatisticsDescriptorUnknown)
+ /**
+  * Constructor - The values are initialized to zero and unknown.
+    Sets iExtentionId to KConfigRel5.
+ */
+	{
+	iExtensionId = KConfigRel5;
+	}