diff -r 000000000000 -r 164170e6151a securitydialogs/SecUi/Src/SecUiManualSecuritySettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitydialogs/SecUi/Src/SecUiManualSecuritySettings.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,609 @@ +/* +* Copyright (c) 2002 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: Provides api for changing security settings via PhoneApp +* +* +*/ + + +#include +#include +#include "secuimanualsecuritysettings.h" +#include +#include "SecUiWait.h" +#include + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ +// LOCAL CONSTANTS AND MACROS + + + +_LIT(Operator,"1"); +_LIT(Gid1,"2"); +_LIT(Gid2,"3"); +_LIT(Imsi,"4"); +_LIT(Operator_Gid1,"5"); +_LIT(Operator_Gid2,"6"); +_LIT(GlobalUnlock, "7"); + +const TInt KTriesToConnectServer( 2 ); +const TInt KTimeBeforeRetryingServerConnection( 50000 ); +const TInt PhoneIndex( 0 ); + +// ================= MEMBER FUNCTIONS ======================= +// +// ---------------------------------------------------------- +// CManualSecuritySettings::NewL() +// Constructs a new entry with given values. +// ---------------------------------------------------------- +// +EXPORT_C CManualSecuritySettings* CManualSecuritySettings::NewL() + { + CManualSecuritySettings* self = new (ELeave) CManualSecuritySettings(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::CManualSecuritySettings() +// constructor +// ---------------------------------------------------------- +// +CManualSecuritySettings::CManualSecuritySettings() + { + } + +// +// ---------------------------------------------------------- +// CManualSecuritySettings::ConstructL() +// Symbian OS constructor. +// ---------------------------------------------------------- +// +void CManualSecuritySettings::ConstructL() + { + + iWait = CWait::NewL(); + + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ + TInt err( KErrGeneral ); + TInt thisTry( 0 ); + RTelServer::TPhoneInfo PhoneInfo; + /* All server connections are tried to be made KTriesToConnectServer times because occasional + fails on connections are possible, at least on some servers */ + + // connect ETel server + while ( ( err = iServer.Connect() ) != KErrNone && ( thisTry++ ) <= KTriesToConnectServer ) + { + User::After( KTimeBeforeRetryingServerConnection ); + } + User::LeaveIfError( err ); + + // load TSY + err = iServer.LoadPhoneModule( KMmTsyModuleName ); + if ( err != KErrAlreadyExists ) + { + // May also return KErrAlreadyExists if something else + // has already loaded the TSY module. And that is + // not an error. + User::LeaveIfError( err ); + } + + // open phones + User::LeaveIfError(iServer.SetExtendedErrorGranularity(RTelServer::EErrorExtended)); + User::LeaveIfError(iServer.GetPhoneInfo(PhoneIndex, PhoneInfo)); + User::LeaveIfError(iPhone.Open(iServer,PhoneInfo.iName)); + User::LeaveIfError(iCustomPhone.Open(iPhone)); + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::~CManualSecuritySettings() +// Destructor +// ---------------------------------------------------------- +// +EXPORT_C CManualSecuritySettings::~CManualSecuritySettings() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + /***************************************************** + * Series 60 Customer / TSY + * Needs customer TSY implementation + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::~CManualSecuritySettings()")); + #endif + // Cancel active requests + if(iWait->IsActive()) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::~CManualSecuritySettings() CANCEL REQ")); + #endif + iPhone.CancelAsyncRequest(iWait->GetRequestType()); + } + // close phone + if (iPhone.SubSessionHandle()) + iPhone.Close(); + // close custom phone + if (iCustomPhone.SubSessionHandle()) + iCustomPhone.Close(); + //close ETel connection + if (iServer.Handle()) + { + iServer.UnloadPhoneModule(KMmTsyModuleName); + iServer.Close(); + } + delete iNote; + delete iWait; + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::~CManualSecuritySettings() END")); + #endif + } + +// +// ---------------------------------------------------------- +// CManualSecuritySettings::ChangePinL() +// Changes pin +// ---------------------------------------------------------- +// +EXPORT_C TBool CManualSecuritySettings::ChangePinL(TPin aPin,const TDesC& aOld,const TDesC& aNew,const TDesC& aVerifyNew ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL()")); + #endif + if (aPin == EPin1) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL() PIN1")); + #endif + RMobilePhone::TMobilePhoneLock lockType; + RMobilePhone::TMobilePhoneLockInfoV1 lockInfo; + RMobilePhone::TMobilePhoneLockInfoV1Pckg lockInfoPkg(lockInfo); + + + lockType = RMobilePhone::ELockICC; + // check if pin code is enabled... + // The following is required, since the new multimode Etel is asynchronous + // rather than synchronous. + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL() GetLockInfo")); + #endif + + iWait->SetRequestType(EMobilePhoneGetLockInfo); + iPhone.GetLockInfo(iWait->iStatus, lockType, lockInfoPkg); + TInt res = iWait->WaitForRequestL(); + + if (res != KErrNone) + return EFalse; + // if pin is disabled -> pin code change is not allowed + if (lockInfo.iSetting == RMobilePhone::ELockSetDisabled) + { + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_PIN_NOT_ALLOWED); + return EFalse; + } + } + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL() CompareF")); + #endif + if (aNew.CompareF(aVerifyNew) != 0) + { + // codes do not match note + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODES_DONT_MATCH); + return EFalse; + } + + + RMobilePhone::TMobilePhoneSecurityCode secCodeType; + if (aPin == EPin1) + { + secCodeType = RMobilePhone::ESecurityCodePin1; + } + else + { + secCodeType = RMobilePhone::ESecurityCodePin2; + } + + RMobilePhone::TMobilePhonePasswordChangeV1 aChange; + aChange.iOldPassword = aOld; + aChange.iNewPassword = aNew; + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL() ChangeSecurityCode")); + #endif + iWait->SetRequestType(EMobilePhoneChangeSecurityCode); + iPhone.ChangeSecurityCode(iWait->iStatus,secCodeType,aChange); + TInt res = iWait->WaitForRequestL(); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::ChangePinL() ChangeSecurityCode RES: %d"), res); + #endif + + switch(res) + { + case KErrNone: + if (aPin == EPin1) + { + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_PIN_CODE_CHANGED_NOTE); + } + else + { + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_PIN2_CODE_CHANGED_NOTE); + } + return ETrue; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + if (aPin == EPin1) + { + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_PIN_BLOCKED_NOTE); + } + else + { + iCustomPhone.CheckSecurityCode(iWait->iStatus,RMmCustomAPI::ESecurityCodePuk2); + TInt res = iWait->WaitForRequestL(); + } + break; + case KErrGsm0707OperationNotAllowed: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_OPERATION_NOT_ALLOWED); + break; + default: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODE_ERROR); + break; + } + + return EFalse; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::CancelChangePin() +// Deletes pin operation note if necessary +// ---------------------------------------------------------- +// +EXPORT_C void CManualSecuritySettings::CancelChangePin() + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::CancelChangePin()")); + #endif + delete iNote; + iNote = NULL; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::UnblockPinL() +// Unblocks pin +// ---------------------------------------------------------- +// +EXPORT_C TBool CManualSecuritySettings::UnblockPinL(TPin aPin,const TDesC& aPuk,const TDesC& aNew,const TDesC& aVerifyNew ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::UnblockPinL()")); + #endif + if (aNew.CompareF(aVerifyNew) != 0) + { + // codes do not match note + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODES_DONT_MATCH); + return EFalse; + } + + RMobilePhone::TMobilePhoneSecurityCode blockCodeType; + + if (aPin == EPin1) + { + blockCodeType = RMobilePhone::ESecurityCodePuk1; + } + else + { + blockCodeType = RMobilePhone::ESecurityCodePuk2; + } + + iWait->SetRequestType(EMobilePhoneVerifySecurityCode); + iPhone.VerifySecurityCode(iWait->iStatus, blockCodeType, aNew, aPuk); + TInt res = iWait->WaitForRequestL(); + + switch(res) + { + case KErrNone: + if (aPin == EPin1) + { + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_PIN_CODE_CHANGED_NOTE); + } + else + { + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_PIN2_CODE_CHANGED_NOTE); + } + return ETrue; + case KErrGsmSSPasswordAttemptsViolation: + case KErrLocked: + if (aPin == EPin2) + { + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_PIN2_REJECTED); + } + break; + case KErrGsm0707OperationNotAllowed: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_OPERATION_NOT_ALLOWED); + break; + default: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODE_ERROR); + break; + } + + return EFalse; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::CancelUnblockPin() +// Deletes unblock pin operation note if necessary +// ---------------------------------------------------------- +// +EXPORT_C void CManualSecuritySettings::CancelUnblockPin() + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::CancelUnblockPinL()")); + #endif + delete iNote; + iNote = NULL; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::LockSimL() +// +// ---------------------------------------------------------- +// +EXPORT_C TBool CManualSecuritySettings::LockSimL(const TDesC& aLockCode,const TDesC& aType ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::LockSimL()")); + #endif + + + RMmCustomAPI::TLockNumber aLockType; + TInt ret = KErrGsm0707IncorrectPassword; + TInt length = aLockCode.Length(); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::LockSimL(): Param length: %d"), length); + #endif + + if(aLockCode.Length() <= KSimLockMaxPasswordSize) + { + if (aType.CompareF(Operator) == 0) + { + aLockType = RMmCustomAPI::EOperator; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + + if (aType.CompareF(Gid1) == 0) + { + aLockType = RMmCustomAPI::EGid1; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + + if (aType.CompareF(Gid2) == 0) + { + aLockType = RMmCustomAPI::EGid2; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + + if (aType.CompareF(Imsi) == 0) + { + aLockType = RMmCustomAPI::EImsi; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + + if (aType.CompareF(Operator_Gid1) == 0) + { + aLockType = RMmCustomAPI::EOperator_Gid1; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + + if (aType.CompareF(Operator_Gid2) == 0) + { + aLockType = RMmCustomAPI::EOperator_Gid2; + ret = iCustomPhone.ActivateSimLock( aLockCode,aLockType ); + } + } + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::LockSimL() RESULT: %d"), ret); + #endif + switch (ret) + { + case KErrNone: + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_SIM_ON); + return ETrue; + case KErrAlreadyExists: + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_SIM_ALLREADY_ON); + break; + case KErrGeneral: + case KErrLocked: + case KErrAccessDenied: + case KErrNotSupported: + case KErrGsm0707OperationNotAllowed: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_SIM_NOT_ALLOWED); + break; + case KErrArgument: + case KErrGsm0707IncorrectPassword: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODE_ERROR); + break; + default: + break; + } + + return EFalse; + } + +// +// ---------------------------------------------------------- +// CManualSecuritySettings::CancelLockSim() +// +// ---------------------------------------------------------- +// +EXPORT_C void CManualSecuritySettings::CancelLockSim() + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::CancelLockSimL()")); + #endif + delete iNote; + iNote = NULL; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::UnlockSimL() +// +// ---------------------------------------------------------- +// +EXPORT_C TBool CManualSecuritySettings::UnlockSimL(const TDesC& aUnlockCode,const TDesC& aType ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::UnLockSimL()")); + #endif + RMmCustomAPI::TLockNumber aLockType; + TInt ret = KErrGsm0707IncorrectPassword; + TInt length = aUnlockCode.Length(); + + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::UnLockSimL(): Param length: %d"), length); + #endif + if(aUnlockCode.Length() <= KSimLockMaxPasswordSize) + { + if (aType.CompareF(Operator) == 0) + { + aLockType = RMmCustomAPI::EOperator; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + if (aType.CompareF(Gid1) == 0) + { + aLockType = RMmCustomAPI::EGid1; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + if (aType.CompareF(Gid2) == 0) + { + aLockType = RMmCustomAPI::EGid2; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + if (aType.CompareF(Imsi) == 0) + { + aLockType = RMmCustomAPI::EImsi; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + if (aType.CompareF(Operator_Gid1) == 0) + { + aLockType = RMmCustomAPI::EOperator_Gid1; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + if (aType.CompareF(Operator_Gid2) == 0) + { + aLockType = RMmCustomAPI::EOperator_Gid2; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + if (aType.CompareF(GlobalUnlock) == 0) + { + aLockType = RMmCustomAPI::EGlobalUnlock; + ret = iCustomPhone.DeActivateSimLock( aUnlockCode,aLockType ); + } + + } + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::UnLockSimL() RESULT: %d"), ret); + #endif + switch (ret) + { + case KErrNone: + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_SIM_OFF); + return ETrue; + case KErrAlreadyExists: + ShowResultNoteL(CAknNoteDialog::EConfirmationTone,R_SIM_ALLREADY_OFF); + break; + case KErrGeneral: + case KErrLocked: + case KErrAccessDenied: + case KErrGsm0707OperationNotAllowed: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_SIM_NOT_ALLOWED); + break; + case KErrArgument: + case KErrGsm0707IncorrectPassword: + ShowResultNoteL(CAknNoteDialog::EErrorTone,R_CODE_ERROR); + break; + default: + break; + } + + return EFalse; + } +// +// ---------------------------------------------------------- +// CManualSecuritySettings::CancelUnlockSim() +// +// ---------------------------------------------------------- +// +EXPORT_C void CManualSecuritySettings::CancelUnlockSim() + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::CancelUnLockSimL()")); + #endif + delete iNote; + iNote = NULL; + } + +// +// ---------------------------------------------------------- +// CManualSecuritySettings::ShowResultNoteL() +// Shows settingchange results +// ---------------------------------------------------------- +// +void CManualSecuritySettings::ShowResultNoteL(CAknNoteDialog::TTone aTone, TInt aResourceID) + { + #if defined(_DEBUG) + RDebug::Print(_L("(SECUI)CManualSecuritySettings::CancelUnLockSimL()")); + #endif + iNote = new (ELeave) CAknNoteDialog(REINTERPRET_CAST(CEikDialog**,&iNote)); + iNote->SetTimeout(CAknNoteDialog::ELongTimeout); + iNote->SetTone(aTone); + iNote->ExecuteLD(aResourceID); + } + +// End of file