diff -r b85b0c039c14 -r 1d94eb8df9c2 smf/smfservermodule/smfserver/server/smfserver.cpp --- a/smf/smfservermodule/smfserver/server/smfserver.cpp Fri May 21 15:40:57 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,385 +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 - */ - -#include "smfserver.h" -#include "smfpluginmanager.h" -#include "smftransportmanager.h" -#include "smfclientglobal.h" -#include -#include -#include -#include -#include -#include -//#ifdef NO_OTHER_MODULES -#include -#include -#include -#include -#include -//#endif -#ifdef Q_OS_SYMBIAN -#include "smfserversymbian_p.h" -#else -#include "smfserverqt_p.h" -#endif - -SmfServer::SmfServer(QObject* parent): QObject(parent) - { - } -bool SmfServer::startServer() - { - bool success = false; - //Initialize all the component handles - writeLog("Not doing SmfTransportManager::getInstance"); - //m_transportManager = SmfTransportManager::getInstance(); - writeLog("Not doing m_transportManager->initializeTransport"); - //checking the network status, no need to proceed if not permitted - //SmfTransportInitializeResult networkStatus = m_transportManager->initializeTransport(); - writeLog("Before networkStatus"); - //TODO:-check this - if(1/*networkStatus == SmfTransportInitNoError*/) - { - writeLog("Before m_pluginManager construction"); - m_pluginManager = SmfPluginManager::getInstance(this); - writeLog("After m_pluginManager construction"); - // m_dataStoreManager = new SmfDataStoreManager(); - //Initialize private implementation - #ifdef Q_OS_SYMBIAN - TRAPD(err, m_SmfServerPrivate = SmfServerSymbian::NewL(CActive::EPriorityStandard,this)); - QString log("SmfServer::startServer="); - int errorQ = err ; - log += errorQ; - writeLog(log); - if( KErrNone != err ) - { - return success; - } - TInt error = m_SmfServerPrivate->Start( KSmfServerName ); - errorQ = error ; - log.clear(); - log = QString("m_SmfServerPrivate->Start="); - log += QString::number(error); - writeLog(log); - if( KErrNone == error ) - { - success = true; - } - else - { - //error - return success; - } - #else - m_SmfServerPrivate = new SmfServerQt(); - success = m_SmfServerPrivate->start(); - if (!success) - { - return success; - } - #endif - //request CM server for auth expiry info, note:- we should resend the request everytime we get expiry - //notification - //TODO:- Do it after CM implementation - //CMclient->requestAuthExpiryNotify(); - //connect(CMClient,SIGNAL(authExpiryNotify(NotificationType,SmfPluginID),this,SLOT(NotificationType,SmfPluginID)); - } - return success; - } -//Note:- Almost all the following APIs are called by private impl via the handle -/** - * This called first once a session is created by the private impl - * @param clientID some unique client process ID, SID for symbian platform - * TODO:-How to get the pid for rest of the platforms? - * @return true if client is already athorized, else false - * - */ -bool SmfServer::isClientAuthorized(SmfClientAuthID clientID) - { - //TODO:- once CM is complete do it properly - Q_UNUSED(clientID); - return true; - } -/** - * This API is called by the private impl when isClientAuthorized returns false - * @param clientID client Id (SID for symbian platform), provided by the private impl - * Note:- The session(and in turn the client) will be blocked untill authorization completes. - */ -void SmfServer::authorizeClient(SmfClientAuthID clientID) - { - //TODO:- once CM is complete, do it properly - //CMclient->authorizeClient(clientID) - //connect(CMClient,SIGNAL(clientAuthorizationFinished(bool,SmfClientAuthID)),this,SLOT(clientAuthorizationFinished(bool,SmfClientAuthID))); - Q_UNUSED(clientID); - } -/** - * This API is called by the private impl when client is authorized - * @param interfaceID Interface id, provided by the private impl (it gets it from client) - * @param pluginIDMap Map of plugins who implement this interface and corresponding provider, - * this is returned to the private impl - * It calls PM to get the list. Note:- PM may return SmfProviderBase which is superset of SmfProvider. - * TODO:- session should store this map for future ref? - */ -void SmfServer::getPlugins(SmfInterfaceID interfaceID, QMap& pluginIDMap) - { - pluginIDMap.clear(); - m_pluginManager->getPlugins(interfaceID,pluginIDMap); - } - -SmfPluginID SmfServer::getPlugin(SmfInterfaceID interfaceID,SmfProvider provider) - { - //TODO:- do it properly as per PM implementation - //return PM->getplugin(interfaceID,provider); - //TODO:- PM is not yet ready - SmfPluginID id; - m_pluginManager->getPluginId(interfaceID,provider, id); - return id; - //testing purpose only - } -/** - * This API is called by the private impl to get a list of authorized plugins from CM - * @param list List of plugins to be filtered - * @param authList List of authorised plugins filled by CM - * this is returned to the private impl - * It calls CMclient to get the list synchronously - * TODO:- session should store this for future ref? - */ -void SmfServer::getAuthorizedPlugins(QList& list,QList& authList) - { - //TODO:- do it properly as per CMclient implementation - //CMclient->getAuthorizedPlugins(list,authList); - //testing purpose only -#ifdef NO_OTHER_MODULES - authList = list; -#endif - } -/** - * This API is called by the private impl to request the PM to do the actual request/parsing asynchronously - * Note:- the sever private impl (SmfServerSymbian for symbian platform) maintains a map of session ptr and some randomely - * generated number.For the time being we are allowing only one outstanding request per session, so no need to store - * both session and msg ptr, but in future we may need to. - * @param requestID Request id (corresponds to the key of the mapmaintained by SmfServerSymbian). - * @param pluginID PluginID, provided by the session - * @param interfaceID InterfaceID provided by session - * @requestTypeID Request Opcode, provided by session - */ -void SmfServer::getRequestedData(int requestID,SmfPluginID pluginID,SmfInterfaceID interfaceID, SmfRequestTypeID requestTypeID,QByteArray dataForPlugin) - { - //TODO:- cross check the params with PM owner - //PM->getData(requestID,pluginID,interfaceID,requestTypeID); - m_SmfServerPrivate->writeLog("SmfServer::getRequestedData"); - m_SmfServerPrivate->writeLog(QString::number(requestID)); - m_SmfServerPrivate->writeLog(pluginID); - m_SmfServerPrivate->writeLog(interfaceID); - m_SmfServerPrivate->writeLog(QString::number(requestTypeID)); - bool defaultCase = false; - //serializedInfo contains base provider info+ other data depending on requestTypeID - QDataStream reader(&dataForPlugin,QIODevice::ReadOnly); - QByteArray dataTobeSent; - switch(requestTypeID) - { - case SmfContactPost: - { - SmfProvider provider; - SmfPost post; - SmfLocation loc; - reader>>provider; - reader>>post; - reader>>loc; - //now form the serialized bytearray with only SmfPost and SmfPlace - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>post; - //now form the serialized bytearray with only SmfPost - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>post; - reader>>contact; - reader>>place; - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>post; - reader>>contact; - reader>>edited; - //now form the serialized bytearray with only SmfPost - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>picture; - //now form the serialized bytearray with only SmfPicture - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>pictureList; - //now form the serialized bytearray with only SmfPicture - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<>provider; - reader>>picture; - reader>>comment; - //now form the serialized bytearray with only SmfPicture - QDataStream writer(&dataTobeSent,QIODevice::WriteOnly); - writer<createRequest(requestID,pluginID,requestTypeID,dataTobeSent); - } - //when plugin manager needs to xtra info - else - { - QByteArray arr; - m_pluginManager->createRequest(requestID,pluginID,requestTypeID,arr); - } - } -/** - * This slot is invoked when CM finishes the authorization of the client. - * @param authID As it contains the session ptr, sever directly invokes the session's API to notify success - */ -void SmfServer::clientAuthorizationFinished(bool success,SmfClientAuthID authID ) - { - //TODO:- implement this api in session class - //note:- in case success is false client completes the request with SmfErrClientAuthFailed - //TODO:- define set of smf wide error after consulting with other module owners - authID.session->clientathorizationFinished(success); - } -/** - * This API is called by PM once its done with request and parsing - * @param requestID The request id which is completed - * @param parsedData Serialized data(as per request type) filled by PM - * @param error Error occured - * TODO:- should use smf wide global errors instead - */ -void SmfServer::resultsAvailable(int requestID,QByteArray* parsedData,SmfError error) - { - m_SmfServerPrivate->writeLog("SmfServer::resultsAvailable"); - m_SmfServerPrivate->writeLog("requestID="); - m_SmfServerPrivate->writeLog(QString::number(requestID)); - m_SmfServerPrivate->writeLog("parsedData->size()="); - m_SmfServerPrivate->writeLog(QString::number(parsedData->size())); - m_SmfServerPrivate->writeLog("Error="); - m_SmfServerPrivate->writeLog(QString::number(error)); - //Serialize error followed by actual data - QByteArray dataWithError; - QDataStream writer(&dataWithError,QIODevice::WriteOnly); - writer<findAndServiceclient(requestID,&dataWithError,error); - } -/** - * Seems reduntant in symbian as client is served with RMessage2::Complete() - */ -void SmfServer::serviceClient(QByteArray* parsedData) - { - Q_UNUSED(parsedData); - } -/** - * Used by PM to get a list of tokens - * TODO:- cross check the params - */ -void SmfServer::getAuthenticationKeys(int pluginID,QStringList& keys,QStringList& urls) - { - //SMF-CM communication will be via CM client - //TODO:- do it properly as per CM client impl - //CMclient->getKeys(pluginID,keys,urls); - Q_UNUSED(pluginID); - Q_UNUSED(keys); - Q_UNUSED(urls); - } - -/** - * This is called when CMclient notifies client expiry. - * @param type notification type, set of enums for future expansion - * @param id Plugin Id for which the authentication has expired - */ -void SmfServer::authenticationKeysExpired(NotificationType type,SmfPluginID id) - { - //resend the notify request - //CMclient->requestAuthExpiryNotify(); - Q_UNUSED(type); - Q_UNUSED(id); - } - -void SmfServer::writeLog(QString log) const - { -#ifdef WRITE_LOG - QFile file("c:\\data\\SmfServerLogs.txt"); - if (!file.open(QIODevice::Append | QIODevice::Text)) - ; - QTextStream out(&file); - out << log << "\n"; - file.close(); -#else - Q_UNUSED(log); -#endif - }