diff -r 675a964f4eb5 -r 35751d3474b7 crypto/weakcryptospi/source/spi/cryptospisetup/cryptopluginsloader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcryptospi/source/spi/cryptospisetup/cryptopluginsloader.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,230 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* crypto plugins loader +* +*/ + + +/** + @file + @internalComponent + @released +*/ + +#ifndef __CRYPTOPlUGINSLOADER_H__ +#define __CRYPTOPlUGINSLOADER_H__ + +#include +#include + +namespace CryptoSpi + { + /** + The class holds the characteristics of an interface and DLL index, + which is used for externalization. + */ + class TCharacteristicsDll + { + public: + /** + Constructor that constructs a TCharacteristicsDll object + + @param aCharacteristics a pointer to the Characteristics. + @param aIndex the index of the plugindll that contains the interface implemetation + */ + TCharacteristicsDll(const TCharacteristics* aCharacteristics, TInt aIndex); + + /** + Externalize this object to the supplied stream. + + @param aStream Stream to write TCharacteristicsDll to. + */ + void ExternalizeL(RWriteStream& aStream); + + public: + /** + The pointer the characteristic of an interface + */ + const TCharacteristics* iCharacteristics; + + /** + The index of the plugin dll + */ + TInt iDllIndex; + }; + + /** + The class contains a list of characteristics-DllIndex pair. + which is used for externalization. + */ + NONSHARABLE_CLASS(CCharacteristicDllIndexList) : public CBase + { + public: + /** + Creates a new CCharacteristicDllIndexList. + @return A pointer to the CCharacteristicDllIndexList instance + */ + static CCharacteristicDllIndexList* NewL(); + + /** + Creates a new CCharacteristicDllIndexList. + Leave the CCharacteristicDllIndexList pointer on the cleanup stack. + @return A pointer to the CCharacteristicDllIndexList instance + */ + static CCharacteristicDllIndexList* NewLC(); + + /** + Destructor + */ + ~CCharacteristicDllIndexList(); + + /** + Externalize this object to the supplied stream. + + @param aStream Stream to write CCharacteristicDllIndexList to. + */ + void ExternalizeL(RWriteStream& aStream); + + private: + /** + Constructor + */ + CCharacteristicDllIndexList(); + + public: + /** + The list of of characteristics-DllIndex pair. + */ + RArray iCharacteristicList; + }; + + + /** + This subclass of MStreamBuf is used with + RWriteStream to count how many bytes are + required to externalize an object. + */ + class TSizeStream : public MStreamBuf + { + public: + inline TSizeStream(); + inline TInt Size() const; + + // override MStreamBuf + virtual void DoWriteL(const TAny* /* aPtr */, TInt aLength); + + private: + /** + Accumulated stream length in bytes. + */ + TInt iSize; + }; + + inline TSizeStream::TSizeStream() + : iSize(0) + { + } + + inline TInt TSizeStream::Size() const + { + return iSize; + } + + /** + This class loads all the plugins, build all the characteristics, + and publish the properties for crypto spi. + */ + NONSHARABLE_CLASS(CCryptoPluginsLoader) : public CBase + { + public: + /** + Create a CCryptoPluginsLoader instance + */ + static CCryptoPluginsLoader* NewL(); + + /** + Create a CCryptoPluginsLoader instance. + Leave the pointer on the cleanup stack + */ + static CCryptoPluginsLoader* NewLC(); + + /** + Destructor + */ + ~CCryptoPluginsLoader(); + + /** + Create the properties of the plugin configurations. + */ + void CreatePluginConfigPropertyL(); + + /** + Create the properties for the interfaces + */ + void CreateInterfacePropertyL(TInt32 aInterface); + + private: + /** + Construtors + */ + CCryptoPluginsLoader(); + void ConstructL(); + + /** + Build the plugins' characteristics lists + */ + void BuildPluginCharacteristicsL(); + + /** + Build the plugin' characteristics list + @param aInterfaceUid the interface UID + @param aEnumerateFunc the entry pointer of enumeration function + @param aDllIndex the index of the loaded plugin + */ + void BuildInterfaceCharacteristicsL(TUid aInterfaceUid, + EnumerateCharacteristicsFunc aEnumerateFunc, + TInt aDllIndex); + /** + Loads the crypto plugins + @param aOption the option to load all the plugins or one more plugins + */ + void LoadPluginsL(); + + /** + Create the interfaces' properties and write to the stream + @param aStream the stream to be written to + @param aInterface the interface Uid + */ + void DoCreateInterfacePropertyL(RWriteStream& aStream, TInt32 aInterface); + + private: + /** + The plugin DLL list, which holds all the plugin DLLs + */ + RArray iPluginDllList; + + /** + The file name corresponding to the plugin DLLs. + */ + RArray iPluginNames; + + /** + The characteristic list, the length of the array is the number of the interfaces + */ + RHashMap iInterfaceCharacteristicsMap; + }; + } +#endif //__CRYPTOPlUGINSLOADER_H__ +