/*! Handle an IPC request. \param aMessage Message object. */ void CServiceSymbianSession::handleRequestL(const RMessage2& aMessage) { XQSERVICE_DEBUG_PRINT("CServiceSymbianSession::handleRequestL"); // Store the message iMessage = aMessage; // Convert from Symbian to QT HBufC* request = ReadDesLC(aMessage, 0); HBufC8* data = ReadDes8LC(aMessage, 1); XQSharableFile *file = 0; if (aMessage.Function() == KIPCOperationWithSharableFile) { // Only one file support now ! file = new XQSharableFile(); AdoptSharableFile(aMessage, file); } // Shallow copy only, we want a deep copy QString d = QString::fromUtf16(request->Ptr(), request->Length()); QString operation; operation += d; XQSERVICE_DEBUG_PRINT("operation: %s", qPrintable(operation)); //QByteArray convertData; TPtr8 ptr8(data->Des()); const char* ptrz = reinterpret_cast<const char*> (ptr8.PtrZ()); //convertData.append(ptrz); QByteArray convertData(ptrz,data->Length()); XQSERVICE_DEBUG_PRINT("convertData: %s", convertData.constData()); // New request if (iCurRequest) { iObserver->handleDeleteRequest(iCurRequest); delete iCurRequest; } iCurRequest = NULL; iCurRequest = new ServiceIPCRequest(this, 0, operation); iData.clear(); // Get client info ClientInfo *client = new ClientInfo(); client->setProcessId(aMessage.SecureId().iId); client->setVendorId(aMessage.VendorId().iId); RThread clientThread; aMessage.ClientL(clientThread); CleanupClosePushL(clientThread); RProcess clientProc; CleanupClosePushL(clientProc); clientThread.Process(clientProc); client->setName(QString::fromUtf16(clientProc.Name().Ptr(), clientProc.Name().Length())); client->setCapabilities(ClientCapabilities(aMessage)); CleanupStack::PopAndDestroy(2, &clientThread); // Set the picked sharable file if any if (file != 0) { // Support only one sharable file iCurRequest->addSharableFile(file, 0); } // Add data and callback to the observer // iCurRequest->addRequestdata(convertData); iCurRequest->setClientInfo(client); // ownership passed iObserver->handleRequest(iCurRequest); CleanupStack::PopAndDestroy(2, request); }