wim/WimClient/inc/WimSecModuleMgr.h
changeset 0 164170e6151a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimClient/inc/WimSecModuleMgr.h	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2002 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:  API for listing all WIM Security Modules
+*
+*/
+
+
+#ifndef WIMSECMODULEMGR_H
+#define WIMSECMODULEMGR_H
+
+//  INCLUDES
+#include "WimClsv.h"
+#include "WimSig.h"
+#include <e32base.h>
+#include <ct.h> 
+
+// FORWARD DECLARATIONS
+class CWimSecModule;
+class RWimMgmt;
+
+
+// CLASS DECLARATION
+/**
+*  API for list all WIM Security Modules
+*  This API provides function to list all WIM Security Modules
+*  which your device finds. Listed CWimSecModule objects provides 
+*  methods to manage key stores. 
+*
+*  @lib WimClient
+*  @since Series 60 2.1
+*/
+class CWimSecModuleMgr: public CActive
+    {
+    public:  
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CWimSecModuleMgr* NewL(); 
+         
+        /**
+        * Destructor.
+        */
+        IMPORT_C virtual ~CWimSecModuleMgr();
+
+    public: // New functions
+        
+        /**
+        * Returns all WIM Security Modules in array. 
+        * @param  aTokens     Array containing all WIMs.(OUT)
+        * @param  aStatus   Status from caller.         
+        * @return void
+        */
+        IMPORT_C void GetEntries( RCPointerArray<HBufC>& aTokens, 
+            TRequestStatus& aStatus );
+        
+
+        /**
+        * Cancels listing operation. 
+        * @return void
+        */        
+        IMPORT_C void CancelList();
+
+        /**
+        * Returns the number of WIM cards
+        * If WIM is not initialized and listing operation completed
+        * before calling WimCount(), this will return KErrNotFound.
+        * @return TInt     aNumber of wims.
+        */        
+        IMPORT_C TInt WimCount();
+
+        /**
+        * Returns CWimSecModule according to received index.
+        * If WIM is not initialized and listing operation completed
+        * before calling this function, User::Leave( KErrNotFound )
+        * is called.        
+        * @param aIndex -needed element from array.
+        * @return CWimSecModule*  -the element from array.
+        */
+        IMPORT_C CWimSecModule* GetWimSecModuleByIndexL( 
+            const TInt aIndex );
+
+        /** 
+        * Returns WIM label according to received index.
+        * If WIM is not initialized and listing operation completed
+        * before calling this function, User::Leave( KErrNotFound )
+        * is called.                
+        * @param aIndex -wanted index from array.
+        * @return TPtrC -pointer to label.
+        */
+        IMPORT_C TPtrC WimLabelByIndexL( const TInt aIndex );
+
+        /** 
+        * Returns the number of "slot" where current token is attached.
+        * If WIM is not initialized and listing operation completed
+        * before calling this function, User::Leave( KErrNotFound )
+        * is called.                
+        * @param aIndex -needed index from array.
+        * @return TInt -the place where token is attached.
+        */
+        IMPORT_C TInt WimTokenNumberByIndexL( const TInt aIndex );
+
+        
+    private:
+        
+        /**
+        * C++ default constructor.
+        */
+        CWimSecModuleMgr();
+
+    
+        /**
+        * By default Symbian 2nd phase constructor is private
+        */
+        void ConstructL();
+
+        /**
+        * Frees memory & preferences that have been allocated.
+        * @return void
+        */
+        void DeAllocateWimReferences();
+
+    private: 
+        
+
+        /**
+        * Sets own iStatus to KRequestPending, and signals it 
+        * with User::RequestComplete() request. This gives chance 
+        * to active scheduler to run other active objects. After a quick
+        * visit in active scheduler, signal returns to RunL() and starts next
+        * phase of listing operation. This makes possible the cancelling 
+        * function to get through.
+        * @return void
+        */
+        void SignalOwnStatusAndComplete();
+        
+        /**
+        * Appends labels of available Tokens (wims) to an array.
+        * @return void
+        */
+        void AppendTokenLabelsToArrayL();
+        
+        /**
+        * Reads the count of the WIM.
+        * @return void
+        */  
+        void ReadWimCount();
+        
+        /**
+        * Five different phases, which are used to initialize
+        * WIM and list security modules.
+        */
+        enum TPhase
+            {
+            EConnectClientSession,
+            ECreateNewSession,
+            EInitializeWim,
+            EGetWimRefs
+            };
+    private: //From CActive
+
+        /**
+        * Different phases are handled here.
+        * @return void
+        */
+        void RunL();
+        
+        /**
+        * Cancellation function
+        * Deallocates member variables and completes client status with
+        * KErrCancel error code.
+        * @return void
+        */
+        void DoCancel();
+
+        /**
+        * The active scheduler calls this function if this active 
+        * object's RunL() function leaves. 
+        * Handles neccessary cleanup and completes request with
+        * received error code.
+        * @param aError -Error code which caused this event
+        * @return TInt  -Error code to active scheduler, is always KErrNone.
+        */ 
+        TInt RunError( TInt aError );
+
+    private: 
+
+        /**
+        * Allocate pointer to WIM and create CWimSecModules
+        * @return TInt -Error code
+        */
+        TInt WIMModulesL();
+
+
+    private:
+
+        //Used to handle initialization of WIM and listing tokentypes
+        TPhase                          iPhase;
+                
+        //Client status is stored here while WIM is started and
+        //listing operation is made. After that User::RequestComplete()
+        //is signalled with iClientStatus.
+        TRequestStatus*                 iClientStatus;
+        
+        //Array containing WIM labels. Not owned, caller is 
+        //responsible to destroy received array.
+        RCPointerArray<HBufC>*          iTokenLabels;
+        
+        //Flag to indicate errors during WIM initialization.
+        TInt                            iWimStartErr;
+        
+        // Array of pointers to WIM Security Modules. Owned. 
+        // Valid as long as CWimSecModuleMgr is valid.
+        CArrayPtrFlat<CWimSecModule>*   iWims; 
+        
+        // Pointer to Client Session. Owned. 
+        // Valid as long as CWimSecModuleMgr is valid.
+        RWimMgmt*                       iClientSession;
+        
+        // WIM reference list. Owned. Valid as long as iClientSession
+        // is valid.
+        TWimAddressList                 iWimAddrLst;
+        
+        // WIM count, defines the amount of WIM cards.
+        TUint                           iWimCount;
+        
+        TPhase                          iCurrentPhase;
+
+    };
+
+#endif      // WIMSECMODULEMGR_H   
+            
+// End of File