telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmPacketTsy.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmPacketTsy.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmPacketTsy.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,574 +1,574 @@
-// 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 <ctsy/tflogger.h>
-
-#include "CMmCustomTsy.h"
-#include "CMmPacketTsy.h"
-#include "Cmmpacketcontexttsy.h"
-#include "Cmmpacketcontextlist.h"
-
-// ======== MEMBER FUNCTIONS ========
-
-CMmPacketTsy::CMmPacketTsy()
-    {
-    }
-
-void CMmPacketTsy::ConstructL()
-    {
-#ifdef REQHANDLE_TIMER   
-    // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( iMmCustomTsy,
-        iMmPhone, EMultimodePacketMaxNumOfRequests, iPacketReqHandles );
-#else
-    // Create req handle store
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
-        EMultimodePacketMaxNumOfRequests, iPacketReqHandles );
-#endif // REQHANDLE_TIMER
-
-    iGprsInformationPckg = NULL;
-    }
-
-CMmPacketTsy* CMmPacketTsy::NewL(
-    CMmCustomTsy* aMmCustomTsy, 
-    CMmPhoneTsy* aMmPhone )
-    {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::NewL" );
-    CMmPacketTsy* mmPacketTsy = new ( ELeave ) CMmPacketTsy();
-    CleanupStack::PushL( mmPacketTsy );
-    mmPacketTsy->iMmCustomTsy = aMmCustomTsy;
-    mmPacketTsy->iMmPhone = aMmPhone;
-    mmPacketTsy->ConstructL();
-    CleanupStack::Pop();
-
-    return mmPacketTsy;
-    }
-
-CMmPacketTsy::~CMmPacketTsy()
-    {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::~CMmPacketTsy" );
-    delete iTsyReqHandleStore;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::Init
-// Initialisation method that is called from ETel Server.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketTsy::Init()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::RegisterNotification
-// 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.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::RegisterNotification(
-    const TInt aIpc )
-    {
-    TInt ret( KErrNotSupported );
-
-    if ( ECustomNotifyEGprsInfoChange == aIpc )
-        {
-        ret = KErrNone;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::DeregisterNotification
-// 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.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::DeregisterNotification( 
-    const TInt aIpc )
-    {
-    TInt ret( KErrNotSupported );
-
-    if ( ECustomNotifyEGprsInfoChange == aIpc )
-        {
-        ret = KErrNone;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::SupportingIPC
-// Use switch to check if given IPC is supported
-// in case IPC supported
-//     return ETrue
-// in case IPC not supported
-//     return EFalse
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmPacketTsy::SupportingIPC( 
-    TInt aIpc )
-    {
-    TBool ret( EFalse );
-    switch ( aIpc )
-        {
-        // from CustomApi
-        case ECustomNotifyEGprsInfoChange:
-        case ECustomGetEGprsInfo:
-        case ECustomSetAlwaysOnMode:
-            ret = ETrue;
-            break;
-        default:
-            ret = EFalse;
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::DoExtFuncL
-// Dispatches extension function requests.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::DoExtFuncL(
-    const TTsyReqHandle aTsyReqHandle, 
-    const TInt aIpc, 
-    const TDataPackage& aPackage )
-    {
-TFLOGSTRING3( "CustomTSY: CMmPacketTsy::DoExtFuncL - IPC:%d Handle:%d", aIpc, aTsyReqHandle );
-    TInt ret( KErrNotSupported );
-
-    switch ( aIpc )
-        {
-        case ECustomNotifyEGprsInfoChange:
-            ret = NotifyEGprsInfoChange( aTsyReqHandle, aPackage.Des1n() );
-            break;
-        case ECustomGetEGprsInfo:
-            ret = GetEGprsInfo( aTsyReqHandle, aPackage.Des1n() );
-            break;
-        case ECustomSetAlwaysOnMode:
-TFLOGSTRING( "TSY:CMmPacketTsy::DoExtFuncL ECustomSetAlwaysOnMode");
-            ret = SetAlwaysOnL( aTsyReqHandle,
-               ( REINTERPRET_CAST( RMmCustomAPI::TSetAlwaysOnMode*,
-                              					aPackage.Ptr1() ) ) );
-        default:
-            break;
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::ReqModeL
-// Returns request mode for given IPC.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CTelObject::TReqMode CMmPacketTsy::ReqModeL( 
-    const TInt aIpc )
-    {
-    CTelObject::TReqMode reqMode( 0 );
-
-    switch ( aIpc )
-        {
-        // Etel Server takes care of flow control. Several simultaneous
-        // requests allowed.
-
-        // 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.
-
-        // Methods that can probably take a long time and cannot therefore be
-        // flow controlled. Solution: All these methods must check req handle
-        // table before handling the request. If the request table indicates
-        // that same method has been called and has not been completed, the
-        // method should return KErrServerBusy.
-        case ECustomGetEGprsInfo:
-        case ECustomSetAlwaysOnMode:
-            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 ECustomNotifyEGprsInfoChange:
-            reqMode = KReqModeMultipleCompletionEnabled |
-                KReqModeRePostImmediately;
-            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.
-
-        //Other cases
-            //reqMode = KReqModeFlowControlObeyed;
-            //break;
-
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    return reqMode;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::NumberOfSlotsL
-// Returns number of slots to be used for given IPC.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::NumberOfSlotsL(
-    const TInt aIpc )
-    {
-    TInt numberOfSlots( KMmCustomDefaultSlots );
-
-    switch ( aIpc )
-        {
-        // from CustomApi
-        case ECustomNotifyEGprsInfoChange: 
-        case ECustomGetEGprsInfo:
-        case ECustomSetAlwaysOnMode:
-            break;
-        default:
-            // Unknown or invalid IPC
-            User::Leave( KErrNotSupported );
-            break;
-        }
-
-    return numberOfSlots;
-    }
-    
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::CancelService
-// This function is called to cancel the outstanding request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::CancelService(
-    const TInt aIpc, 
-    const TTsyReqHandle aTsyReqHandle )
-    {
-TFLOGSTRING2( "CustomTSY: CMmPacketTsy::CancelService IPC:%d", aIpc );
-    TInt ret( KErrNone );
-
-    // Req handle type
-    TPacketRequestType reqHandletype( 
-        EMultimodePacketContextReqHandleUnknown );
-
-    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 ECustomGetEGprsInfo:
-            break;
-            
-        case ECustomSetAlwaysOnMode:
-        	 CancelSetAlwaysOn ( aTsyReqHandle );
-            break;
-
-        // Notification Cancels, no special requirements.
-        case ECustomNotifyEGprsInfoChange:
-            iGprsInformationPckg = NULL;
-            reqHandletype = EMultimodePacketContextNotifyEGprsInfoChange;
-            break;
-        // Cancel methods that are not supported
-        // Default case
-        default:
-            ret = KErrNotSupported;
-            break;
-        }
-
-    if ( reqHandletype != EMultimodePacketContextReqHandleUnknown )
-        {
-        // Reset tsy request handle
-        iTsyReqHandleStore->ResetTsyReqHandle( reqHandletype );
-
-        // Complete request to client with KErrCancel
-        ReqCompleted( aTsyReqHandle, KErrCancel );
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::ReqCompleted
-// Overloads CTelObject::ReqCompleted for logging purposes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketTsy::ReqCompleted(
-    const TTsyReqHandle aTsyReqHandle, 
-    const TInt aError )
-    {
-TFLOGSTRING3( "CustomTSY: CMmPacketTsy::ReqCompleted Handle:%d Error:%d", aTsyReqHandle, aError );
-    iMmCustomTsy->ReqCompleted( aTsyReqHandle, aError );
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::NotifyEGprsInfoChange
-// Request notification when EGPRS support changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::NotifyEGprsInfoChange(
-    const TTsyReqHandle aTsyReqHandle, 
-    TDes8* aGprsInformation )
-    {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::NotifyEGprsInfoChange" );
-
-    RMmCustomAPI::TGprsInformation temp;
-	RMmCustomAPI::TGprsInformationPckg tempPckg(temp);
-
-	TInt expectedLength = tempPckg.MaxLength();
-	TInt paramLength = aGprsInformation->MaxLength();
-	
-	TInt ret = KErrArgument;
-	if (expectedLength == paramLength)
-		{
-	    // Store pointer of Gprs information package
-	    iGprsInformationPckg = 
-	        ( RMmCustomAPI::TGprsInformationPckg* ) aGprsInformation;
-
-	    // Store request handle
-	    iTsyReqHandleStore->SetTsyReqHandle( 
-	        EMultimodePacketContextNotifyEGprsInfoChange, aTsyReqHandle );
-		ret = KErrNone;
-		}
-			
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::GetEGprsInfo
-// Informs client about EGPRS information.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::GetEGprsInfo(
-    const TTsyReqHandle aTsyReqHandle, 
-    TDes8* aGprsInformation )
-    {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo" );
-
-    RMmCustomAPI::TGprsInformation temp;
-	RMmCustomAPI::TGprsInformationPckg tempPckg(temp);
-
-	TInt expectedLength = tempPckg.MaxLength();
-	TInt paramLength = aGprsInformation->MaxLength();
-	
-	TInt ret = KErrArgument;
-	if (expectedLength == paramLength && iMmCustomTsy)
-		{			
-	    RMmCustomAPI::TGprsInformationPckg* gprsInformationPckg =
-	        ( RMmCustomAPI::TGprsInformationPckg* ) aGprsInformation;
-
-	    // Unpack gprsInformationPckg
-	    RMmCustomAPI::TGprsInformation& gprsInformation = 
-	        ( *gprsInformationPckg )();
-	    TBool edgeGprsSupportInCell;
-	 
-	    if ( !iMmCustomTsy->Phone() 
-	    	   || !iMmCustomTsy->Phone()->PacketDataSession() 
-	    	   || !iMmCustomTsy->Phone()->PacketDataSession()->
-	    		    ActivePacketServiceExtension() )
-	        {
-	        // returns false if EGPRS support failed
-	       	edgeGprsSupportInCell = EFalse;
-	        }
-	    else
-	        {
-	        // returns information if EGPRS connection supported
-	    	edgeGprsSupportInCell = iMmCustomTsy->Phone()->PacketDataSession()->
-	            ActivePacketServiceExtension()->EGprsSupportInCell();
-	        }
-
-	    // if gprsSupportInCell is ETrue -> cell is supporting EGPRS connection 
-	    if ( edgeGprsSupportInCell )
-	        {
-	TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo  RMmCustomAPI::EEdgeGprs" );
-	        gprsInformation.iGprsInfo = RMmCustomAPI::EEdgeGprs; 
-	        }
-
-	    // else EGPRS connection is not supported
-	    else 
-	        {
-	TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo  RMmCustomAPI::EGprs" );
-	        gprsInformation.iGprsInfo = RMmCustomAPI::EGprs;
-	        }
-
-		ret = KErrNone;
-		
-	    // Complete the client request
-	    ReqCompleted( aTsyReqHandle, ret );
-		}
-		
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::CompleteNotifyEGprsInfoChange
-// Completes EGPRS notification request to Client.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketTsy::CompleteNotifyEGprsInfoChange(
-    const TBool aGprsSupportInCell )
-    {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange" );
-    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
-        EMultimodePacketContextNotifyEGprsInfoChange );
-
-    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
-        {
-        // Unpack iGprsInformationPckg
-        RMmCustomAPI::TGprsInformation& gprsInformation = 
-            ( *iGprsInformationPckg )();
-
-        // if aGprsSupportInCell is ETrue -> cell is supporting edge GPRS
-        if ( aGprsSupportInCell )
-            {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange  RMmCustomAPI::EEdgeGprs" );
-            gprsInformation.iGprsInfo = RMmCustomAPI::EEdgeGprs;
-            }
-
-        // if aGprsSupportInCell is EFalse -> cell is not supporting edge GPRS
-        else 
-            {
-TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange  RMmCustomAPI::EGprs" );
-            gprsInformation.iGprsInfo = RMmCustomAPI::EGprs;
-            }
-                    
-        iGprsInformationPckg = NULL;
-
-        // Complete the client request
-        ReqCompleted( reqHandle, KErrNone );
-        }
-    }
-    
-//-----------------------------------------------------------------------------
-// CMmPacketTsy::SetAlwaysOnL
-// Requests Set Always On with mode given as parameter aMode
-// (other items were commented in a header).
-//-----------------------------------------------------------------------------
-//
-TInt CMmPacketTsy::SetAlwaysOnL( 
-	TTsyReqHandle aTsyReqHandle,
-	RMmCustomAPI::TSetAlwaysOnMode* aMode )
-    {
-TFLOGSTRING2( "CMmPacketTsy::SetAlwaysOn Reg Handle = %d", aTsyReqHandle );
-	
-	TInt ret( KErrGeneral );
-	
-											
-	//Save requested mode 
-	iAllwaysOnMode = ( *aMode );
-	//Get packetdata session
-	CMmPacketServiceTsy* packetDataSession = iMmPhone->PacketDataSession();
-	
-    if ( NULL != packetDataSession )
-        {
-        //request set allways on
-        ret = packetDataSession->SetAlwaysOnL( aTsyReqHandle, iAllwaysOnMode );
-        }
-    else
-        {
-TFLOGSTRING( "CMmPacketTsy::SetAlwaysOn packetDataSession is NULL " );		
-        }	
-		
-    return ret;
-    }
-
-//-----------------------------------------------------------------------------
-// CMmPacketTsy::CompleteSetAlwaysOn
-// Completes Set Always On request 
-// (other items were commented in a header).
-//-----------------------------------------------------------------------------
-//
-void CMmPacketTsy::CompleteSetAlwaysOn( 
-	TTsyReqHandle aReqHandle, 
-	TInt aError )
-    {
-TFLOGSTRING( "CMmPacketTsy::CompleteSetAlwaysOn" );
-
-	ReqCompleted( aReqHandle, aError );
-
-    }
-
-//-----------------------------------------------------------------------------
-// CMmPacketTsy::CancelSetAlwaysOn
-// Cancels Set Always On request
-// (other items were commented in a header).
-//-----------------------------------------------------------------------------
-//
-void CMmPacketTsy::CancelSetAlwaysOn( TTsyReqHandle aReqHandle )
-	{
-TFLOGSTRING( "CMmPacketTsy::CancelSetAlwaysOn" );
-	
-	//Direct request to Service Tsy
-	iMmPhone->PacketDataSession()->CancelSetAlwaysOn( aReqHandle );
-	
-	}
-	
-#ifdef REQHANDLE_TIMER
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::SetTypeOfResponse
-// Sets the type of response for a given handle.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketTsy::SetTypeOfResponse(
-    const TInt /*aReqHandleType*/,
-    const TTsyReqHandle /*aTsyReqHandle*/)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CMmPacketTsy::Complete
-// Completes the request due the timer expiration
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketTsy::Complete(
-    TInt /*aReqHandleType*/, 
-    TInt /*aError*/ )
-    {
-    }
-#endif // REQHANDLE_TIMER
-
-
-//  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 <ctsy/tflogger.h>
+
+#include "CMmCustomTsy.h"
+#include "CMmPacketTsy.h"
+#include "Cmmpacketcontexttsy.h"
+#include "Cmmpacketcontextlist.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketTsy::CMmPacketTsy()
+    {
+    }
+
+void CMmPacketTsy::ConstructL()
+    {
+#ifdef REQHANDLE_TIMER   
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( iMmCustomTsy,
+        iMmPhone, EMultimodePacketMaxNumOfRequests, iPacketReqHandles );
+#else
+    // Create req handle store
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
+        EMultimodePacketMaxNumOfRequests, iPacketReqHandles );
+#endif // REQHANDLE_TIMER
+
+    iGprsInformationPckg = NULL;
+    }
+
+CMmPacketTsy* CMmPacketTsy::NewL(
+    CMmCustomTsy* aMmCustomTsy, 
+    CMmPhoneTsy* aMmPhone )
+    {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::NewL" );
+    CMmPacketTsy* mmPacketTsy = new ( ELeave ) CMmPacketTsy();
+    CleanupStack::PushL( mmPacketTsy );
+    mmPacketTsy->iMmCustomTsy = aMmCustomTsy;
+    mmPacketTsy->iMmPhone = aMmPhone;
+    mmPacketTsy->ConstructL();
+    CleanupStack::Pop();
+
+    return mmPacketTsy;
+    }
+
+CMmPacketTsy::~CMmPacketTsy()
+    {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::~CMmPacketTsy" );
+    delete iTsyReqHandleStore;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::Init
+// Initialisation method that is called from ETel Server.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketTsy::Init()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::RegisterNotification
+// 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.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::RegisterNotification(
+    const TInt aIpc )
+    {
+    TInt ret( KErrNotSupported );
+
+    if ( ECustomNotifyEGprsInfoChange == aIpc )
+        {
+        ret = KErrNone;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::DeregisterNotification
+// 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.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::DeregisterNotification( 
+    const TInt aIpc )
+    {
+    TInt ret( KErrNotSupported );
+
+    if ( ECustomNotifyEGprsInfoChange == aIpc )
+        {
+        ret = KErrNone;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::SupportingIPC
+// Use switch to check if given IPC is supported
+// in case IPC supported
+//     return ETrue
+// in case IPC not supported
+//     return EFalse
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmPacketTsy::SupportingIPC( 
+    TInt aIpc )
+    {
+    TBool ret( EFalse );
+    switch ( aIpc )
+        {
+        // from CustomApi
+        case ECustomNotifyEGprsInfoChange:
+        case ECustomGetEGprsInfo:
+        case ECustomSetAlwaysOnMode:
+            ret = ETrue;
+            break;
+        default:
+            ret = EFalse;
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::DoExtFuncL
+// Dispatches extension function requests.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::DoExtFuncL(
+    const TTsyReqHandle aTsyReqHandle, 
+    const TInt aIpc, 
+    const TDataPackage& aPackage )
+    {
+TFLOGSTRING3( "CustomTSY: CMmPacketTsy::DoExtFuncL - IPC:%d Handle:%d", aIpc, aTsyReqHandle );
+    TInt ret( KErrNotSupported );
+
+    switch ( aIpc )
+        {
+        case ECustomNotifyEGprsInfoChange:
+            ret = NotifyEGprsInfoChange( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case ECustomGetEGprsInfo:
+            ret = GetEGprsInfo( aTsyReqHandle, aPackage.Des1n() );
+            break;
+        case ECustomSetAlwaysOnMode:
+TFLOGSTRING( "TSY:CMmPacketTsy::DoExtFuncL ECustomSetAlwaysOnMode");
+            ret = SetAlwaysOnL( aTsyReqHandle,
+               ( REINTERPRET_CAST( RMmCustomAPI::TSetAlwaysOnMode*,
+                              					aPackage.Ptr1() ) ) );
+        default:
+            break;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::ReqModeL
+// Returns request mode for given IPC.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CTelObject::TReqMode CMmPacketTsy::ReqModeL( 
+    const TInt aIpc )
+    {
+    CTelObject::TReqMode reqMode( 0 );
+
+    switch ( aIpc )
+        {
+        // Etel Server takes care of flow control. Several simultaneous
+        // requests allowed.
+
+        // 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.
+
+        // Methods that can probably take a long time and cannot therefore be
+        // flow controlled. Solution: All these methods must check req handle
+        // table before handling the request. If the request table indicates
+        // that same method has been called and has not been completed, the
+        // method should return KErrServerBusy.
+        case ECustomGetEGprsInfo:
+        case ECustomSetAlwaysOnMode:
+            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 ECustomNotifyEGprsInfoChange:
+            reqMode = KReqModeMultipleCompletionEnabled |
+                KReqModeRePostImmediately;
+            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.
+
+        //Other cases
+            //reqMode = KReqModeFlowControlObeyed;
+            //break;
+
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+
+    return reqMode;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::NumberOfSlotsL(
+    const TInt aIpc )
+    {
+    TInt numberOfSlots( KMmCustomDefaultSlots );
+
+    switch ( aIpc )
+        {
+        // from CustomApi
+        case ECustomNotifyEGprsInfoChange: 
+        case ECustomGetEGprsInfo:
+        case ECustomSetAlwaysOnMode:
+            break;
+        default:
+            // Unknown or invalid IPC
+            User::Leave( KErrNotSupported );
+            break;
+        }
+
+    return numberOfSlots;
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::CancelService
+// This function is called to cancel the outstanding request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::CancelService(
+    const TInt aIpc, 
+    const TTsyReqHandle aTsyReqHandle )
+    {
+TFLOGSTRING2( "CustomTSY: CMmPacketTsy::CancelService IPC:%d", aIpc );
+    TInt ret( KErrNone );
+
+    // Req handle type
+    TPacketRequestType reqHandletype( 
+        EMultimodePacketContextReqHandleUnknown );
+
+    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 ECustomGetEGprsInfo:
+            break;
+            
+        case ECustomSetAlwaysOnMode:
+        	 CancelSetAlwaysOn ( aTsyReqHandle );
+            break;
+
+        // Notification Cancels, no special requirements.
+        case ECustomNotifyEGprsInfoChange:
+            iGprsInformationPckg = NULL;
+            reqHandletype = EMultimodePacketContextNotifyEGprsInfoChange;
+            break;
+        // Cancel methods that are not supported
+        // Default case
+        default:
+            ret = KErrNotSupported;
+            break;
+        }
+
+    if ( reqHandletype != EMultimodePacketContextReqHandleUnknown )
+        {
+        // Reset tsy request handle
+        iTsyReqHandleStore->ResetTsyReqHandle( reqHandletype );
+
+        // Complete request to client with KErrCancel
+        ReqCompleted( aTsyReqHandle, KErrCancel );
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::ReqCompleted
+// Overloads CTelObject::ReqCompleted for logging purposes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketTsy::ReqCompleted(
+    const TTsyReqHandle aTsyReqHandle, 
+    const TInt aError )
+    {
+TFLOGSTRING3( "CustomTSY: CMmPacketTsy::ReqCompleted Handle:%d Error:%d", aTsyReqHandle, aError );
+    iMmCustomTsy->ReqCompleted( aTsyReqHandle, aError );
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::NotifyEGprsInfoChange
+// Request notification when EGPRS support changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::NotifyEGprsInfoChange(
+    const TTsyReqHandle aTsyReqHandle, 
+    TDes8* aGprsInformation )
+    {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::NotifyEGprsInfoChange" );
+
+    RMmCustomAPI::TGprsInformation temp;
+	RMmCustomAPI::TGprsInformationPckg tempPckg(temp);
+
+	TInt expectedLength = tempPckg.MaxLength();
+	TInt paramLength = aGprsInformation->MaxLength();
+	
+	TInt ret = KErrArgument;
+	if (expectedLength == paramLength)
+		{
+	    // Store pointer of Gprs information package
+	    iGprsInformationPckg = 
+	        ( RMmCustomAPI::TGprsInformationPckg* ) aGprsInformation;
+
+	    // Store request handle
+	    iTsyReqHandleStore->SetTsyReqHandle( 
+	        EMultimodePacketContextNotifyEGprsInfoChange, aTsyReqHandle );
+		ret = KErrNone;
+		}
+			
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::GetEGprsInfo
+// Informs client about EGPRS information.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::GetEGprsInfo(
+    const TTsyReqHandle aTsyReqHandle, 
+    TDes8* aGprsInformation )
+    {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo" );
+
+    RMmCustomAPI::TGprsInformation temp;
+	RMmCustomAPI::TGprsInformationPckg tempPckg(temp);
+
+	TInt expectedLength = tempPckg.MaxLength();
+	TInt paramLength = aGprsInformation->MaxLength();
+	
+	TInt ret = KErrArgument;
+	if (expectedLength == paramLength && iMmCustomTsy)
+		{			
+	    RMmCustomAPI::TGprsInformationPckg* gprsInformationPckg =
+	        ( RMmCustomAPI::TGprsInformationPckg* ) aGprsInformation;
+
+	    // Unpack gprsInformationPckg
+	    RMmCustomAPI::TGprsInformation& gprsInformation = 
+	        ( *gprsInformationPckg )();
+	    TBool edgeGprsSupportInCell;
+	 
+	    if ( !iMmCustomTsy->Phone() 
+	    	   || !iMmCustomTsy->Phone()->PacketDataSession() 
+	    	   || !iMmCustomTsy->Phone()->PacketDataSession()->
+	    		    ActivePacketServiceExtension() )
+	        {
+	        // returns false if EGPRS support failed
+	       	edgeGprsSupportInCell = EFalse;
+	        }
+	    else
+	        {
+	        // returns information if EGPRS connection supported
+	    	edgeGprsSupportInCell = iMmCustomTsy->Phone()->PacketDataSession()->
+	            ActivePacketServiceExtension()->EGprsSupportInCell();
+	        }
+
+	    // if gprsSupportInCell is ETrue -> cell is supporting EGPRS connection 
+	    if ( edgeGprsSupportInCell )
+	        {
+	TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo  RMmCustomAPI::EEdgeGprs" );
+	        gprsInformation.iGprsInfo = RMmCustomAPI::EEdgeGprs; 
+	        }
+
+	    // else EGPRS connection is not supported
+	    else 
+	        {
+	TFLOGSTRING( "CustomTSY: CMmPacketTsy::GetEGprsInfo  RMmCustomAPI::EGprs" );
+	        gprsInformation.iGprsInfo = RMmCustomAPI::EGprs;
+	        }
+
+		ret = KErrNone;
+		
+	    // Complete the client request
+	    ReqCompleted( aTsyReqHandle, ret );
+		}
+		
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::CompleteNotifyEGprsInfoChange
+// Completes EGPRS notification request to Client.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketTsy::CompleteNotifyEGprsInfoChange(
+    const TBool aGprsSupportInCell )
+    {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange" );
+    TTsyReqHandle reqHandle = iTsyReqHandleStore->ResetTsyReqHandle(
+        EMultimodePacketContextNotifyEGprsInfoChange );
+
+    if ( EMultimodePacketContextReqHandleUnknown != reqHandle )
+        {
+        // Unpack iGprsInformationPckg
+        RMmCustomAPI::TGprsInformation& gprsInformation = 
+            ( *iGprsInformationPckg )();
+
+        // if aGprsSupportInCell is ETrue -> cell is supporting edge GPRS
+        if ( aGprsSupportInCell )
+            {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange  RMmCustomAPI::EEdgeGprs" );
+            gprsInformation.iGprsInfo = RMmCustomAPI::EEdgeGprs;
+            }
+
+        // if aGprsSupportInCell is EFalse -> cell is not supporting edge GPRS
+        else 
+            {
+TFLOGSTRING( "CustomTSY: CMmPacketTsy::CompleteNotifyEGprsInfoChange  RMmCustomAPI::EGprs" );
+            gprsInformation.iGprsInfo = RMmCustomAPI::EGprs;
+            }
+                    
+        iGprsInformationPckg = NULL;
+
+        // Complete the client request
+        ReqCompleted( reqHandle, KErrNone );
+        }
+    }
+    
+//-----------------------------------------------------------------------------
+// CMmPacketTsy::SetAlwaysOnL
+// Requests Set Always On with mode given as parameter aMode
+// (other items were commented in a header).
+//-----------------------------------------------------------------------------
+//
+TInt CMmPacketTsy::SetAlwaysOnL( 
+	TTsyReqHandle aTsyReqHandle,
+	RMmCustomAPI::TSetAlwaysOnMode* aMode )
+    {
+TFLOGSTRING2( "CMmPacketTsy::SetAlwaysOn Reg Handle = %d", aTsyReqHandle );
+	
+	TInt ret( KErrGeneral );
+	
+											
+	//Save requested mode 
+	iAllwaysOnMode = ( *aMode );
+	//Get packetdata session
+	CMmPacketServiceTsy* packetDataSession = iMmPhone->PacketDataSession();
+	
+    if ( NULL != packetDataSession )
+        {
+        //request set allways on
+        ret = packetDataSession->SetAlwaysOnL( aTsyReqHandle, iAllwaysOnMode );
+        }
+    else
+        {
+TFLOGSTRING( "CMmPacketTsy::SetAlwaysOn packetDataSession is NULL " );		
+        }	
+		
+    return ret;
+    }
+
+//-----------------------------------------------------------------------------
+// CMmPacketTsy::CompleteSetAlwaysOn
+// Completes Set Always On request 
+// (other items were commented in a header).
+//-----------------------------------------------------------------------------
+//
+void CMmPacketTsy::CompleteSetAlwaysOn( 
+	TTsyReqHandle aReqHandle, 
+	TInt aError )
+    {
+TFLOGSTRING( "CMmPacketTsy::CompleteSetAlwaysOn" );
+
+	ReqCompleted( aReqHandle, aError );
+
+    }
+
+//-----------------------------------------------------------------------------
+// CMmPacketTsy::CancelSetAlwaysOn
+// Cancels Set Always On request
+// (other items were commented in a header).
+//-----------------------------------------------------------------------------
+//
+void CMmPacketTsy::CancelSetAlwaysOn( TTsyReqHandle aReqHandle )
+	{
+TFLOGSTRING( "CMmPacketTsy::CancelSetAlwaysOn" );
+	
+	//Direct request to Service Tsy
+	iMmPhone->PacketDataSession()->CancelSetAlwaysOn( aReqHandle );
+	
+	}
+	
+#ifdef REQHANDLE_TIMER
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::SetTypeOfResponse
+// Sets the type of response for a given handle.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketTsy::SetTypeOfResponse(
+    const TInt /*aReqHandleType*/,
+    const TTsyReqHandle /*aTsyReqHandle*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CMmPacketTsy::Complete
+// Completes the request due the timer expiration
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketTsy::Complete(
+    TInt /*aReqHandleType*/, 
+    TInt /*aError*/ )
+    {
+    }
+#endif // REQHANDLE_TIMER
+
+
+//  End of File
+