vpnengine/pkiservice/inc/keyoperationqueue.h
changeset 0 33413c0669b9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vpnengine/pkiservice/inc/keyoperationqueue.h	Thu Dec 17 09:14:51 2009 +0200
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2008 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:   A task que to serialize the key operations among session.
+*
+*/
+
+
+
+#ifndef C_KEYOPERATIONQUEUE_H
+#define C_KEYOPERATIONQUEUE_H
+
+#include <e32base.h>
+
+#include "pkidefs.h"
+
+class CPKISession;
+class CKeyPairOperationProvider;
+class CPKIMapper;
+
+
+/**
+ * A queueing class for keypair operations.
+ *
+ * This class queues the keypairoperations issued by client sessions.
+ * The keyoperations are queued, because only one session handle to 
+ * CUnifiedKeystore can be open in this process and the CUnifiedKeystore
+ * can't handle concurrent asynchronous operations simultaniously. Only one
+ * session handle can be open to CUnifiedKeystore, because of the required 
+ * Login/Logoff functionality.
+ *
+ * Server side session add the operations to que by calling AddOperationL.
+ * The operations are handled one at the time. When the operation is completed, the
+ * key operation queue signals the associated RMessage.
+ *
+ * Rest of the operations are call backs, which are used to signal, that the current
+ * operation is completed.
+ *
+ */
+class CKeyOperationQueue : public CBase
+    {
+public:
+    static CKeyOperationQueue* NewL(CPKIMapper& aMapper);
+    ~CKeyOperationQueue();
+    
+    void AddOperationL(CPKISession& aOwner, 
+                       const RMessage2& aMessage,
+                       TInt aUsedKeyStore,
+                       TPkiServiceStoreType aUsedCertStore);
+    
+    
+    void KeyStoreInitComplete(TInt aStatus);
+
+    /**
+    *  Transfers the ownership of aKeyList.
+    */                
+    void KeyPairListComplete(TInt aStatus, CArrayFixFlat<TKeyListEntry>* aKeyList);
+
+    /**
+    *  Transfers the ownership of aDecryptedData.
+    */
+    void DecryptComplete(TInt aStatus, HBufC8* aDecryptedData);
+
+    /**
+    *  Transfers the ownership of aSignedData.
+    */        
+    void SignComplete(TInt aStatus, HBufC8* aSignedData);
+
+    /**
+    *  Transfers the ownership of aPublicKeyData.
+    */                
+    void GetPublicKeyCompleted(TInt aStatus, HBufC8* aPublicKeyData);
+
+    void LogonCompleted(TInt aStatus);
+    void LogoffCompleted(TInt aStatus);
+    void PasswordChangeCompleted(TInt aStatus);
+    void KeyPairRemoveCompleted(TInt aStatus);
+    void KeyGenerationCompleted(TInt aStatus, TPKIKeyIdentifier& aKeyId);
+    void StoreKeyPairCompleted(TInt aStatus, TPKIKeyIdentifier& aKeyId);
+
+    
+private:           
+
+    class TKeyOperation
+        {
+        public:
+        TKeyOperation(CPKISession& aOwner, 
+                      const RMessage2& aMessage,
+                      TInt aUsedKeyStore,
+                      TPkiServiceStoreType aUsedCertStore);
+        
+        CPKISession& iOwner;
+        const RMessage2 iMessage;    
+        TInt iUsedKeyStore; 
+        TPkiServiceStoreType iUsedCertStore;
+        };
+        
+
+    CKeyOperationQueue(CPKIMapper& aMapper);
+    void ConstructL();                
+    
+    void StartNextOperation();
+    void ServiceL(TKeyOperation& aOperation);
+    
+    void CompleteCurrentOperation(TInt aStatus);
+    
+    CPKIMapper&                  iMapper;
+    RPointerArray<TKeyOperation> iOperationQue;
+    TKeyOperation*               iCurrentOperation;             
+    
+    CKeyPairOperationProvider*   iKeyOperationProvider;
+    };
+
+#endif //C_KEYOPERATIONQUEUE_H