cpsecplugins/cpadvancedsecplugin/src/advsecsettingssecuritymoduleeraser_symbian.cpp
changeset 63 989397f9511c
--- /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();
+}
+