diff -r 3255e7d5bd67 -r 989397f9511c cpsecplugins/cpadvancedsecplugin/src/advsecsettingssecuritymoduleeraser_symbian.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cpsecplugins/cpadvancedsecplugin/src/advsecsettingssecuritymoduleeraser_symbian.cpp Thu Oct 14 13:56:11 2010 +0300 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2010 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: Helper class to remove a security module +* +*/ + + +#include "advsecsettingssecuritymoduleeraser_symbian.h" +#include // CUnifiedKeyStore +#include // TCTTokenObjectHandle + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::NewL() +// --------------------------------------------------------------------------- +// +CAdvSecSettingsSecurityModuleEraser *CAdvSecSettingsSecurityModuleEraser::NewL( + CUnifiedKeyStore &aKeyStore) +{ + CAdvSecSettingsSecurityModuleEraser *self = new(ELeave) CAdvSecSettingsSecurityModuleEraser( + aKeyStore); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::~CAdvSecSettingsSecurityModuleEraser() +// --------------------------------------------------------------------------- +// +CAdvSecSettingsSecurityModuleEraser::~CAdvSecSettingsSecurityModuleEraser() +{ + iKeys.Close(); + delete iKeyFilter; + iTargetKeyStore = NULL; + iClientStatus = NULL; +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::Erase() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::Erase(TInt aKeyStoreIndex, TRequestStatus &aStatus) +{ + aStatus = KRequestPending; + if (!IsActive() && (iState == EIdle)) { + if (aKeyStoreIndex >= 0 && aKeyStoreIndex < iKeyStore.KeyStoreCount()) { + iTargetKeyStore = &(iKeyStore.KeyStore(aKeyStoreIndex)); + iClientStatus = &aStatus; + + iKeys.Reset(); + iTargetKeyStore->List(iKeys, *iKeyFilter, iStatus); + iState = EListingKeys; + SetActive(); + } else { + TRequestStatus *status = &aStatus; + User::RequestComplete(status, KErrArgument); + } + } else { + TRequestStatus *status = &aStatus; + User::RequestComplete(status, KErrInUse); + } +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::DoCancel() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::DoCancel() +{ + switch (iState) { + case EListingKeys: + iTargetKeyStore->CancelList(); + break; + case EDeletingKey: + iKeyStore.CancelDeleteKey(); + break; + default: + break; + } + iState = EIdle; + + User::RequestComplete(iClientStatus, KErrCancel); + iClientStatus = NULL; +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::RunL() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::RunL() +{ + switch (iState) { + case EListingKeys: + DeleteFirstKeyL(); + break; + case EDeletingKey: + DeleteNextKeyL(); + break; + default: + ASSERT(EFalse); + break; + } +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::RunError() +// --------------------------------------------------------------------------- +// +TInt CAdvSecSettingsSecurityModuleEraser::RunError(TInt aError) +{ + User::RequestComplete(iClientStatus, aError); + iClientStatus = NULL; + iState = EIdle; + return KErrNone; +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::CAdvSecSettingsSecurityModuleEraser() +// --------------------------------------------------------------------------- +// +CAdvSecSettingsSecurityModuleEraser::CAdvSecSettingsSecurityModuleEraser( + CUnifiedKeyStore &aKeyStore) : CActive(CActive::EPriorityStandard), + iKeyStore(aKeyStore) +{ + CActiveScheduler::Add(this); +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::ConstructL() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::ConstructL() +{ + iKeyFilter = new(ELeave) TCTKeyAttributeFilter; + iKeyFilter->iPolicyFilter = TCTKeyAttributeFilter::EAllKeys; +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::DeleteFirstKeyL() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::DeleteFirstKeyL() +{ + iKeyIndex = 0; + DeleteOneKeyL(); +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::DeleteOneKeyL() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::DeleteOneKeyL() +{ + if (iKeyIndex < iKeys.Count()) { + iKeyStore.DeleteKey(iKeys[iKeyIndex]->Handle(), iStatus); + iState = EDeletingKey; + SetActive(); + } else { + User::RequestComplete(iClientStatus, KErrNone); + iClientStatus = NULL; + iState = EIdle; + } +} + +// --------------------------------------------------------------------------- +// CAdvSecSettingsSecurityModuleEraser::DeleteNextKeyL() +// --------------------------------------------------------------------------- +// +void CAdvSecSettingsSecurityModuleEraser::DeleteNextKeyL() +{ + ++iKeyIndex; + DeleteOneKeyL(); +} +