telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketservicegsmwcdmaext.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketservicegsmwcdmaext.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,789 @@
+// 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 "cmmpacketservicegsmwcdmaext.h"
+#include "Cmmpacketcontexttsy.h"
+#include "Cmmpacketcontextlist.h"
+#include "CMmCommonStaticUtility.h"
+#include "CMmCustomTsy.h"
+#include "CMmPacketTsy.h"
+#include <ctsy/pluginapi/cmmdatapackage.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include "cmmmbmscontextlist.h"
+#include <ctsy/mltsyfactory.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketServiceGsmWcdmaExt::CMmPacketServiceGsmWcdmaExt()
+    {
+    }
+
+CMmPacketServiceGsmWcdmaExt* CMmPacketServiceGsmWcdmaExt::NewL(
+        CMmPacketServiceTsy* const aMmPacketServiceTsy,
+        MLtsyFactoryBase* aFactory ) 
+    {
+
+    CMmPacketServiceGsmWcdmaExt* const packetServiceGsmWcdmaExt = 
+        new ( ELeave ) CMmPacketServiceGsmWcdmaExt();
+    
+    CleanupStack::PushL( packetServiceGsmWcdmaExt );
+    packetServiceGsmWcdmaExt->iMmPacketServiceTsy = aMmPacketServiceTsy;
+    packetServiceGsmWcdmaExt->ConstructL( aFactory );
+    CleanupStack::Pop();
+
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::NewL.\n" );
+    return packetServiceGsmWcdmaExt;
+
+    }
+
+void CMmPacketServiceGsmWcdmaExt::ConstructL( MLtsyFactoryBase* aFactory )
+    {
+	TBool initPhase = ETrue;
+	CMmDataPackage data;
+
+    InitInternalAttributesL( aFactory );
+
+    // get current status
+	iMmPacketServiceTsy->MessageManager()->HandleRequestL(  
+												EPacketNotifyStatusChange );
+
+    // Call to get current preferred bearer
+	data.PackData( &initPhase );
+	iMmPacketServiceTsy->MessageManager()->HandleRequestL(  
+												 EPacketGetAttachMode, &data );	
+    // get max number of monitored service list
+    iMmPacketServiceTsy->MessageManager()->HandleRequestL(  
+    											 EPacketEnumerateMbmsMonitorServiceList );
+    											     	
+    iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+                                                 EPacketEnumerateMbmsActiveServiceList );      											 
+    											 
+    }
+    
+CMmPacketServiceGsmWcdmaExt::~CMmPacketServiceGsmWcdmaExt()
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::~CMmPacketServiceGsmWcdmaExt.\n" );
+    }
+    
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::InitInternalAttributesL
+// Initialises internal attributes.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::InitInternalAttributesL( MLtsyFactoryBase* aFactory )
+    {
+	iStaticCaps = KMmPacketServiceStaticCaps;
+	
+	// Version number is used to specify LTSY interface
+	MLtsyFactoryBase::TCtsyInterfaceVersion vers = 
+		aFactory->Version();
+	if( MLtsyFactoryBase::EIfVersion3 <= vers )
+		{
+		MLtsyFactoryV3* ptr_v3 = 
+			static_cast<MLtsyFactoryV3*>( aFactory );
+		//Get static caps using factory method
+		iStaticCaps = 
+			ptr_v3->GetLTSYStaticCapabilities( KStaticCapsPacketService );
+		}
+	else
+		{
+		//Get static caps using plugin api method
+    	iMmPacketServiceTsy->MessageManager()->HandleRequestL( EPacketGetStaticCaps );	
+		}
+		
+    iDynamicCaps = 0;
+
+    iLastTransferStatus = RPacketService::EStatusUnattached;
+	iLastEdgeGprsSupport = EFalse;
+	
+	iGprsIsSupportedOnCell =EFalse;
+	iCsServicesIsSupportedOnCell = EFalse;
+
+    iAccessPointName.Zero();
+    iPdpType = RPacketContext::EPdpTypeIPv4;
+    iPdpCompression = 0;
+    iIsSetDefaultContextParamsCalled = EFalse;
+
+    }
+
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::Attach
+// Attaches phone to the network.
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::AttachL()
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::AttachL." );
+
+	// Call and return
+	return iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+														EPacketAttach );
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteAttach
+// Completes Attach.
+// Complete to service tsy with KErrNone or epoc error code
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteAttach( 
+		TInt aErrorValue ) const
+    {
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteAttach.\n  \t ErrorValue:%d\n", aErrorValue );
+
+	if ( KErrNone == aErrorValue )
+		{
+		 // Initiate EStatusAttached to packet status
+		RPacketService::TStatus packetStatus(
+            RPacketService::EStatusAttached );
+		
+		TBool resumed = EFalse;
+		CMmDataPackage data;
+		data.PackData( &packetStatus, &resumed );
+
+		iMmPacketServiceTsy->CompletePacketStatusChanged( &data, KErrNone );
+
+		}
+
+    // Complete to service tsy with KErrNone or EPOC error code
+    iMmPacketServiceTsy->CompleteAttach( aErrorValue );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::Detach
+// Detaches phone from the network
+// Sends Detach request to Message manager
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::DetachL()
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::DetachL.\n  ");
+
+	return iMmPacketServiceTsy->MessageManager()->
+                                           HandleRequestL( EPacketDetach );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteDetachL
+// Completes Detach.
+// Complete to service tsy with KErrNone or epoc error code
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteDetachL( 
+		TInt aErrorValue ) const
+    {
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteDetachL\n  \t ErrorValue:%d\n", aErrorValue );
+
+	if ( KErrNone == aErrorValue )
+		{
+		
+		RPacketService::TStatus packetStatus( 
+								RPacketService::EStatusUnattached );
+		
+		TBool resumed = EFalse;
+		CMmDataPackage data;
+		data.PackData( &packetStatus, &resumed  );
+
+		iMmPacketServiceTsy->CompletePacketStatusChanged( &data, KErrNone );
+
+		}
+
+    iMmPacketServiceTsy->CompleteDetachL( aErrorValue );
+
+    }
+
+//---------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::GetNtwkRegStatus
+// Network registration status request to the network.
+//---------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::GetNtwkRegStatusL()
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::GetNtwkRegStatusL.\n" );
+
+	return iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+		EPacketGetNtwkRegStatus );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteGetNtwkRegStatus
+// Completes get network registration status request.
+// map network registration status
+// call CompleteGetNtwkRegStatus() from service tsy
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteGetNtwkRegStatus(
+		CMmDataPackage* aDataPackage, TInt aResult )
+    {
+	RPacketService::TRegistrationStatus regStatusClient;
+    //Unpack data
+	aDataPackage->UnPackData( regStatusClient );
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteGetNtwkRegStatus.\n  \t", regStatusClient);
+
+    // Call CompleteGetNtwkRegStatus() from service tsy
+	iMmPacketServiceTsy->CompleteGetNtwkRegStatus( regStatusClient, 
+			aResult );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::SetAttachMode
+// Sets attach mode to the lower level 
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::SetAttachModeL(
+		RPacketService::TAttachMode aMode )
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::SetAttachModeL." );
+
+	TInt ret( KErrNone );
+	CMmDataPackage data;
+    data.PackData( &aMode );
+
+	ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+		EPacketSetAttachMode, &data );
+
+    return ret;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteSetAttachMod
+// Completes Set Attach Mode.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteSetAttachMode( 
+		const TInt aErrorValue ) const
+    {
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteSetAttachMode.\n  \t  Error Value:%d\n", aErrorValue );
+
+    iMmPacketServiceTsy->CompleteSetAttachMode( aErrorValue );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::GetAttachMode
+// Gets attach mode 
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::GetAttachModeL() 
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::GetAttachModeL.\n\t " );
+
+	TBool calledOnInitPhase = EFalse;
+	CMmDataPackage data;
+	data.PackData( &calledOnInitPhase );
+
+	TInt ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+		EPacketGetAttachMode, &data );
+
+	return ret;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteGetAttachMode
+// Completes Get Attach Mode request.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteGetAttachMode(CMmDataPackage* aDataPackage, 
+		                                                TInt aResult) const  
+    {
+	RPacketService::TAttachMode attachMode;
+
+	aDataPackage->UnPackData( attachMode );
+
+    TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteGetAttachMode.\n  \t Status:%d\n\t ", attachMode );
+
+    iMmPacketServiceTsy->CompleteGetAttachMode( attachMode, aResult);
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::SetPreferredBearer
+// Sets preferrer bearer 
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::SetPreferredBearerL(
+		const TDataPackage& aPackage )
+    {
+	TInt ret( KErrNone );
+	TDataPackage package = aPackage;
+
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::SetPreferredBearerL.");
+
+	ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+		 EPacketSetPrefBearer, &package );
+
+	return ret;
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteSetPreferredBearer
+// Completes Set Preferred Bearer request.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteSetPreferredBearer(
+		TInt aErrorValue ) const  
+    {
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteSetPreferredBearer.\n\t Error Value:%d\n", aErrorValue );
+
+    iMmPacketServiceTsy->CompleteSetPreferredBearer( aErrorValue );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::GetDynamicCaps
+// This function returns the Packet Data's dynamic capabilities.
+// set dynamic capabilities to Etel side memory
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::GetDynamicCaps(
+        RPacketService::TDynamicCapsFlags* const aCaps ) const  
+    {
+
+    // Set caps
+    *aCaps = iDynamicCaps;
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::GetDynamicCaps.\n\t Dynamic Caps:%b\n", *aCaps );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::SetDynamicCapsFlag
+// Sets one of the Packet Data's dynamic capabilities flag.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::SetDynamicCapsFlag(
+        const RPacketService::TDynamicCapsFlags aFlag,  
+        const TBool aIsActionPossible ) 
+    {
+
+    RPacketService::TDynamicCapsFlags dynamicCaps( iDynamicCaps );
+
+    if ( aIsActionPossible )
+        {
+		// Activate aFlag in dynamicCaps 
+        dynamicCaps |= aFlag;
+        }
+
+    else
+        {
+
+        TBool contextActivationPossible( EFalse );
+
+        // If flag to be reset is KCapsActivate
+        if ( RPacketService::KCapsActivate == aFlag )
+            {
+
+            // Get number of contexts
+            const TInt numOfCreatedContext(
+                iMmPacketServiceTsy->PacketContextList()->NumberOfContexts() );
+
+            for ( TInt i = 0; i < numOfCreatedContext; i++ )
+                {
+
+                // Get context by index
+                CMmPacketContextTsy* const context = iMmPacketServiceTsy->
+                    PacketContextList()->PacketContextByIndex( i );
+
+                if ( NULL != context )
+                    {
+                    
+                    if ( context->PacketContextGsmWcdmaExt()->
+                        IsContextActivationAllowed() )
+                        {
+
+                        // At least one context is ready to be activated
+                        contextActivationPossible = ETrue;
+                        i = numOfCreatedContext;
+
+                        }
+                    }
+                }
+            }
+        if ( RPacketService::KCapsMBMS == aFlag )
+            {
+            
+            // See if there are context in receiving state
+            contextActivationPossible = iMmPacketServiceTsy->MBMSContextList()->IsMbmsContextReceiving();
+            }
+
+
+        // If no context ready to be activated
+        if ( !contextActivationPossible )
+            {
+            
+            // Deactivate aFlag in dynamicCaps 
+            dynamicCaps &= ~aFlag;
+            
+            }
+        }
+
+    if ( dynamicCaps != iDynamicCaps )
+        {
+
+        // Set dynamic caps to iDynamicCaps
+        iDynamicCaps = dynamicCaps;
+        // Call complete notify dynamic caps change from service tsy
+        iMmPacketServiceTsy->CompleteNotifyDynamicCapsChange( iDynamicCaps );
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::SetDynamicCapsFlag.\n\t Dynamic Caps:%b\n", iDynamicCaps );
+
+        }
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteDynamicCapsChange
+// Completes dynamic capabilities change to the Service Tsy.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteDynamicCapsChange(
+        CMmDataPackage* aPackage )	
+    {
+
+	aPackage->UnPackData( iGprsIsSupportedOnCell, 
+									iCsServicesIsSupportedOnCell );
+
+    RPacketService::TDynamicCapsFlags dynamicCaps( iDynamicCaps );
+
+    // If Gprs is supported in current cell
+    if ( iGprsIsSupportedOnCell )
+        {
+        
+        // check current packet service status
+        switch ( iMmPacketServiceTsy->ServiceStatus() )
+            {
+            case RPacketService::EStatusAttached:
+            case RPacketService::EStatusActive:
+                // Deativate KCapsManualAttach in dynamicCaps 
+                dynamicCaps &= ~RPacketService::KCapsManualAttach;
+
+                // Activate KCapsSMSTransfer, KCapsManualDetach and
+                // KCapsRxContextActivationReq in dynamicCaps 
+                dynamicCaps |= RPacketService::KCapsSMSTransfer |
+                               RPacketService::KCapsManualDetach |
+                               RPacketService::KCapsRxContextActivationReq;
+                break;
+            case RPacketService::EStatusUnattached:
+                // Activate KCapsManualAttach in dynamicCaps 
+                dynamicCaps |= RPacketService::KCapsManualAttach;
+
+                // Deativate KCapsSMSTransfer, KCapsManualDetach and
+                // KCapsRxContextActivationReq in dynamicCaps 
+                dynamicCaps &= ~( RPacketService::KCapsSMSTransfer |
+                               RPacketService::KCapsManualDetach |
+                               RPacketService::KCapsRxContextActivationReq );
+
+                break;
+            case RPacketService::EStatusSuspended:
+                // Activate KCapsManualDetach in dynamicCaps 
+                dynamicCaps |= RPacketService::KCapsManualDetach;
+
+                // Deativate KCapsSMSTransfer, KCapsManualAttach and
+                // KCapsRxContextActivationReq in dynamicCaps 
+                dynamicCaps &= ~( RPacketService::KCapsSMSTransfer |
+                               RPacketService::KCapsManualAttach |
+                               RPacketService::KCapsRxContextActivationReq );
+                break;
+            default:
+                break;
+            }
+        }
+    else
+        {
+        
+        // Gprs is not supported in current cell
+        dynamicCaps = 0;
+        
+        }
+
+    // If cs services are supported
+    if ( iCsServicesIsSupportedOnCell )
+        {
+
+        // Activate KCapsRxCSCall in dynamicCaps 
+        dynamicCaps |= RPacketService::KCapsRxCSCall;
+
+        }
+    else
+        {
+        
+        // Deativate KCapsRxCSCall in dynamicCaps 
+        dynamicCaps &= ~RPacketService::KCapsRxCSCall;
+
+        }
+
+    if ( dynamicCaps != iDynamicCaps )
+        {
+
+        // Set dynamic caps to iDynamicCaps
+        iDynamicCaps = dynamicCaps;
+        // Call complete notify dynamic caps change from service tsy
+        iMmPacketServiceTsy->CompleteNotifyDynamicCapsChange( iDynamicCaps );
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteDynamicCapsChange.\n\t Dynamic Caps:%b\n", iDynamicCaps );
+        }
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::GetStaticCaps
+// This function returns the service's static capabilities.
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::GetStaticCaps(
+        TUint* const aCaps )const 
+    {
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::GetStaticCaps.\n\t Static Caps:%b\n", iStaticCaps );
+
+    *aCaps = iStaticCaps;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::SetDefaultContextParams
+// Set default context parameters
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::SetDefaultContextParamsL(
+		const TDataPackage& aPackage )
+    {
+
+    TInt ret( KErrNotSupported );
+	TDataPackage package = aPackage;
+	
+	TAny* const dataPtr = aPackage.Ptr1(); 
+	TPacketDataConfigBase* aConfig =  REINTERPRET_CAST( 
+		TPacketDataConfigBase*, dataPtr );
+
+	if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+        {
+        RPacketContext::TContextConfigGPRS& configGPRS =
+            *( RPacketContext::TContextConfigGPRS* )aConfig;
+
+        iTempAccessPointName = configGPRS.iAccessPointName;
+
+        iTempPdpType = configGPRS.iPdpType;
+
+        iTempPdpCompression = configGPRS.iPdpCompression;
+
+        }
+
+	else if ( TPacketDataConfigBase::KConfigRel99Rel4 == 
+        aConfig->ExtensionId() )
+        {
+
+        RPacketContext::TContextConfigR99_R4& configR99_R4 =
+            *( RPacketContext::TContextConfigR99_R4* )aConfig;
+
+        iTempAccessPointName = configR99_R4.iAccessPointName;
+        iTempPdpType = configR99_R4.iPdpType;
+
+        }
+    else
+        {
+        return KErrArgument;
+        }
+
+	ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL( 
+			EPacketSetDefaultContextParams, &package );
+
+    return ret;
+    
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteSetDefaultContextParams
+// Completes call SetDefaultContextParams to client
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteSetDefaultContextParams(
+		TInt aErrorCause )
+    {
+
+	if ( KErrNone == aErrorCause )
+        {
+        iIsSetDefaultContextParamsCalled = ETrue;
+    
+        iAccessPointName = iTempAccessPointName;
+        iPdpType = iTempPdpType;
+        iPdpCompression = iTempPdpCompression;
+
+		}
+
+	iMmPacketServiceTsy->CompleteSetDefaultContextParams( aErrorCause );
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::GetDefaultContextParams
+// Gets default context parameters
+//----------------------------------------------------------------------------
+//
+TInt CMmPacketServiceGsmWcdmaExt::GetDefaultContextParams(
+        TPacketDataConfigBase* aContextConfig ) 
+    {
+
+    TInt ret( KErrNone );
+
+    if ( iIsSetDefaultContextParamsCalled )
+        {
+        // Check that the mode given in aConfig is GPRS
+        if ( TPacketDataConfigBase::KConfigGPRS == 
+            aContextConfig->ExtensionId() )
+            {
+            RPacketContext::TContextConfigGPRS configGPRS;
+
+            configGPRS.iPdpType = iPdpType;
+            configGPRS.iAccessPointName = iAccessPointName;
+            configGPRS.iPdpCompression = iPdpCompression;
+
+            // Set configuration data to ETel side memory
+            *( RPacketContext::TContextConfigGPRS* )aContextConfig = 
+               configGPRS;
+            }
+
+        else if ( TPacketDataConfigBase::KConfigRel99Rel4 == 
+            aContextConfig->ExtensionId() )
+            {
+            RPacketContext::TContextConfigR99_R4 configR99_R4;
+
+            configR99_R4.iPdpType = iPdpType;
+            configR99_R4.iAccessPointName = iAccessPointName;
+   
+            // Set configuration data to ETel side memory
+            *( RPacketContext::TContextConfigR99_R4* )aContextConfig = 
+                configR99_R4; 
+            
+            }
+
+        else
+            {
+            // Given mode is not supported
+            ret = KErrNotSupported;
+            }
+        }
+    else
+        {
+        ret = KErrNotReady;
+        }
+
+    return ret;
+
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::EGprsSupportInCell
+// returns EGprs support in cell
+//----------------------------------------------------------------------------
+//
+TBool CMmPacketServiceGsmWcdmaExt::EGprsSupportInCell()
+    {
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::EGprsSupportInCell.\n\t Last Edge Support:%b\n", iLastEdgeGprsSupport );
+
+    return iLastEdgeGprsSupport;  
+    }
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::SetEdgeGprsSupport
+// Defines if edge is supported on cell
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::SetEdgeGprsSupport(
+		TBool aLastEdgeGprsSupport )
+	{
+	iLastEdgeGprsSupport = aLastEdgeGprsSupport;
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::SetEdgeGprsSupport.\n\t Last Edge Support:%b\n", iLastEdgeGprsSupport );
+	}
+
+//----------------------------------------------------------------------------
+// CMmPacketServiceGsmWcdmaExt::CompleteTransferCapsChange
+// Completes transfer capabilities change to the Service Tsy.
+// (other items were commented in a header).
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteTransferCapsChange(
+        CMmDataPackage* aPackage )	
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::CompleteTransferCapsChange" );
+
+    // create temporary variable to hold the tranfer capabilities
+    TDynamicTransferCapsFlags transferCaps;
+    
+    // unpack the data form the adaptation layer, contains the transfer caps
+    aPackage->UnPackData( transferCaps );
+
+TFLOGSTRING2("TSY: CMmPacketServiceGsmWcdmaExt::CompleteTransferCapsChange.\n\t Dynamic Caps:%b\n", transferCaps );
+	
+    // create temporary dynamic capability variable from the member variable
+    RPacketService::TDynamicCapsFlags dynamicCaps( iDynamicCaps );
+
+    // set on/off the HSUPA dynamic transfer caps FLAG
+    ( ( transferCaps & KCapsHSUPA ) == KCapsHSUPA ) ? 
+        dynamicCaps |= RPacketService::KCapsHSUPA :
+        dynamicCaps &= ~RPacketService::KCapsHSUPA;
+
+    // set on/off the HSDPA dynamic transfer caps FLAG
+    ( ( transferCaps & KCapsHSDPA ) == KCapsHSDPA ) ? 
+        dynamicCaps |= RPacketService::KCapsHSDPA :
+        dynamicCaps &= ~RPacketService::KCapsHSDPA;
+	
+    // set on/off the EGPRS dynamic transfer caps FLAG
+    ( ( transferCaps & KCapsEGPRS ) == KCapsEGPRS ) ? 
+        dynamicCaps |= RPacketService::KCapsEGPRS :
+        dynamicCaps &= ~RPacketService::KCapsEGPRS;
+	    
+    if ( dynamicCaps != iDynamicCaps )
+        {
+        // Set modified dynamic caps to iDynamicCaps
+        iDynamicCaps = dynamicCaps;
+        // Call complete notify dynamic caps change from service tsy
+        iMmPacketServiceTsy->CompleteNotifyDynamicCapsChange( iDynamicCaps );
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// TInt CMmPacketServiceTsy::CompleteGetStaticCaps
+// Completes static capabilities
+// (other items were commented in a header).
+//----------------------------------------------------------------------------
+//
+void CMmPacketServiceGsmWcdmaExt::CompleteGetStaticCaps( CMmDataPackage* aDataPackage, TInt aError  )
+    {
+TFLOGSTRING("TSY: CMmPacketServiceGsmWcdmaExt::CompleteGetStaticCaps.");
+
+	//Unpack necessary data from datapackage
+	if (KErrNone == aError)
+        { 
+        RPacketService::TStaticMiscCaps staticCaps;
+        aDataPackage->UnPackData( staticCaps );
+	
+        // Save current caps values
+        iStaticCaps = staticCaps;	
+        }
+    }
+
+
+//  End of File