diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatereferenceplugins/clayer/src/ssmsecurityeventobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatereferenceplugins/clayer/src/ssmsecurityeventobserver.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,241 @@ +// 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: +// Name : strtsecurityeventobserver.cpp +// Part of : System Startup / StrtSecObs +// Implementation of CStrtSecurityEventObserver class +// Version : %version: 1 % << Don't touch! Updated by Synergy at check-out. +// This material, including documentation and any related computer +// programs, is protected by copyright controlled by Nokia. All +// rights are reserved. Copying, including reproducing, storing, +// adapting or translating, any or all of this material requires the +// prior written consent of Nokia. This material also contains +// confidential information which may not be disclosed to others +// without the prior written consent of Nokia. +// Template version: 4.1.1 +// Nokia Core OS * +// File renamed from strtsecurityeventobserver.cpp to ssmsecurityeventobserver.cpp as part of Core OS transfer. +// + + + +#include "strtsecphaseobserver.h" +#include "ssmsecurityeventobserver.h" +#include "ssmsecuritynotecontroller.h" +#include "ssmuiproviderdll.h" +#include "ssmdebug.h" + +const TInt KDefaultPhoneIndex = 0; + +EXPORT_C MSsmUtility* CStrtSecurityEventObserver::NewL() + { + CStrtSecurityEventObserver* self = new( ELeave ) CStrtSecurityEventObserver(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self ); + return self; + } + +void CStrtSecurityEventObserver::InitializeL() + { + + } +void CStrtSecurityEventObserver::StartL() + { + Activate(); + } +void CStrtSecurityEventObserver::Release() + { + delete this; + } + +CStrtSecurityEventObserver::~CStrtSecurityEventObserver() + { + Cancel(); + iPhone.Close(); + + if (iTelServer.Handle()) + { + iTelServer.UnloadPhoneModule(*iTsyModuleName); + iTelServer.Close(); + } + delete iTsyModuleName; + delete iController; + delete iSecPhaseObserver; + } + +void CStrtSecurityEventObserver::DoCancel() + { + iPhone.CancelAsyncRequest(EMobilePhoneNotifySecurityEvent); + } + +void CStrtSecurityEventObserver::RunL() + { + TInt errorCode = iStatus.Int(); + if (errorCode == KErrNone) + { + DEBUGPRINT2A("SecurityEvent %d occurred", iEvent); + ProcessSecurityEvent(); + Activate(); + } + else + { + DEBUGPRINT2A("Security Event Observer received error: %d - not reactivating", iStatus.Int()); + } + } + +CStrtSecurityEventObserver::CStrtSecurityEventObserver() + : CActive(EPriorityStandard), + iSecPhaseObserver(NULL), + iController(NULL) + { + CActiveScheduler::Add(this); + } + +void CStrtSecurityEventObserver::ConstructL() + { + iTsyModuleName = CSsmUiSpecific::GetTsyModuleNameL(); + + TInt errorCode = iTelServer.Connect(); + User::LeaveIfError(errorCode); + + errorCode = iTelServer.LoadPhoneModule(*iTsyModuleName); + if (errorCode != KErrNone && errorCode != KErrAlreadyExists) + { + // KErrAlreadyExists may be returned if some other has already loaded + // the TSY module. + User::Leave(errorCode); + } + + RTelServer::TPhoneInfo info; + errorCode = iTelServer.GetPhoneInfo(KDefaultPhoneIndex, info); + User::LeaveIfError(errorCode); + + errorCode = iPhone.Open(iTelServer, info.iName); + User::LeaveIfError(errorCode); + + iSecPhaseObserver = CStrtSecPhaseObserver::NewL(); + iController = CStrtSecurityNoteController::NewL(); + } + +void CStrtSecurityEventObserver::Activate() + { + iPhone.NotifySecurityEvent(iStatus, iEvent); + SetActive(); + } + +void CStrtSecurityEventObserver::ProcessSecurityEvent() + { + switch (iEvent) + { + case RMobilePhone::EPin1Required: + SimCodeRequest(ESecCodePIN1); + break; + case RMobilePhone::EPuk1Required: + SimCodeRequest(ESecCodePUK1); + break; + case RMobilePhone::EPin2Required: + SimCodeRequest(ESecCodePIN2); + break; + case RMobilePhone::EPuk2Required: + SimCodeRequest(ESecCodePUK2); + break; + case RMobilePhone::EPhonePasswordRequired: + SecCodeRequest(ESecCodePasswd); + break; + case RMobilePhone::EPin1Verified: + CodeVerifyIndication(ESecCodePIN1); + break; + case RMobilePhone::EPin2Verified: + CodeVerifyIndication(ESecCodePIN2); + break; + case RMobilePhone::EPuk1Verified: + CodeVerifyIndication(ESecCodePUK1); + break; + case RMobilePhone::EPuk2Verified: + CodeVerifyIndication(ESecCodePUK2); + break; + case RMobilePhone::EPhonePasswordVerified: + CodeVerifyIndication(ESecCodePasswd); + break; + case RMobilePhone::EUSIMAppPinRequired: + OtherCodeRequest(ESecCodeAppPIN1); + break; + case RMobilePhone::EUSIMAppPinVerified: + CodeVerifyIndication(ESecCodeAppPIN1); + break; + case RMobilePhone::ESecondUSIMAppPinRequired: + OtherCodeRequest(ESecCodeAppPIN2); + break; + case RMobilePhone::ESecondUSIMAppPinVerified: + CodeVerifyIndication(ESecCodeAppPIN2); + break; + case RMobilePhone::EUniversalPinRequired: + SimCodeRequest(ESecCodeUPIN); + break; + case RMobilePhone::EUniversalPinVerified: + CodeVerifyIndication(ESecCodeUPIN); + break; + case RMobilePhone::EUniversalPukRequired: + SimCodeRequest(ESecCodeUPUK); + break; + case RMobilePhone::EUniversalPukVerified: + CodeVerifyIndication(ESecCodeUPUK); + break; + default: + DEBUGPRINT2A("Event %d not handled", iEvent); + break; + } + } + +void CStrtSecurityEventObserver::SimCodeRequest( + const TStrtSecurityNoteType aNoteType ) + { + DEBUGPRINT2A("Sim code request: %d", aNoteType); + if (iSecPhaseObserver->IsSecurityPhaseSimOk()) + { + iController->SecurityNoteRequested(aNoteType); + } + else + { + DEBUGPRINT1A("Startup SIM phase is not over yet, discarding request"); + } + } + +void CStrtSecurityEventObserver::SecCodeRequest( + const TStrtSecurityNoteType aNoteType ) + { + DEBUGPRINT2A("Security code request: %d", aNoteType); + if (iSecPhaseObserver->IsSecurityPhaseSecOk()) + { + iController->SecurityNoteRequested(aNoteType); + } + else + { + DEBUGPRINT1A("Startup SEC phase is not over yet, discarding request"); + } + } + +void CStrtSecurityEventObserver::OtherCodeRequest( + const TStrtSecurityNoteType aNoteType ) + { + DEBUGPRINT2A("Other code request: %d", aNoteType); + iController->SecurityNoteRequested(aNoteType); + } + +void CStrtSecurityEventObserver::CodeVerifyIndication( + const TStrtSecurityNoteType aNoteType ) + { + DEBUGPRINT2A("Security code verified: %d", aNoteType); + iController->SecurityCodeVerified(aNoteType); + }