authenticationservices/authenticationserver/source/server/pluginmgr.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 24 Nov 2009 09:06:03 +0200
changeset 19 ece3df019add
permissions -rw-r--r--
Revision: 200948 Kit: 200948

/*
* Copyright (c) 2005-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: 
*
*/


/**
 @file
 @released
 @internalComponent
*/
#ifndef PLUGINMGR_H
#define PLUGINMGR_H

#include <authserver/authplugininterface.h>
namespace AuthServer 
{

/**
 * The plugin manager is responsible for managing the lifetime of plugin DLLs.
 **/

class CPluginMgr : public CBase
	{
public:
	static CPluginMgr* NewL();
	static CPluginMgr* NewLC();
	
	~CPluginMgr();

	/**
	 * Returns the requested plugin. If the plugin has not yet been loaded
	 * then it will be instantiated and cached prior to returning.
	 *
	 * @param aId the id of the plugin to return.
	 *
	 * @return the requested plugin
	 *
	 * @leave KErrAuthServerNoSuchPlugin
	 *
	 **/
	CAuthPluginInterface* PluginL(const TPluginId& aId);

    /**
	 * Returns the list of plugin implementations. The list is cached for use
	 * rather than reloading it in multiple places.
	 *
	 * @return the array of implementation info objects
	 *
	 **/
	const RImplInfoPtrArray& ImplementationsL();
	
	CAuthPluginInterface* ImplementationL(TInt aIndex);
	
	/**
	 * Forces all plugins to forget their training for id
	 *
	 * @param aId the id of the identitiy to forget.
	 *
	 **/
	void ForgetIdentityL(TIdentityId aId);
	
	/**
	 * Builds authentication plugins list.
	 **/
	void BuildAuthPluginsListL();
	
private:
	static TInt PluginCompare(const CAuthPluginInterface& lhs,
							  const CAuthPluginInterface& rhs);
							  
	static TInt FindById(const TPluginId* lhs,
						 const CAuthPluginInterface& rhs);
						 
	static 	TLinearOrder<CAuthPluginInterface> SPluginOrder;
	
	void ConstructL();
	
	
	/**
	 * Forces the plugin manager to free all plugin objects.
	 **/
	void ReleasePlugins();
	
	/**
	 * Forces the plugin manager to free the implemtation info array and
	 * reload it on the next call to Implementations.
	 **/
	void ReleaseImplInfo();
	
	/**
	 * Creates an implementation of the specified plugin.
	 * 
	 * @param aId Id of the plugin to be created.
	 *	
	 * @return the requested plugin
	 *	 
	 **/
	CAuthPluginInterface* CreatePluginImplementationL(const TPluginId &aId);
	
private:	
	mutable RPointerArray<CAuthPluginInterface> iPlugins;
	
	mutable RImplInfoPtrArray iImplArray;
	
	/**
	 * Maintain a list of plugin destructor keys.
	 * This is used to destroy all plugin instances when ReleasePlugins
	 * is called.
	 * */
	mutable RArray<TUid>iPluginDtorUids;
	
    };

} //namespace

#endif // PLUGINMGR_H