diff -r 000000000000 -r 164170e6151a wim/WimClient/inc/WimSecModuleMgr.h --- /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 +#include + +// 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& 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* 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* 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