smf/smfservermodule/smfserver/server/smfserver.h
changeset 7 be09cf1f39dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserver.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,237 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Manasij Roy, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* SMF Server component which handles the client requests and delegates them propoerly to the appropriate component
+*
+*/
+
+#ifndef SMFSERVER_H
+#define SMFSERVER_H
+#include <QObject>
+#include<QMap>
+//SMF wide global const and macros, to be shared among SMF components as well as SMF aware apps
+#include "smfglobal.h"
+#include "smfprovider.h"
+#include "smftransportmanager.h" // Transport Manager
+/*
+* Forward declarations
+* Other components of the SMF
+*/
+class SmfTransportManager;
+class SmfPluginManager;
+class SmfDataStoreManager;
+class SmfSettingsAuthManager;
+class SmfClient;
+
+//For the time being, need to change later
+typedef QString SmfInterfaceID;
+//For the time being, need to change later
+typedef QString SmfPluginID;
+//TODO:- define proper enums after consulting with CM owner
+typedef int NotificationType;
+//Private implementation for different platforms
+#ifdef Q_OS_SYMBIAN
+class SmfServerSymbian;
+class SmfServerSymbianSession;
+#else
+class SmfServerQt;
+class SmfServerQtSession;
+#endif
+#include "smfcontact.h"
+#ifdef NO_OTHER_MODULES
+#include <QTimer>
+#include <QTextStream>
+#endif
+/**
+ * SmfServer manages the client requests and delegates them to the appropriate SMF component,
+ * service the clients asymchronously
+ *
+ */
+class SmfServer : public QObject
+{
+  Q_OBJECT
+
+public:
+
+  SmfServer(QObject* parent = 0);
+  
+  /**
+   * Does the following,-
+   *First it'll check whether server is already running, if already running it'll
+   *simply return
+   *else
+   *it'll start the server exe and initialize all other SMF components
+   *returns whether server is started successfully or not  
+   */
+  bool startServer();
+  
+  ~SmfServer(){}
+
+public:
+  /*
+   * Request the Credential and Settings manager to check whether client has
+   * been authorized previously.
+   * SmfClientAuthID may be same as SID of the client which can be retrieved
+   * if using Symbian Client-Server private implementation. Not supported for
+   * other platforms
+   */
+  bool isClientAuthorized(SmfClientAuthID clientID);
+  
+  /*
+   * In case the client is yet to be authorized, it starts the authorization
+   * process by triggering Credential Manager.
+   * The SLOT clientAuthorizationFinished is called once its done.
+   * SmfClientAuthID may be same as SID of the client which can be retrieved
+   * if using Symbian Client-Server private implementation. Not supported for
+   * other platforms.
+   */
+  void authorizeClient(SmfClientAuthID clientID);
+  
+  /*
+   * Requests Plugin Manager to get a list of plugin IDs who implement
+   * the interface interfaceID.
+   * This is used got SmfClient::GetServices () where we need a list of plugins
+   */
+  void getPlugins(SmfInterfaceID interfaceID, QMap<SmfPluginID,SmfProvider>& pluginIDMap);
+  /**
+   * Same as above, except this is used for rest of the requests where we need
+   * a particular plugin
+   */
+  SmfPluginID getPlugin(SmfInterfaceID interfaceID,SmfProvider provider);
+  
+  /*
+   * Requests the Credential Manager to filter out non-authorized plugin IDs
+   * from the list and get authorized plugins into authList. 
+   */
+  void getAuthorizedPlugins(QList<SmfPluginID>& list,QList<SmfPluginID>& authList);
+  
+  /*
+   * Prepares the transport.
+   * What it'll do is not yet clear
+   */
+  void prepareTransport();
+  /**
+   * DEbugging purpose only
+   */
+  void writeLog(QString log) const;
+  /*
+   * Delegates the request of the client (to get the data from SN sites)
+   * to the Plugin Manager.
+   * Once the Plugin Manager gets parsed response data it calls the SLOT
+   * resultsAvailable(). 
+   * pluginID is the Plugin to be used.
+   * requestTypeID is the function codes(opcodes) used for message passing 
+   * betn clien-server.
+   * Note:- Should there be an overloaded function which takes
+   * list of SmfPluginID ?
+   * Note:- SmfPluginManager will invoke resultsAvailable on session object once
+   * it receives parsed data.
+   */
+#ifdef Q_OS_SYMBIAN
+  /**
+   * Request the Plugin manager to get the data.
+   * @param requestID Corresponds to a client's session
+   * @param pluginID Plugin for which the request is intended
+   * @param interfaceID Interface name
+   * @param dataForPlugin Data to be sent for this request
+   * 
+   */
+  void getRequestedData(int requestID,SmfPluginID pluginID,SmfInterfaceID interfaceID, SmfRequestTypeID requestTypeID,QByteArray dataForPlugin = QByteArray());
+#else
+  void getRequestedData(SmfServerQtSession* session,SmfPluginID pluginID, SmfRequestTypeID requestTypeID);
+#endif
+  
+public slots:
+
+	/*
+	 * This slot is called when Credential Manager is done with the autherizing
+	 * the client for the first time. See isClientAuthorized() and authorizeClient().
+	 * success specifies the success of the authorization, authID is the authentication
+	 * ID in case its not same as SID of the client.
+	 */
+	void clientAuthorizationFinished(bool success,SmfClientAuthID authID );
+
+	/*
+	 * This slot is called as a result of trigger from Plugin manager when the 
+	 * parsed data is available.
+	 * @param requestID The request ID for which result is available
+	 * @param parsedData Serialized data
+	 */
+	void resultsAvailable(int requestID,QByteArray* parsedData,SmfError error);
+
+	/*
+	 * Services the client request by sending the requested data.
+	 * Note:- This will be handled by private implementation.
+	 */
+	void serviceClient(QByteArray* parsedData);
+	
+	
+	/*
+	 * This slot is called for every cleanup timer expiry, in this slot, we need
+	 * to call SmfDataStoreManager's API to refresh data store
+	 */
+	void timerExpired(){};
+	
+	/*
+	 * This method is called every time timerExpired slot is trigerred
+	 * Fetches the last saved requests through Transport Manager and Plugin Manager
+	 * Who will save the last request (Tranport Manager or Data Store Manager) TBD later
+	 * 
+	 */
+	void runSavedRequest(){};
+	
+	/*
+	 * This slot is called when the data store updates are available as a result of
+	 * "runSavedRequest()".
+	 * Note:- The "10.4.1.11	updateDatastore" can be merged with this 
+	 */
+	void dataStoreUpdateAvailable(QByteArray* respData){Q_UNUSED(respData)};
+	
+	/**
+	 * Request the CM to get the authentication keys for the given pluginID
+	 */
+	void getAuthenticationKeys(int pluginID,QStringList& keys,QStringList& urls);
+	
+	/**
+	 * Server calls this method when it receives message from the CM
+	 * that authentication keys for the pluginID has expired
+	 */
+	void authenticationKeysExpired(NotificationType type,SmfPluginID id);
+signals:
+  //None at the moment
+private:
+/*
+ * Starts the clean-up timer for data store refresh, called from the "startServer()"
+ * timeOutValue should be picked out from SmfSettingsAuthManager's API
+ */
+bool startCleanupTimer(int timeOutValue){Q_UNUSED(timeOutValue) return true;};
+
+
+private:
+	//private impl
+#ifdef Q_OS_SYMBIAN
+	SmfServerSymbian* m_SmfServerPrivate;
+#else
+	SmfServerQt* m_SmfServerPrivate;
+#endif
+	//Handles of other SMF components
+	SmfTransportManager* m_transportManager;
+	SmfPluginManager* m_pluginManager;
+	SmfDataStoreManager* m_dataStoreManager;
+	SmfSettingsAuthManager* m_settingsAuthManager;
+	SmfClient* m_smfClient;
+};
+
+
+#endif // SMFSERVER_H