diff -r 000000000000 -r 3553901f7fa8 telephonyserverplugins/common_tsy/commontsy/src/mmtsy/cmmsecuritytsywithdispatcher.cpp --- /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 + ( aPackage.Ptr1() ); + RMobilePhone::TCodeAndUnblockCode* codes = + reinterpret_cast + ( 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