Basic functionality on desktop server build. Started a test for GetServices
/**
* 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: Session implementation for Qt desktop builds
*
*/
#include "smfserverqtsession.h"
#include "smfserverqt_p.h"
#include "smfserver.h"
SmfServerQtSession::SmfServerQtSession(QLocalSocket *clientConnection, SmfServerQt *server)
: m_opCode(-1), m_clientConnection(clientConnection), m_server(server)
{
connect(m_clientConnection, SIGNAL(readyRead()), this, SLOT(readDataFromClient()));
connect(m_clientConnection, SIGNAL(error(QLocalSocket::LocalSocketError)),
this, SLOT(socketError(QLocalSocket::LocalSocketError)));
}
SmfServerQtSession::~SmfServerQtSession()
{
// The socket has the QLocalServer as a parent, but it should be deleted to
// save unnecessary accumulation of these objects in memory. It won't be double deleted.
delete m_clientConnection;
}
void SmfServerQtSession::readDataFromClient()
{
// TODO: This needs to be much safer.
if(m_clientConnection->bytesAvailable() < sizeof(typeof(SmfRequestTypeID)))
{
// Don't read yet, haven't received opcode
return;
}
if (m_opCode == -1)
{
QDataStream in(m_clientConnection);
in >> m_opCode;
}
// m_opCode set, so handle request
handleRequest();
}
/**
* Call the appropriate handler function
*/
void SmfServerQtSession::handleRequest()
{
switch (m_opCode)
{
case SmfGetService:
handleGetService();
break;
default:
m_server->writeLog(QString("Bad Request received: ") + m_opCode);
}
}
/**
* Find available services for specified interface and return list to client.
*/
void SmfServerQtSession::handleGetService()
{
m_server->writeLog("SmfServerQtSession::handleGetService()");
QDataStream in(m_clientConnection);
// Get interface type requested
SmfInterfaceID ifName;
in >> ifName;
m_server->writeLog("Requested: " + ifName);
// Get the available services for this interface
QMap<SmfPluginID, SmfProvider> services;
m_server->wrapper()->getPlugins(ifName, services);
// write back the results
QDataStream out(m_clientConnection);
out << services;
}
void SmfServerQtSession::clientAuthorizationFinished(bool success)
{
Q_UNUSED(success);
}
void SmfServerQtSession::socketError(QLocalSocket::LocalSocketError error)
{
switch (error)
{
case QLocalSocket::PeerClosedError:
m_server->writeLog("Peer closed connection.");
break;
case QLocalSocket::SocketTimeoutError:
m_server->writeLog("error: connection timed out.");
break;
default:
m_server->writeLog("error: unkown socket error: " + error);
break;
}
}