qthighway/xqserviceipc/xqserviceipcserver/xqserviceipcrequest.cpp
branchRCL_3
changeset 9 5d007b20cfd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qthighway/xqserviceipc/xqserviceipcserver/xqserviceipcrequest.cpp	Tue Aug 31 16:02:37 2010 +0300
@@ -0,0 +1,330 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License as published by
+* the Free Software Foundation, version 2.1 of the License.
+* 
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public License
+* along with this program.  If not, 
+* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/".
+*
+* Description:  IPC request class
+*
+*/
+
+#include "xqservicelog.h"
+
+#include <xqserviceclientinfo.h>
+#include "xqserviceipcrequest.h"
+#include "xqserviceipcserversession.h"
+#include "xqrequestutil.h"
+
+namespace QtService
+{
+/*!
+    \class ServiceIPCRequest
+    \brief Class to encapsulate a service request
+*/
+
+/*!
+    Constructor.
+    \param aSession Session associated with this request.
+    \param aDataLength Amount of data to be received in this request.
+    \param aRequestOp Operation name.
+*/
+ServiceIPCRequest::ServiceIPCRequest(ServiceIPCSession* aSession,
+                                     qint64 aDataLength,
+                                     const QString& aRequestOp) :
+    QObject(NULL),
+    iSession(aSession), 
+    iClientInfo(NULL),
+    iRequestOp(aRequestOp), 
+    iDatalength(aDataLength),
+    iId(-1),
+    iAsync(false)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::ServiceIPCRequest(1)");
+    XQSERVICE_DEBUG_PRINT("aDataLength: %d", aDataLength);
+    XQSERVICE_DEBUG_PRINT("aRequestOp: %s", qPrintable(aRequestOp));
+}
+
+/*!
+    Copy Constructor.
+    \param aRequest Request to be copied.
+*/
+ServiceIPCRequest::ServiceIPCRequest(ServiceIPCRequest& aRequest)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::ServiceIPCRequest(2)");
+    //session
+    iSession = aRequest.getSession();
+    
+    //client info
+    iClientInfo = new ClientInfo();
+    iClientInfo->setName((aRequest.clientInfo())->name());
+    iClientInfo->setProcessId(aRequest.clientInfo()->processId());
+    iClientInfo->setVendorId(aRequest.clientInfo()->vendorId());
+    
+    // request operation
+    iRequestOp = aRequest.getOperation();
+    
+    //data part
+    iRequestData = aRequest.getData();
+    iDatalength = iRequestData.length();
+
+    // Request options
+    iRequestInfo = aRequest.requestInfo();
+
+}
+
+/*!
+    Destructor.
+*/
+ServiceIPCRequest::~ServiceIPCRequest()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::~ServiceIPCRequest");
+    delete iClientInfo;
+}
+
+/*!
+    Assignment operator.
+    \param aRequest Request to be assigned.
+    \return ServiceIPCRequest assigned request.
+*/
+ServiceIPCRequest& ServiceIPCRequest::operator=(ServiceIPCRequest& aRequest)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::operator=");
+    if (this != &aRequest) {
+        //session
+        iSession = aRequest.getSession();
+        
+        //client info
+        ClientInfo* info = new ClientInfo();
+        info->setName((aRequest.clientInfo())->name());
+        info->setProcessId(aRequest.clientInfo()->processId());
+        info->setVendorId(aRequest.clientInfo()->vendorId());
+        delete iClientInfo;
+        iClientInfo = info;    
+        
+        // request operation
+        iRequestOp = aRequest.getOperation();
+            
+        //data part
+        iRequestData = aRequest.getData();
+        iDatalength = iRequestData.length();
+
+        // Request options
+        iRequestInfo = aRequest.requestInfo();
+        
+    }
+    return *this;
+}
+
+/*!
+    Get the requested operation.
+    \return QString operation ID.
+*/
+const QString& ServiceIPCRequest::getOperation()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::getOperation");
+    XQSERVICE_DEBUG_PRINT("iRequestOp: %s", qPrintable(iRequestOp));
+    return iRequestOp;
+}
+
+/*!
+    Get the requested data.
+    \return QByteArray data for this operation.
+*/
+const QByteArray& ServiceIPCRequest::getData()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::getData");
+    XQSERVICE_DEBUG_PRINT("iRequestData: %s", iRequestData.constData());
+    return iRequestData;
+}
+
+/*!
+    Write some data to the request.
+    \param aData Data to write to the socket.
+*/
+bool ServiceIPCRequest::write(const QByteArray& aData)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::write");
+    XQSERVICE_DEBUG_PRINT("aData: %s", aData.constData());
+    // Do we want to buffer the writes?
+    return iSession->write(aData);
+}
+
+/*!
+    Complete the request.
+    \return true if request completed successfully.
+*/
+bool ServiceIPCRequest::completeRequest()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::completeRequest");
+    return iSession->completeRequest();
+}
+
+/*!
+    Append more data when creating the request.
+    \param aMoreData Data to be appended to the request.
+    \return true if iDataLength now equals the full length.
+*/
+bool ServiceIPCRequest::addRequestdata(const QByteArray& aMoreData)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::addRequestdata");
+    XQSERVICE_DEBUG_PRINT("aMoreData: %s", aMoreData.constData());
+    iRequestData.append(aMoreData);
+    return (iRequestData.length() == iDatalength);
+}
+
+/*!
+    Sets the client info. Onwership of the object is passed in.
+    \param aClientInfo Client information.
+*/
+void ServiceIPCRequest::setClientInfo(ClientInfo *aClientInfo)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setClientInfo");
+    delete iClientInfo;
+    iClientInfo = aClientInfo;
+
+    // Fill in the implicit info generated by the server
+    iRequestInfo.setInfo(XQServiceUtils::InfoSID, iClientInfo->processId());
+    iRequestInfo.setInfo(XQServiceUtils::InfoVID, iClientInfo->vendorId());
+    iRequestInfo.setInfo(XQServiceUtils::InfoCap, iClientInfo->capabilities());
+    
+}
+
+/*!
+    Gets the client info.
+    \return Client Information object, NULL if none is available.
+*/
+ClientInfo* ServiceIPCRequest::clientInfo()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::clientInfo");
+    return iClientInfo;
+}
+
+/*!
+    Gets the session.
+    \return ServiceIPCSession, NULL if none is available.
+*/
+ServiceIPCSession* ServiceIPCRequest::getSession()
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::getSession");
+    return iSession;
+}
+
+/*!
+    Sets id of the request.
+    \param aId Identifier of the request.
+*/
+void ServiceIPCRequest::setId(int aId)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setId");
+    XQSERVICE_DEBUG_PRINT("\t aId = %d", aId);
+    iId = aId;
+}
+
+/*!
+    Returns id of the request.
+    \return Id of the request.
+*/
+int ServiceIPCRequest::id() const
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::id");
+    XQSERVICE_DEBUG_PRINT("\t iId = %d", iId);
+    return iId;
+}
+
+/*!
+    Sets asynchcronous flag to true or false.
+    \param aAsync Value of the async flag.
+*/
+void ServiceIPCRequest::setAsync(bool aAsync)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setAsync");
+    XQSERVICE_DEBUG_PRINT("\t iAsync = %d", aAsync);
+    iAsync = aAsync;
+}
+
+/*!
+    Returns async flag.
+    \return True if the request is asynchronous. False, if synchronous.
+*/
+bool ServiceIPCRequest::isAsync() const
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::getAsync");
+    XQSERVICE_DEBUG_PRINT("\t iAsync = %d", iAsync);
+    return iAsync;
+}
+
+/*!
+    Set request info passed along with the request.
+    \param info Info to be passed with the request.
+*/
+void ServiceIPCRequest::setRequestInfo(XQRequestInfo *info)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setRequestInfo");
+    if (info)
+    {
+        iRequestInfo = *info;
+        // Restore the overridden id value
+        if (iClientInfo)
+        {
+            // Fill in the implicit info generated by the server
+            XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setRequestInfo fill from clientInfo");
+            iRequestInfo.setInfo(XQServiceUtils::InfoSID, iClientInfo->processId());
+            iRequestInfo.setInfo(XQServiceUtils::InfoVID, iClientInfo->vendorId());
+            iRequestInfo.setInfo(XQServiceUtils::InfoCap, iClientInfo->capabilities());
+            iRequestInfo.setInfo(XQServiceUtils::InfoId, id());
+        }
+    }
+}
+
+/*!
+    Get info added to the request.
+    \return Info to be passed with the request.
+*/
+XQRequestInfo ServiceIPCRequest::requestInfo() const
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::requestInfo");
+    return iRequestInfo;
+}
+
+/*!
+    Add sharable file to be passed with the request.
+    \param file Sharable file to be added to the request.
+    \param index Currently not used.
+*/
+void ServiceIPCRequest::addSharableFile(XQSharableFile *file, int index)
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setSharableFile");
+    if (file != NULL)
+        iSharableFiles.append(*file);
+}
+
+/*!
+    Get sharable file from request.
+    \param index Index of the sharable file to get.
+*/
+XQSharableFile ServiceIPCRequest::sharableFile(int index) const
+{
+    XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setSharableFile");
+    if (index >= 0 && index < iSharableFiles.size())
+    {
+        XQSharableFile file = iSharableFiles.at(index);
+        XQSERVICE_DEBUG_PRINT("ServiceIPCRequest::setSharableFile valid=%d", file.isValid());
+        return file;
+    }
+    return XQSharableFile();
+}
+
+
+}
+// END OF FILE