telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmSimLockTsy.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmSimLockTsy.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmcustomtsy/CMmSimLockTsy.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,471 +1,471 @@
-// 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 "CMmSimLockTsy.h"
-#include <ctsy/tflogger.h>
-#include <ctsy/pluginapi/cmmdatapackage.h>
-
-// ======== MEMBER FUNCTIONS ========
-
-CMmSimLockTsy::CMmSimLockTsy()
-    {
-    return;
-    }
-
-void CMmSimLockTsy::ConstructL(
-    CMmCustomTsy* aMmCustomTsy )
-    {
-    iMmCustomTsy = aMmCustomTsy;
-
-    // Create req handle store
-#ifdef REQHANDLE_TIMER   
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( iMmCustomTsy,
-        iMmCustomTsy->iMmPhoneTsy, ESimLockRequestTypeMaxNumOfRequests, 
-        iSimLockReqHandles );
-#else
-    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
-        ESimLockRequestTypeMaxNumOfRequests, iSimLockReqHandles );
-#endif // REQHANDLE_TIMER
-
-    return;
-    }
-
-CMmSimLockTsy* CMmSimLockTsy::NewL(
-    CMmCustomTsy* aMmCustomTsy )
-    {
-    CMmSimLockTsy* self = new (ELeave) CMmSimLockTsy();
-    
-    CleanupStack::PushL( self );
-    self->ConstructL( aMmCustomTsy );
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-CMmSimLockTsy::~CMmSimLockTsy()
-    {
-    delete iTsyReqHandleStore;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::Init
-// Initialisation method that is called from ETel Server.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmSimLockTsy::Init()
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::SupportingIPC
-// Tells whether the object supports given IPC.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmSimLockTsy::SupportingIPC(
-    TInt aIpc )
-    {
-    TBool ret( EFalse );
-    
-    switch ( aIpc )
-        {
-        case ECustomSimLockActivateIPC:
-        case ECustomSimLockDeActivateIPC:
-            {
-            ret = ETrue;
-            break;
-            }
-        default:
-            {
-            ret = EFalse;
-            break;
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::DoExtFuncL
-// Dispatches extension function requests. At the beginning of this method,
-// packaged pointers are unpacked. Then the correct function is selected
-// using the IPC number.
-// If the IPC is supported, return the return value of corresponding function,
-// else return KErrNotSupported.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmSimLockTsy::DoExtFuncL( 
-    const TTsyReqHandle aTsyReqHandle, 
-    const TInt aIpc, 
-    const TDataPackage& aPackage )
-    {
-    switch ( aIpc )
-        {
-        case ECustomSimLockActivateIPC:
-            return ActivateSimLockL( aTsyReqHandle, 
-                REINTERPRET_CAST( RMmCustomAPI::TSimLockPassword*,
-                    aPackage.Ptr1() ),
-                REINTERPRET_CAST( RMmCustomAPI::TLockNumber*,
-                    aPackage.Ptr2() ) );
-        case ECustomSimLockDeActivateIPC:   
-            return DeActivateSimLockL( aTsyReqHandle, 
-                REINTERPRET_CAST( RMmCustomAPI::TSimLockPassword*,
-                    aPackage.Ptr1() ),
-                REINTERPRET_CAST( RMmCustomAPI::TLockNumber*,
-                    aPackage.Ptr2() ) );
-        default:
-            return KErrNotSupported;
-        }
-    }
-    
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::ReqModeL
-// Returns request mode for given IPC. Leaves with error code KErrNotSupported
-// if the IPC number does not belong to some of the SimLock API functions. 
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-CTelObject::TReqMode CMmSimLockTsy::ReqModeL( 
-    const TInt aIpc )
-    {
-    CTelObject::TReqMode ret = 0;
-
-    switch ( aIpc )
-        {
-        case ECustomSimLockActivateIPC:
-        case ECustomSimLockDeActivateIPC:
-            ret = 0;    // flow control in tsy
-            break;
-        default:
-            User::Leave(KErrNotSupported);
-            break;
-        }
-    
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::NumberOfSlotsL
-// Returns number of slots to be used for given IPC. Leaves with error code 
-// KErrNotSupported if the IPC number does not belong to some of the SimLock 
-// API functions. 
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmSimLockTsy::NumberOfSlotsL( 
-    const TInt aIpc )
-    {
-    TInt numberOfSlots = KMmCustomDefaultSlots;
-
-    switch ( aIpc )
-        {
-        case ECustomSimLockActivateIPC:
-        case ECustomSimLockDeActivateIPC:
-            numberOfSlots = KMmCustomSimLockSlots;
-            break;
-        default:
-            // Unknown or invalid IPC
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    
-    return numberOfSlots;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::CancelService
-// When the clients close their sub-sessions (eg. by calling RPhone::Close),
-// they may not have cancelled all their outstanding asynchronous requests
-// before closing. It is up to the ETel server to clean up in this situation,
-// so the server will find the list of outstanding requests related to that
-// sub-session object and pass these outstanding IPC request numbers, one at
-// a time, to the CancelService function in the TSY.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmSimLockTsy::CancelService( 
-    const TInt aIpc, 
-    const TTsyReqHandle )
-    {
-    TInt ret( KErrGeneral );
-
-    switch ( aIpc )
-        {
-        case ECustomSimLockActivateIPC:
-        case ECustomSimLockDeActivateIPC:
-            // request can't be cancelled on DOS side
-            ret = KErrNone;
-            break;
-        default:
-            return KErrGeneral; 
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::RegisterNotification
-// Called when the server recognises this notification being posted for 
-// the first time on this sub-session 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 CMmSimLockTsy::RegisterNotification( 
-    const TInt )
-    {
-    return KErrNotSupported;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::DeregisterNotification
-// Called when the 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 CMmSimLockTsy::DeregisterNotification( 
-    const TInt )
-    {
-    return KErrNotSupported;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::ActivateSimLockL
-// This method activates SimLock.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmSimLockTsy::ActivateSimLockL( 
-    const TTsyReqHandle aTsyReqHandle, 
-    RMmCustomAPI::TSimLockPassword* aPassword, 
-    RMmCustomAPI::TLockNumber* aLockNumber )
-    {
-    TInt ret( KErrArgument );
-
-    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle(
-         ESimLockRequestTypeActivateSimLock ) )
-        {
-        return KErrServerBusy;
-        }
-    
-    switch ( *aLockNumber )
-        {
-        case RMmCustomAPI::EOperator:
-        case RMmCustomAPI::EGid1:
-        case RMmCustomAPI::EGid2:
-        case RMmCustomAPI::EImsi:
-        case RMmCustomAPI::EOperator_Gid1:
-        case RMmCustomAPI::EOperator_Gid2:
-            iActivateSimLockNumber = aLockNumber;
-            break;
-        default:
-            return KErrArgument;
-        }
-    iActivateSimLockPassword = aPassword;
-    
-    // Ask DOS to activate SimLock
-    // packed parameters: RMmCustomAPI::TSimLockPassword and
-    // RMmCustomAPI::TLockNumber
-    CMmDataPackage dataPackage;
-    dataPackage.PackData( aPassword, aLockNumber );
-    ret = iMmCustomTsy->Phone()->MessageManager()->HandleRequestL( 
-        ECustomSimLockActivateIPC, &dataPackage );
-
-    if ( KErrNone == ret )
-        {
-#ifdef REQHANDLE_TIMER
-        SetTypeOfResponse( ESimLockRequestTypeActivateSimLock,
-            aTsyReqHandle );
-#else
-        iTsyReqHandleStore->SetTsyReqHandle(
-            ESimLockRequestTypeActivateSimLock, aTsyReqHandle );
-#endif // REQHANDLE_TIMER
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::CompleteActivateSimLock
-// Completes ActivateSimLock request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmSimLockTsy::CompleteActivateSimLock( 
-    TInt aError )
-    {
-    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle( 
-         ESimLockRequestTypeActivateSimLock ) )
-        {
-        iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->
-            ResetTsyReqHandle( ESimLockRequestTypeActivateSimLock ), aError );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::DeActivateSimLockL
-// This method deactivates SimLock.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmSimLockTsy::DeActivateSimLockL( 
-    const TTsyReqHandle aTsyReqHandle, 
-    RMmCustomAPI::TSimLockPassword* aPassword, 
-    RMmCustomAPI::TLockNumber* aLockNumber )
-    {
-    TInt ret( KErrArgument );
-
-    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle(
-         ESimLockRequestTypeDeActivateSimLock ) )
-        {
-        return KErrServerBusy;
-        }
-    
-    switch ( *aLockNumber )
-        {
-        case RMmCustomAPI::EOperator:
-        case RMmCustomAPI::EGid1:
-        case RMmCustomAPI::EGid2:
-        case RMmCustomAPI::EImsi:
-        case RMmCustomAPI::EOperator_Gid1:
-        case RMmCustomAPI::EOperator_Gid2:
-        case RMmCustomAPI::EGlobalUnlock:
-            iDeActivateSimLockNumber = aLockNumber;
-            break;
-        default:
-            return KErrArgument;
-        }
-    
-    iDeActivateSimLockPassword = aPassword;
-    
-    // Ask DOS to deactivate SimLock
-    // packed parameters: RMmCustomAPI::TSimLockPassword and
-    // RMmCustomAPI::TLockNumber
-    CMmDataPackage dataPackage;
-    dataPackage.PackData( aPassword, aLockNumber );
-    ret = iMmCustomTsy->Phone()->MessageManager()->HandleRequestL( 
-        ECustomSimLockDeActivateIPC, &dataPackage );
-
-    if ( KErrNone == ret )
-        {
-#ifdef REQHANDLE_TIMER
-        SetTypeOfResponse( ESimLockRequestTypeDeActivateSimLock,
-            aTsyReqHandle );
-#else
-        iTsyReqHandleStore->SetTsyReqHandle(
-            ESimLockRequestTypeDeActivateSimLock, aTsyReqHandle );
-#endif // REQHANDLE_TIMER
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::CompleteDeActivateSimLock
-// Completes DeActivateSimLock request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmSimLockTsy::CompleteDeActivateSimLock( 
-    TInt aError )
-    {
-    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle( 
-        ESimLockRequestTypeDeActivateSimLock ) )
-        {
-        iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->
-            ResetTsyReqHandle( ESimLockRequestTypeDeActivateSimLock ),
-            aError );
-        }
-    }
-
-#ifdef REQHANDLE_TIMER
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::SetTypeOfResponse
-// Sets the type of response for a given handle. Automatic mode includes an 
-// automatic response in case of non response from the DOS in a specified time.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmSimLockTsy::SetTypeOfResponse( 
-    const TInt aReqHandleType, 
-    const TTsyReqHandle aTsyReqHandle )
-    {
-    TInt timeOut( 0 );
-    TInt ipc( 0 );
-
-    switch ( aReqHandleType )
-        {
-        case ESimLockRequestTypeActivateSimLock:
-            timeOut = KMmActivateSimLockTimeOut;
-            ipc = ECustomSimLockActivateIPC;
-            break;
-        case ESimLockRequestTypeDeActivateSimLock:
-            timeOut = KMmDeactivateSimLockTimeOut;
-            ipc = ECustomSimLockDeActivateIPC;
-            break;
-        default:
-            // Does not use timer
-            iTsyReqHandleStore->SetTsyReqHandle( 
-                aReqHandleType, aTsyReqHandle );
-            break;
-        }
-
-    if ( 0 < timeOut )
-        {
-        // The timeout parameter is given in seconds.
-        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle, 
-            timeOut, ipc );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CMmSimLockTsy::Complete
-// Completes the request due the timer expiration.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmSimLockTsy::Complete( 
-    TInt aReqHandleType, 
-    TInt aError )
-    {
-TFLOGSTRING3( "CMmCustomTsy: CMmSimLockTsy::Complete.\n\t ReqHandleType:%d \n\t Error:%d\n", aReqHandleType, aError );
-
-    // All possible TSY req handle types are listed in the
-    // switch case below.
-    switch ( aReqHandleType )
-        {
-        case ESimLockRequestTypeActivateSimLock:
-            CompleteActivateSimLock( aError );
-            break;
-        case ESimLockRequestTypeDeActivateSimLock:
-            CompleteDeActivateSimLock( aError );
-            break;
-        default:
-            iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->ResetTsyReqHandle( 
-                aReqHandleType ), aError );
-            break;
-        }
-    }
-#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 FILES
+#include "CMmSimLockTsy.h"
+#include <ctsy/tflogger.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmSimLockTsy::CMmSimLockTsy()
+    {
+    return;
+    }
+
+void CMmSimLockTsy::ConstructL(
+    CMmCustomTsy* aMmCustomTsy )
+    {
+    iMmCustomTsy = aMmCustomTsy;
+
+    // Create req handle store
+#ifdef REQHANDLE_TIMER   
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( iMmCustomTsy,
+        iMmCustomTsy->iMmPhoneTsy, ESimLockRequestTypeMaxNumOfRequests, 
+        iSimLockReqHandles );
+#else
+    iTsyReqHandleStore = CMmTsyReqHandleStore::NewL( 
+        ESimLockRequestTypeMaxNumOfRequests, iSimLockReqHandles );
+#endif // REQHANDLE_TIMER
+
+    return;
+    }
+
+CMmSimLockTsy* CMmSimLockTsy::NewL(
+    CMmCustomTsy* aMmCustomTsy )
+    {
+    CMmSimLockTsy* self = new (ELeave) CMmSimLockTsy();
+    
+    CleanupStack::PushL( self );
+    self->ConstructL( aMmCustomTsy );
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+CMmSimLockTsy::~CMmSimLockTsy()
+    {
+    delete iTsyReqHandleStore;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::Init
+// Initialisation method that is called from ETel Server.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSimLockTsy::Init()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::SupportingIPC
+// Tells whether the object supports given IPC.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmSimLockTsy::SupportingIPC(
+    TInt aIpc )
+    {
+    TBool ret( EFalse );
+    
+    switch ( aIpc )
+        {
+        case ECustomSimLockActivateIPC:
+        case ECustomSimLockDeActivateIPC:
+            {
+            ret = ETrue;
+            break;
+            }
+        default:
+            {
+            ret = EFalse;
+            break;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::DoExtFuncL
+// Dispatches extension function requests. At the beginning of this method,
+// packaged pointers are unpacked. Then the correct function is selected
+// using the IPC number.
+// If the IPC is supported, return the return value of corresponding function,
+// else return KErrNotSupported.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSimLockTsy::DoExtFuncL( 
+    const TTsyReqHandle aTsyReqHandle, 
+    const TInt aIpc, 
+    const TDataPackage& aPackage )
+    {
+    switch ( aIpc )
+        {
+        case ECustomSimLockActivateIPC:
+            return ActivateSimLockL( aTsyReqHandle, 
+                REINTERPRET_CAST( RMmCustomAPI::TSimLockPassword*,
+                    aPackage.Ptr1() ),
+                REINTERPRET_CAST( RMmCustomAPI::TLockNumber*,
+                    aPackage.Ptr2() ) );
+        case ECustomSimLockDeActivateIPC:   
+            return DeActivateSimLockL( aTsyReqHandle, 
+                REINTERPRET_CAST( RMmCustomAPI::TSimLockPassword*,
+                    aPackage.Ptr1() ),
+                REINTERPRET_CAST( RMmCustomAPI::TLockNumber*,
+                    aPackage.Ptr2() ) );
+        default:
+            return KErrNotSupported;
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::ReqModeL
+// Returns request mode for given IPC. Leaves with error code KErrNotSupported
+// if the IPC number does not belong to some of the SimLock API functions. 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CTelObject::TReqMode CMmSimLockTsy::ReqModeL( 
+    const TInt aIpc )
+    {
+    CTelObject::TReqMode ret = 0;
+
+    switch ( aIpc )
+        {
+        case ECustomSimLockActivateIPC:
+        case ECustomSimLockDeActivateIPC:
+            ret = 0;    // flow control in tsy
+            break;
+        default:
+            User::Leave(KErrNotSupported);
+            break;
+        }
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::NumberOfSlotsL
+// Returns number of slots to be used for given IPC. Leaves with error code 
+// KErrNotSupported if the IPC number does not belong to some of the SimLock 
+// API functions. 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSimLockTsy::NumberOfSlotsL( 
+    const TInt aIpc )
+    {
+    TInt numberOfSlots = KMmCustomDefaultSlots;
+
+    switch ( aIpc )
+        {
+        case ECustomSimLockActivateIPC:
+        case ECustomSimLockDeActivateIPC:
+            numberOfSlots = KMmCustomSimLockSlots;
+            break;
+        default:
+            // Unknown or invalid IPC
+            User::Leave( KErrNotSupported );
+            break;
+        }
+    
+    return numberOfSlots;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::CancelService
+// When the clients close their sub-sessions (eg. by calling RPhone::Close),
+// they may not have cancelled all their outstanding asynchronous requests
+// before closing. It is up to the ETel server to clean up in this situation,
+// so the server will find the list of outstanding requests related to that
+// sub-session object and pass these outstanding IPC request numbers, one at
+// a time, to the CancelService function in the TSY.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSimLockTsy::CancelService( 
+    const TInt aIpc, 
+    const TTsyReqHandle )
+    {
+    TInt ret( KErrGeneral );
+
+    switch ( aIpc )
+        {
+        case ECustomSimLockActivateIPC:
+        case ECustomSimLockDeActivateIPC:
+            // request can't be cancelled on DOS side
+            ret = KErrNone;
+            break;
+        default:
+            return KErrGeneral; 
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::RegisterNotification
+// Called when the server recognises this notification being posted for 
+// the first time on this sub-session 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 CMmSimLockTsy::RegisterNotification( 
+    const TInt )
+    {
+    return KErrNotSupported;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::DeregisterNotification
+// Called when the 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 CMmSimLockTsy::DeregisterNotification( 
+    const TInt )
+    {
+    return KErrNotSupported;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::ActivateSimLockL
+// This method activates SimLock.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSimLockTsy::ActivateSimLockL( 
+    const TTsyReqHandle aTsyReqHandle, 
+    RMmCustomAPI::TSimLockPassword* aPassword, 
+    RMmCustomAPI::TLockNumber* aLockNumber )
+    {
+    TInt ret( KErrArgument );
+
+    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle(
+         ESimLockRequestTypeActivateSimLock ) )
+        {
+        return KErrServerBusy;
+        }
+    
+    switch ( *aLockNumber )
+        {
+        case RMmCustomAPI::EOperator:
+        case RMmCustomAPI::EGid1:
+        case RMmCustomAPI::EGid2:
+        case RMmCustomAPI::EImsi:
+        case RMmCustomAPI::EOperator_Gid1:
+        case RMmCustomAPI::EOperator_Gid2:
+            iActivateSimLockNumber = aLockNumber;
+            break;
+        default:
+            return KErrArgument;
+        }
+    iActivateSimLockPassword = aPassword;
+    
+    // Ask DOS to activate SimLock
+    // packed parameters: RMmCustomAPI::TSimLockPassword and
+    // RMmCustomAPI::TLockNumber
+    CMmDataPackage dataPackage;
+    dataPackage.PackData( aPassword, aLockNumber );
+    ret = iMmCustomTsy->Phone()->MessageManager()->HandleRequestL( 
+        ECustomSimLockActivateIPC, &dataPackage );
+
+    if ( KErrNone == ret )
+        {
+#ifdef REQHANDLE_TIMER
+        SetTypeOfResponse( ESimLockRequestTypeActivateSimLock,
+            aTsyReqHandle );
+#else
+        iTsyReqHandleStore->SetTsyReqHandle(
+            ESimLockRequestTypeActivateSimLock, aTsyReqHandle );
+#endif // REQHANDLE_TIMER
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::CompleteActivateSimLock
+// Completes ActivateSimLock request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSimLockTsy::CompleteActivateSimLock( 
+    TInt aError )
+    {
+    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle( 
+         ESimLockRequestTypeActivateSimLock ) )
+        {
+        iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->
+            ResetTsyReqHandle( ESimLockRequestTypeActivateSimLock ), aError );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::DeActivateSimLockL
+// This method deactivates SimLock.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSimLockTsy::DeActivateSimLockL( 
+    const TTsyReqHandle aTsyReqHandle, 
+    RMmCustomAPI::TSimLockPassword* aPassword, 
+    RMmCustomAPI::TLockNumber* aLockNumber )
+    {
+    TInt ret( KErrArgument );
+
+    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle(
+         ESimLockRequestTypeDeActivateSimLock ) )
+        {
+        return KErrServerBusy;
+        }
+    
+    switch ( *aLockNumber )
+        {
+        case RMmCustomAPI::EOperator:
+        case RMmCustomAPI::EGid1:
+        case RMmCustomAPI::EGid2:
+        case RMmCustomAPI::EImsi:
+        case RMmCustomAPI::EOperator_Gid1:
+        case RMmCustomAPI::EOperator_Gid2:
+        case RMmCustomAPI::EGlobalUnlock:
+            iDeActivateSimLockNumber = aLockNumber;
+            break;
+        default:
+            return KErrArgument;
+        }
+    
+    iDeActivateSimLockPassword = aPassword;
+    
+    // Ask DOS to deactivate SimLock
+    // packed parameters: RMmCustomAPI::TSimLockPassword and
+    // RMmCustomAPI::TLockNumber
+    CMmDataPackage dataPackage;
+    dataPackage.PackData( aPassword, aLockNumber );
+    ret = iMmCustomTsy->Phone()->MessageManager()->HandleRequestL( 
+        ECustomSimLockDeActivateIPC, &dataPackage );
+
+    if ( KErrNone == ret )
+        {
+#ifdef REQHANDLE_TIMER
+        SetTypeOfResponse( ESimLockRequestTypeDeActivateSimLock,
+            aTsyReqHandle );
+#else
+        iTsyReqHandleStore->SetTsyReqHandle(
+            ESimLockRequestTypeDeActivateSimLock, aTsyReqHandle );
+#endif // REQHANDLE_TIMER
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::CompleteDeActivateSimLock
+// Completes DeActivateSimLock request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSimLockTsy::CompleteDeActivateSimLock( 
+    TInt aError )
+    {
+    if ( NULL != iTsyReqHandleStore->GetTsyReqHandle( 
+        ESimLockRequestTypeDeActivateSimLock ) )
+        {
+        iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->
+            ResetTsyReqHandle( ESimLockRequestTypeDeActivateSimLock ),
+            aError );
+        }
+    }
+
+#ifdef REQHANDLE_TIMER
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::SetTypeOfResponse
+// Sets the type of response for a given handle. Automatic mode includes an 
+// automatic response in case of non response from the DOS in a specified time.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSimLockTsy::SetTypeOfResponse( 
+    const TInt aReqHandleType, 
+    const TTsyReqHandle aTsyReqHandle )
+    {
+    TInt timeOut( 0 );
+    TInt ipc( 0 );
+
+    switch ( aReqHandleType )
+        {
+        case ESimLockRequestTypeActivateSimLock:
+            timeOut = KMmActivateSimLockTimeOut;
+            ipc = ECustomSimLockActivateIPC;
+            break;
+        case ESimLockRequestTypeDeActivateSimLock:
+            timeOut = KMmDeactivateSimLockTimeOut;
+            ipc = ECustomSimLockDeActivateIPC;
+            break;
+        default:
+            // Does not use timer
+            iTsyReqHandleStore->SetTsyReqHandle( 
+                aReqHandleType, aTsyReqHandle );
+            break;
+        }
+
+    if ( 0 < timeOut )
+        {
+        // The timeout parameter is given in seconds.
+        iTsyReqHandleStore->SetTsyReqHandle( aReqHandleType, aTsyReqHandle, 
+            timeOut, ipc );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMmSimLockTsy::Complete
+// Completes the request due the timer expiration.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSimLockTsy::Complete( 
+    TInt aReqHandleType, 
+    TInt aError )
+    {
+TFLOGSTRING3( "CMmCustomTsy: CMmSimLockTsy::Complete.\n\t ReqHandleType:%d \n\t Error:%d\n", aReqHandleType, aError );
+
+    // All possible TSY req handle types are listed in the
+    // switch case below.
+    switch ( aReqHandleType )
+        {
+        case ESimLockRequestTypeActivateSimLock:
+            CompleteActivateSimLock( aError );
+            break;
+        case ESimLockRequestTypeDeActivateSimLock:
+            CompleteDeActivateSimLock( aError );
+            break;
+        default:
+            iMmCustomTsy->ReqCompleted( iTsyReqHandleStore->ResetTsyReqHandle( 
+                aReqHandleType ), aError );
+            break;
+        }
+    }
+#endif // REQHANDLE_TIMER
+    
+//  End of File