telephonyserverplugins/common_tsy/commontsy/src/mmtsy/cmmsecuritytsywithdispatcher.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
child 42 3adadc800673
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmtsy/cmmsecuritytsywithdispatcher.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,275 @@
+// Copyright (c) 2008-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:
+//
+
+#ifdef USING_CTSY_DISPATCHER
+
+/**
+ * This file contains additional function definitions for the CMmSecurityTsy class
+ * in CTSY for use when the CTSY is used with the CTSY Dispatcher. 
+ */
+
+//INCLUDES
+#include "cmmsecuritytsy.h"
+#include "cmmphonetsy.h"
+#include "cmmtsyreqhandlestore.h"
+#include "cmmphoneextinterface.h"
+#include "CMmCustomSecurityTsy.h"
+
+// ---------------------------------------------------------------------------
+// CMmSecurityTsy::VerifySecurityCodeL
+// This method sends a security code requiring verification to 
+// the phone. If code is required for lock setting, it sends it to the
+// extension and orders re-execution of SetLockSetting function. 
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmSecurityTsy::VerifySecurityCodeL(
+    const TTsyReqHandle aTsyReqHandle, 
+    const TDataPackage& aPackage )
+    {
+
+    RMobilePhone::TMobilePhoneSecurityCode* type = 
+        reinterpret_cast<RMobilePhone::TMobilePhoneSecurityCode*>
+            ( aPackage.Ptr1() );
+    RMobilePhone::TCodeAndUnblockCode* codes = 
+        reinterpret_cast<RMobilePhone::TCodeAndUnblockCode*>
+            ( aPackage.Ptr2() );
+
+    // Get request handle to check whether server is busy with previous 
+    // request
+    TTsyReqHandle reqHandle = iMmPhoneTsy->iTsyReqHandleStore->
+        GetTsyReqHandle( CMmPhoneTsy::EMultimodePhoneVerifySecurityCode );
+    
+    if ( 0 < reqHandle )
+        {
+        //The request is already in processing because of previous request
+        //Complete request with status value informing the client about 
+        //the situation.
+        iMmPhoneTsy->ReqCompleted( aTsyReqHandle, KErrServerBusy );
+        }
+    else
+        {
+
+        TInt ret( KErrArgument );
+        
+        //check that the code is available
+        if ( 0 != codes->iCode.Length() )
+            {
+            if ( RMobilePhone::ESecurityCodePin1 == *type )
+                {
+TFLOGSTRING("TSY: CMmSecurityTsy::VerifySecurityCodeL - PIN VERIFY REQUESTED");
+				iLastPinRequested = EPin1Requested;
+				}
+			if ( RMobilePhone::ESecurityCodePin2 == *type )
+				{
+TFLOGSTRING("TSY: CMmSecurityTsy::VerifySecurityCodeL - PIN2 VERIFY REQUESTED");
+				iLastPinRequested = EPin2Requested;
+                }
+            //This is to prevent unnecessary PIN1 request after PUK code 
+            //request. Corrected at the same time with error TKEN-5WFJ7Y
+            if ( ( ( RMobilePhone::ESecurityCodePuk1 == *type ) ||
+                   ( RMobilePhone::ESecurityCodePuk2 == *type ) ) &&  
+                   ( 0 < codes->iUnblockCode.Length() ) )
+                {
+TFLOGSTRING("TSY: CMmSecurityTsy::VerifySecurityCodeL - PUK VERIFY REQUESTED");
+                iPukCodeVerify = ETrue;
+                }
+            //This is to prevent unnecessary PIN1 request after phone password
+            //request (PYRA-5UBCLC)
+            if ( RMobilePhone::ESecurityCodePhonePassword == *type )
+                {
+TFLOGSTRING("TSY: CMmSecurityTsy::VerifySecurityCodeL - PHONE PASSWORD VERIFY REQUESTED");
+                iPhonePasswordVerify = ETrue;
+                }
+            iMmPhoneTsy->iMmPhoneExtInterface->DeliverCode( *codes );
+
+            // CheckSecurityCode needs to set the lock as well, so pass the
+            // code for lock setting
+            if ( iMmPhoneTsy->iMmCustomTsy )
+                {
+                iMmPhoneTsy->iMmCustomTsy->DeliverCodeL( *codes ); 
+                }
+
+            ret = iMmPhoneTsy->iMmPhoneExtInterface->
+                VerifySecurityCodeL( aPackage );
+
+            if ( KErrNone == ret )
+                {
+                iMmPhoneTsy->iReqHandleType = 
+                    CMmPhoneTsy::EMultimodePhoneVerifySecurityCode;
+                }
+            else
+                {
+                // Complete verify with error
+                iMmPhoneTsy->ReqCompleted( aTsyReqHandle, ret );
+
+                // If FDN request is on-going, complete is also with error
+                reqHandle = iMmPhoneTsy->iTsyReqHandleStore->
+                    GetTsyReqHandle( 
+                        CMmPhoneTsy::EMultimodePhoneSetFdnSetting );
+                if ( reqHandle != 
+                     CMmPhoneTsy::EMultimodePhoneReqHandleUnknown )
+                    {
+                    iMmPhoneTsy->CompleteSetFdnSettingL( ret );
+                    }
+                reqHandle = iMmPhoneTsy->iTsyReqHandleStore->
+                    GetTsyReqHandle( 
+                        CMmPhoneTsy::EMultimodePhoneSetLockSetting );
+                        
+                if ( CMmPhoneTsy::EMultimodePhoneReqHandleUnknown != 
+                      reqHandle && EActiveCodeToUpinAskUpin == 
+                                      iActiveCodeToUpinState )
+                    {
+                    //Verifying UPIN failed
+                    CompleteSetLockSetting( ret, 
+                        RMobilePhone::EStatusLockUnknown,
+                            RMobilePhone::ELockSetUnknown );
+                    }
+               }
+            }
+        else
+            {       
+            iMmPhoneTsy->ReqCompleted( aTsyReqHandle, KErrArgument );    
+            }
+
+        } // end check request handle
+
+    return KErrNone;
+    }
+    
+// ---------------------------------------------------------------------------
+// CMmSecurityTsy::CompleteVerifySecurityCodeL
+// This method completes an outstanding asynchronous 
+// VerifySecurityCode request
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmSecurityTsy::CompleteVerifySecurityCodeL(
+        TInt aErrorCode ) 
+    {
+TFLOGSTRING2("TSY: CMmSecurityTsy::CompleteVerifySecurityCode - Error:%d", aErrorCode);
+
+    TTsyReqHandle reqHandle = iMmPhoneTsy->iTsyReqHandleStore->
+        ResetTsyReqHandle( CMmPhoneTsy::EMultimodePhoneVerifySecurityCode );
+
+    if ( CMmPhoneTsy::EMultimodePhoneReqHandleUnknown != reqHandle )
+        {
+        // Complete the request
+        iMmPhoneTsy->ReqCompleted( reqHandle, aErrorCode );
+
+        // This needs to be done for PIN code verification when user has 
+        // dual line SIM and user has changed the line. If PIN code 
+        // verification fails, we need to request PIN code again.
+
+        // NOTE! This MUST NOT happen in bootup when PIN code is verified
+        // and NOT when PIN code is changed to ON/OFF from settings.
+
+        // DO NOT complete if SetLockSetting is called -> PIN ON/OFF change 
+        // from general settings.
+
+        // Not completed if PUK code verify or Phonepassword verify
+        TTsyReqHandle phoneSetLockSettingHandle = 
+                iMmPhoneTsy->iTsyReqHandleStore->GetTsyReqHandle( 
+                CMmPhoneTsy::EMultimodePhoneSetLockSetting );
+
+        // DO NOT complete if booting up 
+        if ( ( iMmPhoneTsy->iBootState.iSecReady ) &&
+             ( iLastPinRequested != EPinUnknown ) && 
+             ( CMmPhoneTsy::EMultimodePhoneReqHandleUnknown ==
+                     phoneSetLockSettingHandle ) &&
+             ( KErrNone != aErrorCode ) &&
+             ( !iPukCodeVerify ) &&
+             ( !iPhonePasswordVerify ) )
+            {
+			// IF PIN1 REQUESTED LAST
+			if ( iLastPinRequested == EPin1Requested )
+				{
+TFLOGSTRING("TSY: CMmSecurityTsy::CompleteVerifySecurityCodeL - PIN VERIFICATION NEEDED");
+				CompleteNotifySecurityEventL( RMobilePhone::EPin1Required,
+						KErrNone );
+				iLastPinRequested = EPinUnknown;
+				}
+			// IF PIN2 REQUESTED LAST
+			if (iLastPinRequested == EPin2Requested)
+				{
+TFLOGSTRING("TSY: CMmSecurityTsy::CompleteVerifySecurityCodeL - PIN2");
+				iLastPinRequested = EPinUnknown;
+				}
+            }
+        else if ( CMmPhoneTsy::EMultimodePhoneReqHandleUnknown != 
+                  phoneSetLockSettingHandle && EActiveCodeToUpinAskUpin == 
+                                                      iActiveCodeToUpinState )
+            {
+TFLOGSTRING("TSY: CMmSecurityTsy::CompleteVerifySecurityCodeL - iActiveCodeToUpinState = EActiveCodeToUpinAskPin");
+            if ( KErrNone == aErrorCode )
+                {
+                iActiveCodeToUpinState = EActiveCodeToUpinAskPin;
+                CompleteNotifySecurityEventL( 
+                    RMobilePhone::EPin1Required, KErrNone );
+                }
+            else
+                {
+                iActiveCodeToUpinState = EActiveCodeToUpinIdle;
+                CompleteSetLockSetting( KErrAccessDenied, 
+                    RMobilePhone::EStatusLockUnknown,
+                    RMobilePhone::ELockSetUnknown );
+                }
+            }
+        //Set iPukCodeVerify to EFalse
+        iPukCodeVerify = EFalse;
+
+        //Set iPhonePasswordVerify to EFalse
+        iPhonePasswordVerify = EFalse;
+
+        // FDN HANDLING
+        reqHandle = iMmPhoneTsy->iTsyReqHandleStore->GetTsyReqHandle( 
+            CMmPhoneTsy::EMultimodePhoneSetFdnSetting );
+
+        if ( reqHandle != CMmPhoneTsy::EMultimodePhoneReqHandleUnknown )
+            {
+            if ( KErrNone == aErrorCode )
+                {
+                aErrorCode = iMmPhoneTsy->iMmPhoneExtInterface->
+                    SetFdnSetting( iMmPhoneTsy->iRetFdnSetting );
+                }
+            else
+                {
+                iMmPhoneTsy->CompleteSetFdnSettingL( aErrorCode );
+                }
+            }
+        
+        if ( phoneSetLockSettingHandle != CMmPhoneTsy::EMultimodePhoneReqHandleUnknown )
+            if ( KErrNone == aErrorCode )
+                {
+                CMmDataPackage dataPackage;
+                //add into the package the stored lock and setting
+                dataPackage.PackData( &iLockSettingPhoneLock, &iLockSetting );
+                aErrorCode = iMmPhoneTsy->iMmPhoneExtInterface->
+                    SetLockSettingL( &dataPackage );
+                }
+            else
+                {
+                CompleteSetLockSetting( aErrorCode, RMobilePhone::EStatusLockUnknown, RMobilePhone::ELockSetUnknown );
+                }        	        
+
+        // Reset just used code, empty for next round.
+        RMobilePhone::TCodeAndUnblockCode codes;
+        _LIT( KNullCharacter, "\0" );
+        codes.iCode.Copy( KNullCharacter );
+        iMmPhoneTsy->iMmPhoneExtInterface->DeliverCode( codes );
+        }
+    }
+    
+#endif //USING_CTSY_DISPATCHER