telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketqosgsmwcdmaext.cpp
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketqosgsmwcdmaext.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,619 @@
+// Copyright (c) 2006-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:
+//
+
+
+
+//  INCLUDE FILES
+#include "Cmmpacketservicetsy.h"
+#include "Cmmpacketcontexttsy.h"
+#include "cmmpacketqosgsmwcdmaext.h"
+#include "Cmmpacketqostsy.h"
+#include "Cmmpacketdef.h"
+#include "etelqos.h"
+#include "etelpckt.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketQoSGsmWcdmaExt::CMmPacketQoSGsmWcdmaExt()
+    {
+    }
+
+CMmPacketQoSGsmWcdmaExt* CMmPacketQoSGsmWcdmaExt::NewL(
+        CMmPacketQoSTsy* aMmPacketQoSTsy,     
+        CMmPacketServiceTsy* aMmPacketService ) 
+    {
+    CMmPacketQoSGsmWcdmaExt* packetQoSGsmWcdmaExt =
+        new ( ELeave ) CMmPacketQoSGsmWcdmaExt();
+    
+    CleanupStack::PushL( packetQoSGsmWcdmaExt );
+    packetQoSGsmWcdmaExt->iMmPacketQoSTsy = aMmPacketQoSTsy;
+    packetQoSGsmWcdmaExt->iMmPacketService = aMmPacketService;
+    packetQoSGsmWcdmaExt->ConstructL();
+    CleanupStack::Pop( packetQoSGsmWcdmaExt );
+
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::NewL. ");
+    return packetQoSGsmWcdmaExt;
+    }
+
+void CMmPacketQoSGsmWcdmaExt::ConstructL()
+    {
+	iQoSGPRSNotifyPckg = NULL;
+    iQosAsked = EFalse;
+    }
+    
+CMmPacketQoSGsmWcdmaExt::~CMmPacketQoSGsmWcdmaExt()
+    {
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::~CMmPacketQoSGsmWcdmaExt." );
+    }
+
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::GetProfileCapabilities
+// Gets profile capabilities 
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSGsmWcdmaExt::GetProfileCapabilities(
+        TDes8* aProfileCaps )
+    {
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::GetProfileCapabilities." );
+
+    // Unpack the packet
+    TPckg<TPacketDataConfigBase>* profileCapsPckg = 
+        ( TPckg<TPacketDataConfigBase>* ) aProfileCaps;
+    TPacketDataConfigBase& profileCaps = ( *profileCapsPckg )();
+
+    // If extension is KConfigGPRS
+    if ( TPacketDataConfigBase::KConfigGPRS == profileCaps.ExtensionId() )
+        {
+        TPckg<RPacketQoS::TQoSCapsGPRS>* gprsProfileCapsPckg = 
+            ( TPckg<RPacketQoS::TQoSCapsGPRS>* ) aProfileCaps;
+        RPacketQoS::TQoSCapsGPRS& gprsProfileCaps = ( *gprsProfileCapsPckg )();
+
+        gprsProfileCaps.iPrecedence = KMmPrecedence;
+        gprsProfileCaps.iDelay = KMmDelay;
+        gprsProfileCaps.iReliability = KMmReliability;
+        gprsProfileCaps.iPeak = KMmPeak;
+        gprsProfileCaps.iMean = KMmMean;
+        }
+
+    // Else if extension is KConfigRel99Rel4 or KConfigRel5
+    else if ( TPacketDataConfigBase::KConfigRel99Rel4 == 
+        profileCaps.ExtensionId() ||
+        TPacketDataConfigBase::KConfigRel5 == profileCaps.ExtensionId() )
+        {
+        TPckg<RPacketQoS::TQoSCapsR99_R4>* gprs99ProfileCapsPckg = 
+            ( TPckg<RPacketQoS::TQoSCapsR99_R4>* ) aProfileCaps;
+        RPacketQoS::TQoSCapsR99_R4& gprsProfileCaps = 
+            ( *gprs99ProfileCapsPckg )();
+
+        gprsProfileCaps.iTrafficClass = KMmTrafficClass;
+        gprsProfileCaps.iDeliveryOrderReqd = KMmDeliveryOrderReqd;
+        gprsProfileCaps.iDeliverErroneousSDU = KMmErroneousSDUDelivery;
+        gprsProfileCaps.iBER = KMmBitErrorRatio;
+        gprsProfileCaps.iSDUErrorRatio = KMmSDUErrorRatio;
+        gprsProfileCaps.iTrafficHandlingPriority = KMmTrafficHandlingPriority;
+        }
+
+    else
+        {
+        return KErrNotSupported;
+        }
+
+    return KErrNone;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::GetProfileParameters
+// Gets negotiated Qos parameters 
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSGsmWcdmaExt::GetProfileParameters(
+        TDes8* aProfile ) 
+    {
+
+    // Unpack the packet
+    TPckg<TPacketDataConfigBase>* profilePckg = 
+        ( TPckg<TPacketDataConfigBase>* ) aProfile;
+    TPacketDataConfigBase& profile = ( *profilePckg )();
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::GetProfileParameters.");
+
+// If extension is KConfigGPRS
+    if ( TPacketDataConfigBase::KConfigGPRS == profile.ExtensionId() )
+        {
+        TPckg<RPacketQoS::TQoSGPRSNegotiated >* gprsProfilePckg = 
+                ( TPckg<RPacketQoS::TQoSGPRSNegotiated >* ) aProfile;
+        RPacketQoS::TQoSGPRSNegotiated& gprsProfile = ( *gprsProfilePckg )();
+
+        gprsProfile.iPrecedence = iQoSGPRSNegotiated.iPrecedence;
+        gprsProfile.iDelay = iQoSGPRSNegotiated.iDelay;
+        gprsProfile.iReliability = iQoSGPRSNegotiated.iReliability;
+        gprsProfile.iPeakThroughput = iQoSGPRSNegotiated.iPeakThroughput;
+        gprsProfile.iMeanThroughput = iQoSGPRSNegotiated.iMeanThroughput;
+        }
+// If extension is KConfigRel99Rel4
+    else if ( TPacketDataConfigBase::KConfigRel99Rel4 == profile.ExtensionId() )
+        {
+        TPckg<RPacketQoS::TQoSR99_R4Negotiated >* gprsProfilePckg = 
+                ( TPckg<RPacketQoS::TQoSR99_R4Negotiated >* ) aProfile;
+        RPacketQoS::TQoSR99_R4Negotiated& gprsProfile = ( *gprsProfilePckg )();
+
+        gprsProfile.iTrafficClass = iQoSR99_R4Negotiated.iTrafficClass;
+        gprsProfile.iDeliveryOrderReqd =
+            iQoSR99_R4Negotiated.iDeliveryOrderReqd;
+        gprsProfile.iDeliverErroneousSDU =
+            iQoSR99_R4Negotiated.iDeliverErroneousSDU;
+        gprsProfile.iMaxSDUSize = iQoSR99_R4Negotiated.iMaxSDUSize;
+        gprsProfile.iMaxRate = iQoSR99_R4Negotiated.iMaxRate;
+        gprsProfile.iBER = iQoSR99_R4Negotiated.iBER;
+        gprsProfile.iSDUErrorRatio = iQoSR99_R4Negotiated.iSDUErrorRatio;
+        gprsProfile.iTrafficHandlingPriority 
+            = iQoSR99_R4Negotiated.iTrafficHandlingPriority;
+        gprsProfile.iTransferDelay = iQoSR99_R4Negotiated.iTransferDelay;
+        gprsProfile.iGuaranteedRate = iQoSR99_R4Negotiated.iGuaranteedRate;
+        }
+   // If extension is KConfigRel5
+   else if ( TPacketDataConfigBase::KConfigRel5 == profile.ExtensionId() )
+        { 
+        
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::GetProfileParameters. Rel 5");            
+        TPckg<RPacketQoS::TQoSR5Negotiated >* gprsProfilePckg = 
+                ( TPckg<RPacketQoS::TQoSR5Negotiated >* ) aProfile;
+        RPacketQoS::TQoSR5Negotiated& gprsProfile = ( *gprsProfilePckg )();
+
+        gprsProfile.iTrafficClass = iQoSR5Negotiated.iTrafficClass;
+        gprsProfile.iDeliveryOrderReqd =
+            iQoSR5Negotiated.iDeliveryOrderReqd;
+        gprsProfile.iDeliverErroneousSDU =
+            iQoSR5Negotiated.iDeliverErroneousSDU;
+        gprsProfile.iMaxSDUSize = iQoSR5Negotiated.iMaxSDUSize;
+        gprsProfile.iMaxRate = iQoSR5Negotiated.iMaxRate;
+        gprsProfile.iBER = iQoSR5Negotiated.iBER;
+        gprsProfile.iSDUErrorRatio = iQoSR5Negotiated.iSDUErrorRatio;
+        gprsProfile.iTrafficHandlingPriority =
+            iQoSR5Negotiated.iTrafficHandlingPriority;
+        gprsProfile.iTransferDelay = iQoSR5Negotiated.iTransferDelay;
+        gprsProfile.iGuaranteedRate = iQoSR5Negotiated.iGuaranteedRate;	   
+	    gprsProfile.iSignallingIndication = 
+            iQoSR5Negotiated.iSignallingIndication;	
+	    gprsProfile.iSourceStatisticsDescriptor =
+            iQoSR5Negotiated.iSourceStatisticsDescriptor;	
+        }        
+        
+    else 
+        {
+        return KErrNotSupported;
+        }
+
+    return KErrNone;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::NotifyProfileChanged
+// Saves new profile internally
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSGsmWcdmaExt::NotifyProfileChanged(
+        TDes8* aProfile )    
+	{
+
+  	TPckg<TPacketDataConfigBase>* profilePckg = 
+            ( TPckg<TPacketDataConfigBase>* ) aProfile;
+        TPacketDataConfigBase& profile = ( *profilePckg )();
+
+    if ( TPacketDataConfigBase::KConfigGPRS == profile.ExtensionId() ||
+        TPacketDataConfigBase::KConfigRel99Rel4 == profile.ExtensionId()||
+        TPacketDataConfigBase::KConfigRel5 == profile.ExtensionId() )
+        {
+        iQoSGPRSNotifyPckg = aProfile; 
+        return KErrNone;
+        }
+
+	return KErrNotSupported;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::NotifyProfileChangedCancel
+// Clears internally saved profile
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSGsmWcdmaExt::NotifyProfileChangedCancel()
+    {
+TFLOGSTRING( "TSY: CMmPacketQoSGsmWcdmaExt::NotifyProfileChangedCancel." );
+
+	iQoSGPRSNotifyPckg = NULL;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::SetProfileParametersL
+// Sends request for profile parameters to network
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSGsmWcdmaExt::SetProfileParametersL(
+        TDes8* aProfile ) 
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSGsmWcdmaExt::SetProfileParametersL. \t aProfile:%d", aProfile );
+
+	//Datapackage
+	CMmDataPackage data;
+
+    // Initialize parameters 
+    TInfoName contextName;
+    RPacketContext::TProtocolType pdpType;
+    TBool contextType( EFalse );
+    TInfoName primaryContextName;
+
+    //Get context configuration information 
+    TInt ret = iMmPacketQoSTsy->PacketContextTsy()->
+        PacketContextGsmWcdmaExt()->GetConfigurationData(
+        contextName, pdpType, contextType, primaryContextName );
+
+	 //Get context status
+    RPacketContext::TContextStatus contextStatus =
+        iMmPacketQoSTsy->PacketContextTsy()->ContextStatus();
+
+	//initialize contextParams struct  
+	TContextParams	contextParams; 
+
+	contextParams.iContextName = contextName;
+	contextParams.iContextType = contextType;
+	contextParams.iPdpType = pdpType;
+	contextParams.iPrimaryContextName = primaryContextName;
+	contextParams.iContextStatus = contextStatus;
+	
+	TPckg<TPacketDataConfigBase>* profilePckg = 
+						( TPckg<TPacketDataConfigBase>* ) aProfile;
+    TPacketDataConfigBase& profile = ( *profilePckg )();
+
+	//Save what client has requested
+	if ( TPacketDataConfigBase::KConfigGPRS == profile.ExtensionId() )
+		{
+        TPckg<RPacketQoS::TQoSGPRSRequested >* gprsProfilePckg = 
+            ( TPckg<RPacketQoS::TQoSGPRSRequested >* ) aProfile;
+        RPacketQoS::TQoSGPRSRequested& gprsProfile =( *gprsProfilePckg )();
+        iRequested = gprsProfile;
+        iConfigurationType = TPacketDataConfigBase::KConfigGPRS;        
+
+        iQoSGPRSRequested = ETrue;
+        }
+    else if ( TPacketDataConfigBase::KConfigRel99Rel4 == profile.ExtensionId() )
+        {
+        TPckg<RPacketQoS::TQoSR99_R4Requested >* gprsProfilePckg = 
+             ( TPckg<RPacketQoS::TQoSR99_R4Requested >* ) aProfile;
+        RPacketQoS::TQoSR99_R4Requested& gprsProfile = ( *gprsProfilePckg )();
+        iRequested99 = gprsProfile;
+        iConfigurationType = TPacketDataConfigBase::KConfigRel99Rel4;
+
+        iQoSR99_R4Requested = ETrue;
+        }
+    else if ( TPacketDataConfigBase::KConfigRel5 == profile.ExtensionId() )
+        {
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::SetProfileParameters. Rel 5");   
+        TPckg<RPacketQoS::TQoSR5Requested >* gprsProfilePckg = 
+             ( TPckg<RPacketQoS::TQoSR5Requested >* ) aProfile;
+        RPacketQoS::TQoSR5Requested& gprsProfile = ( *gprsProfilePckg )();
+        iRequestedR5 = gprsProfile;
+        iConfigurationType = TPacketDataConfigBase::KConfigRel5;
+
+        iQoSR5Requested = ETrue;
+        }
+    else
+        {
+        ret = KErrNotSupported;		
+        }
+
+
+    if ( KErrNone == ret )
+        {
+      
+        data.PackData( &contextParams, &aProfile );
+        TInt err = iMmPacketService->MessageManager()->HandleRequestL( 
+            EPacketQoSSetProfileParams, &data ); 
+
+		if ( KErrNone != err )
+			{
+			ret = KErrNotSupported;
+			}
+			
+        iQosAsked = ETrue;
+        }
+
+    else
+        {
+        ret = KErrNotSupported;
+        }
+
+    return ret;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::CompleteSetProfileParameters
+// Completes SetProfileParameters request to client
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSGsmWcdmaExt::CompleteSetProfileParameters(
+		const TInt aErrorValue )
+    {
+TFLOGSTRING2("TSY: CMmPacketQoSGsmWcdmaExt::CompleteSetProfileParameters.  \t aErrorValue:%d", aErrorValue );
+
+    // Call CompleteSetProfileParameters from QoS Tsy
+    iMmPacketQoSTsy->CompleteSetProfileParameters( aErrorValue );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::CompleteSetProfileParameters
+// Completes the notification to client.
+// save negotiated  qos values (values returned by network) 
+//----------------------------------------------------------------------------
+
+void CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged(
+        CMmDataPackage* aDataPackage )
+    {
+
+	TInfoName mmPacketContextName;
+    
+    const CMmPacketDataPackage* data = 
+        reinterpret_cast<const CMmPacketDataPackage*>(aDataPackage);
+    //Get Qos parameters
+    data->GetProfileChanged( iQoSGPRSNegotiated, iQoSR99_R4Negotiated, 
+        iQoSR5Negotiated );
+    //Unpack data from datapackage
+    data->UnPackData( mmPacketContextName );
+
+
+
+   
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged . COPY new R99/R4 default values");
+		//Copy negotiated values to minimun values
+		iRequested99.iMinTrafficClass = iQoSR99_R4Negotiated.iTrafficClass;
+	    iRequested99.iMinDeliveryOrderReqd = 
+
+
+									iQoSR99_R4Negotiated.iDeliveryOrderReqd;
+	    iRequested99.iMinDeliverErroneousSDU = 
+
+
+									iQoSR99_R4Negotiated.iDeliverErroneousSDU;
+	    iRequested99.iMinAcceptableMaxSDUSize = 
+
+
+									iQoSR99_R4Negotiated.iMaxSDUSize;
+	    iRequested99.iMinAcceptableMaxRate = iQoSR99_R4Negotiated.iMaxRate;
+	    iRequested99.iMaxBER = iQoSR99_R4Negotiated.iBER;
+	    iRequested99.iMaxSDUErrorRatio = iQoSR99_R4Negotiated.iSDUErrorRatio;
+	    iRequested99.iMinTrafficHandlingPriority = 
+
+
+						iQoSR99_R4Negotiated.iTrafficHandlingPriority;
+	    iRequested99.iMaxTransferDelay = iQoSR99_R4Negotiated.iTransferDelay;
+		iRequested99.iMinGuaranteedRate = 
+
+
+										iQoSR99_R4Negotiated.iGuaranteedRate;
+
+		//Copy negotiated values to requested values for default usage of 2nd 
+        //context TFT modify
+	    iRequested99.iReqTrafficClass = iQoSR99_R4Negotiated.iTrafficClass;
+	    iRequested99.iReqDeliveryOrderReqd = 
+
+
+	                                iQoSR99_R4Negotiated.iDeliveryOrderReqd;
+        iRequested99.iReqDeliverErroneousSDU = 
+
+
+                                    iQoSR99_R4Negotiated.iDeliverErroneousSDU;
+        iRequested99.iReqMaxSDUSize = iQoSR99_R4Negotiated.iMaxSDUSize;
+        iRequested99.iReqMaxRate = iQoSR99_R4Negotiated.iMaxRate;
+        iRequested99.iReqBER = iQoSR99_R4Negotiated.iBER;
+        iRequested99.iReqSDUErrorRatio = iQoSR99_R4Negotiated.iSDUErrorRatio;
+        iRequested99.iReqTrafficHandlingPriority = 
+
+
+                                iQoSR99_R4Negotiated.iTrafficHandlingPriority;
+        iRequested99.iReqTransferDelay = iQoSR99_R4Negotiated.iTransferDelay;
+        iRequested99.iReqGuaranteedRate = iQoSR99_R4Negotiated.iGuaranteedRate;
+
+
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged . COPY new R97 default values");
+        iRequested.iReqPrecedence = iQoSGPRSNegotiated.iPrecedence;
+        iRequested.iMinPrecedence = iQoSGPRSNegotiated.iPrecedence;
+
+        iRequested.iReqDelay = iQoSGPRSNegotiated.iDelay;
+        iRequested.iMinDelay = iQoSGPRSNegotiated.iDelay;
+
+        iRequested.iReqReliability = iQoSGPRSNegotiated.iReliability;
+        iRequested.iMinReliability = iQoSGPRSNegotiated.iReliability;
+
+        iRequested.iReqPeakThroughput = iQoSGPRSNegotiated.iPeakThroughput;
+        iRequested.iMinPeakThroughput = iQoSGPRSNegotiated.iPeakThroughput;
+
+        iRequested.iReqMeanThroughput = iQoSGPRSNegotiated.iMeanThroughput;
+        iRequested.iMinMeanThroughput = iQoSGPRSNegotiated.iMeanThroughput;
+        
+
+
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged . COPY new R5 default values");
+
+        //Copy negotiated values to minimun values
+        iRequestedR5.iMinTrafficClass = iQoSR5Negotiated.iTrafficClass;
+        iRequestedR5.iMinDeliveryOrderReqd = 
+            iQoSR5Negotiated.iDeliveryOrderReqd;
+        iRequestedR5.iMinDeliverErroneousSDU = 
+            iQoSR5Negotiated.iDeliverErroneousSDU;
+        iRequestedR5.iMinAcceptableMaxSDUSize = 
+            iQoSR5Negotiated.iMaxSDUSize;
+        iRequestedR5.iMinAcceptableMaxRate = iQoSR5Negotiated.iMaxRate;
+        iRequestedR5.iMaxBER = iQoSR5Negotiated.iBER;
+        iRequestedR5.iMaxSDUErrorRatio = iQoSR5Negotiated.iSDUErrorRatio;
+        iRequestedR5.iMinTrafficHandlingPriority = 
+            iQoSR5Negotiated.iTrafficHandlingPriority;
+        iRequestedR5.iMaxTransferDelay = iQoSR5Negotiated.iTransferDelay;
+        iRequestedR5.iMinGuaranteedRate = iQoSR5Negotiated.iGuaranteedRate;
+
+        //Copy negotiated values to requested values for default usage of 2nd 
+        //context TFT modify
+        iRequestedR5.iReqTrafficClass = iQoSR5Negotiated.iTrafficClass;
+        iRequestedR5.iReqDeliveryOrderReqd = 
+            iQoSR5Negotiated.iDeliveryOrderReqd;
+        iRequestedR5.iReqDeliverErroneousSDU =
+            iQoSR5Negotiated.iDeliverErroneousSDU;
+        iRequestedR5.iReqMaxSDUSize = iQoSR5Negotiated.iMaxSDUSize;
+        iRequestedR5.iReqMaxRate = iQoSR5Negotiated.iMaxRate;
+        iRequestedR5.iReqBER = iQoSR5Negotiated.iBER;
+        iRequestedR5.iReqSDUErrorRatio = iQoSR5Negotiated.iSDUErrorRatio;
+        iRequestedR5.iReqTrafficHandlingPriority = 
+            iQoSR5Negotiated.iTrafficHandlingPriority;
+        iRequestedR5.iReqTransferDelay = iQoSR5Negotiated.iTransferDelay;
+        iRequestedR5.iReqGuaranteedRate = iQoSR5Negotiated.iGuaranteedRate;
+        iRequestedR5.iSignallingIndication = 
+            iQoSR5Negotiated.iSignallingIndication;
+
+
+        iRequestedR5.iSourceStatisticsDescriptor = 
+            iQoSR5Negotiated.iSourceStatisticsDescriptor;
+        
+    // If pointer iQoSGPRSNotifyPckg exist
+    if ( NULL != iQoSGPRSNotifyPckg )
+        {
+        TBool completeToClient( EFalse );
+
+        TPckg<TPacketDataConfigBase>* profilePckg = 
+                ( TPckg<TPacketDataConfigBase>* ) iQoSGPRSNotifyPckg;
+        TPacketDataConfigBase& profile = ( *profilePckg )();
+
+        // if client uses R97 QoS parameters and aQoSNegotiated 
+        // have been set
+        if ( TPacketDataConfigBase::KConfigGPRS == profile.ExtensionId() &&
+            iQoSGPRSRequested )
+            {
+            completeToClient = ETrue;
+
+            TPckg<RPacketQoS::TQoSGPRSNegotiated >* gprsProfilePckg = 
+                ( TPckg<RPacketQoS::TQoSGPRSNegotiated >* ) iQoSGPRSNotifyPckg;
+            RPacketQoS::TQoSGPRSNegotiated& gprsProfile = 
+                ( *gprsProfilePckg )();
+
+            // Update the client side data through pointers
+            gprsProfile = iQoSGPRSNegotiated;
+
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged.  R97/98 QoS Parameters in use");
+            }
+
+        // if client uses R99 QoS parameters and aQoS99Negotiated 
+        // have been set
+        else if ( TPacketDataConfigBase::KConfigRel99Rel4 ==
+                 profile.ExtensionId() && iQoSR99_R4Requested )
+            {
+            completeToClient = ETrue;
+                        
+                TPckg<RPacketQoS::TQoSR99_R4Negotiated >* gprsProfilePckg = 
+                    ( TPckg<RPacketQoS::TQoSR99_R4Negotiated >* ) iQoSGPRSNotifyPckg;
+                RPacketQoS::TQoSR99_R4Negotiated& gprsProfile = 
+                    ( *gprsProfilePckg )();
+                                       
+                // Update the client side data through pointers
+                gprsProfile = iQoSR99_R4Negotiated;
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged.  R99/R4 QoS Parameters in use");
+            
+            }
+
+        else if ( TPacketDataConfigBase::KConfigRel5 ==
+                profile.ExtensionId() && iQoSR5Requested )
+            {
+            completeToClient = ETrue;
+
+            TPckg<RPacketQoS::TQoSR5Negotiated >* gprsProfilePckg = 
+                ( TPckg<RPacketQoS::TQoSR5Negotiated >* ) iQoSGPRSNotifyPckg;
+            RPacketQoS::TQoSR5Negotiated& gprsProfile = 
+                ( *gprsProfilePckg )();
+
+            // Update the client side data through pointers
+            gprsProfile = iQoSR5Negotiated;
+TFLOGSTRING("TSY: CMmPacketQoSGsmWcdmaExt::CompleteNotifyProfileChanged.  R5 QoS Parameters in use");
+            }            
+
+        if ( completeToClient )
+            {
+
+            // Null pointers as notification is completed
+            iQoSGPRSNotifyPckg = NULL;
+
+            // Call CompleteNotifyProfileChanged from TSY
+            iMmPacketQoSTsy->CompleteNotifyProfileChanged();
+                                
+            }
+        }
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::ProfileAsked
+// Return value iQosAsked is true if client has request 
+// certain Qos values
+//----------------------------------------------------------------------------
+
+TBool CMmPacketQoSGsmWcdmaExt::ProfileAsked()
+    {    
+    return iQosAsked;    
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::RequestedR5
+// Returns Rel5 Qos values reguested by client
+//----------------------------------------------------------------------------
+RPacketQoS::TQoSR5Requested* CMmPacketQoSGsmWcdmaExt::RequestedR5()
+
+    {
+    return &iRequestedR5;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::Requested99
+// Returns 99 Qos values reguested by client
+//----------------------------------------------------------------------------
+
+RPacketQoS::TQoSR99_R4Requested* CMmPacketQoSGsmWcdmaExt::Requested99()
+
+    {
+    return &iRequested99;
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::Requested97
+// Returns 97/98 Qos values reguested by client
+//----------------------------------------------------------------------------
+
+RPacketQoS::TQoSGPRSRequested* CMmPacketQoSGsmWcdmaExt::Requested97()
+    {
+    return &iRequested;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketQoSGsmWcdmaExt::ConfigurationType
+// Returns return configuration type
+//----------------------------------------------------------------------------
+
+TInt CMmPacketQoSGsmWcdmaExt::ConfigurationType() const
+    {
+    return iConfigurationType;
+    }
+
+
+//  End of File