diff -r c39a6cfd1fb9 -r be09cf1f39dd smf/smfservermodule/smfserver/server/smfserver.h --- /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 +#include +//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 +#include +#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& 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& list,QList& 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