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 <unifiedkeystore.h> // CUnifiedKeyStore
+#include <ct/tcttokenobjecthandle.h> // 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();
+}
+