telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketcontextgsmwcdmaext.cpp
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketcontextgsmwcdmaext.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1797 @@
+// 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:
+//
+
+
+
+// INCLUDES
+#include <in_sock.h>
+#include "cmmpacketcontextgsmwcdmaext.h"
+#include "Cmmpacketcontexttsy.h"
+#include "Cmmpacketcontextlist.h"
+#include "cmmpacketservicegsmwcdmaext.h"
+#include "CMmCommonStaticUtility.h"
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketContextGsmWcdmaExt* CMmPacketContextGsmWcdmaExt::NewL(
+        CMmPacketContextTsy* const aMmPacketContextTsy, 
+        CMmPacketServiceTsy* const aMmPacketServiceTsy  ) 
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NewL." );
+
+    CMmPacketContextGsmWcdmaExt* packetContextGsmWcdmaExt = 
+        new ( ELeave ) CMmPacketContextGsmWcdmaExt();
+    
+    CleanupStack::PushL( packetContextGsmWcdmaExt );
+
+    packetContextGsmWcdmaExt->iMmPacketContextTsy = aMmPacketContextTsy;
+    packetContextGsmWcdmaExt->iMmPacketServiceTsy = aMmPacketServiceTsy;
+    packetContextGsmWcdmaExt->ConstructL();
+
+    CleanupStack::Pop();
+
+    return packetContextGsmWcdmaExt;
+    }
+
+CMmPacketContextGsmWcdmaExt::CMmPacketContextGsmWcdmaExt()
+    {
+    }
+
+void CMmPacketContextGsmWcdmaExt::ConstructL()
+    {
+    InitInternalAttributesL();
+    }
+ 
+CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt." );
+
+    TInfoName contextName;
+    if( iMmPacketContextTsy )
+        {
+        contextName = iMmPacketContextTsy->ContextName();
+        }
+	if ( contextName.Compare( KNullDesC ) != 0 )
+        {
+        CMmDataPackage data;
+        data.PackData( &contextName );
+        
+        if( iMmPacketServiceTsy )
+        	{
+         	TRAP_IGNORE( iMmPacketServiceTsy->MessageManager()->
+                HandleRequestL( EPacketContextDelete, &data ) );       		
+        	}
+    
+        }
+
+    // Notify status change
+    // This is needed to inform Service that context is no longer active
+    if( iMmPacketContextTsy )
+    	{
+	    iMmPacketContextTsy->CompleteNotifyStatusChange(
+	        RPacketContext::EStatusDeleted );
+    	}
+    	
+    // Release memory used for dynamic data members
+    delete iTempConfig;
+    delete iConfig;
+    delete iFilterArray;
+    delete iFilterTemporaryArray;
+    delete iTempMediaAuthorizationArray;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::InitInternalAttributesL
+// Initialises miscellaneous internal attributes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::InitInternalAttributesL()
+    {
+    // Network initiated context indication.
+    //iContextType = EFalse;
+    
+    iIsActivateAllowed = EFalse;
+    iIsInitialiseAllowed = ETrue;
+    iConnectionSpeed = 0;
+
+    iTempConfig = NULL;
+
+    iNotifyConfig = RPacketContext::TContextConfigGPRS();
+    
+    iFilterArray = new ( ELeave ) CArrayFixFlat
+        <RPacketContext::TPacketFilterV2>( 1 );
+
+    iFilterTemporaryArray = NULL;
+    
+    iTempMediaAuthorizationArray = NULL;
+    
+    for ( TInt i = 0 ; KMaxNumberOfTftFilters > i; i++ )
+        {
+        // cell is set 0xFF because of internal check(s)
+        iFilterIdTemporaryArray[i] = 0xFF; 
+        }
+
+    TInfoName hostCidName = iMmPacketContextTsy->HostCID();
+
+    iConfig = new ( ELeave ) RPacketContext::TContextConfigGPRS();
+
+    if( 0 < hostCidName.Length() )
+        {
+        CMmPacketContextTsy* iPrimaryContextObject = iMmPacketServiceTsy->
+            PacketContextList()->PacketContextByName( &hostCidName );
+
+        if ( NULL != iPrimaryContextObject )
+            {
+            *iConfig = *( iPrimaryContextObject->
+                PacketContextGsmWcdmaExt()->ContextConfig() );
+            }
+        }
+
+    iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+    iFilterStatus = EAddPacketFilterStatusUnknown;
+    isAddMediaAuthorizationCalledFirstTime = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::InitialiseContextL
+// This function starts context initialisation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::InitialiseContextL(RPacketContext::TDataChannelV2* aDataChannel)
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::InitialiseContextL." );
+
+    TInt ret( KErrArgument );
+
+    if ( iIsInitialiseAllowed )
+        {
+        TInfoName contextName = iMmPacketContextTsy->ContextName();
+        TInfoName hostCidName = iMmPacketContextTsy->HostCID();
+        CMmDataPackage dataPackage;
+        dataPackage.PackData( &contextName, &hostCidName );
+
+        iDataChannel = aDataChannel;
+        
+        ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+           EPacketContextInitialiseContext, &dataPackage );
+        
+        if(ret == KErrNone)
+        	{
+            iIsInitialiseAllowed = EFalse;
+        	}
+        }
+    return ret;
+    }
+
+#ifndef USING_CTSY_DISPATCHER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteInitialiseContextL
+// This function starts context initialisation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext(const TInt aResult) // Result
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext." );
+
+    if ( KErrNone == aResult )
+        {
+        iMmPacketContextTsy->CompleteNotifyStatusChange(RPacketContext::EStatusInactive );
+
+        if(iDataChannel != NULL)
+        	{      	
+        	iDataChannel->iChannelId.Copy(iMmPacketContextTsy->ContextName());
+        	iDataChannel->iPort.Copy(iMmPacketContextTsy->ContextName());
+        	iDataChannel = NULL;
+        	}
+
+        iIsActivateAllowed = ETrue;
+        // Set Dynamic Caps
+        iMmPacketServiceTsy->ActivePacketServiceExtension()->
+            SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
+        }
+    else
+        {
+        iIsInitialiseAllowed = ETrue;
+        }
+      iMmPacketContextTsy->CompleteInitialiseContext( aResult );
+
+    }
+#endif //USING_CTSY_DISPATCHER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ActivateL
+// This function starts the context activation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::ActivateL()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ActivateL " );
+
+    TInt ret( KErrArgument );
+
+    if ( iIsActivateAllowed )
+        {
+
+        TInfoName hostCidRef = iMmPacketContextTsy->HostCID();
+        TInfoName contextName = iMmPacketContextTsy->ContextName();
+        // Primary context activation
+        CMmDataPackage data;
+        data.PackData( &contextName );
+        //This is primary context activation and host context's length is 
+        //hence zero
+        if ( 0 == hostCidRef.Length() )
+            {  
+            ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+                EPacketContextActivate, &data );
+            }        
+        // Secondary context activation 
+        else
+            {
+            TBool qosExtensionId( EFalse );
+            CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
+        
+            if ( NULL != qosProfile )
+                {
+                qosExtensionId = qosProfile->PacketQoSGsmWcdmaExt()->
+                      ProfileAsked();
+                }
+
+            // Check that secondary context have qos and at least one filter
+            if ( qosExtensionId && 0 != iFilterArray->Count() )
+                {
+                ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+                EPacketContextActivate, &data );
+                }
+            }
+
+        if ( KErrNone == ret )
+            {
+            iIsActivateAllowed = EFalse;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteActivate
+// Completes the activate request. Indicates DOS TSY has started activation.
+//  Activation to network may take minutes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteActivate(
+        CMmDataPackage* aDataPackage,
+        TInt aResult ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. Status: %d",
+             aResult );
+
+    if ( KErrNone == aResult )
+        {
+        //Unpack to TPacketDataConfigBase first, determine the Extension ID and
+        //then cast to the appropriate structure before extracting all the necessary
+        //data
+        TPacketDataConfigBase* config = NULL;
+        //DOS layer brings also name in packet due routing in manager.
+        TInfoName* null; 
+        aDataPackage->UnPackData( &null, &config );
+        null = NULL;
+        
+        RPacketContext::TGSNAddress accessPointName = iConfig->iAccessPointName;
+        
+        if ( TPacketDataConfigBase::KConfigGPRS == config->ExtensionId() )
+        	{
+        	iConfig->iPdpType = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
+        		iPdpType;
+        	accessPointName = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
+        		iAccessPointName;
+        	}
+        
+        if ( TPacketDataConfigBase::KConfigRel99Rel4 == config->ExtensionId() ||
+        		TPacketDataConfigBase::KConfigRel5 == config->ExtensionId())
+        	{
+        	iConfig->iPdpType = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
+        		iPdpType;
+        	accessPointName = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
+        		iAccessPointName;
+        	}       
+        
+        TInt temp = accessPointName.Length();
+        if ( !temp )
+            {
+            iConfig->iAccessPointName = accessPointName;
+            // Notify config changed
+            }
+        CompleteNotifyConfigChanged();
+
+        // Notify status change
+        iMmPacketContextTsy->CompleteNotifyStatusChange( 
+            RPacketContext::EStatusActivating );
+        }
+    else
+        {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. ErrorCause: %d",
+             aResult );
+        // Re-activation is allowed because activation has not succeeded
+        iIsActivateAllowed = ETrue;
+        }
+
+    // Set Dynamic Caps
+    iMmPacketServiceTsy->ActivePacketServiceExtension()->SetDynamicCapsFlag(
+        RPacketService::KCapsActivate, iIsActivateAllowed );
+
+    // Complete Activate
+    iMmPacketContextTsy->CompleteActivate( aResult );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2L
+// Final completion for the context activation. Context is activated to 
+// network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2(  
+        CMmDataPackage* aDataPackage, const TInt aResult )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2. Status: %d", aResult );
+
+    if ( KErrNone == aResult )
+        {
+        //Unpack to TPacketDataConfigBase first, determine the Extension ID and
+        //then cast to the appropriate structure before extracting all the necessary
+        //data
+        TPacketDataConfigBase* aConfig = NULL;
+        TInfoName* name = NULL;
+        aDataPackage->UnPackData( &name, &aConfig );
+
+        if( NULL != aConfig )
+            {
+            if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+                {
+                RPacketContext::TContextConfigGPRS* configGPRS =
+                	static_cast<RPacketContext::TContextConfigGPRS*>(aConfig); 
+          
+                iConfig->iPdpAddress = configGPRS->iPdpAddress;
+               	iConfig->iAccessPointName = configGPRS->iAccessPointName;
+               	iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configGPRS->
+               		iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+                iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configGPRS->
+               		iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+               	iConfig->iPdpCompression = configGPRS->iPdpCompression;
+               	iConfig->iProtocolConfigOption.iMiscBuffer = 
+               		configGPRS->iProtocolConfigOption.iMiscBuffer;
+                }
+            
+            if ( TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() ||
+            		TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId())
+                {
+                RPacketContext::TContextConfigR99_R4* configR99_R4 =
+                	static_cast<RPacketContext::TContextConfigR99_R4*>(aConfig); 
+          
+               	iConfig->iPdpAddress = configR99_R4->iPdpAddress;
+               	iConfig->iAccessPointName = configR99_R4->iAccessPointName;
+               	iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configR99_R4->
+               		iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+                iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configR99_R4->
+               		iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+               	iConfig->iPdpCompression = 0;
+               	iConfig->iProtocolConfigOption.iMiscBuffer = 
+               		configR99_R4->iProtocolConfigOption.iMiscBuffer;
+                }
+            }
+
+        // Complete notifies
+        CompleteNotifyConfigChanged();
+        iMmPacketContextTsy->CompleteNotifyStatusChange( 
+            RPacketContext::EStatusActive );
+        }
+
+    else 
+        {
+        // Reactivation is allowed because activation has not succeeded
+        iIsActivateAllowed = ETrue;
+
+        // Set Dynamics Caps
+        iMmPacketServiceTsy->ActivePacketServiceExtension()->
+            SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::Deactivate
+// This function deactivates the context
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::DeactivateL()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeactivateL." );
+
+    TInt ret( KErrArgument );
+    //zero length
+    TInfoName contextName = iMmPacketContextTsy->ContextName();
+	if ( contextName.Compare( KNullDesC ) != 0 )
+        {
+        CMmDataPackage data;
+        data.PackData( &contextName );
+        ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+            EPacketContextDeactivate, &data );
+
+        if ( KErrNone == ret )
+            {
+            iContextStatusBeforeDeactivation = 
+                iMmPacketContextTsy->ContextStatus();
+            }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteDeactivateL
+// Completes the deactivate request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteDeactivate( 
+        const TInt aResult )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDeactivate." );
+
+    if ( KErrNone == aResult )
+        {
+        
+        // Notify status change
+        iMmPacketContextTsy->CompleteNotifyStatusChange(
+            RPacketContext::EStatusInactive );
+        }
+    else
+        {
+        // Notify status change
+        iMmPacketContextTsy->CompleteNotifyStatusChange(
+            iContextStatusBeforeDeactivation );
+        }
+
+    iMmPacketContextTsy->CompleteDeactivate( aResult );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::DeleteL
+// This function starts deletion.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::DeleteL()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeleteL." );
+
+    TInt ret( KErrNotReady );
+
+    if ( RPacketContext::EStatusUnknown != 
+            iMmPacketContextTsy->ContextStatus() )
+        {
+        TInfoName contextName = iMmPacketContextTsy->ContextName();
+        CMmDataPackage data;
+        data.PackData( &contextName );
+
+        ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+            EPacketContextDelete, &data );
+
+        }
+
+    return ret;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteDelete
+// Completes the delete request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteDelete( 
+		TInt const aResult )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDelete." );
+
+    if( KErrNone == aResult )
+        {
+        iContextStatusBeforeDeactivation = RPacketContext::EStatusDeleted;
+
+        // Notify status change
+        iMmPacketContextTsy->CompleteNotifyStatusChange(
+            RPacketContext::EStatusDeleted );
+
+
+        if ( !iMmPacketContextTsy->IsDialUpContext( NULL ) )
+            {
+            // Release memory used for context configuration info
+            delete iConfig;
+            iConfig = NULL;
+            }
+        }   
+
+    iMmPacketContextTsy->CompleteDelete( aResult );        
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetConfig
+// Retrieves the current context configuration to the client.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetConfig( 
+		TPacketDataConfigBase* const aConfig )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfig." );
+
+    TInt ret( KErrNone );
+
+    // Check that the mode given in aConfig is GPRS
+    if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() ||
+        TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
+        {
+        if ( NULL != iConfig &&
+            TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+            {
+            // Set configuration data to ETel side memory
+            *( RPacketContext::TContextConfigGPRS* )aConfig = 
+                *iConfig;
+            }
+        else if ( NULL != iConfig &&
+            TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
+            {
+            RPacketContext::TContextConfigR99_R4 configR99_R4;
+
+            configR99_R4.iPdpType = iConfig->iPdpType;
+            configR99_R4.iAccessPointName = iConfig->iAccessPointName;
+            configR99_R4.iPdpAddress = iConfig->iPdpAddress;
+            configR99_R4.iUseEdge = iConfig->iUseEdge;
+            configR99_R4.iProtocolConfigOption = 
+                iConfig->iProtocolConfigOption;
+            // Set configuration data to ETel side memory
+            *( RPacketContext::TContextConfigR99_R4* )aConfig = configR99_R4; 
+                
+            }
+        else
+            {
+            ret = KErrNotFound;
+            }
+        }
+    else
+        {
+        // Given mode is not supported
+        ret = KErrNotSupported;
+        }
+
+    return ret;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferred
+// Gets details of the current amount of data transmitted and
+// received over the airlink since the context was activated.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL." );
+
+    TInt ret( KErrNone );
+    TInfoName contextName = iMmPacketContextTsy->ContextName();
+    
+	if ( contextName.Compare( KNullDesC ) != 0 )
+        {
+        CMmDataPackage data;
+        data.PackData( &contextName );
+        ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+            EPacketContextGetDataVolumeTransferred, &data );
+        }
+
+    return ret;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred
+// Completes the get data volume transferred request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred(  
+        const CMmDataPackage* aDataPackage,
+        const TInt aResult )
+    { 
+    TInt errorValue( KErrNone );
+
+    if ( KErrNone == aResult )
+        {
+        TInfoName contextName;
+        RPacketContext::TDataVolume dataVolume;
+        aDataPackage->UnPackData( contextName, dataVolume ); 
+
+        // Set data volume to the tsy
+        iMmPacketContextTsy->SetDataVolume( KErrNone, dataVolume );
+        }
+
+    else
+        {
+        errorValue = KErrGeneral;
+        }
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred. Error Value:%d",
+                errorValue );
+
+    iMmPacketContextTsy->CompleteGetDataVolumeTransferred( errorValue );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::NotifyConfigChanged
+// Requests notification when configuration of context changes.
+// Implements the GSM/WCDMA specific functionality for the notification.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::NotifyConfigChanged(
+        TPacketDataConfigBase& aConfig )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NotifyConfigChanged." );
+
+    TInt ret( KErrNone );
+
+    // Check that used mode is GPRS
+    if ( ( TPacketDataConfigBase::KConfigGPRS != aConfig.ExtensionId() ) &&
+        ( TPacketDataConfigBase::KConfigRel99Rel4 != aConfig.ExtensionId() ) ) 
+        {
+        ret = KErrNotSupported;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged
+// Completes notification when the context configuration changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged." );
+
+    if ( NULL != iConfig )
+        {
+        // Check that the configuration has really changed
+        if ( iNotifyConfig.iPdpType != iConfig->iPdpType ||
+             iNotifyConfig.iAccessPointName != 
+                iConfig->iAccessPointName ||
+             iNotifyConfig.iPdpAddress != iConfig->iPdpAddress ||
+             iNotifyConfig.iPdpCompression != 
+                iConfig->iPdpCompression ||
+             iNotifyConfig.iAnonymousAccessReqd != 
+                iConfig->iAnonymousAccessReqd ||
+             iNotifyConfig.iUseEdge != iConfig->iUseEdge )
+            {
+            // Store the configuration
+            iNotifyConfig = *iConfig;
+
+            // Complete notification
+            iMmPacketContextTsy->CompleteNotifyConfigChanged();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::SetConfigL
+// This method starts the Context configuration.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::SetConfigL( 
+		TPacketDataConfigBase* const aConfig )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL." );
+
+    TInt ret( KErrNotSupported );
+
+	TInfoName contextName = iMmPacketContextTsy->ContextName();
+	if ( contextName.Compare( KNullDesC ) != 0 )
+        {    
+        if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+            {
+            if( !iIsInitialiseAllowed )
+                {
+                iContextConfigurationType = 
+                    TPacketDataConfigBase::KConfigGPRS;
+
+                RPacketContext::TContextConfigGPRS& configGPRS =
+                    *( RPacketContext::TContextConfigGPRS* )aConfig;  
+
+                if ( NULL == iTempConfig )
+                    {
+                    // Allocate memory for iTempConfig
+                    iTempConfig = 
+                        new ( ELeave ) RPacketContext::TContextConfigGPRS();
+                    }
+
+                 // Temporary store the configGPRS
+                *iTempConfig = configGPRS;
+
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL. NWIContext: %d", configGPRS.iNWIContext );
+
+                TInfoName contextName = iMmPacketContextTsy->ContextName();
+                CMmDataPackage data;
+                data.PackData( &( *aConfig ), &contextName );
+
+                ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+                    EPacketContextSetConfig, &data ); 
+        
+                if ( KErrNone != ret )
+                    {
+                    // Release the memory allocated for iTempConfig
+                    delete iTempConfig;
+                    iTempConfig = NULL;
+                    }
+                }
+            else
+                {
+                ret = KErrNotReady;
+                }
+            
+            }
+        else if ( TPacketDataConfigBase::KConfigRel99Rel4 ==
+			aConfig->ExtensionId() ||
+			TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId() )
+            {
+            if( !iIsInitialiseAllowed )
+                {
+                iContextConfigurationType = 
+                    TPacketDataConfigBase::KConfigRel99Rel4;
+                RPacketContext::TContextConfigR99_R4& configR99_R4 =
+                    *( RPacketContext::TContextConfigR99_R4* )aConfig;
+
+                if ( NULL == iTempConfig )
+                    {
+                    // Allocate memory for iTempConfig
+                    iTempConfig = 
+                        new ( ELeave ) RPacketContext::TContextConfigGPRS();
+                    }
+
+                    // Temporary store the configR99_R4 to iTempConfig
+                iTempConfig->iPdpType = configR99_R4.iPdpType;
+                iTempConfig->iAccessPointName = configR99_R4.iAccessPointName;
+                iTempConfig->iPdpAddress = configR99_R4.iPdpAddress;
+                iTempConfig->iUseEdge = configR99_R4.iUseEdge;
+                iTempConfig->iProtocolConfigOption = 
+                        configR99_R4.iProtocolConfigOption;
+                        
+                TInt len = 
+                    iTempConfig->iProtocolConfigOption.iMiscBuffer.Length();
+				
+
+                TInfoName contextName = iMmPacketContextTsy->ContextName();
+                CMmDataPackage data;
+                data.PackData( &( *aConfig ), &contextName );
+                ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+                    EPacketContextSetConfig, &data );    
+
+                if ( KErrNone != ret )
+                    {
+                    // Release the memory allocated for iTempConfig
+                    delete iTempConfig;
+                    iTempConfig = NULL;
+                    }
+                }    
+            else
+                {
+                ret = KErrNotReady;
+                }
+            }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteSetConfig
+// Completes the SetConfig request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteSetConfig( 
+		const TInt aResult )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteSetConfig. aStatus:%d",
+                aResult );
+
+
+    if ( NULL != iTempConfig )
+        {        
+            iConfig->iProtocolConfigOption.iMiscBuffer.Zero();
+            iConfig->iProtocolConfigOption.iMiscBuffer.FillZ();
+        
+            *iConfig = *iTempConfig;  
+            TInt len = iConfig->iProtocolConfigOption.iMiscBuffer.Length();
+            // Release the memory allocated for iTempConfig
+            delete iTempConfig;
+            iTempConfig = NULL;
+            CompleteNotifyConfigChanged();
+        }
+    if( isAddMediaAuthorizationCalledFirstTime )
+        {
+        iMmPacketContextTsy->CompleteSetConfig( aResult, 
+            isAddMediaAuthorizationCalledFirstTime );
+        //Null changed params					
+        isAddMediaAuthorizationCalledFirstTime = EFalse;
+        
+        }
+    else
+        {
+        iMmPacketContextTsy->CompleteSetConfig( aResult ) ;	
+        }
+    
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed
+// Tells if context activation is allowed.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed() const
+    {
+
+    return iIsActivateAllowed;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetConfigurationData
+// Return the configuration data.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetConfigurationData(
+        TInfoName& aContextName,
+        RPacketContext::TProtocolType& aPdpType,    
+        TBool& aContextType,                       
+        TInfoName& aPrimaryContextName )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfigurationData." );
+
+    TInt ret( KErrNotReady );
+
+	TInfoName contextName = iMmPacketContextTsy->ContextName();
+	if ( contextName.Compare( KNullDesC ) != 0 )
+        {
+        
+        aPdpType = iConfig->iPdpType;
+        aContextName = contextName;
+        aContextType =  iConfig->iNWIContext; //iContextType;
+        aPrimaryContextName = iMmPacketContextTsy->HostCID();
+		ret = KErrNone;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::AddPacketFilterL
+// Add or modify existing packet filter to specified context
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::AddPacketFilterL(
+            TDes8* aPacketFilter )
+    {
+    TInt ret( KErrGeneral );
+
+    RPacketContext::TPacketFilterV2Pckg* contextFilterPckg =
+        ( RPacketContext::TPacketFilterV2Pckg* ) aPacketFilter;
+
+    RPacketContext::TPacketFilterV2& contextFilter =
+        ( *contextFilterPckg )();
+
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::AddPacketFilterL contextFilterId: %d", contextFilter.iId );
+
+    // Check out Tft operation
+    iFilterStatus = EAddPacketFilterStatusAdd;
+    for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
+        {
+        if ( contextFilter.iId == iFilterArray->At( i ).iId ) 
+            {
+            iFilterStatus = EAddPacketFilterStatusModify;
+            i = iFilterArray->Count();
+            }
+        }
+
+    if ( iPrevFilterStatus == iFilterStatus ||
+            EAddPacketFilterStatusUnknown == iPrevFilterStatus )
+        {
+        // context modification if context status is active or activating
+        if( iMmPacketContextTsy->ContextStatus() == 
+            RPacketContext::EStatusActive ||
+            iMmPacketContextTsy->ContextStatus() == 
+            RPacketContext::EStatusActivating )
+            {
+
+            if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
+                {
+                // if it's first time to use iFilterTemporaryArray
+                if ( NULL == iFilterTemporaryArray )
+                    {
+                    // Eight is max number of TFT filters. If count is less 
+                    // than eight, we can be sure that there is enough space
+                    // for one more filter
+                    if ( 8 > iFilterArray->Count() )
+                        {
+                        iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
+                            <RPacketContext::TPacketFilterV2>( 1 );
+                        iFilterTemporaryArray->AppendL( contextFilter );
+                        iPrevFilterStatus = iFilterStatus;
+                        ret = KErrNone;
+                        }
+                    }
+
+                // if iFilterTemporaryArray is already used at least once
+                else
+                    {
+                    // if previous filter operation was add
+                    if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
+                        {
+                        // Eight is max number of TFT filters. If count is 
+                        // less than eight, we can be sure that there is
+                        // enough space for one more filter
+                        if ( 8 > ( iFilterArray->Count() + 
+                            iFilterTemporaryArray->Count() ) )
+                            {
+                            // Check that same filter id doesn't appear twice
+                            TBool isNewFilter( ETrue );
+                            for ( TInt i = 0; 
+                                iFilterTemporaryArray->Count() > i; i++ )
+                                {
+                                if ( ( iFilterTemporaryArray->At( i ).iId ) ==
+                                    ( contextFilter.iId ) )
+                                    {
+                                    isNewFilter = EFalse;
+                                    i = iFilterTemporaryArray->Count();
+                                    }
+                                }
+
+                            // if id doesn't exist already add filter to Array
+                            if ( isNewFilter )
+                                {
+                                iFilterTemporaryArray->
+                                    AppendL ( contextFilter );
+                                iPrevFilterStatus = iFilterStatus;
+                                ret = KErrNone;
+                                }
+                            }
+                        }
+
+                    // if previous filter operation was modify
+                    if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
+                        {
+                        // Check that same filter id doesn't appear twice
+                        TBool isNewFilter( ETrue );
+                        for ( TInt i = 0; iFilterTemporaryArray->Count() > i; 
+                            i++ )
+                            {
+                            if ( ( iFilterTemporaryArray->At( i ).iId ) == 
+                                ( contextFilter.iId ) )
+                                {
+                                isNewFilter = EFalse;
+                                i = iFilterTemporaryArray->Count();
+                                }
+                            }
+
+                        // if id doesn't exist already add filter to Array
+                        if ( isNewFilter )
+                            {
+                            iFilterTemporaryArray->AppendL ( contextFilter );
+                            iPrevFilterStatus = iFilterStatus;
+                            ret = KErrNone;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    // context configuration if context status is unknown or inactive
+    if ( iMmPacketContextTsy->ContextStatus() == 
+        RPacketContext::EStatusUnknown ||
+        iMmPacketContextTsy->ContextStatus() == 
+        RPacketContext::EStatusInactive )
+        {
+        // Eight is max number of TFT filters. If count is less than eight,
+        // we can be sure that there is enough space for one more filter
+        if ( iFilterArray->Count() < 8 && 
+            EAddPacketFilterStatusAdd == iFilterStatus )
+            {
+            // if filter id is allowed value. Allowed value is between 1..8
+            if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
+                { 
+
+                TBool filterIdAlreadyInArray( EFalse );
+
+              
+                    if ( NULL == iFilterTemporaryArray )
+                        {
+                        iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
+                            <RPacketContext::TPacketFilterV2>( 1 );
+                        }
+                    
+                    
+                    // if pdp type is Ipv4 8 is max number of TFT 
+                    // filters. If count is less than eight, we can be sure 
+                    // that there is enough space for one more filter
+                    // if pdp type is Ipv6 4 is max number of TFT 
+                    // filters. If count is less than four, we can be sure 
+                    // that there is enough space for one more filter
+                    if ( ( 8 > iFilterArray->Count() &&
+                       RPacketContext::EPdpTypeIPv4 == iConfig->iPdpType ) ||
+                       ( 4 > iFilterArray->Count() &&
+                        RPacketContext::EPdpTypeIPv6 == iConfig->iPdpType )
+                        )
+                        {
+                        for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+                            {
+                            if ( contextFilter.iId != 
+                                iFilterArray->At(i).iId )
+                                {
+                                iFilterTemporaryArray->AppendL( 
+                                    iFilterArray->At(i) );
+                                }
+
+                            else 
+                                {
+                                filterIdAlreadyInArray = ETrue;
+                                }
+                            }
+                        
+                        iFilterTemporaryArray->AppendL( contextFilter );
+
+                        TInfoName contextName = 
+                            iMmPacketContextTsy->ContextName();
+                        CMmPacketDataPackage data;
+                        data.SetConfig( iConfig , 
+                            iContextConfigurationType  );
+                        data.PackData( &contextName, iFilterTemporaryArray );
+
+                        ret = iMmPacketServiceTsy->MessageManager()->
+                            HandleRequestL( EPacketContextAddPacketFilter, 
+                            &data );
+
+                        }
+
+                    else
+                        {
+                        ret = KErrArgument;
+                        }
+               
+                // add configured filter to iFilterArray
+                if ( KErrNone == ret )
+                    {
+                    if ( !filterIdAlreadyInArray )
+                        {
+                        iFilterArray->AppendL( contextFilter );
+                        }
+                    else
+                        {
+                        for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+                            {
+                            if ( iFilterArray->At(i).iId == 
+                                contextFilter.iId )
+                                {
+                                iFilterArray->At(i) = contextFilter;
+                                }
+                            }
+                        }
+
+                    delete iFilterTemporaryArray;
+                    iFilterTemporaryArray = NULL;
+                    }
+                }
+            }
+        }
+
+    // if error occures empty iFilterTemporaryArray
+    if ( ( KErrNone != ret ) && ( NULL != iFilterTemporaryArray ) )
+        {
+        delete iFilterTemporaryArray;
+        iFilterTemporaryArray = NULL;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::RemovePacketFilter
+// This method stores Id(s) client wants to remove
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::RemovePacketFilter( 
+			const TInt aID )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::RemovePacketFilter. FilterId:%d", aID );
+
+    TInt ret( KErrArgument );
+
+    if ( EAddPacketFilterStatusUnknown == iPrevFilterStatus ||
+        EAddPacketFilterStatusRemove == iPrevFilterStatus )
+        {
+
+        // check that aID is in iFilterArray
+        TBool isRemoveFilterId( EFalse );
+        TInt index = 0;
+        for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+            {
+            if ( iFilterArray->At( i ).iId == aID )
+                {
+                isRemoveFilterId = ETrue;
+                index = i;
+                i = iFilterArray->Count();
+                }
+            }
+
+        if ( isRemoveFilterId )
+            {
+            // Find empty place for filter id and set filter id in it
+            for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
+                {
+                if ( aID == iFilterIdTemporaryArray[i] )
+                    {
+                    // breaks if id already in array
+                    i = KMaxNumberOfTftFilters;
+                    }
+
+                // 0xFF value is set default to empty cell
+                else if ( 0xFF == iFilterIdTemporaryArray[i] )
+                    {
+                    iFilterIdTemporaryArray[i] = aID;
+                    iFilterArray->Delete(index);
+                    
+                    // breaks when empty cell found in array
+                    i = KMaxNumberOfTftFilters;
+                    iPrevFilterStatus = EAddPacketFilterStatusRemove;
+                    ret = KErrNone;
+                    }
+                }
+            }
+        }
+    
+#ifdef USING_CTSY_DISPATCHER
+	TInfoName contextName = iMmPacketContextTsy->ContextName();
+    CMmPacketDataPackage data;    
+    data.PackData( &contextName, const_cast< TInt* >(&aID));
+    ret = iMmPacketServiceTsy->MessageManager()-> HandleRequestL( EPacketContextRemovePacketFilter, &data );
+#endif
+
+    if ( KErrNone != ret )
+        {
+        for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
+            {
+            // cell is set 0xFF because of internal check(s)
+            iFilterIdTemporaryArray[i] = 0xFF;
+            iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ModifyActiveContextL
+// Method sends modification of an active context to the network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::ModifyActiveContextL()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ModifyActiveContextL." );
+
+    TInt ret( KErrArgument );
+    
+    TPacketFilterFilterOperation tftOperation( EDeletePacketFilters );
+
+    // Get pointer to QosProfile
+    CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
+    RPacketQoS::TQoSGPRSRequested* qosProfile97 = NULL;
+            RPacketQoS::TQoSR99_R4Requested* qosProfile99 = NULL;
+
+	RPacketQoS::TQoSR5Requested* qosProfileR5 = NULL;
+
+    if ( NULL != qosProfile )
+        {
+        CMmPacketQoSGsmWcdmaExt* pointerToExt = qosProfile->
+            PacketQoSGsmWcdmaExt();
+
+        if ( NULL != pointerToExt )
+            {
+            // Get pointer to qos
+            TInt configurationType = pointerToExt->ConfigurationType();
+            
+            
+            switch( configurationType )
+                {
+                case TPacketDataConfigBase::KConfigGPRS:
+                    qosProfile97 = pointerToExt->Requested97();
+                    break;
+                case TPacketDataConfigBase::KConfigRel99Rel4:
+                    qosProfile99 = pointerToExt->Requested99();
+                    break;
+				case TPacketDataConfigBase::KConfigRel5:
+                    qosProfileR5 = pointerToExt->RequestedR5();
+                    break;
+                default:
+                    break;                
+                }
+
+            // If qos includes something
+            if ( NULL != qosProfile97 || NULL != qosProfile99 
+				|| NULL != qosProfileR5 )
+                {              
+                // use 0xFF and index 0 to check if no filter(s) to remove
+                if ( NULL == iFilterTemporaryArray && 
+                    0xFF == iFilterIdTemporaryArray[0] )
+                    {
+                    //MODIFY QOS PARAMETERS
+                    //Pack configuration and send to messagemanager
+                    TInfoName contextName = iMmPacketContextTsy->ContextName();
+                    iContextConfiguration.iContextName = contextName;
+                    iContextConfiguration.iQosParams97 = qosProfile97;
+                    iContextConfiguration.iQosParams99 = qosProfile99;
+					iContextConfiguration.iQosParamsR5 = qosProfileR5;
+                    iContextConfiguration.iConfiguration = iConfig->iPdpType;
+                    iContextConfiguration.iTftFilterArray = iFilterArray;
+                    iContextConfiguration.iTftOperation = tftOperation;
+                    for( TInt i=0; i < KMaxNumberOfTftFilters; i++  )
+                        {
+                        iContextConfiguration.iFilterIdArray[i] = 
+                            iFilterIdTemporaryArray[i];
+                        }
+
+                    CMmDataPackage data;
+                    data.PackData( &iContextConfiguration,
+                        &iTempMediaAuthorizationArray );
+                    
+                    ret = iMmPacketServiceTsy->MessageManager()->
+                        HandleRequestL( EPacketContextModifyActiveContext,
+                        &data );
+                     
+                    }
+                }
+            }
+        }
+
+    // Add or Modify Filters
+    if( NULL != iFilterTemporaryArray )
+        {
+        if ( 0 < iFilterTemporaryArray->Count() )
+            {
+            // filteroperation is add
+            if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
+                {
+                tftOperation = EAddPacketFilters;
+                TInt beforeFilterCount = iFilterArray->Count();
+                TInt filterArrayExpandedSize = ( beforeFilterCount +
+                    ( iFilterTemporaryArray->Count() ) );
+                
+                iFilterArray->ResizeL( filterArrayExpandedSize );
+
+                for ( ; filterArrayExpandedSize > beforeFilterCount ; 
+                    beforeFilterCount++ )
+                    {
+                    // iId is set 0xFF because of internal check(s)
+                    iFilterArray->At( beforeFilterCount ).iId = 0xFF;
+                    }
+                }
+
+            // filteroperation is modify
+            if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
+                {
+                tftOperation = EReplacePacketFilters;
+                }
+
+            if ( EAddPacketFilterStatusUnknown != iPrevFilterStatus )
+                {
+
+                CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
+                if(qosProfile)
+                	{
+                	pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
+                	}
+
+                if ( NULL != pointerToExt )
+                    {
+                    TInt configurationType = pointerToExt->ConfigurationType();
+                    
+                    switch( configurationType )
+                    	{
+                    	case TPacketDataConfigBase::KConfigGPRS:
+                        	qosProfile97 = pointerToExt->Requested97();
+                        	break;
+                    	case TPacketDataConfigBase::KConfigRel99Rel4:
+                        	qosProfile99 = pointerToExt->Requested99();
+                        	break;
+						case TPacketDataConfigBase::KConfigRel5:
+							qosProfileR5 = pointerToExt->RequestedR5();
+							break;
+                    	default:
+                       	 	break;                
+                    	}
+
+                    //Pack configuration and send to messagemanager
+                    TInfoName contextName = iMmPacketContextTsy->ContextName();
+                    iContextConfiguration.iContextName = contextName;
+                    iContextConfiguration.iQosParams97 = qosProfile97;
+                    iContextConfiguration.iQosParams99 = qosProfile99;
+					iContextConfiguration.iQosParamsR5 = qosProfileR5;
+                    iContextConfiguration.iConfiguration = iConfig->iPdpType;
+                    iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
+                    iContextConfiguration.iTftOperation = tftOperation;
+
+                    for( TInt i=0; i < KMaxNumberOfTftFilters; i++  )
+                        {
+                        iContextConfiguration.iFilterIdArray[i] = 
+                            iFilterIdTemporaryArray[i];
+                        }
+                
+                    CMmDataPackage data;
+                    data.PackData( &iContextConfiguration, &iTempMediaAuthorizationArray );
+                
+                    ret = iMmPacketServiceTsy->MessageManager()->
+                        HandleRequestL( EPacketContextModifyActiveContext,
+                        &data );
+                    }
+                }          
+            }
+        }
+        
+    // Check if first cell includes id 
+    if ( 0xFF != iFilterIdTemporaryArray[0] )
+        {
+        
+        CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
+        if(qosProfile)
+        	{
+        	pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
+        	}
+        
+        if( NULL != pointerToExt )
+            {
+            TInt configurationType = pointerToExt->ConfigurationType();
+            switch( configurationType )
+                {
+                case TPacketDataConfigBase::KConfigGPRS:
+                    qosProfile97 = pointerToExt->Requested97();
+                    break;
+                case TPacketDataConfigBase::KConfigRel99Rel4:
+                    qosProfile99 = pointerToExt->Requested99();
+                    break;
+					case TPacketDataConfigBase::KConfigRel5:
+                    qosProfileR5 = pointerToExt->RequestedR5();
+                    break;
+                default:
+                    break;                
+                }
+
+            //Pack configuration and send to messagemanager
+            TInfoName contextName = iMmPacketContextTsy->ContextName();
+            iContextConfiguration.iContextName = contextName;
+            iContextConfiguration.iQosParams97 = qosProfile97;
+            iContextConfiguration.iQosParams99 = qosProfile99;
+			iContextConfiguration.iQosParamsR5 = qosProfileR5;
+            iContextConfiguration.iConfiguration = iConfig->iPdpType;
+            iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
+            iContextConfiguration.iTftOperation = tftOperation;
+
+            for(TInt i=0; i < KMaxNumberOfTftFilters; i++  )
+                {
+                iContextConfiguration.iFilterIdArray[i] =
+                    iFilterIdTemporaryArray[i];
+                }
+        
+            CMmDataPackage data;
+            data.PackData( &iContextConfiguration, 
+                &iTempMediaAuthorizationArray );        
+            ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+                EPacketContextModifyActiveContext, &data );
+            }
+        
+        }
+
+    return ret;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext
+//  When modification is done completes to client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext(
+           CMmDataPackage* aDataPackage, const TInt aResult )
+    {
+    //Unpack data
+    TBuf8<1> rejectioncode;
+    rejectioncode.Zero();
+    TInfoName contextName;
+   	aDataPackage->UnPackData( contextName, rejectioncode );	
+    
+    
+    //check result
+    if ( KErrNone == aResult )
+        {
+        if ( NULL != iFilterTemporaryArray )
+            {
+            if ( EAddPacketFilterStatusAdd == iFilterStatus )
+                {
+                TInt temporaryFilterArrayCount ( 0 );
+                for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
+                    {
+                    if ( 0xFF == iFilterArray->At( i ).iId )
+                        {
+                        iFilterArray->At( i ) = iFilterTemporaryArray->
+                            At( temporaryFilterArrayCount++ );
+                        }
+                    }
+
+                delete iFilterTemporaryArray; 
+                iFilterTemporaryArray = NULL; 
+
+                }
+
+            else if ( EAddPacketFilterStatusModify == iFilterStatus )
+                {
+                for ( TInt k = 0 ; k < iFilterTemporaryArray->Count() ; k++ )
+                    {
+                    for ( TInt g = 0 ; g < iFilterArray->Count() ; g++ )
+                        {
+                        if ( iFilterTemporaryArray->At( k ).iId == 
+                            iFilterArray->At( g ).iId )
+                            {
+                            iFilterArray->At( g ) = 
+                                iFilterTemporaryArray->At( k );
+                            g = iFilterArray->Count();
+                            }
+                        }
+                    }
+
+                delete iFilterTemporaryArray;
+                iFilterTemporaryArray = NULL;
+                }
+            }
+
+        else if ( 0xFF != iFilterIdTemporaryArray[0] )
+            {
+            for ( TInt g = 0 ; g < KMaxNumberOfTftFilters ; g++ )
+                {
+                for ( TInt i = 0;i < iFilterArray->Count(); i++ )
+                    {
+                    if( iFilterArray->At( i ).iId == 
+                        iFilterIdTemporaryArray[g] )
+                        {
+                        iFilterArray->Delete( i );
+                        iFilterIdTemporaryArray[g] = 0xFF;
+                        i = iFilterArray->Count();
+                        }
+                    }
+                }
+            }
+        }
+        
+		//Check if rejection code is received    
+		if( 0 != rejectioncode.Length() && KErrNone != aResult )
+    		{
+    		
+    		//Append rejection code
+		TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
+
+    	if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
+    		{    	
+    		//1st byte of container ID
+    		iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
+			//2nd byte of container ID
+			iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
+			//content length
+			iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
+			//content
+			iConfig->iProtocolConfigOption.iMiscBuffer.Append( rejectioncode );
+    		}
+		
+    	}
+    	
+    	
+    iMmPacketContextTsy->CompleteModifyActiveContext( aResult );
+    iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters
+// Returns number of defined packet filters to client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters( 
+				TInt *aCount )
+    {
+
+    *aCount = 0;
+
+    if ( NULL != iFilterArray )
+        {
+        *aCount = iFilterArray->Count();
+        }
+
+    return KErrNone;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo
+// Returns the packet filter information specified by aIndex
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo( 
+		const TInt aIndex,
+        TPacketBase* aPacketFilterInfo )
+    {
+    TInt ret( KErrArgument );
+
+    if ( NULL != iFilterArray )
+        {
+        if( iFilterArray->Count() > aIndex )
+            {
+            RPacketContext::TPacketFilterV2& contextFilter =
+                *( RPacketContext::TPacketFilterV2* )aPacketFilterInfo;
+
+            contextFilter = iFilterArray->At( aIndex );
+            ret = KErrNone;
+
+            }
+        }
+
+    return ret;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ContextConfig
+// Return Context configuration
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+RPacketContext::TContextConfigGPRS* CMmPacketContextGsmWcdmaExt::ContextConfig
+        (
+        ) const
+    {
+    return iConfig;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel
+// This method gets the DNS info
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel(
+            TDes8* const aDnsInfo )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel." );
+
+    // Unpack the aDnsInfo
+    RPacketContext::TTDnsInfoV2Pckg* dnsInfoPckg =
+        ( RPacketContext::TTDnsInfoV2Pckg* ) aDnsInfo;
+    RPacketContext::TDnsInfoV2& dnsInfo = ( *dnsInfoPckg )();
+
+    // Get DNS info
+    dnsInfo.iPrimaryDns = iConfig->
+                iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+    dnsInfo.iSecondaryDns = iConfig->
+                iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation
+// Sets context status before activation
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation(
+        const RPacketContext::TContextStatus aContextStatusBeforeDeactivation )
+    {
+
+    iContextStatusBeforeDeactivation = aContextStatusBeforeDeactivation;
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange
+// Routes completion to tsy and sets last error cause
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange(
+        const CMmDataPackage* aDataPackage,
+        const TInt aResult )
+    {
+
+    TInfoName* null= NULL;
+	RPacketContext::TContextStatus contextStatus;
+    
+    //initialise struct for completion params   
+	TContextMisc misc;
+    
+    aDataPackage->UnPackData( null, misc );
+	contextStatus = misc.iStatus;
+
+    if( KErrNone != aResult )
+        {
+
+        iMmPacketContextTsy->SetLastErrorCause( aResult );
+
+        }
+    
+	//Check if rejection cause is included  
+	if( 0 != misc.iRejectionCause.Length() && KErrNone != aResult )
+    	{
+
+    	//Append rejection code
+		TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
+    	if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
+    	{    	
+    	//1st byte of container ID
+    	iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
+		//2nd byte of container ID
+		iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
+		//content length
+		iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
+		//content
+			iConfig->iProtocolConfigOption.iMiscBuffer.Append( 
+				misc.iRejectionCause );
+	    	}
+    	}
+ 	 
+    iMmPacketContextTsy->CompleteNotifyStatusChange( contextStatus );
+
+    }
+    
+//----------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL makes request for 
+// licensee specific tsy for adding authorization params 
+//----------------------------------------------------------------------------
+
+TInt CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL(
+		RPacketContext::CTFTMediaAuthorizationV3* const aMediaAuthorization, TBool &aHasMediaAuthorizationBeenCached )
+	{
+	
+	TInt ret ( KErrGeneral );
+	CMmPacketDataPackage data;
+    TInfoName contextName = iMmPacketContextTsy->ContextName();
+ 
+    //take copy and store locally
+    RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization =
+        aMediaAuthorization;
+  
+    	
+    if ( NULL == iTempMediaAuthorizationArray )
+    	{
+   		iTempMediaAuthorizationArray = new ( ELeave ) CArrayFixFlat
+                            <RPacketContext::CTFTMediaAuthorizationV3>( 8 );
+    	//Reset Array
+    	iTempMediaAuthorizationArray->Reset();
+    	}
+
+    
+    //Store request locally
+    if ( 3 > iTempMediaAuthorizationArray->Count() )
+  		{
+  		
+     	iTempMediaAuthorizationArray->AppendL( *mediaAuthorization );
+     	aHasMediaAuthorizationBeenCached=ETrue;
+        ret = KErrNone;
+        }
+    else
+    	{
+    	aHasMediaAuthorizationBeenCached=EFalse;
+    	}
+    
+    // context configuration if context status is unknown or inactive request 
+    // will be sended first time to Licensee Tsy 
+    
+    if ( iMmPacketContextTsy->ContextStatus() == 
+         RPacketContext::EStatusUnknown ||iMmPacketContextTsy->ContextStatus() 
+         == RPacketContext::EStatusInactive )
+    	{
+    		
+   		data.SetConfig( iConfig , iContextConfigurationType  );
+    	data.PackData( &contextName, aMediaAuthorization );
+		
+		
+		//Send request to licensee Tsy 
+    	ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+            EPacketAddMediaAuthorization, &data );
+    									
+    	isAddMediaAuthorizationCalledFirstTime = ETrue;
+    	}
+
+	return ret;
+	}
+	
+	
+//----------------------------------------------------------------------------
+// TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization
+// removes authoriazation params
+//----------------------------------------------------------------------------
+
+TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization(
+        RPacketContext::TAuthorizationToken* const aAuthorizationToken ) 
+ 	{
+ 	
+ 	TInt ret( KErrNotFound );
+ 	RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = NULL;
+ 	
+ 	for( TInt index (0); index < iTempMediaAuthorizationArray->Count(); index++ )
+ 		{
+ 		//get pointer from array by index
+ 		mediaAuthorization = &( iTempMediaAuthorizationArray->At( index ) );
+ 		
+ 		if( NULL != mediaAuthorization )
+ 			{
+ 			//Check if authorizationtoken is the one to be removed
+ 			if ( *aAuthorizationToken == mediaAuthorization->iAuthorizationToken )
+ 				{
+ 				iTempMediaAuthorizationArray->Delete( index );
+ 				
+ 				//break if found
+ 				index = iTempMediaAuthorizationArray->Count();
+ 				ret = KErrNone;	
+ 				}
+ 			}
+ 		//make sure that pointer will be renewed	
+ 		mediaAuthorization = NULL;
+ 		
+ 		}
+ 		
+    return ret;
+        		
+	}
+	
+// ================= OTHER EXPORTED FUNCTIONS ===============================
+	
+//  End of File