telephonyserverplugins/common_tsy/commontsy/src/mmpacket/Cmmpacketcontexttsy.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 20 244d7c5f118e
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/Cmmpacketcontexttsy.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/Cmmpacketcontexttsy.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,2227 +1,2227 @@
-// 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 "Cmmpacketcontexttsy.h"
-#include "Cmmpacketcontextlist.h"
-#include "cmmpacketservicegsmwcdmaext.h"
-#include "CMmPacketTsy.h"
-#include <ctsy/tflogger.h>
-#include "MmTsy_timeoutdefs.h"
-#include "MmTsy_numberOfSlots.h"
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-CMmPacketContextTsy::CMmPacketContextTsy():
-    iReqHandleType(EMultimodePacketContextReqHandleUnknown)
-    {
-    }
-
-CMmPacketContextTsy* CMmPacketContextTsy::NewL(
-        CMmPacketServiceTsy* const aMmPacketService,
-        const TInfoName& aHostCID, 
-        const TDes& aName,  
-        const TUint8 aProxyId ) 
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::NewL. Context name:%S", &aName );
-
-    CMmPacketContextTsy* packetContext = new ( ELeave ) CMmPacketContextTsy();
-
-    CleanupClosePushL( *packetContext );
-    packetContext->iMmPacketService = aMmPacketService;
-    packetContext->iContextName = aName;
-    packetContext->iProxyId = aProxyId;
-    packetContext->iHostCID = aHostCID;
-    packetContext->ConstructL();
-    CleanupStack::Pop();
-    
-    return packetContext;
-    }
-
-void CMmPacketContextTsy::ConstructL()
-    {
-    InitModulesL();
-    InitInternalAttributes();    
-    }
-    
-CMmPacketContextTsy::~CMmPacketContextTsy()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::~CMmPacketContextTsy. Context name: %S", &iContextName );
-	
-	if( iMmPacketService )
-		{
-			
-		iMmPacketService->PacketContextList()->RemoveObject( this );
-
-	    // Set Dynamic Caps
-	    iMmPacketService->ActivePacketServiceExtension()->SetDynamicCapsFlag(
-	        RPacketService::KCapsActivate, EFalse );
-	    
-	    if ( iIsDialUpContext )
-	        {
-	        iMmPacketService->ResetPointerToDialUpContext( iContextName );
-	        }
-	    
-		}
-		
-    delete iMmPacketContextGsmWcdmaExt;
-    delete iTsyReqHandleStore;
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::InitModulesL
-// Initialises extension modules for CMmPacketContextTsy
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::InitModulesL()
-    {
-
-    iMmPacketContextGsmWcdmaExt = 
-        CMmPacketContextGsmWcdmaExt::NewL( this, iMmPacketService );
-
-#ifdef REQHANDLE_TIMER   
-    // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL(  this,
-        iMmPacketService->PhoneTsy(), EMaxNumOfPacketContextRequests,
-        iPacketContextReqHandles );
-
-#else
-        // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
-        EMaxNumOfPacketContextRequests, iPacketContextReqHandles );
-
-#endif // REQHANDLE_TIMER
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::InitInternalAttributes
-// Initialises miscellaneous internal attributes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::InitInternalAttributes()
-    {
-    iQoSProfile = NULL;
-    iQoSProfileName.Zero();
-
-    iLastErrorCause = KErrNone;
-    iContextStatus = RPacketContext::EStatusUnknown;
-    iContextStatusBeforeSuspending = RPacketContext::EStatusUnknown;
-    iConnectionSpeed = 0;
-    iNotifyConnectionSpeed = 0;
-    iIsDialUpContext = EFalse;
-
-    if ( iContextName.Compare( KStringExternal )== 0 
-         || iContextName.Compare( KStringExternal2 )== 0 )
-        {
-        iIsDialUpContext = ETrue;
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::Init
-// Initialisation method that is called from ETel Server.
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::Init()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ExtFunc
-// TRAP's all CMmPacketContextTsy related MM Packet API requests in case that
-// they fail. This method functions only as a centralized TRAP for the
-// DoExtFuncL method that does the actual mapping of IPC number to TSY method
-// call.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::ExtFunc( 
-        const TTsyReqHandle aTsyReqHandle, 
-        const TInt aIpc, 
-        const TDataPackage& aPackage )  
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::ExtFunc. IPC: %d Context name:%S", aIpc, &iContextName );
-
-    TInt ret( KErrNone );
-    TInt trapError( KErrNone );
-
-#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
-    // Ensure the ReqHandleType is unset.
-    // This will detect cases where this method indirectly calls itself
-    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
-    // Such cases are not supported because iReqHandleType is in the context of this class instance,
-    // not this request, and we don't want the values set by the inner request and the outer request
-    // interfering with each other.
-    __ASSERT_DEBUG(iReqHandleType==EMultimodePacketContextReqHandleUnknown, User::Invariant());
-#else
-    // Reset last tsy request type
-    iReqHandleType = EMultimodePacketContextReqHandleUnknown;
-#endif
-
-    // Trap the call of DoExtFuncL
-    TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ) );
-
-    if ( KErrNone != trapError )
-        {
-        ReqCompleted( aTsyReqHandle, trapError );
-        }
-
-    else if ( KErrNone != ret )
-        {
-        ReqCompleted( aTsyReqHandle, ret );
-        }
-
-    if ( EMultimodePacketContextReqHandleUnknown != iReqHandleType )
-        {
-#ifdef REQHANDLE_TIMER
-        SetTypeOfResponse( iReqHandleType, aTsyReqHandle );
-#else
-        iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, aTsyReqHandle );
-#endif // REQHANDLE_TIMER
-#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
-        // We've finished with this value now. Clear it so it doesn't leak
-        //  up to any other instances of this method down the call stack
-        iReqHandleType = EMultimodePacketContextReqHandleUnknown;
-#endif
-        }
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::DoExtFuncL
-// Packet Data specific functionality of CMmPacketContextTsy::ExtFunc
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::DoExtFuncL( 
-        const TTsyReqHandle aTsyReqHandle,      
-        const TInt aIpc,      
-        const TDataPackage& aPackage )   
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::DoExtFuncL. IPC: %d Handle:%d",
-                aIpc, aTsyReqHandle );
-
-    TInt ret( KErrNotSupported );
-
-    TAny* dataPtr = aPackage.Ptr1();
-    TAny* dataPtr2 = aPackage.Ptr2();
-
-    switch ( aIpc )
-        {
-        case EPacketContextNotifyStatusChange:
-            ret = NotifyStatusChange( 
-                REINTERPRET_CAST( RPacketContext::TContextStatus*, dataPtr ) );
-            break;
-        case EPacketContextNotifyConfigChanged:
-            ret = NotifyConfigChanged( 
-                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
-            break;
-        case EPacketContextNotifyConnectionSpeedChange:
-            ret = NotifyConnectionSpeedChange( 
-                REINTERPRET_CAST( TUint*, dataPtr ) );
-            break;
-        case EPacketContextInitialiseContext:
-            {
-            TDes8* paramData = aPackage.Des1n();
-            
-            if(paramData != NULL)
-            	{
-            	if(sizeof(RPacketContext::TDataChannelV2) > paramData->MaxLength())
-            		{
-            		ret = KErrArgument;
-            		}
-            	else
-            		{
-            		ret = InitialiseContextL( reinterpret_cast< RPacketContext::TDataChannelV2*>( dataPtr ));
-            		}
-            	}
-            else
-            	{
-            	ret = KErrArgument;
-            	}
-            break;
-            }
-        case EPacketContextSetConfig:
-            ret = SetConfigL( 
-                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
-            break;
-        case EPacketContextActivate:
-            ret = ActivateL();
-            break;
-        case EPacketContextDeactivate:
-            ret = DeactivateL();
-            break;
-        case EPacketContextDelete:
-            ret = DeleteL();
-            break;
-        case EPacketContextGetStatus:
-            ret = GetStatus( aTsyReqHandle, 
-                REINTERPRET_CAST( RPacketContext::TContextStatus*, dataPtr ) );
-            break;
-        case EPacketContextGetConfig:
-            ret = GetConfig( aTsyReqHandle, 
-                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
-            break;
-        case EPacketContextGetProfileName:
-            ret = GetProfileName( aTsyReqHandle, 
-                REINTERPRET_CAST( TInfoName*, dataPtr ) );
-            break;
-        case EPacketContextGetConnectionSpeed:
-            ret = GetConnectionSpeed( aTsyReqHandle, 
-                REINTERPRET_CAST( TUint*, dataPtr ) );
-            break;
-        case EPacketContextGetLastErrorCause:
-            ret = GetLastErrorCause( aTsyReqHandle, 
-                REINTERPRET_CAST( TInt*, dataPtr ) );
-            break;
-        case EPacketContextGetDataVolumeTransferred:
-            ret = GetDataVolumeTransferredL( aTsyReqHandle,
-                REINTERPRET_CAST( RPacketContext::TDataVolume*, dataPtr ) );
-            break;
-        case EPacketContextEnumeratePacketFilters:
-            ret = EnumeratePacketFilters( aTsyReqHandle,
-                REINTERPRET_CAST( TInt*, dataPtr ) );
-            break;
-        case EPacketContextGetPacketFilterInfo:
-            {
-            TDes8* paramData = aPackage.Des2n();
-            
-            if (paramData)
-            	{
-            	TInt paramLength = paramData->MaxLength();
-            	
-            	RPacketContext::TPacketFilterV2 temp;
-            	RPacketContext::TPacketFilterV2Pckg tempPckg(temp);
-            	
-            	TInt expectedLength = tempPckg.MaxLength();
-
-				if (paramLength == expectedLength)
-					{
-		            ret = GetPacketFilterInfo( aTsyReqHandle, REINTERPRET_CAST( TInt*, dataPtr ), REINTERPRET_CAST( TPacketBase*, dataPtr2 ) );
-					}
-				else
-					{
-					ret = KErrArgument;
-					}
-            	}
-            else
-            	{
-            	ret = KErrArgument;
-            	}
-            	
-            }
-            break;
-        case EPacketContextAddPacketFilter:
-            ret = AddPacketFilterL( aTsyReqHandle, aPackage.Des1n() );
-            break;
-        case EPacketContextRemovePacketFilter:
-#ifdef USING_CTSY_DISPATCHER            
-        	ret = RemovePacketFilter( REINTERPRET_CAST( TInt*, dataPtr ) );
-#else
-        	ret = RemovePacketFilter( aTsyReqHandle,
-                REINTERPRET_CAST( TInt*, dataPtr ) );     
-#endif        	
-        	break;
-        case EPacketContextModifyActiveContext:
-            ret = ModifyActiveContextL();
-            break;
-        case EPacketContextGetDNSInfo:
-            ret = GetDnsInfo( aTsyReqHandle, aPackage.Des1n() );
-            break;
-        case EPacketAddMediaAuthorization:
-	        ret = AddMediaAuthorizationL( aTsyReqHandle, aPackage.Des1n() );
-	        break;
-	    case EPacketRemoveMediaAuthorization:
-	        ret = RemoveMediaAuthorization( aTsyReqHandle, 
-	        		REINTERPRET_CAST( RPacketContext::TAuthorizationToken*,
-                    dataPtr ) );
-	        break;	        
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextGetConnectionInfo:
-            ret = GetConnectionInfo( aTsyReqHandle, 
-                reinterpret_cast<TConnectionInfoBase*>( dataPtr ) );            
-            break;
-        case EPacketContextNotifyConnectionInfoChange:
-            ret = NotifyConnectionInfoChange(
-                reinterpret_cast<TConnectionInfoBase*>( dataPtr ) ); 
-            break;      
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        // These requests currently not supported
-        //case EPacketContextLoanCommPort:
-        //case EPacketContextRecoverCommPort:
-        //case EPacketContextNotifyDataTransferred:
-        default:
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ReqModeL
-// Returns request mode for given IPC.
-// ---------------------------------------------------------------------------
-//
-CTelObject::TReqMode CMmPacketContextTsy::ReqModeL( 
-        const TInt aIpc ) 
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::ReqModeL. IPC: %d", aIpc );
-
-    CTelObject::TReqMode reqMode( 0 );
-    TBool doLeave( EFalse );
-
-    switch ( aIpc )
-        {
-        // All disabled
-        // TSYs wishing to implement their own buffering algorithm will place 
-        // all requests in this category.  
-
-        // Get methods that do not use DOS and return immediately. 
-        // Flow control not required.
-        case EPacketContextGetConnectionSpeed:
-        case EPacketContextGetLastErrorCause:
-        case EPacketContextGetProfileName:
-        case EPacketContextEnumeratePacketFilters:
-        case EPacketContextGetPacketFilterInfo:
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextGetConnectionInfo:                      
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-
-        // Other methods that do not use DOS and return immediately. 
-        // Flow control not required.
-    
-        // Methods that can propably take a long time and cannot therefore be
-        // flow controlled. Solution: All these methods must check req handle
-        // table before handling the request. In case that the request table 
-        // indicates that same method has been called and has not been 
-        // completed, the method should return KErrServerBusy.
-            if ( iIsDialUpContext )
-                {
-                doLeave = ETrue;
-                break;
-                }
-        case EPacketContextGetStatus:
-        case EPacketContextGetConfig:
-            break;
-
-        // KReqModeFlowControlObeyed
-        // Commands that change the state of the phone, e.g. clearing the AoC 
-        // counter, are commands that the TSY should only deal with one at 
-        // a time.
-
-        case EPacketContextInitialiseContext:
-        case EPacketContextActivate:
-        case EPacketContextDelete:
-        case EPacketContextSetConfig:
-        case EPacketContextAddPacketFilter:
-        case EPacketContextRemovePacketFilter:
-        case EPacketContextModifyActiveContext:
-        case EPacketContextGetDNSInfo:
-        case EPacketAddMediaAuthorization:
-        case EPacketRemoveMediaAuthorization:
-            if ( iIsDialUpContext )
-                {
-                doLeave = ETrue;
-                break;
-                }
-        case EPacketContextDeactivate:
-        case EPacketContextGetDataVolumeTransferred:
-
-            {
-            reqMode = KReqModeFlowControlObeyed;
-            break;
-            }
-
-        // KReqModeMultipleCompletionEnabled | ReqModePostImmediately
-        // Requests that notify a client about a change of state.
-        // Since these requests do not require the issuing of any modem 
-        // commands, they do not have to obey flow control.
-        // The TSY never gets more than one of these outstanding.
-        case EPacketContextNotifyConfigChanged:
-        case EPacketContextNotifyConnectionSpeedChange:
-            if ( iIsDialUpContext )
-                {
-                doLeave = ETrue;
-                break;
-                }
-        case EPacketContextNotifyStatusChange:
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextNotifyConnectionInfoChange:           
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-            reqMode = KReqModeMultipleCompletionEnabled |
-                KReqModeRePostImmediately;
-            break;
-
-        // Cancel Requests
-        // It's not necessary to include the Cancel methods in ReqModeL at all.
-        // The ETel server never calls ReqModeL with a Cancel IPC.
-
-        // Other variations of return values are unusable.
-        // Following requests are not supported
-        //case EPacketContextNotifyDataTransferred:
-        //case EPacketContextLoanCommPort:
-        //case EPacketContextRecoverCommPort:
-        // Default
-        default:
-            doLeave = ETrue;
-            break;
-        }
-
-    if ( doLeave )
-        {
-        User::Leave( KErrNotSupported );
-        }
-
-    return reqMode;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::NumberOfSlotsL
-// Returns number of slots to be used for given IPC.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::NumberOfSlotsL(    
-        const TInt aIpc )                            
-    {
-    TInt numberOfSlots( 0 );
-
-    switch ( aIpc )
-        {
-        case EPacketContextNotifyStatusChange:
-            numberOfSlots = KMmPacketContextNotifyStatusChangeSlots;
-            break;
-        case EPacketContextNotifyConfigChanged:
-            numberOfSlots = KMmPacketContextNotifyConfigChangedSlots;
-            break;
-        case EPacketContextNotifyConnectionSpeedChange:
-            numberOfSlots = KMmPacketContextNotifyConnectionSpeedChangeSlots;
-            break;
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextNotifyConnectionInfoChange:
-            numberOfSlots = KMmPacketContextNotifyConnectionInfoChangeSlots;
-            break;                       
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        default:
-            // Unknown or invalid IPC
-            User::Leave( KErrNotSupported );
-            break;
-
-        }  
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::NumberOfSlotsL. IPC: %d Number of slots: %d",
-                aIpc, numberOfSlots );
-
-    return numberOfSlots;
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CancelService
-// Cancel the outstanding request.ETel Server when it is "cleaning-up" any
-//  outstanding asynchronous requests before closing a client's sub-session.
-//  This will happen if a client closes its R-class handle without cancelling
-//  outstanding asynchronous requests. Only Packet API requests are handled 
-//  here. Client can also cancel a request by calling CancelAsyncRequest 
-//  (defined in etel.h). The ETel server passes this kind of cancel requests
-//  to CancelService.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::CancelService(    
-        const TInt aIpc,                            
-        const TTsyReqHandle aTsyReqHandle )         
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::CancelService. IPC: %d Handle:%d",
-                aIpc, aTsyReqHandle );
-
-    TInt ret( KErrNone );
-	TTsyReqHandle reqHandle( NULL );
-
-#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
-    // Ensure the ReqHandleType is unset.
-    // This will detect cases where this method indirectly calls itself
-    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
-    // Such cases are not supported because iReqHandleType is in the context of this class instance,
-    // not this request, and we don't want the values set by the inner request and the outer request
-    // interfering with each other.
-    __ASSERT_DEBUG(iReqHandleType==EMultimodePacketContextReqHandleUnknown, User::Invariant());
-#else
-    // Reset last tsy request type
-    iReqHandleType = EMultimodePacketContextReqHandleUnknown;
-#endif
-
-    switch ( aIpc )
-        {
-        // TSY has started a request and it is not possible to then cancel 
-        // this request. The best thing for the TSY to do in this case is to
-        // proceed as though the Cancel never happened. The server's call to
-        // the TSY cancel function will return synchronously. The TSY then
-        // continues to wait for the original acknowledgement and when it
-        // receives it, the TSY will complete the original request.
-        case EPacketContextInitialiseContext:
-        case EPacketContextActivate:
-        case EPacketContextDeactivate:
-        case EPacketContextDelete:
-        case EPacketContextSetConfig:
-        case EPacketContextGetConfig:
-        case EPacketContextGetConnectionSpeed:
-        case EPacketContextGetDataVolumeTransferred:
-        case EPacketContextEnumeratePacketFilters:
-        case EPacketContextGetPacketFilterInfo:
-        case EPacketContextAddPacketFilter:
-        case EPacketContextRemovePacketFilter:
-        case EPacketContextModifyActiveContext:
-        case EPacketContextGetDNSInfo:
-        case EPacketAddMediaAuthorization:
-        case EPacketRemoveMediaAuthorization:
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextGetConnectionInfo:                     
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-            break;
-        // Notification Cancels, no special requirements.
-        case EPacketContextNotifyStatusChange:
-            iRetNotifyStatus = NULL;
-            iReqHandleType = EMultimodePacketContextNotifyStatusChange;
-            break;
-        case EPacketContextNotifyConfigChanged:
-            reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-                EMultimodePacketContextNotifyConfigChanged );
-            if ( aTsyReqHandle == reqHandle )
-                {
-                iRetNotifyConfig = NULL;
-                iReqHandleType = EMultimodePacketContextNotifyConfigChanged;
-                }
-            else
-                {
-                reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-                    EMultimodePacketContextNotifyConfigChanged99 );
-                if ( aTsyReqHandle == reqHandle )
-                    {
-                    iRetNotifyConfig2 = NULL;
-                    iReqHandleType =
-                        EMultimodePacketContextNotifyConfigChanged99;
-                    }
-                }
-            break;
-        case EPacketContextNotifyConnectionSpeedChange:
-            iRetNotifyConnectionSpeed = NULL;
-            iReqHandleType = 
-                EMultimodePacketContextNotifyConnectionSpeedChange;
-            break;
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextNotifyConnectionInfoChange:
-            iRetNotifyConnectionInfo = NULL;
-            iReqHandleType =
-                EMultimodePacketContextNotifyConnectionInfoChange;
-            break;                       
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        // IPCs that are not supported
-        //case EPacketContextLoanCommPort:
-        //case EPacketContextRecoverCommPort:
-        //case EPacketContextNotifyDataTransferred:
-        // Default
-        default:
-            ret = KErrNotSupported;
-            break;
-        }
-
-    if ( EMultimodePacketContextReqHandleUnknown != iReqHandleType )
-        {
-        // Reset tsy request handle
-        iTsyReqHandleStore->ResetTsyReqHandle( iReqHandleType );
-
-        // Complete request
-        CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrCancel );
-#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
-        // We've finished with this value now. Clear it so it doesn't leak
-        //  up to any other instances of this method down the call stack
-        iReqHandleType = EMultimodePacketContextReqHandleUnknown;
-#endif
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::RegisterNotification
-// Register notification. RegisterNotification is called when the ETel Server
-// recognises that this notification is being posted for the first time on
-// this subsession object.It enables the TSY to "turn on" any regular 
-// notification messages that it may receive from DOS. If this object is
-// Dial-Up context only supported notification is 
-// EPacketContextNotifyStatusChange.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::RegisterNotification( 
-        const TInt aIpc )              
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::RegisterNotification. IPC: %d", aIpc );
-
-    TInt ret( KErrNone );
-
-    switch ( aIpc )
-        {
-        case EPacketContextNotifyConfigChanged:
-        case EPacketContextNotifyConnectionSpeedChange:
-            if ( iIsDialUpContext )
-                {
-                ret = KErrNotSupported;
-                break;
-                }
-        case EPacketContextNotifyStatusChange:          
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextNotifyConnectionInfoChange:                       
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-            break;
-        //case EPacketContextNotifyDataTransferred:
-        default:
-            // Not supported
-            ret = KErrNotSupported;
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::DeregisterNotification
-// Deregister notification. DeregisterNotification is called when the ETel
-// Server recognises that this notification will not be posted again because 
-// the last client to have a handle on this sub-session object has just closed 
-// the handle. It enables the TSY to "turn off" any regular notification
-// messages that it may receive from DOS. If this object is Dial-Up context
-// only supported notification is EPacketContextNotifyStatusChange.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::DeregisterNotification(
-        const TInt aIpc )                          
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeregisterNotification. IPC: %d", aIpc );
-
-    TInt ret( KErrNone );
-
-    switch ( aIpc )
-        {
-        case EPacketContextNotifyConfigChanged:
-        case EPacketContextNotifyConnectionSpeedChange:
-            if ( iIsDialUpContext )
-                {
-                ret = KErrNotSupported;
-                break;
-                }
-        case EPacketContextNotifyStatusChange:
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-        case EPacketContextNotifyConnectionInfoChange:                    
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-            break;
-        //case EPacketContextNotifyDataTransferred:
-        default:
-            // Not supported
-            ret = KErrNotSupported;
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::OpenNewObjectL
-// Create new QoS object and return a pointer to it.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CTelObject* CMmPacketContextTsy::OpenNewObjectL(    
-        TDes& aNewName )                          
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::OpenNewObjectL." );
-
-    // Each context can have only one QoS
-    if ( NULL != iQoSProfile )
-        {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectL. Leaves with: %d", KErrAlreadyExists );
-        User::Leave( KErrAlreadyExists );
-        }
-    
-    else
-        {
-        // Create new QoS object
-        iQoSProfile = CMmPacketQoSTsy::NewL( iMmPacketService, this );
-
-        iQoSProfileName.Copy( iContextName );
-        aNewName.Copy( iQoSProfileName );
-        }
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectL. aNewName: %S", &aNewName );
-
-    return iQoSProfile;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::OpenNewObjectByNameL
-// Return a pointer to QoS if it exists. The ETel Server calls this method 
-// after some client has requested to open existing QoS object. The TSY 
-// classes must not use this method.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CTelObject* CMmPacketContextTsy::OpenNewObjectByNameL(    
-        const TDesC& aName )                     
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectByNameL. aName: %S", &aName );
-
-    if ( aName != iQoSProfileName )
-        {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectByNameL. Leaves with: %d", KErrNotFound );
-        User::Leave( KErrNotFound );
-        }
-
-    return iQoSProfile;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::InitialiseContextL
-// This function initialises the context created previously.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::InitialiseContextL(RPacketContext::TDataChannelV2* aDataChannel )
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::InitialiseContextL." );
-
-    TInt ret( KErrNone );
-
-    // Initialise Context
-    ret = iMmPacketContextGsmWcdmaExt->InitialiseContextL(aDataChannel);
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle
-        iReqHandleType = EMultimodePacketContextInitialiseContext;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteInitialiseContext
-// Complete the asynchronous InitialiseContext request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteInitialiseContext(const TInt aResult )     
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteInitialiseContext. Error: %d", aResult );
-
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextInitialiseContext );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-               // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ActivateL
-// Activate a context. This function activates a context that has been
-// previously configured using the SetConfig() method from RPacketContext.
-// Once this function completes, the context will remain in an 'Activating'
-// state until PPP has been successfully negotiated between the phone & the
-// packet network gateway.Once PPP is negotiated, the context can be 
-// considered to be 'Activated'.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::ActivateL()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::ActivateL. Context name:%S", &iContextName );
-
-    TInt ret( KErrGprsServicesNotAllowed );
-
-    if ( iMmPacketService->IsActivationAllowed() )
-        {
-        // Call ActivateL
-        ret = iMmPacketContextGsmWcdmaExt->ActivateL();
-        }
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle
-        iReqHandleType = EMultimodePacketContextActivate;
-        }
-
-    return ret;        
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteActivate
-// Complete the asynchronous Activate request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteActivate( 
-        const TInt aResult )
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteActivate. Error: %d", aResult );
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextActivate );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-       
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::Deactivate
-// Deactivate a context previously configured on the phone.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::DeactivateL()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeactivateL. Context name:%S", &iContextName );
-    TInt ret( KErrNone );
-
-    // Call Deactivate
-    ret = iMmPacketContextGsmWcdmaExt->DeactivateL();
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle
-        iReqHandleType = EMultimodePacketContextDeactivate;
-        }
-
-    return ret;  
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteDeactivate
-// Complete the asynchronous Deactivate request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteDeactivate( 
-        const TInt aResult )    
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteDeactivate. Error: %d", aResult );
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextDeactivate );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::DeleteL
-// Delete a context id previously created on the phone.
-// Note that although the context is considered as 'deleted', the 
-// client's RPacketContext subsession remains. To remove this, a client must
-// call Close() from RPacketContext.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::DeleteL()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeleteL. Context name:%S", &iContextName );
-
-    TInt ret( KErrNone );
-
-    // Call DeleteL
-    ret = iMmPacketContextGsmWcdmaExt->DeleteL();
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle
-        iReqHandleType = EMultimodePacketContextDelete;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteDelete
-// Complete the asynchronous Delete request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteDelete( 
-        const TInt aResult )        
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteDelete. Error: %d", aResult );
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextDelete );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetConfig
-// Requests the current configuration of the context.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetConfig(
-        const TTsyReqHandle aTsyReqHandle,    
-        TPacketDataConfigBase* const aConfig )  
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetConfig. Context name:%S", &iContextName );
-
-    // Get config
-    TInt ret = iMmPacketContextGsmWcdmaExt->GetConfig( aConfig );
-
-    // Complete Request
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetConnectionSpeed
-// Allows a client to get the current connection speed.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetConnectionSpeed(
-        const TTsyReqHandle aTsyReqHandle,         
-        TUint* const aRate ) 
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetConnectionSpeed. Context name: %S Connection Speed:%d bps",
-             &iContextName, iConnectionSpeed );
-
-    // Get current connection speed rate
-    *aRate = iConnectionSpeed;
-
-    // Complete Request
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetDataVolumeTransferred
-// This function gets the data volume transferred.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetDataVolumeTransferredL(
-        const TTsyReqHandle aTsyReqHandle,   
-        RPacketContext::TDataVolume* const aVolume ) 
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetDataVolumeTransferredL. Context name:%S", &iContextName );
-
-    TInt ret( KErrNone );
-
-    if ( RPacketContext::EStatusDeleted != iContextStatus )
-        {
-        // Get data volume transferred
-        ret = iMmPacketContextGsmWcdmaExt->GetDataVolumeTransferredL();
-
-        if ( KErrNone == ret )
-            {
-            // Store pointer
-            iRetDataVolume = aVolume;
-            // Store the request handle type
-            iReqHandleType = EMultimodePacketContextGetDataVolumeTransferred;
-            }
-        }
-    else
-        {
-        // Get current data volume
-        *aVolume = iDataVolume;
-        // Complete request
-        CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteGetDataVolumeTransferred
-// Complete the asynchronous GetDataVolumeTransferred request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteGetDataVolumeTransferred( 
-        const TInt aResult )  
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteGetDataVolumeTransferred. Error: %d", aResult );
-
-    // Reset the req handle. Returns the deleted req handle
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextGetDataVolumeTransferred );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        
-        if ( KErrNone == aResult )
-            {
-            *iRetDataVolume = iDataVolume;
-            }
-
-        // Null ret pointer
-        iRetDataVolume = NULL;
-
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetLastErrorCause
-// This function retrieves the last error cause to have occurred.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetLastErrorCause(
-        const TTsyReqHandle aTsyReqHandle,  
-        TInt* const aError )    
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetLastErrorCause. Context name:%S Last error cause: %d",
-             &iContextName, iLastErrorCause );
-
-    *aError = iLastErrorCause;
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetProfileName
-// Allows a client to retrieve the name of the QoS profile. The QoS profile is
-// associated with the context. If no QoS profile has been defined by the
-// client, the name to be returned will be NULL.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetProfileName(
-        const TTsyReqHandle aTsyReqHandle, 
-        TInfoName* const aQoSProfile )  
-    {
-    if ( NULL != iQoSProfile )
-        {
-        *aQoSProfile = iQoSProfileName;
-        }
-    else
-        {
-        // QoS profile not found
-        aQoSProfile->Zero();
-        }
-
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetProfileName. Context name: %S QoS Profile Name: %S",
-             &iContextName, aQoSProfile );
-
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetStatus
-// Allows a client to get the current status of the context.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetStatus(
-        const TTsyReqHandle aTsyReqHandle,   
-        RPacketContext::TContextStatus* const aContextStatus )
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetStatus. Context name: %S Context Status:%d",
-             &iContextName, iContextStatus );
-    *aContextStatus = iContextStatus;
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::NotifyConfigChanged
-// Requests notification when configuration of context changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::NotifyConfigChanged(
-        TPacketDataConfigBase* const aConfig )  
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConfigChanged." );
-
-    // Call NotifyConfigChanged from extension
-    TInt ret = iMmPacketContextGsmWcdmaExt->NotifyConfigChanged( *aConfig );
-
-    if ( KErrNone == ret )
-        {
-        if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
-            {
-            // Store pointer
-            iRetNotifyConfig = aConfig;
-            // Store req handle type
-            iReqHandleType = EMultimodePacketContextNotifyConfigChanged;
-            }
-
-        else
-            {
-            // Store pointer
-            iRetNotifyConfig2 = aConfig;
-            // Store req handle type
-            iReqHandleType = EMultimodePacketContextNotifyConfigChanged99;
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteNotifyConfigChanged
-// Complete notification when the context configuration changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteNotifyConfigChanged()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteNotifyConfigChanged.  Context name:%S",
-                &iContextName );
-
-    // Get and reset req handle for R97/98 config notify
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextNotifyConfigChanged );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        // Get current configuration
-        iMmPacketContextGsmWcdmaExt->GetConfig( iRetNotifyConfig );
-        // Null ret pointer
-        iRetNotifyConfig = NULL;
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
-        }
-    
-    // Get and reset req handle for R99_R4 config notify
-    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextNotifyConfigChanged99 );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        // Get current configuration
-        iMmPacketContextGsmWcdmaExt->GetConfig( iRetNotifyConfig2 );
-        // Null ret pointer
-        iRetNotifyConfig2 = NULL;
-        // Complete the client request
-       CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::NotifyConnectionSpeedChange
-// Requests notification when connection speed changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::NotifyConnectionSpeedChange(
-        TUint* const aRate )    
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConnectionSpeedChange." );
-
-    // Store pointer
-    iRetNotifyConnectionSpeed = aRate;
-    // Store req handle type
-    iReqHandleType = EMultimodePacketContextNotifyConnectionSpeedChange;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange
-// Complete the notification when the connection speed changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange(
-        TInt const aConnectionSpeed )
-    {
-    iConnectionSpeed = aConnectionSpeed;
-    
-    if ( iNotifyConnectionSpeed != iConnectionSpeed )
-        {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange. Context name:%S Connection Speed:%d bps",
-            &iContextName, iConnectionSpeed );
-
-        // Store the connection speed internally
-        iNotifyConnectionSpeed = iConnectionSpeed;
-
-        // Get and reset req handle
-        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            EMultimodePacketContextNotifyConnectionSpeedChange );
-
-        if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-            {
-            // Get current connection speed
-            *iRetNotifyConnectionSpeed = iNotifyConnectionSpeed;
-            // Null ret pointer
-            iRetNotifyConnectionSpeed = NULL;
-            // Complete the client request
-            CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::NotifyStatusChange
-// Requests notification when the status of the context changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::NotifyStatusChange(
-        RPacketContext::TContextStatus* const aContextStatus )
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::NotifyStatusChange. Context name:%S", &iContextName );
-    iRetNotifyStatus = aContextStatus;
-    iReqHandleType = EMultimodePacketContextNotifyStatusChange;
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteNotifyStatusChange
-// Complete the notification when the context status changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteNotifyStatusChange(
-        const RPacketContext::TContextStatus aContextStatus ) 
-    {
-
-    if ( aContextStatus != iContextStatus )
-        {
-        iContextStatus = aContextStatus;
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::CompleteNotifyStatusChange. Context name: %S  Context status:%d",
-                    &iContextName, iContextStatus );
-
-        if ( RPacketContext::EStatusActive == iContextStatus ||
-             RPacketContext::EStatusInactive == iContextStatus ||
-             RPacketContext::EStatusDeleted == iContextStatus )
-            {
-            iMmPacketService->ContextStatusChanged( iContextStatus );
-            if( RPacketContext::EStatusDeleted == iContextStatus )
-                {
-                iMmPacketContextGsmWcdmaExt->SetContextStatusBeforeDeactivation(
-                    RPacketContext::EStatusDeleted );
-                }
-            }
-
-        // Reset req handle. Returns the deleted req handle
-        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
-            EMultimodePacketContextNotifyStatusChange );
-
-        if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-            {
-            // Get current status
-            *iRetNotifyStatus = aContextStatus;
-            // Null ret pointer
-            iRetNotifyStatus = NULL;
-            // Complete the client request
-            CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::SetConfigL
-// Configure a context to the phone.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::SetConfigL(
-        TPacketDataConfigBase* const aConfig ) 
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::SetConfigL. Context name:%S", &iContextName );
-
-    // Call SetConfigL
-    TInt ret = iMmPacketContextGsmWcdmaExt->SetConfigL( aConfig );
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle type
-        iReqHandleType = EMultimodePacketContextSetConfig;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteSetConfig
-// Complete the asynchronous SetConfig request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteSetConfig( 
-        const TInt aError,   
-        TBool aIsAddMediaAuthorizationCalled )
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteSetConfig. Error: %d", aError );
-    
-    TTsyReqHandle reqHandle( EMultimodePacketContextReqHandleUnknown );
-    //if context exists eg. its name length is bigger than zero
-    if( 0 == CMmPacketContextTsy::HostCID().Length() )
-        {
-        reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            EMultimodePacketContextSetConfig );
-        }
-
-    else
-        {
-        if( aIsAddMediaAuthorizationCalled )
-        	{
-        	reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            				EMultimodePacketContextAddMediaAuthorization );	
-        	}
-		else
-			{       
-#ifdef USING_CTSY_DISPATCHER
-			// Distinguish between RemovePacketFilter and AddPacketFilter..
-			
-// There is a hang defect lurking here.
-//
-//	To show the defect, add and run the following test case (you could
-//         copy from CCTsyPacketServicesFU::TestUseCase0007L):
-//	- Add a packet filter. Wait for the request to complete.
-//  - Remove the packet filter. (don't wait for completion)
-//  - Add another packet filter.
-//  - Wait for removal to complete (WILL HANG but obviously shouldn't).
-//
-// The reason for this hang is that there's a single completion method
-// for both Add and Remove packet filter functions down in the CTSY
-// (dispatcher mode only).
-//
-// If a client calls RemovePacketFilter, then immediately
-// calls AddPacketFilter (before the RemovePacketFilter has
-// completed), the iReqHandleType data member will already have been
-// updated to be EMultimodePacketContextAddPacketFilter..
-// So the code under the else below (that searches for the
-// RemovePacketFilter reqHandle and completes it) will never get run.
-// Thus the RemovePacketFilter call will hang.
-//
-// Fixing this requires that some other variable (NOT iReqHandleType)
-//  is used to record that an add or a remove action is outstanding.
-//
-// When this defect has been addressed, please treat all the sections marked
-//  ADD_REMOVE_PACKETFILTER_DEFECT_FIXED above as defined, and delete any 
-//  else blocks. This will then assert that the iReqHandleType doesn't
-//  leak between calls. Which will protect us against any other such hang
-//  bugs in the future.
-// This is the change that I was trying to apply when I ran into this defect.
-//  See Perforce CL#1755436
-//     Rob Lundie Hill
-
-			if (iReqHandleType == EMultimodePacketContextRemovePacketFilter)
-				{
-				reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( EMultimodePacketContextRemovePacketFilter );
-				}
-			else
-				{
-				reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( EMultimodePacketContextAddPacketFilter );
-				}
-#else			
-        	reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-            				EMultimodePacketContextAddPacketFilter );
-#endif //USING_CTSY_DISPATCHER																       
-        	}
-        }
-        
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-                            
-        // Complete the client request
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aError );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::SetDataVolume
-// Set the volume of transferred data.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::SetDataVolume(
-        const TInt /* aResult */,
-        RPacketContext::TDataVolume dataVolume )
-    {
-
-TFLOGSTRING( "TSY: CMmPacketContextTsy::SetDataVolume" );
-   
-    if ( dataVolume.iBytesSent < iDataVolume.iBytesSent )
-        {
-        // The value of sent data has turned around the 4 GB
-        iDataVolume.iOverflowCounterSent++;
-        }
-    iDataVolume.iBytesSent = dataVolume.iBytesSent;
-
-
-    if ( dataVolume.iBytesReceived < iDataVolume.iBytesReceived )
-        {
-        // The value of received data has turned around the 4 GB
-        iDataVolume.iOverflowCounterReceived++;
-        }
-    iDataVolume.iBytesReceived = dataVolume.iBytesReceived;
-       
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::SetLastErrorCause
-// Set the last error cause.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::SetLastErrorCause(
-        const TInt aErrorCause ) 
-    {
-    if ( RPacketContext::EStatusActivating == iContextStatus  || 
-     	RPacketContext::EStatusDeactivating == iContextStatus   )
-        {
-        iLastErrorCause =  aErrorCause;           
-        }
-
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::SetLastErrorCause.  aErrorCause: %d iLastErrorCause:%d", 
-             aErrorCause, iLastErrorCause );
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ContextStatus
-// Return current context status.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-RPacketContext::TContextStatus CMmPacketContextTsy::ContextStatus() const
-    {
-    return iContextStatus;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ContextSuspended
-// Suspend the context.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::ContextSuspended()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::ContextSuspended. Context status before suspending: %d",
-                iContextStatus );
-
-    if ( ( RPacketContext::EStatusActivating == iContextStatus ) ||
-         ( RPacketContext::EStatusActive == iContextStatus ) ||
-         ( RPacketContext::EStatusDeactivating == iContextStatus ) )
-        {
-        iContextStatusBeforeSuspending = iContextStatus;
-        CMmPacketContextTsy::CompleteNotifyStatusChange( 
-									RPacketContext::EStatusSuspended );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ContextResumed
-// Resume the suspended context.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::ContextResumed()
-    {
-    if ( RPacketContext::EStatusSuspended == iContextStatus )
-        {
-        CMmPacketContextTsy::CompleteNotifyStatusChange( 
-									iContextStatusBeforeSuspending );
-        }
-
-    iContextStatusBeforeSuspending = RPacketContext::EStatusUnknown;
-
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::ContextResumed. Context status when resumed: %d",
-                iContextStatus );
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::PacketContextGsmWcdmaExt
-// Return pointer to the CMmPacketContextGsmWcdmaExt.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CMmPacketContextGsmWcdmaExt* CMmPacketContextTsy::PacketContextGsmWcdmaExt() const 
-    {
-    return iMmPacketContextGsmWcdmaExt;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::PacketQoSTsy
-// Return a pointer to the PacketQoSTsy.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CMmPacketQoSTsy* CMmPacketContextTsy::PacketQoSTsy() const 
-    {
-    return iQoSProfile;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::RemoveQoS
-// Remove the pointer to PacketQoSTsy.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::RemoveQoS()
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::RemoveQoS." );
-
-    iQoSProfile = NULL;
-    iQoSProfileName.Zero();
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ReqCompleted
-// Overloads CTelObject::ReqCompleted.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::ReqCompleted(
-        const TTsyReqHandle aTsyReqHandle, 
-        const TInt aError )   
-    {
-TFLOGSTRING3( "TSY: CMmPacketContextTsy::ReqCompleted. Handle:%d Error:%d", 
-             aTsyReqHandle, aError );
-
-    // Set last error cause
-    if ( KErrNone != aError )
-        {
-        iLastErrorCause = aError;
-        }
-
-    CTelObject::ReqCompleted( aTsyReqHandle, aError );
-
-    }
-
-#ifdef REQHANDLE_TIMER
-
-    
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::SetTypeOfResponse
-// Sets the type of response for a given request handle. Automatic mode 
-// includes an automatic response in case of non response from the DOS in a
-// specified time. This method is used only if REQHANDLE_TIMER is in use.
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::SetTypeOfResponse(
-        const TInt aReqHandleType,               
-        const TTsyReqHandle aTsyReqHandle )       
-    {
-    TInt timeOut( 0 );
-
-    // Set timeout by req handle type
-    switch ( aReqHandleType )
-        {
-        case EMultimodePacketContextInitialiseContext:
-            timeOut = KMmPacketContextInitialiseContextTimeOut;
-            break;
-        case EMultimodePacketContextSetConfig:
-            timeOut = KMmPacketContextSetConfigTimeOut;
-            break;
-        case EMultimodePacketContextActivate:
-            timeOut = KMmPacketContextActivateTimeOut;
-            break;
-        case EMultimodePacketContextDeactivate:
-            timeOut = KMmPacketContextDeactivateTimeOut;
-            break;
-        case EMultimodePacketContextDelete:
-            timeOut = KMmPacketContextDeleteTimeOut;
-            break;
-        case EMultimodePacketContextGetDataVolumeTransferred:
-            timeOut = KMmPacketContextGetDataVolumeTransferredTimeOut;
-            break;
-        case EMultimodePacketContextModifyActiveContext:
-            timeOut = KMmPacketContextModifyActiveContext;
-            break;
-        case EMultimodePacketContextAddMediaAuthorization:
-            timeOut = KMmPacketContextAddMediaAuthorization;
-            break;
-
-        // Can't use timer:
-        // - all notifications
-        //case EMultimodePacketContextNotifyConfigChanged:
-        //case EMultimodePacketContextNotifyConnectionSpeedChange:
-        //case EMultimodePacketContextNotifyStatusChange:
-        default:
-            // Do not use timer
-            iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, 
-                aTsyReqHandle );
-            break;
-        }
-
-    if ( 0 < timeOut )
-        {
-        // The timeout parameter is given in seconds.
-        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle, 
-            timeOut );
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::Complete
-// Completes the request due the timer expiration. This method is used only if
-// REQHANDLE_TIMER is in use. 
-// ---------------------------------------------------------------------------
-// 
-void CMmPacketContextTsy::Complete(
-        const TInt aReqHandleType,    
-        const TInt aError )        
-    {
-    // All possible TSY req handle types are listed in the
-    // switch case below.
-    switch ( aReqHandleType )
-        {
-        case EMultimodePacketContextInitialiseContext:
-            CMmPacketContextTsy::CompleteInitialiseContext( aError );
-            break;
-        case EMultimodePacketContextSetConfig:
-            CMmPacketContextTsy::CompleteSetConfig( aError );
-            break;
-        case EMultimodePacketContextActivate:
-            CMmPacketContextTsy::CompleteActivate( aError );
-            break;
-        case EMultimodePacketContextDeactivate:
-            CMmPacketContextTsy::CompleteDeactivate( aError );
-            break;
-        case EMultimodePacketContextDelete:
-            CMmPacketContextTsy::CompleteDelete( aError );
-            break;
-        case EMultimodePacketContextGetDataVolumeTransferred:
-            CMmPacketContextTsy::CompleteGetDataVolumeTransferred( aError );
-            break;
-        case EMultimodePacketContextModifyActiveContext:
-            CMmPacketContextTsy::CompleteModifyActiveContext( aError );
-            break;
-       	case EMultimodePacketContextAddMediaAuthorization:
-            CMmPacketContextTsy::CompleteSetConfig( aError, ETrue );
-            break;
-
-        // Can't use timer:
-        // - all notifications
-        //case EMultimodePacketContextNotifyConfigChanged:
-        //case EMultimodePacketContextNotifyConnectionSpeedChange:
-        //case EMultimodePacketContextNotifyStatusChange:
-        default:
-            CMmPacketContextTsy::ReqCompleted( iTsyReqHandleStore->
-				ResetTsyReqHandle( aReqHandleType ), aError );
-            break;
-        }
-
-    }
-
-#endif // REQHANDLE_TIMER
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::IsDialUpContext
-// Return ETrue if this is dial-up context, otherwise EFalse.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//  
-TBool CMmPacketContextTsy::IsDialUpContext(  
-        const TInfoName* const aContextName ) const
-    {
-
-    TBool ret( EFalse );
-
-    if ( NULL != aContextName )
-        {
-        if ( *aContextName == iContextName )
-            {
-            ret = ETrue;
-            }
-        }
-    else
-        {
-        ret = iIsDialUpContext;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ResetDialUpContext
-// Reset the externally created dial-up context's data.
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::ResetDialUpContext()
-    {
-
-TFLOGSTRING( "TSY: CMmPacketContextTsy::ResetDialUpContext." );
-
-    iDataVolume.iOverflowCounterSent = 0;
-    iDataVolume.iBytesSent = 0;
-    iDataVolume.iOverflowCounterReceived = 0;
-    iDataVolume.iBytesReceived = 0;
-
-    iContextStatus = RPacketContext::EStatusInactive;
-
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::HostCID
-// Return the host context name
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInfoName CMmPacketContextTsy::HostCID() const
-    {
-
-    return iHostCID;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::AddPacketFilterL
-// This method sets up a packet filter in the TFT belonging to this context, 
-// with the Id specified in the packet filter information. New packet filter
-// info is stored in CMmPacketContextGsmWcdmaExt. This method takes care of 
-// adding packet filter info and storing this information.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::AddPacketFilterL(
-        const TTsyReqHandle aTsyReqHandle,  
-        TDes8* const aPacketFilter )  
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::AddPacketFilterL. Context name:%S", &iContextName );
-
-    TInt ret( KErrGeneral );
-
-    if ( (0 < iHostCID.Length()) && (aPacketFilter->Length() > 0) )
-        {
-        ret = iMmPacketContextGsmWcdmaExt->AddPacketFilterL( aPacketFilter );
-
-        if ( KErrNone == ret )
-            {
-            // if operation is meant for already configurated context
-            if ( RPacketContext::EStatusUnknown != ContextStatus() &&
-                RPacketContext::EStatusInactive != ContextStatus() ) 
-                {
-                // request must complete to client
-                CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-                }
-
-            // else operation is context configuration and complete method
-            // handles request complete
-            else
-                {
-                // Store the request handle type
-                iReqHandleType = EMultimodePacketContextAddPacketFilter;
-                }
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::RemovePacketFilter
-// This method removes a packet filter from the TFT belonging to this context.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-#ifndef USING_CTSY_DISPATCHER 
-TInt CMmPacketContextTsy::RemovePacketFilter(
-        const TTsyReqHandle aTsyReqHandle,  
-        TInt *aID ) 
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::RemovePacketFilter. RemovedFilter:%d", *aID );
-
-    TInt ret( KErrArgument );
-
-    // id must be value from 1 to 8
-    if ( 0 < *aID && 8 >= *aID )
-        {
-        ret = iMmPacketContextGsmWcdmaExt->RemovePacketFilter( *aID );
-        }
-
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-#endif // #ifndef USING_CTSY_DISPATCHER
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ModifyActiveContextL
-// Invokes context modification.  This method invokes MS-initiated 
-// modification of an active context in the network.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::ModifyActiveContextL()
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::ModifyActiveContextL. Context name:%S", &iContextName );
-    
-    TInt ret( KErrNotReady );
-
-    if ( RPacketContext::EStatusUnknown != ContextStatus() &&
-        RPacketContext::EStatusInactive != ContextStatus() &&
-        RPacketContext::EStatusDeleted != ContextStatus() )
-        {
-        ret = iMmPacketContextGsmWcdmaExt->ModifyActiveContextL();
-        }
-
-    if ( KErrNone == ret )
-        {
-        // Store the request handle type
-        iReqHandleType = EMultimodePacketContextModifyActiveContext;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteModifyActiveContext
-// When all Tft operations are done method completes to client 
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteModifyActiveContext(
-        const TInt aResult )
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteModifyActiveContext. Context name:%S", &iContextName );
-
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-           EMultimodePacketContextModifyActiveContext );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-
-        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
-
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::EnumeratePacketFilters
-// Returns number of defined packet filters to client
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::EnumeratePacketFilters(
-        const TTsyReqHandle aTsyReqHandle,
-        TInt *aCount )  
-    {
-    TInt ret = iMmPacketContextGsmWcdmaExt->EnumeratePacketFilters ( aCount );
-
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetPacketFilterInfo
-// Gives information about the packet filter specified by aIndex
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetPacketFilterInfo(
-        const TTsyReqHandle aTsyReqHandle,   
-        TInt* aIndex,               
-        TPacketBase* aPacketFilterInfo )   
-    {
-    TInt ret = iMmPacketContextGsmWcdmaExt->GetPacketFilterInfo ( *aIndex, 
-        aPacketFilterInfo);
-
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetDnsInfo
-// This method gets the DNS info for Etel side request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetDnsInfo(
-        const TTsyReqHandle aTsyReqHandle,
-        TDes8* const aDnsInfo )
-    {
-    ASSERT(aDnsInfo);
-    
-    RPacketContext::TDnsInfoV2 temp;
-    RPacketContext::TTDnsInfoV2Pckg tempPckg(temp);
-
-	TInt ret = KErrArgument;
-	if (tempPckg.MaxLength() == aDnsInfo->MaxLength() )
-		{
-	    ret = iMmPacketContextGsmWcdmaExt->GetDnsInfoEtel( aDnsInfo );
-		}
-
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret ); 
-
-    return KErrNone;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ContextName
-// This method returns name of this context
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInfoName CMmPacketContextTsy::ContextName() const
-    {
-    return iContextName;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::AddMediaAuthorizationL
-// Makes request for adding authorization params to licensee tsy
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::AddMediaAuthorizationL(
-        const TTsyReqHandle aTsyReqHandle,  
-        TDes8* aMediaAuthorization )
-	{
-	
-	TInt ret( KErrArgument );
-	TBool hasMediaAuthorizationBeenCached=EFalse;
-	
-	
-	//Can be done only for secondary context
-	if ( 0 < iHostCID.Length() )
-		{
-				
-	    //Create buffers
-	    RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = 
-            RPacketContext::CTFTMediaAuthorizationV3::NewL();
-	    CleanupStack::PushL( mediaAuthorization );
-	    mediaAuthorization->InternalizeL( *aMediaAuthorization );
-	 	
-	 	ret = iMmPacketContextGsmWcdmaExt->AddMediaAuthorizationL( 
-            mediaAuthorization, hasMediaAuthorizationBeenCached);
-	 	
-	 	//Cleanup created object.  If it has been cached we do not delete it, because
-	 	// the array (cache) will be cleaned in the destructor
-	 	// If we were unable to cache it, we need to destroy it, otherwise we will leak 
-	 	// memory.
-	 	if(hasMediaAuthorizationBeenCached)
-	 		{
-	 		CleanupStack::Pop(mediaAuthorization);
-	 		}
-	 	else
-	 		{
-	 		CleanupStack::PopAndDestroy(mediaAuthorization);
-	 		}
-	 	
-	 	if ( KErrNone == ret )
-	    	{
-	        //
-	        if ( RPacketContext::EStatusUnknown != ContextStatus() &&
-	            RPacketContext::EStatusInactive != ContextStatus() ) 
-	            {
-	            // request must complete to client
-	            CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
-	            }
-
-	        // else operation is context configuration and complete method
-	        // handles request complete
-	        else
-	            {
-	            // Store the request handle type
-	            iReqHandleType = EMultimodePacketContextAddMediaAuthorization;
-	            }
-	        }
-		}
-	return ret;
-	 	        
- 	}
-        
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::RemoveMediaAuthorization
-// Makes request for removing authorization params to licensee tsy
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::RemoveMediaAuthorization(
-        const TTsyReqHandle aTsyReqHandle,  
-        RPacketContext::TAuthorizationToken* const aAuthorizationToken )
-	{
-	TInt ret( KErrGeneral );
-	
-	//Can be done only for secondary context
-	if ( 0 < iHostCID.Length() )
-		{
-	 	
-	 	ret = iMmPacketContextGsmWcdmaExt->RemoveMediaAuthorization( 
-            aAuthorizationToken );
-            
-		}
-		
-	CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-	
-	return KErrNone;
-	}
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::ContextType
-// return the context type
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CMmPacketContextTsy::TPacketContextType CMmPacketContextTsy::ContextType() const
-{
-	return EContextTypePacketContext;
-}
-
-#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::GetConnectionInfo
-// Gets the current connection information. 
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::GetConnectionInfo(
-        const TTsyReqHandle aTsyReqHandle,    
-        TConnectionInfoBase* const aInfo )  
-    {
-TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetConnectionInfo. Context name:%S", &iContextName );
-
-    // Get config
-    TInt ret = FillConnectionInfo( aInfo );
-
-    // Complete Request
-    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
-
-    return KErrNone;
-    }
-   
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::NotifyConnectionInfoChange
-// Requests notification when connection information changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::NotifyConnectionInfoChange(
-        TConnectionInfoBase* const aInfo )    
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConnectionInfoChange." );
-
-    // Store pointer
-    iRetNotifyConnectionInfo = aInfo;
-    // Store req handle type
-    iReqHandleType = EMultimodePacketContextNotifyConnectionInfoChange;
-
-    return KErrNone;
-    }   
-    
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::CompleteNotifyConnectionInfoChange
-// Complete notification when the connection information changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextTsy::CompleteNotifyConnectionInfoChange(
-        TConnectionInfoBase* const aInfo )    
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::CompleteNotifyConnectionInfoChange." );
-
-    if ( NULL != aInfo &&
-        TConnectionInfoBase::KConnectionInfoV1 == aInfo->ExtensionId() )
-        {
-    	RPacketContext::TConnectionInfoV1 connectionInfoV1;
-        connectionInfoV1 = *( static_cast<RPacketContext::TConnectionInfoV1*>( aInfo ) );
-
-		//Check if connection info has changed
-		if ( iConnectionInfo.iHSDPACategory != connectionInfoV1.iHSDPACategory ||
-	         iConnectionInfo.iHSUPACategory != connectionInfoV1.iHSUPACategory ||
-	         iConnectionInfo.iValid != connectionInfoV1.iValid )
-			{
-			//Set new connection info
-			iConnectionInfo = connectionInfoV1;
-			
-			//Get req handle
-			TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
-        		EMultimodePacketContextNotifyConnectionInfoChange );
-        		
-			if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        		{	
-        		// Fill current connection information
-        		TInt ret = FillConnectionInfo( iRetNotifyConnectionInfo );
-			
-				if ( KErrNone == ret )
-					{
-					//reset req handle
-					iTsyReqHandleStore->ResetTsyReqHandle(
-        				EMultimodePacketContextNotifyConnectionInfoChange );
-        			// Null ret pointer
-        			iRetNotifyConnectionInfo = NULL;
-        			// Complete the client request
-        			CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
-					}
-        		}
-			}
-        }
-    }    
-    
-// ---------------------------------------------------------------------------
-// CMmPacketContextTsy::FillConnectionInfo
-// Fills the current connection information to TConnectionInfoXXX structure. 
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextTsy::FillConnectionInfo(   
-        TConnectionInfoBase* const aInfo )  
-    {
-TFLOGSTRING( "TSY: CMmPacketContextTsy::FillConnectionInfo" );
-
-    TInt ret = KErrNone;
-
-    if ( NULL != aInfo &&
-        TConnectionInfoBase::KConnectionInfoV1 == aInfo->ExtensionId() )
-        {
-        //Set connection info to ETel side memory
-        *( static_cast<RPacketContext::TConnectionInfoV1*>( aInfo ) ) = iConnectionInfo;        
-        }
-    else
-        {
-        ret = KErrArgument;    
-        }
-
-    return ret;
-    }        
-#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
-//  End of File 
+// 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 "Cmmpacketcontexttsy.h"
+#include "Cmmpacketcontextlist.h"
+#include "cmmpacketservicegsmwcdmaext.h"
+#include "CMmPacketTsy.h"
+#include <ctsy/tflogger.h>
+#include "MmTsy_timeoutdefs.h"
+#include "MmTsy_numberOfSlots.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+CMmPacketContextTsy::CMmPacketContextTsy():
+    iReqHandleType(EMultimodePacketContextReqHandleUnknown)
+    {
+    }
+
+CMmPacketContextTsy* CMmPacketContextTsy::NewL(
+        CMmPacketServiceTsy* const aMmPacketService,
+        const TInfoName& aHostCID, 
+        const TDes& aName,  
+        const TUint8 aProxyId ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::NewL. Context name:%S", &aName );
+
+    CMmPacketContextTsy* packetContext = new ( ELeave ) CMmPacketContextTsy();
+
+    CleanupClosePushL( *packetContext );
+    packetContext->iMmPacketService = aMmPacketService;
+    packetContext->iContextName = aName;
+    packetContext->iProxyId = aProxyId;
+    packetContext->iHostCID = aHostCID;
+    packetContext->ConstructL();
+    CleanupStack::Pop();
+    
+    return packetContext;
+    }
+
+void CMmPacketContextTsy::ConstructL()
+    {
+    InitModulesL();
+    InitInternalAttributes();    
+    }
+    
+CMmPacketContextTsy::~CMmPacketContextTsy()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::~CMmPacketContextTsy. Context name: %S", &iContextName );
+	
+	if( iMmPacketService )
+		{
+			
+		iMmPacketService->PacketContextList()->RemoveObject( this );
+
+	    // Set Dynamic Caps
+	    iMmPacketService->ActivePacketServiceExtension()->SetDynamicCapsFlag(
+	        RPacketService::KCapsActivate, EFalse );
+	    
+	    if ( iIsDialUpContext )
+	        {
+	        iMmPacketService->ResetPointerToDialUpContext( iContextName );
+	        }
+	    
+		}
+		
+    delete iMmPacketContextGsmWcdmaExt;
+    delete iTsyReqHandleStore;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::InitModulesL
+// Initialises extension modules for CMmPacketContextTsy
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::InitModulesL()
+    {
+
+    iMmPacketContextGsmWcdmaExt = 
+        CMmPacketContextGsmWcdmaExt::NewL( this, iMmPacketService );
+
+#ifdef REQHANDLE_TIMER   
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL(  this,
+        iMmPacketService->PhoneTsy(), EMaxNumOfPacketContextRequests,
+        iPacketContextReqHandles );
+
+#else
+        // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
+        EMaxNumOfPacketContextRequests, iPacketContextReqHandles );
+
+#endif // REQHANDLE_TIMER
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::InitInternalAttributes
+// Initialises miscellaneous internal attributes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::InitInternalAttributes()
+    {
+    iQoSProfile = NULL;
+    iQoSProfileName.Zero();
+
+    iLastErrorCause = KErrNone;
+    iContextStatus = RPacketContext::EStatusUnknown;
+    iContextStatusBeforeSuspending = RPacketContext::EStatusUnknown;
+    iConnectionSpeed = 0;
+    iNotifyConnectionSpeed = 0;
+    iIsDialUpContext = EFalse;
+
+    if ( iContextName.Compare( KStringExternal )== 0 
+         || iContextName.Compare( KStringExternal2 )== 0 )
+        {
+        iIsDialUpContext = ETrue;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::Init
+// Initialisation method that is called from ETel Server.
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::Init()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ExtFunc
+// TRAP's all CMmPacketContextTsy related MM Packet API requests in case that
+// they fail. This method functions only as a centralized TRAP for the
+// DoExtFuncL method that does the actual mapping of IPC number to TSY method
+// call.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::ExtFunc( 
+        const TTsyReqHandle aTsyReqHandle, 
+        const TInt aIpc, 
+        const TDataPackage& aPackage )  
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::ExtFunc. IPC: %d Context name:%S", aIpc, &iContextName );
+
+    TInt ret( KErrNone );
+    TInt trapError( KErrNone );
+
+#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
+    // Ensure the ReqHandleType is unset.
+    // This will detect cases where this method indirectly calls itself
+    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
+    // Such cases are not supported because iReqHandleType is in the context of this class instance,
+    // not this request, and we don't want the values set by the inner request and the outer request
+    // interfering with each other.
+    __ASSERT_DEBUG(iReqHandleType==EMultimodePacketContextReqHandleUnknown, User::Invariant());
+#else
+    // Reset last tsy request type
+    iReqHandleType = EMultimodePacketContextReqHandleUnknown;
+#endif
+
+    // Trap the call of DoExtFuncL
+    TRAP( trapError, ret = DoExtFuncL( aTsyReqHandle, aIpc, aPackage ) );
+
+    if ( KErrNone != trapError )
+        {
+        ReqCompleted( aTsyReqHandle, trapError );
+        }
+
+    else if ( KErrNone != ret )
+        {
+        ReqCompleted( aTsyReqHandle, ret );
+        }
+
+    if ( EMultimodePacketContextReqHandleUnknown != iReqHandleType )
+        {
+#ifdef REQHANDLE_TIMER
+        SetTypeOfResponse( iReqHandleType, aTsyReqHandle );
+#else
+        iTsyReqHandleStore->SetTsyReqHandle( iReqHandleType, aTsyReqHandle );
+#endif // REQHANDLE_TIMER
+#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
+        // We've finished with this value now. Clear it so it doesn't leak
+        //  up to any other instances of this method down the call stack
+        iReqHandleType = EMultimodePacketContextReqHandleUnknown;
+#endif
+        }
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::DoExtFuncL
+// Packet Data specific functionality of CMmPacketContextTsy::ExtFunc
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::DoExtFuncL( 
+        const TTsyReqHandle aTsyReqHandle,      
+        const TInt aIpc,      
+        const TDataPackage& aPackage )   
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::DoExtFuncL. IPC: %d Handle:%d",
+                aIpc, aTsyReqHandle );
+
+    TInt ret( KErrNotSupported );
+
+    TAny* dataPtr = aPackage.Ptr1();
+    TAny* dataPtr2 = aPackage.Ptr2();
+
+    switch ( aIpc )
+        {
+        case EPacketContextNotifyStatusChange:
+            ret = NotifyStatusChange( 
+                REINTERPRET_CAST( RPacketContext::TContextStatus*, dataPtr ) );
+            break;
+        case EPacketContextNotifyConfigChanged:
+            ret = NotifyConfigChanged( 
+                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
+            break;
+        case EPacketContextNotifyConnectionSpeedChange:
+            ret = NotifyConnectionSpeedChange( 
+                REINTERPRET_CAST( TUint*, dataPtr ) );
+            break;
+        case EPacketContextInitialiseContext:
+            {
+            TDes8* paramData = aPackage.Des1n();
+            
+            if(paramData != NULL)
+            	{
+            	if(sizeof(RPacketContext::TDataChannelV2) > paramData->MaxLength())
+            		{
+            		ret = KErrArgument;
+            		}
+            	else
+            		{
+            		ret = InitialiseContextL( reinterpret_cast< RPacketContext::TDataChannelV2*>( dataPtr ));
+            		}
+            	}
+            else
+            	{
+            	ret = KErrArgument;
+            	}
+            break;
+            }
+        case EPacketContextSetConfig:
+            ret = SetConfigL( 
+                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
+            break;
+        case EPacketContextActivate:
+            ret = ActivateL();
+            break;
+        case EPacketContextDeactivate:
+            ret = DeactivateL();
+            break;
+        case EPacketContextDelete:
+            ret = DeleteL();
+            break;
+        case EPacketContextGetStatus:
+            ret = GetStatus( aTsyReqHandle, 
+                REINTERPRET_CAST( RPacketContext::TContextStatus*, dataPtr ) );
+            break;
+        case EPacketContextGetConfig:
+            ret = GetConfig( aTsyReqHandle, 
+                REINTERPRET_CAST( TPacketDataConfigBase*, dataPtr ) );
+            break;
+        case EPacketContextGetProfileName:
+            ret = GetProfileName( aTsyReqHandle, 
+                REINTERPRET_CAST( TInfoName*, dataPtr ) );
+            break;
+        case EPacketContextGetConnectionSpeed:
+            ret = GetConnectionSpeed( aTsyReqHandle, 
+                REINTERPRET_CAST( TUint*, dataPtr ) );
+            break;
+        case EPacketContextGetLastErrorCause:
+            ret = GetLastErrorCause( aTsyReqHandle, 
+                REINTERPRET_CAST( TInt*, dataPtr ) );
+            break;
+        case EPacketContextGetDataVolumeTransferred:
+            ret = GetDataVolumeTransferredL( aTsyReqHandle,
+                REINTERPRET_CAST( RPacketContext::TDataVolume*, dataPtr ) );
+            break;
+        case EPacketContextEnumeratePacketFilters:
+            ret = EnumeratePacketFilters( aTsyReqHandle,
+                REINTERPRET_CAST( TInt*, dataPtr ) );
+            break;
+        case EPacketContextGetPacketFilterInfo:
+            {
+            TDes8* paramData = aPackage.Des2n();
+            
+            if (paramData)
+            	{
+            	TInt paramLength = paramData->MaxLength();
+            	
+            	RPacketContext::TPacketFilterV2 temp;
+            	RPacketContext::TPacketFilterV2Pckg tempPckg(temp);
+            	
+            	TInt expectedLength = tempPckg.MaxLength();
+
+				if (paramLength == expectedLength)
+					{
+		            ret = GetPacketFilterInfo( aTsyReqHandle, REINTERPRET_CAST( TInt*, dataPtr ), REINTERPRET_CAST( TPacketBase*, dataPtr2 ) );
+					}
+				else
+					{
+					ret = KErrArgument;
+					}
+            	}
+            else
+            	{
+            	ret = KErrArgument;
+            	}
+            	
+            }
+            break;
+        case EPacketContextAddPacketFilter:
+            ret = AddPacketFilterL( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case EPacketContextRemovePacketFilter:
+#ifdef USING_CTSY_DISPATCHER            
+        	ret = RemovePacketFilter( REINTERPRET_CAST( TInt*, dataPtr ) );
+#else
+        	ret = RemovePacketFilter( aTsyReqHandle,
+                REINTERPRET_CAST( TInt*, dataPtr ) );     
+#endif        	
+        	break;
+        case EPacketContextModifyActiveContext:
+            ret = ModifyActiveContextL();
+            break;
+        case EPacketContextGetDNSInfo:
+            ret = GetDnsInfo( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case EPacketAddMediaAuthorization:
+	        ret = AddMediaAuthorizationL( aTsyReqHandle, aPackage.Des1n() );
+	        break;
+	    case EPacketRemoveMediaAuthorization:
+	        ret = RemoveMediaAuthorization( aTsyReqHandle, 
+	        		REINTERPRET_CAST( RPacketContext::TAuthorizationToken*,
+                    dataPtr ) );
+	        break;	        
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextGetConnectionInfo:
+            ret = GetConnectionInfo( aTsyReqHandle, 
+                reinterpret_cast<TConnectionInfoBase*>( dataPtr ) );            
+            break;
+        case EPacketContextNotifyConnectionInfoChange:
+            ret = NotifyConnectionInfoChange(
+                reinterpret_cast<TConnectionInfoBase*>( dataPtr ) ); 
+            break;      
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        // These requests currently not supported
+        //case EPacketContextLoanCommPort:
+        //case EPacketContextRecoverCommPort:
+        //case EPacketContextNotifyDataTransferred:
+        default:
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ReqModeL
+// Returns request mode for given IPC.
+// ---------------------------------------------------------------------------
+//
+CTelObject::TReqMode CMmPacketContextTsy::ReqModeL( 
+        const TInt aIpc ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::ReqModeL. IPC: %d", aIpc );
+
+    CTelObject::TReqMode reqMode( 0 );
+    TBool doLeave( EFalse );
+
+    switch ( aIpc )
+        {
+        // All disabled
+        // TSYs wishing to implement their own buffering algorithm will place 
+        // all requests in this category.  
+
+        // Get methods that do not use DOS and return immediately. 
+        // Flow control not required.
+        case EPacketContextGetConnectionSpeed:
+        case EPacketContextGetLastErrorCause:
+        case EPacketContextGetProfileName:
+        case EPacketContextEnumeratePacketFilters:
+        case EPacketContextGetPacketFilterInfo:
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextGetConnectionInfo:                      
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+
+        // Other methods that do not use DOS and return immediately. 
+        // Flow control not required.
+    
+        // Methods that can propably take a long time and cannot therefore be
+        // flow controlled. Solution: All these methods must check req handle
+        // table before handling the request. In case that the request table 
+        // indicates that same method has been called and has not been 
+        // completed, the method should return KErrServerBusy.
+            if ( iIsDialUpContext )
+                {
+                doLeave = ETrue;
+                break;
+                }
+        case EPacketContextGetStatus:
+        case EPacketContextGetConfig:
+            break;
+
+        // KReqModeFlowControlObeyed
+        // Commands that change the state of the phone, e.g. clearing the AoC 
+        // counter, are commands that the TSY should only deal with one at 
+        // a time.
+
+        case EPacketContextInitialiseContext:
+        case EPacketContextActivate:
+        case EPacketContextDelete:
+        case EPacketContextSetConfig:
+        case EPacketContextAddPacketFilter:
+        case EPacketContextRemovePacketFilter:
+        case EPacketContextModifyActiveContext:
+        case EPacketContextGetDNSInfo:
+        case EPacketAddMediaAuthorization:
+        case EPacketRemoveMediaAuthorization:
+            if ( iIsDialUpContext )
+                {
+                doLeave = ETrue;
+                break;
+                }
+        case EPacketContextDeactivate:
+        case EPacketContextGetDataVolumeTransferred:
+
+            {
+            reqMode = KReqModeFlowControlObeyed;
+            break;
+            }
+
+        // KReqModeMultipleCompletionEnabled | ReqModePostImmediately
+        // Requests that notify a client about a change of state.
+        // Since these requests do not require the issuing of any modem 
+        // commands, they do not have to obey flow control.
+        // The TSY never gets more than one of these outstanding.
+        case EPacketContextNotifyConfigChanged:
+        case EPacketContextNotifyConnectionSpeedChange:
+            if ( iIsDialUpContext )
+                {
+                doLeave = ETrue;
+                break;
+                }
+        case EPacketContextNotifyStatusChange:
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextNotifyConnectionInfoChange:           
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+            reqMode = KReqModeMultipleCompletionEnabled |
+                KReqModeRePostImmediately;
+            break;
+
+        // Cancel Requests
+        // It's not necessary to include the Cancel methods in ReqModeL at all.
+        // The ETel server never calls ReqModeL with a Cancel IPC.
+
+        // Other variations of return values are unusable.
+        // Following requests are not supported
+        //case EPacketContextNotifyDataTransferred:
+        //case EPacketContextLoanCommPort:
+        //case EPacketContextRecoverCommPort:
+        // Default
+        default:
+            doLeave = ETrue;
+            break;
+        }
+
+    if ( doLeave )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    return reqMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::NumberOfSlotsL(    
+        const TInt aIpc )                            
+    {
+    TInt numberOfSlots( 0 );
+
+    switch ( aIpc )
+        {
+        case EPacketContextNotifyStatusChange:
+            numberOfSlots = KMmPacketContextNotifyStatusChangeSlots;
+            break;
+        case EPacketContextNotifyConfigChanged:
+            numberOfSlots = KMmPacketContextNotifyConfigChangedSlots;
+            break;
+        case EPacketContextNotifyConnectionSpeedChange:
+            numberOfSlots = KMmPacketContextNotifyConnectionSpeedChangeSlots;
+            break;
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextNotifyConnectionInfoChange:
+            numberOfSlots = KMmPacketContextNotifyConnectionInfoChangeSlots;
+            break;                       
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        default:
+            // Unknown or invalid IPC
+            User::Leave( KErrNotSupported );
+            break;
+
+        }  
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::NumberOfSlotsL. IPC: %d Number of slots: %d",
+                aIpc, numberOfSlots );
+
+    return numberOfSlots;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CancelService
+// Cancel the outstanding request.ETel Server when it is "cleaning-up" any
+//  outstanding asynchronous requests before closing a client's sub-session.
+//  This will happen if a client closes its R-class handle without cancelling
+//  outstanding asynchronous requests. Only Packet API requests are handled 
+//  here. Client can also cancel a request by calling CancelAsyncRequest 
+//  (defined in etel.h). The ETel server passes this kind of cancel requests
+//  to CancelService.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::CancelService(    
+        const TInt aIpc,                            
+        const TTsyReqHandle aTsyReqHandle )         
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::CancelService. IPC: %d Handle:%d",
+                aIpc, aTsyReqHandle );
+
+    TInt ret( KErrNone );
+	TTsyReqHandle reqHandle( NULL );
+
+#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
+    // Ensure the ReqHandleType is unset.
+    // This will detect cases where this method indirectly calls itself
+    // (e.g. servicing a client call that causes a self-reposting notification to complete and thus repost).
+    // Such cases are not supported because iReqHandleType is in the context of this class instance,
+    // not this request, and we don't want the values set by the inner request and the outer request
+    // interfering with each other.
+    __ASSERT_DEBUG(iReqHandleType==EMultimodePacketContextReqHandleUnknown, User::Invariant());
+#else
+    // Reset last tsy request type
+    iReqHandleType = EMultimodePacketContextReqHandleUnknown;
+#endif
+
+    switch ( aIpc )
+        {
+        // TSY has started a request and it is not possible to then cancel 
+        // this request. The best thing for the TSY to do in this case is to
+        // proceed as though the Cancel never happened. The server's call to
+        // the TSY cancel function will return synchronously. The TSY then
+        // continues to wait for the original acknowledgement and when it
+        // receives it, the TSY will complete the original request.
+        case EPacketContextInitialiseContext:
+        case EPacketContextActivate:
+        case EPacketContextDeactivate:
+        case EPacketContextDelete:
+        case EPacketContextSetConfig:
+        case EPacketContextGetConfig:
+        case EPacketContextGetConnectionSpeed:
+        case EPacketContextGetDataVolumeTransferred:
+        case EPacketContextEnumeratePacketFilters:
+        case EPacketContextGetPacketFilterInfo:
+        case EPacketContextAddPacketFilter:
+        case EPacketContextRemovePacketFilter:
+        case EPacketContextModifyActiveContext:
+        case EPacketContextGetDNSInfo:
+        case EPacketAddMediaAuthorization:
+        case EPacketRemoveMediaAuthorization:
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextGetConnectionInfo:                     
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+            break;
+        // Notification Cancels, no special requirements.
+        case EPacketContextNotifyStatusChange:
+            iRetNotifyStatus = NULL;
+            iReqHandleType = EMultimodePacketContextNotifyStatusChange;
+            break;
+        case EPacketContextNotifyConfigChanged:
+            reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+                EMultimodePacketContextNotifyConfigChanged );
+            if ( aTsyReqHandle == reqHandle )
+                {
+                iRetNotifyConfig = NULL;
+                iReqHandleType = EMultimodePacketContextNotifyConfigChanged;
+                }
+            else
+                {
+                reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+                    EMultimodePacketContextNotifyConfigChanged99 );
+                if ( aTsyReqHandle == reqHandle )
+                    {
+                    iRetNotifyConfig2 = NULL;
+                    iReqHandleType =
+                        EMultimodePacketContextNotifyConfigChanged99;
+                    }
+                }
+            break;
+        case EPacketContextNotifyConnectionSpeedChange:
+            iRetNotifyConnectionSpeed = NULL;
+            iReqHandleType = 
+                EMultimodePacketContextNotifyConnectionSpeedChange;
+            break;
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextNotifyConnectionInfoChange:
+            iRetNotifyConnectionInfo = NULL;
+            iReqHandleType =
+                EMultimodePacketContextNotifyConnectionInfoChange;
+            break;                       
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        // IPCs that are not supported
+        //case EPacketContextLoanCommPort:
+        //case EPacketContextRecoverCommPort:
+        //case EPacketContextNotifyDataTransferred:
+        // Default
+        default:
+            ret = KErrNotSupported;
+            break;
+        }
+
+    if ( EMultimodePacketContextReqHandleUnknown != iReqHandleType )
+        {
+        // Reset tsy request handle
+        iTsyReqHandleStore->ResetTsyReqHandle( iReqHandleType );
+
+        // Complete request
+        CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrCancel );
+#ifdef ADD_REMOVE_PACKETFILTER_DEFECT_FIXED  // search for this up from bottom of file
+        // We've finished with this value now. Clear it so it doesn't leak
+        //  up to any other instances of this method down the call stack
+        iReqHandleType = EMultimodePacketContextReqHandleUnknown;
+#endif
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::RegisterNotification
+// Register notification. RegisterNotification is called when the ETel Server
+// recognises that this notification is being posted for the first time on
+// this subsession object.It enables the TSY to "turn on" any regular 
+// notification messages that it may receive from DOS. If this object is
+// Dial-Up context only supported notification is 
+// EPacketContextNotifyStatusChange.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::RegisterNotification( 
+        const TInt aIpc )              
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::RegisterNotification. IPC: %d", aIpc );
+
+    TInt ret( KErrNone );
+
+    switch ( aIpc )
+        {
+        case EPacketContextNotifyConfigChanged:
+        case EPacketContextNotifyConnectionSpeedChange:
+            if ( iIsDialUpContext )
+                {
+                ret = KErrNotSupported;
+                break;
+                }
+        case EPacketContextNotifyStatusChange:          
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextNotifyConnectionInfoChange:                       
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+            break;
+        //case EPacketContextNotifyDataTransferred:
+        default:
+            // Not supported
+            ret = KErrNotSupported;
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::DeregisterNotification
+// Deregister notification. DeregisterNotification is called when the ETel
+// Server recognises that this notification will not be posted again because 
+// the last client to have a handle on this sub-session object has just closed 
+// the handle. It enables the TSY to "turn off" any regular notification
+// messages that it may receive from DOS. If this object is Dial-Up context
+// only supported notification is EPacketContextNotifyStatusChange.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::DeregisterNotification(
+        const TInt aIpc )                          
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeregisterNotification. IPC: %d", aIpc );
+
+    TInt ret( KErrNone );
+
+    switch ( aIpc )
+        {
+        case EPacketContextNotifyConfigChanged:
+        case EPacketContextNotifyConnectionSpeedChange:
+            if ( iIsDialUpContext )
+                {
+                ret = KErrNotSupported;
+                break;
+                }
+        case EPacketContextNotifyStatusChange:
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+        case EPacketContextNotifyConnectionInfoChange:                    
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+            break;
+        //case EPacketContextNotifyDataTransferred:
+        default:
+            // Not supported
+            ret = KErrNotSupported;
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::OpenNewObjectL
+// Create new QoS object and return a pointer to it.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CTelObject* CMmPacketContextTsy::OpenNewObjectL(    
+        TDes& aNewName )                          
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::OpenNewObjectL." );
+
+    // Each context can have only one QoS
+    if ( NULL != iQoSProfile )
+        {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectL. Leaves with: %d", KErrAlreadyExists );
+        User::Leave( KErrAlreadyExists );
+        }
+    
+    else
+        {
+        // Create new QoS object
+        iQoSProfile = CMmPacketQoSTsy::NewL( iMmPacketService, this );
+
+        iQoSProfileName.Copy( iContextName );
+        aNewName.Copy( iQoSProfileName );
+        }
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectL. aNewName: %S", &aNewName );
+
+    return iQoSProfile;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::OpenNewObjectByNameL
+// Return a pointer to QoS if it exists. The ETel Server calls this method 
+// after some client has requested to open existing QoS object. The TSY 
+// classes must not use this method.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CTelObject* CMmPacketContextTsy::OpenNewObjectByNameL(    
+        const TDesC& aName )                     
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectByNameL. aName: %S", &aName );
+
+    if ( aName != iQoSProfileName )
+        {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::OpenNewObjectByNameL. Leaves with: %d", KErrNotFound );
+        User::Leave( KErrNotFound );
+        }
+
+    return iQoSProfile;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::InitialiseContextL
+// This function initialises the context created previously.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::InitialiseContextL(RPacketContext::TDataChannelV2* aDataChannel )
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::InitialiseContextL." );
+
+    TInt ret( KErrNone );
+
+    // Initialise Context
+    ret = iMmPacketContextGsmWcdmaExt->InitialiseContextL(aDataChannel);
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle
+        iReqHandleType = EMultimodePacketContextInitialiseContext;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteInitialiseContext
+// Complete the asynchronous InitialiseContext request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteInitialiseContext(const TInt aResult )     
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteInitialiseContext. Error: %d", aResult );
+
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextInitialiseContext );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+               // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ActivateL
+// Activate a context. This function activates a context that has been
+// previously configured using the SetConfig() method from RPacketContext.
+// Once this function completes, the context will remain in an 'Activating'
+// state until PPP has been successfully negotiated between the phone & the
+// packet network gateway.Once PPP is negotiated, the context can be 
+// considered to be 'Activated'.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::ActivateL()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::ActivateL. Context name:%S", &iContextName );
+
+    TInt ret( KErrGprsServicesNotAllowed );
+
+    if ( iMmPacketService->IsActivationAllowed() )
+        {
+        // Call ActivateL
+        ret = iMmPacketContextGsmWcdmaExt->ActivateL();
+        }
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle
+        iReqHandleType = EMultimodePacketContextActivate;
+        }
+
+    return ret;        
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteActivate
+// Complete the asynchronous Activate request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteActivate( 
+        const TInt aResult )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteActivate. Error: %d", aResult );
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextActivate );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+       
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::Deactivate
+// Deactivate a context previously configured on the phone.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::DeactivateL()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeactivateL. Context name:%S", &iContextName );
+    TInt ret( KErrNone );
+
+    // Call Deactivate
+    ret = iMmPacketContextGsmWcdmaExt->DeactivateL();
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle
+        iReqHandleType = EMultimodePacketContextDeactivate;
+        }
+
+    return ret;  
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteDeactivate
+// Complete the asynchronous Deactivate request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteDeactivate( 
+        const TInt aResult )    
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteDeactivate. Error: %d", aResult );
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextDeactivate );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::DeleteL
+// Delete a context id previously created on the phone.
+// Note that although the context is considered as 'deleted', the 
+// client's RPacketContext subsession remains. To remove this, a client must
+// call Close() from RPacketContext.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::DeleteL()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::DeleteL. Context name:%S", &iContextName );
+
+    TInt ret( KErrNone );
+
+    // Call DeleteL
+    ret = iMmPacketContextGsmWcdmaExt->DeleteL();
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle
+        iReqHandleType = EMultimodePacketContextDelete;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteDelete
+// Complete the asynchronous Delete request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteDelete( 
+        const TInt aResult )        
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteDelete. Error: %d", aResult );
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextDelete );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetConfig
+// Requests the current configuration of the context.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetConfig(
+        const TTsyReqHandle aTsyReqHandle,    
+        TPacketDataConfigBase* const aConfig )  
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetConfig. Context name:%S", &iContextName );
+
+    // Get config
+    TInt ret = iMmPacketContextGsmWcdmaExt->GetConfig( aConfig );
+
+    // Complete Request
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetConnectionSpeed
+// Allows a client to get the current connection speed.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetConnectionSpeed(
+        const TTsyReqHandle aTsyReqHandle,         
+        TUint* const aRate ) 
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetConnectionSpeed. Context name: %S Connection Speed:%d bps",
+             &iContextName, iConnectionSpeed );
+
+    // Get current connection speed rate
+    *aRate = iConnectionSpeed;
+
+    // Complete Request
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetDataVolumeTransferred
+// This function gets the data volume transferred.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetDataVolumeTransferredL(
+        const TTsyReqHandle aTsyReqHandle,   
+        RPacketContext::TDataVolume* const aVolume ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetDataVolumeTransferredL. Context name:%S", &iContextName );
+
+    TInt ret( KErrNone );
+
+    if ( RPacketContext::EStatusDeleted != iContextStatus )
+        {
+        // Get data volume transferred
+        ret = iMmPacketContextGsmWcdmaExt->GetDataVolumeTransferredL();
+
+        if ( KErrNone == ret )
+            {
+            // Store pointer
+            iRetDataVolume = aVolume;
+            // Store the request handle type
+            iReqHandleType = EMultimodePacketContextGetDataVolumeTransferred;
+            }
+        }
+    else
+        {
+        // Get current data volume
+        *aVolume = iDataVolume;
+        // Complete request
+        CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteGetDataVolumeTransferred
+// Complete the asynchronous GetDataVolumeTransferred request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteGetDataVolumeTransferred( 
+        const TInt aResult )  
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteGetDataVolumeTransferred. Error: %d", aResult );
+
+    // Reset the req handle. Returns the deleted req handle
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextGetDataVolumeTransferred );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        
+        if ( KErrNone == aResult )
+            {
+            *iRetDataVolume = iDataVolume;
+            }
+
+        // Null ret pointer
+        iRetDataVolume = NULL;
+
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetLastErrorCause
+// This function retrieves the last error cause to have occurred.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetLastErrorCause(
+        const TTsyReqHandle aTsyReqHandle,  
+        TInt* const aError )    
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetLastErrorCause. Context name:%S Last error cause: %d",
+             &iContextName, iLastErrorCause );
+
+    *aError = iLastErrorCause;
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetProfileName
+// Allows a client to retrieve the name of the QoS profile. The QoS profile is
+// associated with the context. If no QoS profile has been defined by the
+// client, the name to be returned will be NULL.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetProfileName(
+        const TTsyReqHandle aTsyReqHandle, 
+        TInfoName* const aQoSProfile )  
+    {
+    if ( NULL != iQoSProfile )
+        {
+        *aQoSProfile = iQoSProfileName;
+        }
+    else
+        {
+        // QoS profile not found
+        aQoSProfile->Zero();
+        }
+
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetProfileName. Context name: %S QoS Profile Name: %S",
+             &iContextName, aQoSProfile );
+
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetStatus
+// Allows a client to get the current status of the context.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetStatus(
+        const TTsyReqHandle aTsyReqHandle,   
+        RPacketContext::TContextStatus* const aContextStatus )
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::GetStatus. Context name: %S Context Status:%d",
+             &iContextName, iContextStatus );
+    *aContextStatus = iContextStatus;
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::NotifyConfigChanged
+// Requests notification when configuration of context changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::NotifyConfigChanged(
+        TPacketDataConfigBase* const aConfig )  
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConfigChanged." );
+
+    // Call NotifyConfigChanged from extension
+    TInt ret = iMmPacketContextGsmWcdmaExt->NotifyConfigChanged( *aConfig );
+
+    if ( KErrNone == ret )
+        {
+        if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+            {
+            // Store pointer
+            iRetNotifyConfig = aConfig;
+            // Store req handle type
+            iReqHandleType = EMultimodePacketContextNotifyConfigChanged;
+            }
+
+        else
+            {
+            // Store pointer
+            iRetNotifyConfig2 = aConfig;
+            // Store req handle type
+            iReqHandleType = EMultimodePacketContextNotifyConfigChanged99;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteNotifyConfigChanged
+// Complete notification when the context configuration changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteNotifyConfigChanged()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteNotifyConfigChanged.  Context name:%S",
+                &iContextName );
+
+    // Get and reset req handle for R97/98 config notify
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextNotifyConfigChanged );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        // Get current configuration
+        iMmPacketContextGsmWcdmaExt->GetConfig( iRetNotifyConfig );
+        // Null ret pointer
+        iRetNotifyConfig = NULL;
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
+        }
+    
+    // Get and reset req handle for R99_R4 config notify
+    reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextNotifyConfigChanged99 );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        // Get current configuration
+        iMmPacketContextGsmWcdmaExt->GetConfig( iRetNotifyConfig2 );
+        // Null ret pointer
+        iRetNotifyConfig2 = NULL;
+        // Complete the client request
+       CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::NotifyConnectionSpeedChange
+// Requests notification when connection speed changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::NotifyConnectionSpeedChange(
+        TUint* const aRate )    
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConnectionSpeedChange." );
+
+    // Store pointer
+    iRetNotifyConnectionSpeed = aRate;
+    // Store req handle type
+    iReqHandleType = EMultimodePacketContextNotifyConnectionSpeedChange;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange
+// Complete the notification when the connection speed changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange(
+        TInt const aConnectionSpeed )
+    {
+    iConnectionSpeed = aConnectionSpeed;
+    
+    if ( iNotifyConnectionSpeed != iConnectionSpeed )
+        {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::CompleteNotifyConnectionSpeedChange. Context name:%S Connection Speed:%d bps",
+            &iContextName, iConnectionSpeed );
+
+        // Store the connection speed internally
+        iNotifyConnectionSpeed = iConnectionSpeed;
+
+        // Get and reset req handle
+        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            EMultimodePacketContextNotifyConnectionSpeedChange );
+
+        if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+            {
+            // Get current connection speed
+            *iRetNotifyConnectionSpeed = iNotifyConnectionSpeed;
+            // Null ret pointer
+            iRetNotifyConnectionSpeed = NULL;
+            // Complete the client request
+            CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::NotifyStatusChange
+// Requests notification when the status of the context changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::NotifyStatusChange(
+        RPacketContext::TContextStatus* const aContextStatus )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::NotifyStatusChange. Context name:%S", &iContextName );
+    iRetNotifyStatus = aContextStatus;
+    iReqHandleType = EMultimodePacketContextNotifyStatusChange;
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteNotifyStatusChange
+// Complete the notification when the context status changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteNotifyStatusChange(
+        const RPacketContext::TContextStatus aContextStatus ) 
+    {
+
+    if ( aContextStatus != iContextStatus )
+        {
+        iContextStatus = aContextStatus;
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::CompleteNotifyStatusChange. Context name: %S  Context status:%d",
+                    &iContextName, iContextStatus );
+
+        if ( RPacketContext::EStatusActive == iContextStatus ||
+             RPacketContext::EStatusInactive == iContextStatus ||
+             RPacketContext::EStatusDeleted == iContextStatus )
+            {
+            iMmPacketService->ContextStatusChanged( iContextStatus );
+            if( RPacketContext::EStatusDeleted == iContextStatus )
+                {
+                iMmPacketContextGsmWcdmaExt->SetContextStatusBeforeDeactivation(
+                    RPacketContext::EStatusDeleted );
+                }
+            }
+
+        // Reset req handle. Returns the deleted req handle
+        TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( 
+            EMultimodePacketContextNotifyStatusChange );
+
+        if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+            {
+            // Get current status
+            *iRetNotifyStatus = aContextStatus;
+            // Null ret pointer
+            iRetNotifyStatus = NULL;
+            // Complete the client request
+            CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::SetConfigL
+// Configure a context to the phone.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::SetConfigL(
+        TPacketDataConfigBase* const aConfig ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::SetConfigL. Context name:%S", &iContextName );
+
+    // Call SetConfigL
+    TInt ret = iMmPacketContextGsmWcdmaExt->SetConfigL( aConfig );
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle type
+        iReqHandleType = EMultimodePacketContextSetConfig;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteSetConfig
+// Complete the asynchronous SetConfig request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteSetConfig( 
+        const TInt aError,   
+        TBool aIsAddMediaAuthorizationCalled )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteSetConfig. Error: %d", aError );
+    
+    TTsyReqHandle reqHandle( EMultimodePacketContextReqHandleUnknown );
+    //if context exists eg. its name length is bigger than zero
+    if( 0 == CMmPacketContextTsy::HostCID().Length() )
+        {
+        reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            EMultimodePacketContextSetConfig );
+        }
+
+    else
+        {
+        if( aIsAddMediaAuthorizationCalled )
+        	{
+        	reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            				EMultimodePacketContextAddMediaAuthorization );	
+        	}
+		else
+			{       
+#ifdef USING_CTSY_DISPATCHER
+			// Distinguish between RemovePacketFilter and AddPacketFilter..
+			
+// There is a hang defect lurking here.
+//
+//	To show the defect, add and run the following test case (you could
+//         copy from CCTsyPacketServicesFU::TestUseCase0007L):
+//	- Add a packet filter. Wait for the request to complete.
+//  - Remove the packet filter. (don't wait for completion)
+//  - Add another packet filter.
+//  - Wait for removal to complete (WILL HANG but obviously shouldn't).
+//
+// The reason for this hang is that there's a single completion method
+// for both Add and Remove packet filter functions down in the CTSY
+// (dispatcher mode only).
+//
+// If a client calls RemovePacketFilter, then immediately
+// calls AddPacketFilter (before the RemovePacketFilter has
+// completed), the iReqHandleType data member will already have been
+// updated to be EMultimodePacketContextAddPacketFilter..
+// So the code under the else below (that searches for the
+// RemovePacketFilter reqHandle and completes it) will never get run.
+// Thus the RemovePacketFilter call will hang.
+//
+// Fixing this requires that some other variable (NOT iReqHandleType)
+//  is used to record that an add or a remove action is outstanding.
+//
+// When this defect has been addressed, please treat all the sections marked
+//  ADD_REMOVE_PACKETFILTER_DEFECT_FIXED above as defined, and delete any 
+//  else blocks. This will then assert that the iReqHandleType doesn't
+//  leak between calls. Which will protect us against any other such hang
+//  bugs in the future.
+// This is the change that I was trying to apply when I ran into this defect.
+//  See Perforce CL#1755436
+//     Rob Lundie Hill
+
+			if (iReqHandleType == EMultimodePacketContextRemovePacketFilter)
+				{
+				reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( EMultimodePacketContextRemovePacketFilter );
+				}
+			else
+				{
+				reqHandle = iTsyReqHandleStore->ResetTsyReqHandle( EMultimodePacketContextAddPacketFilter );
+				}
+#else			
+        	reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+            				EMultimodePacketContextAddPacketFilter );
+#endif //USING_CTSY_DISPATCHER																       
+        	}
+        }
+        
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+                            
+        // Complete the client request
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aError );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::SetDataVolume
+// Set the volume of transferred data.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::SetDataVolume(
+        const TInt /* aResult */,
+        RPacketContext::TDataVolume dataVolume )
+    {
+
+TFLOGSTRING( "TSY: CMmPacketContextTsy::SetDataVolume" );
+   
+    if ( dataVolume.iBytesSent < iDataVolume.iBytesSent )
+        {
+        // The value of sent data has turned around the 4 GB
+        iDataVolume.iOverflowCounterSent++;
+        }
+    iDataVolume.iBytesSent = dataVolume.iBytesSent;
+
+
+    if ( dataVolume.iBytesReceived < iDataVolume.iBytesReceived )
+        {
+        // The value of received data has turned around the 4 GB
+        iDataVolume.iOverflowCounterReceived++;
+        }
+    iDataVolume.iBytesReceived = dataVolume.iBytesReceived;
+       
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::SetLastErrorCause
+// Set the last error cause.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::SetLastErrorCause(
+        const TInt aErrorCause ) 
+    {
+    if ( RPacketContext::EStatusActivating == iContextStatus  || 
+     	RPacketContext::EStatusDeactivating == iContextStatus   )
+        {
+        iLastErrorCause =  aErrorCause;           
+        }
+
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::SetLastErrorCause.  aErrorCause: %d iLastErrorCause:%d", 
+             aErrorCause, iLastErrorCause );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ContextStatus
+// Return current context status.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+RPacketContext::TContextStatus CMmPacketContextTsy::ContextStatus() const
+    {
+    return iContextStatus;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ContextSuspended
+// Suspend the context.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::ContextSuspended()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::ContextSuspended. Context status before suspending: %d",
+                iContextStatus );
+
+    if ( ( RPacketContext::EStatusActivating == iContextStatus ) ||
+         ( RPacketContext::EStatusActive == iContextStatus ) ||
+         ( RPacketContext::EStatusDeactivating == iContextStatus ) )
+        {
+        iContextStatusBeforeSuspending = iContextStatus;
+        CMmPacketContextTsy::CompleteNotifyStatusChange( 
+									RPacketContext::EStatusSuspended );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ContextResumed
+// Resume the suspended context.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::ContextResumed()
+    {
+    if ( RPacketContext::EStatusSuspended == iContextStatus )
+        {
+        CMmPacketContextTsy::CompleteNotifyStatusChange( 
+									iContextStatusBeforeSuspending );
+        }
+
+    iContextStatusBeforeSuspending = RPacketContext::EStatusUnknown;
+
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::ContextResumed. Context status when resumed: %d",
+                iContextStatus );
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::PacketContextGsmWcdmaExt
+// Return pointer to the CMmPacketContextGsmWcdmaExt.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CMmPacketContextGsmWcdmaExt* CMmPacketContextTsy::PacketContextGsmWcdmaExt() const 
+    {
+    return iMmPacketContextGsmWcdmaExt;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::PacketQoSTsy
+// Return a pointer to the PacketQoSTsy.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CMmPacketQoSTsy* CMmPacketContextTsy::PacketQoSTsy() const 
+    {
+    return iQoSProfile;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::RemoveQoS
+// Remove the pointer to PacketQoSTsy.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::RemoveQoS()
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::RemoveQoS." );
+
+    iQoSProfile = NULL;
+    iQoSProfileName.Zero();
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ReqCompleted
+// Overloads CTelObject::ReqCompleted.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::ReqCompleted(
+        const TTsyReqHandle aTsyReqHandle, 
+        const TInt aError )   
+    {
+TFLOGSTRING3( "TSY: CMmPacketContextTsy::ReqCompleted. Handle:%d Error:%d", 
+             aTsyReqHandle, aError );
+
+    // Set last error cause
+    if ( KErrNone != aError )
+        {
+        iLastErrorCause = aError;
+        }
+
+    CTelObject::ReqCompleted( aTsyReqHandle, aError );
+
+    }
+
+#ifdef REQHANDLE_TIMER
+
+    
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::SetTypeOfResponse
+// Sets the type of response for a given request handle. Automatic mode 
+// includes an automatic response in case of non response from the DOS in a
+// specified time. This method is used only if REQHANDLE_TIMER is in use.
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::SetTypeOfResponse(
+        const TInt aReqHandleType,               
+        const TTsyReqHandle aTsyReqHandle )       
+    {
+    TInt timeOut( 0 );
+
+    // Set timeout by req handle type
+    switch ( aReqHandleType )
+        {
+        case EMultimodePacketContextInitialiseContext:
+            timeOut = KMmPacketContextInitialiseContextTimeOut;
+            break;
+        case EMultimodePacketContextSetConfig:
+            timeOut = KMmPacketContextSetConfigTimeOut;
+            break;
+        case EMultimodePacketContextActivate:
+            timeOut = KMmPacketContextActivateTimeOut;
+            break;
+        case EMultimodePacketContextDeactivate:
+            timeOut = KMmPacketContextDeactivateTimeOut;
+            break;
+        case EMultimodePacketContextDelete:
+            timeOut = KMmPacketContextDeleteTimeOut;
+            break;
+        case EMultimodePacketContextGetDataVolumeTransferred:
+            timeOut = KMmPacketContextGetDataVolumeTransferredTimeOut;
+            break;
+        case EMultimodePacketContextModifyActiveContext:
+            timeOut = KMmPacketContextModifyActiveContext;
+            break;
+        case EMultimodePacketContextAddMediaAuthorization:
+            timeOut = KMmPacketContextAddMediaAuthorization;
+            break;
+
+        // Can't use timer:
+        // - all notifications
+        //case EMultimodePacketContextNotifyConfigChanged:
+        //case EMultimodePacketContextNotifyConnectionSpeedChange:
+        //case EMultimodePacketContextNotifyStatusChange:
+        default:
+            // Do not use timer
+            iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, 
+                aTsyReqHandle );
+            break;
+        }
+
+    if ( 0 < timeOut )
+        {
+        // The timeout parameter is given in seconds.
+        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle, 
+            timeOut );
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::Complete
+// Completes the request due the timer expiration. This method is used only if
+// REQHANDLE_TIMER is in use. 
+// ---------------------------------------------------------------------------
+// 
+void CMmPacketContextTsy::Complete(
+        const TInt aReqHandleType,    
+        const TInt aError )        
+    {
+    // All possible TSY req handle types are listed in the
+    // switch case below.
+    switch ( aReqHandleType )
+        {
+        case EMultimodePacketContextInitialiseContext:
+            CMmPacketContextTsy::CompleteInitialiseContext( aError );
+            break;
+        case EMultimodePacketContextSetConfig:
+            CMmPacketContextTsy::CompleteSetConfig( aError );
+            break;
+        case EMultimodePacketContextActivate:
+            CMmPacketContextTsy::CompleteActivate( aError );
+            break;
+        case EMultimodePacketContextDeactivate:
+            CMmPacketContextTsy::CompleteDeactivate( aError );
+            break;
+        case EMultimodePacketContextDelete:
+            CMmPacketContextTsy::CompleteDelete( aError );
+            break;
+        case EMultimodePacketContextGetDataVolumeTransferred:
+            CMmPacketContextTsy::CompleteGetDataVolumeTransferred( aError );
+            break;
+        case EMultimodePacketContextModifyActiveContext:
+            CMmPacketContextTsy::CompleteModifyActiveContext( aError );
+            break;
+       	case EMultimodePacketContextAddMediaAuthorization:
+            CMmPacketContextTsy::CompleteSetConfig( aError, ETrue );
+            break;
+
+        // Can't use timer:
+        // - all notifications
+        //case EMultimodePacketContextNotifyConfigChanged:
+        //case EMultimodePacketContextNotifyConnectionSpeedChange:
+        //case EMultimodePacketContextNotifyStatusChange:
+        default:
+            CMmPacketContextTsy::ReqCompleted( iTsyReqHandleStore->
+				ResetTsyReqHandle( aReqHandleType ), aError );
+            break;
+        }
+
+    }
+
+#endif // REQHANDLE_TIMER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::IsDialUpContext
+// Return ETrue if this is dial-up context, otherwise EFalse.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//  
+TBool CMmPacketContextTsy::IsDialUpContext(  
+        const TInfoName* const aContextName ) const
+    {
+
+    TBool ret( EFalse );
+
+    if ( NULL != aContextName )
+        {
+        if ( *aContextName == iContextName )
+            {
+            ret = ETrue;
+            }
+        }
+    else
+        {
+        ret = iIsDialUpContext;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ResetDialUpContext
+// Reset the externally created dial-up context's data.
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::ResetDialUpContext()
+    {
+
+TFLOGSTRING( "TSY: CMmPacketContextTsy::ResetDialUpContext." );
+
+    iDataVolume.iOverflowCounterSent = 0;
+    iDataVolume.iBytesSent = 0;
+    iDataVolume.iOverflowCounterReceived = 0;
+    iDataVolume.iBytesReceived = 0;
+
+    iContextStatus = RPacketContext::EStatusInactive;
+
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::HostCID
+// Return the host context name
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInfoName CMmPacketContextTsy::HostCID() const
+    {
+
+    return iHostCID;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::AddPacketFilterL
+// This method sets up a packet filter in the TFT belonging to this context, 
+// with the Id specified in the packet filter information. New packet filter
+// info is stored in CMmPacketContextGsmWcdmaExt. This method takes care of 
+// adding packet filter info and storing this information.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::AddPacketFilterL(
+        const TTsyReqHandle aTsyReqHandle,  
+        TDes8* const aPacketFilter )  
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::AddPacketFilterL. Context name:%S", &iContextName );
+
+    TInt ret( KErrGeneral );
+
+    if ( (0 < iHostCID.Length()) && (aPacketFilter->Length() > 0) )
+        {
+        ret = iMmPacketContextGsmWcdmaExt->AddPacketFilterL( aPacketFilter );
+
+        if ( KErrNone == ret )
+            {
+            // if operation is meant for already configurated context
+            if ( RPacketContext::EStatusUnknown != ContextStatus() &&
+                RPacketContext::EStatusInactive != ContextStatus() ) 
+                {
+                // request must complete to client
+                CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+                }
+
+            // else operation is context configuration and complete method
+            // handles request complete
+            else
+                {
+                // Store the request handle type
+                iReqHandleType = EMultimodePacketContextAddPacketFilter;
+                }
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::RemovePacketFilter
+// This method removes a packet filter from the TFT belonging to this context.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+#ifndef USING_CTSY_DISPATCHER 
+TInt CMmPacketContextTsy::RemovePacketFilter(
+        const TTsyReqHandle aTsyReqHandle,  
+        TInt *aID ) 
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::RemovePacketFilter. RemovedFilter:%d", *aID );
+
+    TInt ret( KErrArgument );
+
+    // id must be value from 1 to 8
+    if ( 0 < *aID && 8 >= *aID )
+        {
+        ret = iMmPacketContextGsmWcdmaExt->RemovePacketFilter( *aID );
+        }
+
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+#endif // #ifndef USING_CTSY_DISPATCHER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ModifyActiveContextL
+// Invokes context modification.  This method invokes MS-initiated 
+// modification of an active context in the network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::ModifyActiveContextL()
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::ModifyActiveContextL. Context name:%S", &iContextName );
+    
+    TInt ret( KErrNotReady );
+
+    if ( RPacketContext::EStatusUnknown != ContextStatus() &&
+        RPacketContext::EStatusInactive != ContextStatus() &&
+        RPacketContext::EStatusDeleted != ContextStatus() )
+        {
+        ret = iMmPacketContextGsmWcdmaExt->ModifyActiveContextL();
+        }
+
+    if ( KErrNone == ret )
+        {
+        // Store the request handle type
+        iReqHandleType = EMultimodePacketContextModifyActiveContext;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteModifyActiveContext
+// When all Tft operations are done method completes to client 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteModifyActiveContext(
+        const TInt aResult )
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::CompleteModifyActiveContext. Context name:%S", &iContextName );
+
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+           EMultimodePacketContextModifyActiveContext );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+
+        CMmPacketContextTsy::ReqCompleted( reqHandle, aResult );
+
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::EnumeratePacketFilters
+// Returns number of defined packet filters to client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::EnumeratePacketFilters(
+        const TTsyReqHandle aTsyReqHandle,
+        TInt *aCount )  
+    {
+    TInt ret = iMmPacketContextGsmWcdmaExt->EnumeratePacketFilters ( aCount );
+
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetPacketFilterInfo
+// Gives information about the packet filter specified by aIndex
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetPacketFilterInfo(
+        const TTsyReqHandle aTsyReqHandle,   
+        TInt* aIndex,               
+        TPacketBase* aPacketFilterInfo )   
+    {
+    TInt ret = iMmPacketContextGsmWcdmaExt->GetPacketFilterInfo ( *aIndex, 
+        aPacketFilterInfo);
+
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetDnsInfo
+// This method gets the DNS info for Etel side request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetDnsInfo(
+        const TTsyReqHandle aTsyReqHandle,
+        TDes8* const aDnsInfo )
+    {
+    ASSERT(aDnsInfo);
+    
+    RPacketContext::TDnsInfoV2 temp;
+    RPacketContext::TTDnsInfoV2Pckg tempPckg(temp);
+
+	TInt ret = KErrArgument;
+	if (tempPckg.MaxLength() == aDnsInfo->MaxLength() )
+		{
+	    ret = iMmPacketContextGsmWcdmaExt->GetDnsInfoEtel( aDnsInfo );
+		}
+
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret ); 
+
+    return KErrNone;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ContextName
+// This method returns name of this context
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInfoName CMmPacketContextTsy::ContextName() const
+    {
+    return iContextName;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::AddMediaAuthorizationL
+// Makes request for adding authorization params to licensee tsy
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::AddMediaAuthorizationL(
+        const TTsyReqHandle aTsyReqHandle,  
+        TDes8* aMediaAuthorization )
+	{
+	
+	TInt ret( KErrArgument );
+	TBool hasMediaAuthorizationBeenCached=EFalse;
+	
+	
+	//Can be done only for secondary context
+	if ( 0 < iHostCID.Length() )
+		{
+				
+	    //Create buffers
+	    RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = 
+            RPacketContext::CTFTMediaAuthorizationV3::NewL();
+	    CleanupStack::PushL( mediaAuthorization );
+	    mediaAuthorization->InternalizeL( *aMediaAuthorization );
+	 	
+	 	ret = iMmPacketContextGsmWcdmaExt->AddMediaAuthorizationL( 
+            mediaAuthorization, hasMediaAuthorizationBeenCached);
+	 	
+	 	//Cleanup created object.  If it has been cached we do not delete it, because
+	 	// the array (cache) will be cleaned in the destructor
+	 	// If we were unable to cache it, we need to destroy it, otherwise we will leak 
+	 	// memory.
+	 	if(hasMediaAuthorizationBeenCached)
+	 		{
+	 		CleanupStack::Pop(mediaAuthorization);
+	 		}
+	 	else
+	 		{
+	 		CleanupStack::PopAndDestroy(mediaAuthorization);
+	 		}
+	 	
+	 	if ( KErrNone == ret )
+	    	{
+	        //
+	        if ( RPacketContext::EStatusUnknown != ContextStatus() &&
+	            RPacketContext::EStatusInactive != ContextStatus() ) 
+	            {
+	            // request must complete to client
+	            CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, KErrNone );
+	            }
+
+	        // else operation is context configuration and complete method
+	        // handles request complete
+	        else
+	            {
+	            // Store the request handle type
+	            iReqHandleType = EMultimodePacketContextAddMediaAuthorization;
+	            }
+	        }
+		}
+	return ret;
+	 	        
+ 	}
+        
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::RemoveMediaAuthorization
+// Makes request for removing authorization params to licensee tsy
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::RemoveMediaAuthorization(
+        const TTsyReqHandle aTsyReqHandle,  
+        RPacketContext::TAuthorizationToken* const aAuthorizationToken )
+	{
+	TInt ret( KErrGeneral );
+	
+	//Can be done only for secondary context
+	if ( 0 < iHostCID.Length() )
+		{
+	 	
+	 	ret = iMmPacketContextGsmWcdmaExt->RemoveMediaAuthorization( 
+            aAuthorizationToken );
+            
+		}
+		
+	CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+	
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::ContextType
+// return the context type
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CMmPacketContextTsy::TPacketContextType CMmPacketContextTsy::ContextType() const
+{
+	return EContextTypePacketContext;
+}
+
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::GetConnectionInfo
+// Gets the current connection information. 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::GetConnectionInfo(
+        const TTsyReqHandle aTsyReqHandle,    
+        TConnectionInfoBase* const aInfo )  
+    {
+TFLOGSTRING2( "TSY: CMmPacketContextTsy::GetConnectionInfo. Context name:%S", &iContextName );
+
+    // Get config
+    TInt ret = FillConnectionInfo( aInfo );
+
+    // Complete Request
+    CMmPacketContextTsy::ReqCompleted( aTsyReqHandle, ret );
+
+    return KErrNone;
+    }
+   
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::NotifyConnectionInfoChange
+// Requests notification when connection information changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::NotifyConnectionInfoChange(
+        TConnectionInfoBase* const aInfo )    
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::NotifyConnectionInfoChange." );
+
+    // Store pointer
+    iRetNotifyConnectionInfo = aInfo;
+    // Store req handle type
+    iReqHandleType = EMultimodePacketContextNotifyConnectionInfoChange;
+
+    return KErrNone;
+    }   
+    
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::CompleteNotifyConnectionInfoChange
+// Complete notification when the connection information changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextTsy::CompleteNotifyConnectionInfoChange(
+        TConnectionInfoBase* const aInfo )    
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::CompleteNotifyConnectionInfoChange." );
+
+    if ( NULL != aInfo &&
+        TConnectionInfoBase::KConnectionInfoV1 == aInfo->ExtensionId() )
+        {
+    	RPacketContext::TConnectionInfoV1 connectionInfoV1;
+        connectionInfoV1 = *( static_cast<RPacketContext::TConnectionInfoV1*>( aInfo ) );
+
+		//Check if connection info has changed
+		if ( iConnectionInfo.iHSDPACategory != connectionInfoV1.iHSDPACategory ||
+	         iConnectionInfo.iHSUPACategory != connectionInfoV1.iHSUPACategory ||
+	         iConnectionInfo.iValid != connectionInfoV1.iValid )
+			{
+			//Set new connection info
+			iConnectionInfo = connectionInfoV1;
+			
+			//Get req handle
+			TTsyReqHandle reqHandle = iTsyReqHandleStore->GetTsyReqHandle(
+        		EMultimodePacketContextNotifyConnectionInfoChange );
+        		
+			if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        		{	
+        		// Fill current connection information
+        		TInt ret = FillConnectionInfo( iRetNotifyConnectionInfo );
+			
+				if ( KErrNone == ret )
+					{
+					//reset req handle
+					iTsyReqHandleStore->ResetTsyReqHandle(
+        				EMultimodePacketContextNotifyConnectionInfoChange );
+        			// Null ret pointer
+        			iRetNotifyConnectionInfo = NULL;
+        			// Complete the client request
+        			CMmPacketContextTsy::ReqCompleted( reqHandle, KErrNone );
+					}
+        		}
+			}
+        }
+    }    
+    
+// ---------------------------------------------------------------------------
+// CMmPacketContextTsy::FillConnectionInfo
+// Fills the current connection information to TConnectionInfoXXX structure. 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextTsy::FillConnectionInfo(   
+        TConnectionInfoBase* const aInfo )  
+    {
+TFLOGSTRING( "TSY: CMmPacketContextTsy::FillConnectionInfo" );
+
+    TInt ret = KErrNone;
+
+    if ( NULL != aInfo &&
+        TConnectionInfoBase::KConnectionInfoV1 == aInfo->ExtensionId() )
+        {
+        //Set connection info to ETel side memory
+        *( static_cast<RPacketContext::TConnectionInfoV1*>( aInfo ) ) = iConnectionInfo;        
+        }
+    else
+        {
+        ret = KErrArgument;    
+        }
+
+    return ret;
+    }        
+#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+//  End of File