smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.cpp
changeset 10 1d94eb8df9c2
parent 9 b85b0c039c14
--- a/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.cpp	Fri May 21 15:40:57 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1051 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "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:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The Plugin Manager class manages the loading and unloading of plug-ins
- *
- */
-
-#include <QDir>
-#include <QLibraryInfo>
-#include <QFileSystemWatcher>
-#include <QPluginLoader>
-#include <QList>
-#include <smfpluginbase.h>
-#include <smfpluginutil.h>
-#include <smfprovider.h>
-
-#include "smfpluginmanager.h"
-#include "smfpluginmanagerutil.h"
-#include "smftransportmanagerutil.h"
-
-// Static data initialisation
-SmfPluginManager* SmfPluginManager::m_myInstance = NULL;
-
-
-/**
- * Method to get the instance of SmfPluginManager class
- * @param aServer The Smf server instance
- * @return The instance of SmfPluginManager class
- */
-SmfPluginManager* SmfPluginManager::getInstance ( SmfServer *aServer)
-	{
-	if(NULL == m_myInstance)
-		m_myInstance = new SmfPluginManager(aServer);
-	return m_myInstance;
-	}
-
-
-/**
- * Constructor with default argument
- * @param aServer The Smf server instance
- */
-SmfPluginManager::SmfPluginManager ( SmfServer *aServer )
-	{
-	// Save the server instance
-	m_server = aServer;
-	
-	m_server->writeLog("Inside SmfPluginManager::SmfPluginManager()");
-	
-	// initialize the file watcher to monitor plugin addition/upgradation/removal
-	initializeFileWatcher ( );
-	
-	// create a database to store the folder structure of the path "c://resource//qt//plugins"
-	initializeSmfPluginDataBase ( );
-	
-	// create teh Plugin Manager utility class instance
-	m_util = new SmfPluginManagerUtil(this);
-	
-	// Get handle to the Transport MAnager utility instance
-	m_transMngrUtil = SmfTransportManagerUtil::getInstance();
-	}
-
-
-/**
- * Destructor
- */
-SmfPluginManager::~SmfPluginManager ( )
-	{
-	m_server->writeLog("Inside SmfPluginManager::~SmfPluginManager()");
-	if(m_fileWatcher)
-		delete m_fileWatcher;
-	
-	if(m_tempStruct)
-		delete m_tempStruct;
-	
-	if(m_waitingPluginHash.count() > 0)
-		{
-		foreach(SmfWaitingPluginInfoStruc *str, m_waitingPluginHash.values())
-			delete str;
-		}
-	
-	if(m_util)
-		delete m_util;
-	
-	if(m_pluginDataBase.isOpen())
-		{
-		m_pluginDataBase.close();
-		m_pluginDataBase.removeDatabase("SmfPluginsInfoDatabase");
-		}
-	
-	// unload all loaded plugins
-	unload(m_pluginLoaderHash.keys());
-	
-	if(m_myInstance)
-		delete m_myInstance;
-	}
-
-
-/**
- * Method called by Smf server to create a web query.
- * Plugin Manager calls the appropriate web query creation method 
- * using the aOperation and aInputData parameters. Once the web request 
- * is ready, it calls the appropriate methods exposed by the Transport 
- * Manager to send the network request.
- * @param aSessionID The session ID provided by Smf Server
- * @param aPluginID The plugin ID that need to perform this operation
- * @param aOperation The type of operation to be performed
- * @param aInputData The data required to create the web query
- * @return SmfPluginManagerResult The result of the operation
- * @see smfglobal.h
- */
-SmfPluginManagerResult SmfPluginManager::createRequest ( const quint32& aSessionID, 
-		const QString& aPluginID, 
-		const SmfRequestTypeID& aOperation, 
-		QByteArray& aInputData )
-	{
-	m_server->writeLog("Inside SmfPluginManager::createRequest()");
-	
-	SmfPluginManagerResult result = SmfPluginUnknownError;
-
-	// Load the plugin
-	QObject *plugin = load(aPluginID, result);
-	
-	// Check if plugin is loaded
-	if(plugin && (SmfPluginLoaded == result))
-		{
-		m_server->writeLog("Plugin loaded");
-		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(plugin);
-		
-		if(instance)
-		{
-		// Get the registration token of the plugin
-		QString regToken = instance->getProviderInfo()->smfRegistrationId();
-		QList<QUrl> urlList;
-		SmfPluginRequestData reqData;
-
-		// check if the plugin is authorised (with CSM)
-		if( authorisePlugin(regToken, urlList ))
-			{
-			m_server->writeLog("Plugin authorised");
-			
-			// call the utility method to create plugin specific request
-			m_util->createRequest(plugin, aOperation, aInputData, reqData, result);
-
-			// If the request is created successfully, call the TM method to send the request
-			if( SmfPluginRequestCreated == result )
-				{
-				m_server->writeLog("Plugin request creation successful");
-				m_tempStruct = new SmfWaitingPluginInfoStruc();
-				m_tempStruct->iSessionID = aSessionID;
-				m_tempStruct->iPluginId = aPluginID;
-				m_tempStruct->iInstance = instance;
-				m_tempStruct->iOperation = aOperation;
-				m_tempStruct->iInputData = aInputData;
-				m_tempStruct->iUrlList = urlList;
-			
-				// send the request
-				sendRequest ( reqData, result, urlList );
-				}
-			}
-		
-		else
-			{
-			// plugin not authorised, so unload
-			m_server->writeLog("Plugin not authorised!!!");
-			unload(instance);
-			result = SmfPluginNotAuthorised;
-			}
-		}
-		else
-			{
-			// plugin instance cannot be casted, so unload
-			m_server->writeLog("Plugin instance cannot be casted to SmfPluginBase*!!!");
-			unload(instance);
-			result = SmfPluginLoadError;
-			}
-		}
-
-	else
-		{
-		// plugin not loaded
-		m_server->writeLog("Plugin not loaded!!!");
-		result = SmfPluginLoadError;
-		}
-	
-	return result;
-	}
-
-
-/**
- * Method called by Transport Manager when network response is available
- * @param aTransportResult The result of Transport Operation
- * @param aReply The QNetworkReply instance that requested 
- * this transaction
- * @param aResponse The network response data, may be NULL for error
- */
-void SmfPluginManager::responseAvailable ( 
-		const SmfTransportResult &aTransportResult, 
-		QNetworkReply *aReply,
-		QByteArray *aResponse )
-	{
-	m_server->writeLog("Inside SmfPluginManager::responseAvailable()");
-		
-	// For request success or For request cancellation
-	if((SmfTransportOpNoError == aTransportResult) || 
-			(SmfTransportOpOperationCanceledError == aTransportResult))
-			{
-		m_server->writeLog("no transport error/ cancellation");
-
-			// get the details of the plugin which made this request
-			SmfWaitingPluginInfoStruc* info = m_waitingPluginHash.value(aReply);
-			quint32 sessionId = m_waitingPluginHash.value(aReply)->iSessionID;
-			QString pluginId = m_waitingPluginHash.value(aReply)->iPluginId;
-			SmfRequestTypeID operation = m_waitingPluginHash.value(aReply)->iOperation;
-			QByteArray inputData = m_waitingPluginHash.value(aReply)->iInputData;
-			
-			QVariant result;
-			SmfPluginRetType retType = SmfRequestError;
-			SmfResultPage pageResult;
-			
-			m_server->writeLog("Before m_util->responseAvailable");
-			
-			// call the utility method to send response to appropriate plugins
-			SmfPluginManagerResult retValue = m_util->responseAvailable( info->iInstance, operation, 
-				aTransportResult, aResponse, &result, retType, pageResult );
-			
-			// remove the plugin from the waiting list
-			delete m_waitingPluginHash.value(aReply);
-			m_waitingPluginHash.remove(aReply);
-		
-			QByteArray arr;
-			QDataStream stream(&arr, QIODevice::ReadWrite);
-			if( SmfPluginResponseParsed == retValue )
-				{
-				m_server->writeLog("Parsing successful");
-				
-				// serialize the response to suitable class and pass the data to server
-				serializeResult(operation, &result, stream);
-			
-				////TODO:- send error in enums-by manasij
-				// Send the response data to the server
-				m_server->resultsAvailable(sessionId, &arr, SmfNoError);
-				}
-		
-			// Send the request again
-			else if( SmfPluginSendRequestAgain == retValue )
-				{
-				m_server->writeLog("Send request again");
-				
-				// create the request again (with same paramaters)
-				retValue = createRequest( sessionId, pluginId, operation, inputData );
-				}
-			
-			// Error
-			else
-				{
-				m_server->writeLog("Parsing failed!!");
-				
-				// Error in parsing, sent to server
-				m_server->resultsAvailable(sessionId, &arr, SmfpluginResponseParseFailure);
-				}
-		
-			// delete aReply later, when event loop is re-entered
-			aReply->deleteLater();
-			}
-	
-	// Any other error
-	else
-		{
-		m_server->writeLog("Error in SmfPluginManager::responseAvailable, Transport failure code : ");
-		QString err = QString::number(aTransportResult);
-		m_server->writeLog(err);
-		
-		//Added by manasij, send all kind of errors to the server
-		//TODO:- to be refined by PM owner
-		quint32 sessionId = m_waitingPluginHash.value(aReply)->iSessionID;
-		QByteArray arr;
-		m_server->resultsAvailable(sessionId, &arr, SmftransportInitNetworkNotAvailable);
-		}
-	}
-
-
-/**
- * Method to cancel the service request
- * @param aPluginId The plugin whose current operation 
- * is to be cancelled
- */
-bool SmfPluginManager::cancelRequest ( const QString& aPluginId )
-	{
-	bool retValue = false;
-	m_server->writeLog("Inside SmfPluginManager::cancelRequest()");
-	
-	// Get the plugin for which cancel is requested
-	foreach(SmfWaitingPluginInfoStruc* iPluginInfo, m_waitingPluginHash.values())
-		{
-		if( 0 == iPluginInfo->iPluginId.compare(aPluginId))
-			{
-			m_server->writeLog("Plugin to be cancelled found in the waiting list");
-			
-			// Notify Transport Manager
-			m_transMngrUtil->cancelRequest(m_waitingPluginHash.key(iPluginInfo));
-			
-			// Notify the plugin that the request has been cancelled
-			SmfPluginRetType retType;
-			SmfResultPage pageResult;
-			SmfPluginError ret = iPluginInfo->iInstance->responseAvailable( SmfTransportOpCancelled, 
-					NULL, NULL, retType, pageResult );
-			
-			// Remove that plugin from the waiting list
-			delete (m_waitingPluginHash.value(m_waitingPluginHash.key(iPluginInfo)));
-			m_waitingPluginHash.remove(m_waitingPluginHash.key(iPluginInfo));
-			
-			if(SmfPluginErrNone == ret)
-				retValue = true;
-			}
-		//else , cancel requested for a plugin which is not loaded, do nothing
-		else
-			{
-			m_server->writeLog("Plugin to be cancelled not found in the waiting list!!! - do nothing");
-			retValue =  false;
-		}
-		}
-	return retValue;
-	}
-
-
-/**
- * Method called to initialize the file watcher watching the file  
- * system for adition/upgradation/removal of plugins
- */
-void SmfPluginManager::initializeFileWatcher ( )
-	{
-	m_server->writeLog("Inside SmfPluginManager::initializeFileWatcher()");
-	
-	// Create the file watcher for the plugins in /Smf folder of the Qt plugin directory
-	m_fileWatcher = new QFileSystemWatcher(this);
-	
-	// Get the directory having the Qt plugin stubs
-	QDir dir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
-	
-	// If Smf folder exists
-	if(dir.cd("smf/plugin"))
-		{
-		// Add each service provider folders to the file watcher
-		foreach(QString folder, dir.entryList(QDir::AllDirs))
-			{
-			dir.cd(folder);
-			m_fileWatcher->addPath(dir.absolutePath());
-			dir.cdUp();
-			}
-		}
-	else
-		m_fileWatcher->addPath(dir.absolutePath());
-	}
-
-
-
-/**
- * Method called to initialize the database holding the plugin 
- * directory sructure information. This is called only once when 
- * the Plugin Manager is instantiated.
- * This method creates and updates m_pluginIdPathHash member 
- * of this class
- */
-bool SmfPluginManager::initializeSmfPluginDataBase ( )
-	{
-	m_server->writeLog("Inside SmfPluginManager::initializeSmfPluginDataBase()");
-	
-	// Find QSQLite driver and create a connection to database
-	m_pluginDataBase.removeDatabase("SmfPluginsInfoDatabase");
-	m_pluginDataBase = QSqlDatabase::addDatabase("QSQLITE");
-	m_pluginDataBase.setDatabaseName("SmfPluginsInfoDatabase");
-	
-	// Open the database
-	bool opened = m_pluginDataBase.open();
-	if(!opened)
-		return false;
-	
-	m_server->writeLog("Database opened");
-	
-	// Create a query to create the DB table for Plugin Manager (if it doesn't exists)
-	QSqlQuery query;
-	bool tableCreated = false;
-
-	tableCreated = query.exec("CREATE TABLE IF NOT EXISTS pluginDetails ("
-			"pluginId TEXT PRIMARY KEY, interfaceName TEXT, serviceProvider TEXT, "
-			"description TEXT, serviceUrl TEXT, authAppId TEXT)");
-
-	// Error - table not created, Plugin Manager might not work properly
-	if(!tableCreated)
-		{
-		m_server->writeLog("Table not created, error = "+query.lastError().text());
-		return false;
-		}
-	
-	m_server->writeLog("Table created");
-	
-	// Get the directory having the Qt plugin stubs
-	QDir dir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
-	
-	// If Smf folder exists
-	if(dir.cd("smf/plugin"))
-		{
-		m_server->writeLog("Smf/plugin folder exists");
-		// Get each interface folders names
-		foreach(QString intfName, dir.entryList(QDir::AllDirs))
-			{
-			dir.cd(intfName);
-			m_server->writeLog("Interface name : "+dir.dirName());
-			
-			// Get each plugin in this folder
-			foreach(QString pluginName, dir.entryList(QDir::Files))
-				{
-				m_server->writeLog("plugins for this Interface : "+pluginName);
-				
-				// load this plugin
-				QPluginLoader pluginLoader(dir.absoluteFilePath(pluginName));
-				QObject *instance = pluginLoader.instance();
-				if (instance)
-					{
-					m_server->writeLog("instance found");
-					SmfPluginBase* plugin = qobject_cast<SmfPluginBase *>(instance);
-				    if (plugin)
-				    	{
-						m_server->writeLog("SmfPluginBase found");
-						plugin->initialize(SmfPluginUtil::getInstance());
-				    
-						// get the plugin id
-						QString id = plugin->getProviderInfo()->pluginId();
-						
-						// get the interface implemented by the plugin
-						QString intfImplemented = dir.dirName();
-						intfImplemented.prepend("org.symbian.smf.plugin.");
-						m_server->writeLog("intfImplemented=");
-						m_server->writeLog(intfImplemented);
-						
-						// get the service provider
-						QString serProv = plugin->getProviderInfo()->serviceName();
-						
-						//get the description
-						QString desc = plugin->getProviderInfo()->description();
-						
-						// get the service URL
-						QString servURL = plugin->getProviderInfo()->serviceUrl().toString();
-						
-						// get the authentication application id
-						QString str;
-						QStringList list;
-						QString authAppId = plugin->getProviderInfo()->authenticationApp(
-								str, list, QIODevice::ReadWrite);
-						
-						// Update m_pluginIdPathHash
-						m_pluginIdPathHash.insert(id, dir.absoluteFilePath(pluginName));
-						
-						QSqlQuery rowInsertQuery;
-						
-						// insert into database
-						bool rowInserted = rowInsertQuery.exec(QString("INSERT INTO pluginDetails VALUES ('%1', "
-								"'%2', '%3', '%4', '%5', '%6')").arg(id).arg(intfImplemented).arg(serProv)
-								.arg(desc).arg(servURL).arg(authAppId));
-						
-						if(rowInserted)
-							m_server->writeLog("This Plugin's information is added to database : "+id+""
-									", "+intfImplemented+", "+serProv);
-						else
-							m_server->writeLog("plugins data not written to database, error = "+query.lastError().text());
-				    	}
-				    else
-				    	{
-						m_server->writeLog("Plugin could not be converted to SmfpluginBase* - returning");
-						
-						// Close the database
-						m_pluginDataBase.close();
-						
-				    	return false;
-				    	}
-				    
-				    pluginLoader.unload();
-					}
-				else
-					{
-					m_server->writeLog("Plugin could not be loaded - returning");
-					
-					// Close the database
-					m_pluginDataBase.close();
-										
-					return false;
-				}
-				}
-			dir.cdUp();
-			}
-		}
-	else
-		m_server->writeLog("No Smf plugins installed!!!");
-	
-	// Close the database
-	m_pluginDataBase.close();
-	
-	return true;
-	}
-
-
-
-/**
- * Method to load a plugin using its Plugin Id.
- * @param aPluginId The unique ID of the plugin 
- * @param aLoadResult [out] Output paramater indicating the result 
- * of the loading
- * @return The instance of the loaded plugin if loaded, else NULL
- */
-QObject* SmfPluginManager::load ( const QString &aPluginId,
-		SmfPluginManagerResult &aLoadResult)
-	{
-	m_server->writeLog("Inside SmfPluginManager::load()");
-	
-	QPluginLoader *pluginLoader;
-	
-	// Find the plugin Path
-	QString pluginPath = m_pluginIdPathHash.value(aPluginId);
-	
-	if(!pluginPath.isEmpty())
-		{
-		// create the plugin loader and load the plugin
-		pluginLoader = new QPluginLoader(pluginPath);
-		SmfPluginBase *plugin = qobject_cast<SmfPluginBase *>(pluginLoader->instance());
-		
-		// If the plugin is loaded
-		if( pluginLoader->isLoaded() && plugin )
-			{
-			// Initialize the plugin
-			plugin->initialize(SmfPluginUtil::getInstance());
-			
-			// update the plugin loader and the loaded plugin lists
-			m_pluginLoaderHash.insertMulti(plugin, pluginLoader);
-			aLoadResult = SmfPluginLoaded;
-			m_server->writeLog("Plugin loaded");
-			}
-		else
-			{
-			m_server->writeLog("Plugin not loaded");
-		
-			// Plugin could not be loaded, error
-			aLoadResult = SmfPluginNotLoaded;
-		}
-		}
-	else
-		{
-		m_server->writeLog("Plugin not found");
-		
-		// plugin not found in hash
-		aLoadResult = SmfPluginNotFound;
-		}
-	
-	return pluginLoader->instance();
-	}
-
-
-/**
- * Method to unload a loaded plugin. Returns true if success, else 
- * returns false.
- * @param aPlugin The plugin instance to be unloaded
- * @return Returns true if success, else returns false
- */
-bool SmfPluginManager::unload ( SmfPluginBase *aPlugin )
-	{
-	m_server->writeLog("Inside SmfPluginManager::unload()");
-	
-	// Get all the loaders for this plugin
-	QList<QPluginLoader*> loaderList = m_pluginLoaderHash.values(aPlugin);
-	bool unloaded = false;
-
-	foreach(QPluginLoader *loader, loaderList)
-		{
-		// for each loader unload the plugin
-		unloaded = loader->unload();
-		
-		// delete the instance of the loader
-		delete loader;
-		loader = NULL;
-		}
-	
-	// Remove the plugin and its associated loaders from the Hash
-	m_pluginLoaderHash.remove(aPlugin);
-	return unloaded;
-	}
-
-
-/**
- * Method to unload the list of loaded plugins. Returns true if all are 
- * success, else returns false if any one fails.
- * @param aPluginList The list of instances for all plugins that are 
- * to be unloaded
- * @return Returns true if all are success, else returns false if any 
- * one fails.
- */
-bool SmfPluginManager::unload ( const QList<SmfPluginBase *> &aPluginList)
-	{
-	m_server->writeLog("Inside SmfPluginManager::unload() - overloaded fn");
-	//unload all the required plugins
-	bool unloaded = true;
-	
-	foreach(SmfPluginBase *plugin, aPluginList)
-		{
-		// unload individual plugins in the list
-		bool ret = unload(plugin);
-		
-		// indicate error if any one of the plugin failed to unload
-		if(!ret)
-			unloaded = ret;
-		}
-	return unloaded;
-	}
-
-
-/**
- * Method that calls the Transport Manager Utility class method to 
- * send the request created by the plugins over the network
- * @param aReqData The request data created by the plugin
- * @param aResult [out] The output parameter indicating the result 
- * of this method
- * @param aUrlList The list of accessible Urls for this plugin
- * @see smfglobal.h
- */
-void SmfPluginManager::sendRequest ( SmfPluginRequestData &aReqData, 
-		SmfPluginManagerResult &aResult,
-		const QList<QUrl> &aUrlList )
-	{
-	m_server->writeLog("Inside SmfPluginManager::sendRequest()");
-	
-	QNetworkReply* reply;
-	bool sopCompliant = false;
-	
-	// Check the type of Http operation to be performed
-	switch(aReqData.iHttpOperationType)
-		{
-		// Http HEAD
-		case QNetworkAccessManager::HeadOperation:
-			reply = m_transMngrUtil->head(aReqData.iNetworkRequest, aUrlList, sopCompliant);
-			break;
-		
-		// Http GET
-		case QNetworkAccessManager::GetOperation:
-			reply = m_transMngrUtil->get(aReqData.iNetworkRequest, aUrlList, sopCompliant);
-			break;
-			
-		// Http PUT	
-		case QNetworkAccessManager::PutOperation:
-			reply = m_transMngrUtil->put(aReqData.iNetworkRequest, aReqData.iPostData->buffer(), aUrlList, sopCompliant);
-			break;
-			
-		// Http POST
-		case QNetworkAccessManager::PostOperation:
-			reply = m_transMngrUtil->post(aReqData.iNetworkRequest, aReqData.iPostData->buffer(), aUrlList, sopCompliant);
-			break;
-			
-		// Http DELETE
-		case QNetworkAccessManager::DeleteOperation:
-			reply = m_transMngrUtil->deleteResource(aReqData.iNetworkRequest, aUrlList, sopCompliant);
-			break;
-			
-		default:
-			aResult = SmfPluginUnknownService;
-			return;
-		}
-	
-	if( sopCompliant )
-		{
-		if( reply )
-			{
-			// SOP compliant, sending successful
-			m_waitingPluginHash.insert(reply, m_tempStruct);
-			m_tempStruct = NULL;
-			aResult = SmfPluginNoError;
-			
-			m_server->writeLog("No error, request sent");
-			
-			}
-		// reply is NULL, sending failed
-		else
-			{
-			m_server->writeLog("QNEtrworkReply returned error - not sent");
-			aResult = SmfPluginRequestSendingFailed;
-		}
-		}
-	
-	// SOP violation
-	else
-		{
-		m_server->writeLog("SOP checking failed");
-		aResult = SmfPluginSOPCheckFailed;
-	}
-	}
-
-
-/**
- * Method that checks if a plugin is authorised to make a request. 
- * This method communicates with Credential and Settings Manager 
- * through Smf server, giving the registration token and getting 
- * the valid url list if available for this plugin.
- * @param aRegToken The registration token given by the plugin
- * @param aUrlList [out] The list of Urls that the plugin can send 
- * request to (to be filled by CSM)
- * @return Returns true if plugin is authorised, else returns false.
- */
-bool SmfPluginManager::authorisePlugin( const QString &aRegToken, 
-		QList<QUrl> &aUrlList )
-	{
-	Q_UNUSED(aRegToken)
-	m_server->writeLog("Inside SmfPluginManager::authorisePlugin()");
-	
-#ifdef CSM_INTEGRATED
-// Get the valid URL list from CSM, giving the reg token
-	if(m_server->authorisePlugin(aRegToken, aUrlList))
-		return true;
-	else
-		return false;
-	
-#else
-// CSM STUBBING - start
-	QUrl url1 ("http://www.example.com");
-	QUrl url2 ("http://api.facebook.com");
-	QUrl url3 ("http://api.flickr.com");
-
-	aUrlList.append(url1);
-	aUrlList.append(url2);
-	aUrlList.append(url3);
-
-	return true;
-// CSM STUBBING - end
-#endif
-
-	}
-
-
-/**
- * Method to serialize the result of parsing (which is done by the 
- * plugins) to QByteArray to be sent to Smf server.
- * @param aOperation The type of operation to be performed
- * @param aResult The data to be serialized
- * @param aDataStream Stream to be written
- */
-void SmfPluginManager::serializeResult ( 
-		const SmfRequestTypeID &aOperation, 
-		QVariant* aResult,
-		QDataStream &aDataStream )
-	{
-	m_server->writeLog("Inside SmfPluginManager::serializeResult()");
-	
-	// Call the utlity class method to serialize the result
-	m_util->serializeResult(aOperation, aResult, aDataStream);
-	}
-
-
-/**
- * Method for the directoryChanged signal of QFileSystemWatcher.
- * This will update the iPluginHash member and also the Plugin 
- * Information List.
- * @param aPath The path of the directory that has changed
- */
-void SmfPluginManager::directoryChanged ( const QString &aPath )
-	{
-	m_server->writeLog("Inside SmfPluginManager::directoryChanged()");
-	
-	// Create a QDir instance with the given path
-	QDir dir(aPath);
-	QString pluginId;
-	QString oldpluginId;
-	QString interfaceName;
-	QString serviceProv;
-	QString authAppId;
-
-	// Get all the files in the directory at a specified path(sorted)
-	QStringList newPlugins = dir.entryList(QDir::Files, QDir::Name);
-	QStringList::const_iterator newListIterator = newPlugins.constBegin();
-	
-	// Get all plugins who were in this path, before this directory was changed
-	QStringList availablePlugins = m_pluginIdPathHash.keys(aPath);
-	availablePlugins.sort();
-	QStringList::const_iterator oldListIterator = availablePlugins.constBegin();
-	
-	// Open the database
-	bool opened = m_pluginDataBase.open();
-	if(!opened)
-		;//return;
-	
-	// If plugin is changed
-	if( newPlugins.count() == availablePlugins.count() )
-		{
-		// Check for equality
-		while( newListIterator != newPlugins.constEnd() )
-			{
-			if( *newListIterator == *oldListIterator )
-				{
-				newListIterator++;
-				oldListIterator++;
-				}
-			else
-				break;
-			}
-		// replace *oldListIterator with *newListIterator
-		QHash<QString, QString>::iterator i = m_pluginIdPathHash.find(*oldListIterator);
-		m_pluginIdPathHash.insert(*newListIterator, i.value());
-		m_pluginIdPathHash.remove(*oldListIterator);
-		
-		// Also update database with *newListIterator
-	    QSqlQuery updateQuery;
-	    
-	    bool updated = updateQuery.exec(QString("UPDATE pluginDetails SET pluginId = '%1' "
-	    		"WHERE pluginId = '%2'").arg(*newListIterator).arg(*oldListIterator));
-	    if (!updated)
-	    	m_server->writeLog("Database table not updated, error = "+updateQuery.lastError().text());
-		
-		
-		// Get the new and old plugin Ids
-		pluginId = *newListIterator;
-		oldpluginId = *oldListIterator;
-		
-		// Load the plugin and get its service provider name
-		SmfPluginManagerResult result;
-		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
-		
-		if(instance && (SmfPluginLoaded == result))
-			{
-			instance->initialize(SmfPluginUtil::getInstance());
-			serviceProv = instance->getProviderInfo()->serviceName();
-			interfaceName = dir.dirName();
-			}
-		
-		unload(instance);
-		// Inform server that plugin has been changed
-#ifdef CSM_INTEGRATED
-		//Remove after Server Integration
-		m_server->pluginChanged(oldPluginId, newPluginId, interfaceName, serviceProv);
-#endif
-		}
-		
-	// If plugin is added
-	else if(newPlugins.count() > availablePlugins.count())
-		{
-		// Check for equality
-		while( oldListIterator != availablePlugins.constEnd() )
-			{
-			if( *newListIterator == *oldListIterator )
-				{
-				newListIterator++;
-				oldListIterator++;
-				}
-			else
-				break;
-			}
-		// replace *oldListIterator with *newListIterator
-		m_pluginIdPathHash.insert(*newListIterator, aPath);
-		
-		// Get the plugin Id
-		pluginId = *newListIterator;
-		
-		// Load the plugin and get its service provider name
-		SmfPluginManagerResult result;
-		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
-		
-		if(instance && (SmfPluginLoaded == result))
-			{
-			instance->initialize(SmfPluginUtil::getInstance());
-			serviceProv = instance->getProviderInfo()->serviceName();
-			interfaceName = dir.dirName();
-			interfaceName.prepend("org.symbian.smf.plugin.");
-			QString prgm;
-			QStringList list;
-			authAppId = instance->getProviderInfo()->authenticationApp(prgm, list, QIODevice::ReadWrite);
-			}
-		
-		unload(instance);
-		
-		// Also add to the database the value newListIterator and aPath
-		QSqlQuery insertRowQuery;
-		bool rowInserted = insertRowQuery.exec(QString("INSERT INTO pluginDetails VALUES "
-				"('%1', '%2', '%3', '%4')").arg(pluginId).arg(interfaceName).arg(serviceProv).arg(authAppId));
-
-		 // Error
-		if (!rowInserted)
-			m_server->writeLog("Database table not inserted, error = "+insertRowQuery.lastError().text());
-		
-		// Inform server that plugin has been added
-#ifdef CSM_INTEGRATED
-		//Remove after Server Integration
-		m_server->pluginAdded(pluginId, interfaceName, serviceProv);
-#endif
-		}
-	
-	// If plugin is removed
-	else //for newPlugins.count() < availablePlugins.count()
-		{
-		// Check for equality
-		while( newListIterator != newPlugins.constEnd() )
-			{
-			if( *newListIterator == *oldListIterator )
-				{
-				newListIterator++;
-				oldListIterator++;
-				}
-			else
-				break;
-			}
-		// remove *oldListIterator
-		m_pluginIdPathHash.remove(*oldListIterator);
-		
-		// Also remove oldListIterator from the database
-		QSqlQuery deleteRowQuery;
-		bool rowDeleted = deleteRowQuery.exec(QString("DELETE FROM pluginDetails WHERE pluginId = '%1'")
-				.arg(*oldListIterator));
-		 
-		// Error
-		if (!rowDeleted)
-			m_server->writeLog("Database table row not deleted, error = "+deleteRowQuery.lastError().text());
-		
-		// Get the plugin Id
-		pluginId = *oldListIterator;
-		
-		// Load the plugin and get its service provider name
-		SmfPluginManagerResult result;
-		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
-		
-		if(instance && (SmfPluginLoaded == result))
-			{
-			instance->initialize(SmfPluginUtil::getInstance());
-			serviceProv = instance->getProviderInfo()->serviceName();
-			interfaceName = dir.dirName();
-			}
-		
-		unload(instance);
-		// Inform server that plugin has removed
-#ifdef CSM_INTEGRATED
-		//Remove after Server Integration
-		m_server->pluginRemoved(pluginId, interfaceName, serviceProv);
-#endif
-		}
-	// Close the database
-	m_pluginDataBase.close();
-	}
-
-
-/**
- * Method to get the list of the SmfProvider for all the plugins that implement 
- * the mentioned Interface 
- * @param aInterface The interface for which list of plugins is required 
- * @param aMap The map of pluginID and its corresponding SmfProvider
- */
-void SmfPluginManager::getPlugins(const QString& aInterface, QMap<QString,SmfProvider>& aMap)
-	{
-	m_server->writeLog("Inside SmfPluginManager::getPlugins()");
-	
-	// Open the database
-	bool opened = m_pluginDataBase.open();
-	if(!opened)
-		{
-		m_server->writeLog("Data base not opened, exiting getplugins()");
-		return;
-		}
-	
-	m_server->writeLog("Data base opened");
-	
-	// Query the database for all pluginIDs that implement the given interface
-	QSqlQuery query(QString("SELECT pluginId, interfaceName, serviceProvider, description, "
-			"serviceUrl FROM pluginDetails where interfaceName = '%1'").arg(aInterface));
-	
-	if (query.next())
-		{
-		m_server->writeLog("Query is success");
-
-		SmfProvider prov;
-		
-		// get the pluginId
-		QString pluginId = query.value(0).toString();
-		
-		// get the service type / interface name
-		QStringList servicetypes;
-		servicetypes.insert(0, query.value(1).toString());
-		prov.serviceTypes(servicetypes);
-		
-		// Get the serv provider
-		QString servName = query.value(2).toString();
-		prov.serviceName(servName);
-		
-		// Get the description
-		QString desc = query.value(3).toString();
-		prov.description(desc);
-		
-		// Get the service URL
-		QUrl url(query.value(4).toString());
-	prov.serviceUrl(url);
-
-		aMap.insert(pluginId, prov);
-		}
-	else
-		m_server->writeLog("Data base query->next() returned false, error = "+query.lastError().text());
-	
-	// Close the database
-	m_pluginDataBase.close();
-	}
-
-
-/**
- * Method to get the pluginID for the mentioned interface and service provider 
- * @param aInterface The interface implemented by the plugin
- * @param aProv The plugin's service provider
- * @param aPluginId The required pluginID
- */
-void SmfPluginManager::getPluginId(const QString& aInterface, const SmfProvider& aProv, QString& aPluginId)
-	{
-	m_server->writeLog("SmfPluginManager::getPluginId");
-	
-	// Open the database
-	bool opened = m_pluginDataBase.open();
-	if(!opened)
-		{
-		m_server->writeLog("Data base not opened, exiting");
-		return;
-		}
-	
-	m_server->writeLog("Data base opened");
-
-	// Query the database for a pluginID with given interface name and service provider
-	QSqlQuery query(QString("SELECT pluginId FROM pluginDetails where interfaceName = '%1' AND "
-			"serviceProvider = '%2'").arg(aInterface).arg(aProv.serviceName()));
-	
-	if (query.next())
-		{
-		m_server->writeLog("Query is success");
-		
-		// get the pluginId
-		aPluginId = query.value(0).toString();
-		}
-	else
-		m_server->writeLog("Data base query->next() returned false, error = "+query.lastError().text());
-	
-	m_server->writeLog("returned pluginID = "+aPluginId);
-	
-	// Close the database
-	m_pluginDataBase.close();
-	}