diff -r 106a4bfcb866 -r 013a02bf2bb0 smf/smfservermodule/smfclient/client/smfclientsymbian.cpp --- a/smf/smfservermodule/smfclient/client/smfclientsymbian.cpp Thu Aug 05 16:46:37 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,546 +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 "smfclientsymbian.h" -#include -#include -#include -#include -#include -#include "smfglobal.h" -#include "smfclientglobal.h" -//testing purpose -#include -#include -#include -//testing end -// For starting the server process -static TInt StartServer(); -static TInt CreateServerProcessL(); - -CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver) -: iObserver(aObserver),CActive( EPriorityStandard ),iDataPtr(NULL, 0, 0) - { - CActiveScheduler::Add(this); - } - -CSmfClientSymbian* CSmfClientSymbian::NewL(smfObserver* aObserver ) - { - CSmfClientSymbian* self = NewLC( aObserver ); - CleanupStack::Pop( self ); - return( self ) ; - } - -CSmfClientSymbian* CSmfClientSymbian::NewLC(smfObserver* aObserver ) - { - CSmfClientSymbian* self = - new ( ELeave ) CSmfClientSymbian( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -void CSmfClientSymbian::ConstructL() - { - writeLog("CSmfClientSymbian::ConstructL"); - - User::LeaveIfError(iSession.connectToServer()); - } -void CSmfClientSymbian::writeLog(QString log) - { -#ifdef WRITE_LOG - QFile file("c:\\data\\SmfClientLogs.txt"); - if (!file.open(QIODevice::Append | QIODevice::Text)) - return; - QTextStream out(&file); - out << log << "\n"; - file.close(); -#endif - } - -void CSmfClientSymbian::DoCancel() - { - Cancel(); - } - -TInt CSmfClientSymbian::RunError(TInt aError) - { - QString log2("CSmfClientSymbian::RunError="); - - log2 += QString::number(aError); - writeLog(log2); - return KErrNone; - } - -void CSmfClientSymbian::RunL() - { - QString log2("CSmfClientSymbian::RunL="); - log2 += QString::number(iStatus.Int()); - writeLog(log2); - switch ( iStatus.Int() ) - { - case KErrCancel: - // The request was canceled - writeLog("KErrCancel"); - break ; - - case KErrNotReady: - writeLog("KErrNotReady"); - break; - - default: - { - writeLog("RunL:-default"); - //This contains error followed by actual data - QByteArray receivedData(reinterpret_cast(iSession.iDataPtr.Ptr()),iSession.iDataPtr.Length()); - writeLog("receivedData size="); - writeLog(QString::number(receivedData.size())); - SmfError errVal; - int errInt; - QByteArray data; - QDataStream reader(&receivedData,QIODevice::ReadOnly); - reader>>errInt; - writeLog("errInt="); - writeLog(QString::number(errInt)); - errVal = (SmfError)errInt; - reader>>data; - writeLog("data size="); - writeLog(QString::number(data.size())); - SmfRequestTypeID opcode = (SmfRequestTypeID)iSession.getLastRequest(); - if(iObserver) - { - iObserver->resultsAvailable(data,opcode,errVal); - } - } - break; - } - } - -QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName, - SmfRequestTypeID requestType,TInt maxSize) - { - //This will be a synchronous request - //note session is opened in ctor and closed in dtor - writeLog("CSmfClientSymbian::sendRequest="); - writeLog(aInterfaceName); - //Gets data synchronously from the server - TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType,maxSize)); - //convert this into bytearray - QByteArray receivedData(reinterpret_cast(symbianBuf.Ptr()),symbianBuf.Length()); - return receivedData; - // - } -QByteArray CSmfClientSymbian::sendDSMSyncRequest(SmfRequestTypeID requestType,QByteArray& aSerializedData,SmfError& aErr,TInt maxSize) - { - writeLog("CSmfClientSymbian::sendDSMSyncRequest="); - writeLog(QString::number(requestType)); - SmfError err; - //Gets data synchronously from the server - TPtr8 symbianBuf(iSession.sendDSMSyncRequest(requestType,aSerializedData,err,maxSize)); - //convert this into bytearray - QByteArray receivedData(reinterpret_cast(symbianBuf.Ptr()),symbianBuf.Length()); - writeLog("receivedData size="); - writeLog(QString::number(receivedData.size())); - return receivedData; - } -TInt CSmfClientSymbian::sendRequest(QByteArray& aSerializedData, - QString aInterfaceName, - SmfRequestTypeID requestType,TInt aMaxAllocation,QByteArray xtraInfo) - { - //RSessionBase objects sendreceive is called - iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus,aMaxAllocation,xtraInfo); - SetActive(); - } - -TInt CSmfClientSymbian::sendDummyRequest(QByteArray* provider,QString aInterfaceName, - SmfRequestTypeID requestType) - { - switch(requestType) - { - case SmfTest: - { - - } - break; - default: - //should panic - break; - } - } - -CSmfClientSymbian::~CSmfClientSymbian() - { - writeLog("~CSmfClientSymbian"); - Cancel(); // Causes call to DoCancel() - iSession.Close(); - } - -RSmfClientSymbianSession::RSmfClientSymbianSession() -:iDataPtr(NULL, 0, 0),iDataPtr16(NULL,0), - iIntfNamePtr(NULL,0),iIntfNamePtr8(NULL,0), - iPtrProvider(NULL,0),iPtrToSlot0(NULL,0) - { - // No implementation required - } - -TInt RSmfClientSymbianSession::connectToServer() - { - writeLog("RSmfClientSymbianSession::connectToServer"); - TInt error = ::StartServer(); - writeLog("StartServerL="); - QString err = QString::number(error); - writeLog(err); - if ( KErrNone == error ) - { - - error = CreateSession(KSmfServerName, - Version(), - 4 ); - QString crtSessionErr = QString::number(error); - writeLog(crtSessionErr); - } - return error; - } - -//testing -void RSmfClientSymbianSession::writeLog(QString log) const - { -#ifdef WRITE_LOG - QFile file("c:\\data\\SmfClientLogs.txt"); - if (!file.open(QIODevice::Append | QIODevice::Text)) - ; - QTextStream out(&file); - out << log << "\n"; - file.close(); -#endif - } -/** - * Sends sync request to the Smf server - */ -TPtr8 RSmfClientSymbianSession::sendDSMSyncRequest(SmfRequestTypeID aRequestType, - QByteArray& aSerializedData,SmfError aErr, - TInt maxSize) - { - /** - * Slot 0:- Data to be passed to DSM - * Slot 1:- Data returned from DSM - * Slot 2:- Error - */ - writeLog("RSmfClientSymbianSession::sendDSMSyncRequest"); - iLastRequest = aRequestType; - if(iSlot0Buffer) - { - delete iSlot0Buffer; - iSlot0Buffer = NULL; - } - iSlot0Buffer = HBufC8::NewL(aSerializedData.size()); - iPtrToSlot0.Set(iSlot0Buffer->Des()); - if(iBuffer) - { - delete iBuffer; - iBuffer = NULL; - } - iBuffer = HBufC8::NewL(maxSize); - iDataPtr.Set(iBuffer->Des()); - - TIpcArgs args; - - args.Set(0, &iPtrToSlot0); - args.Set(1, &iDataPtr); - iDSMErr.Zero(); - args.Set(2,&iDSMErr); - - TInt sendErr = SendReceive(aRequestType,args); - writeLog("SendReceive="); - writeLog(QString::number(sendErr)); - TInt numIndex; - TLex iLex(iDSMErr); - - iLex.Val(numIndex); - aErr = (SmfError)numIndex; - return iDataPtr; - } -TPtr8 RSmfClientSymbianSession::sendSyncRequest(QString aInterfaceName, - SmfRequestTypeID aRequestType, - TInt maxSize) - { - iLastRequest = aRequestType; - /** - * The message body consists of.- - * 1. Interface name as string ("org.symbian.smf.client.gallery") - * 2. Data pointer to be filled by serialized data(QList) - */ - QString log("RSmfClientSymbianSession::sendSyncRequest-start-"); - writeLog(log); - writeLog(QString("aInterfaceName=")+aInterfaceName); - - iInterfaceNamebyte.clear(); - //Convert the interface name into TPtr - iInterfaceName.clear(); - iInterfaceName = aInterfaceName ; - writeLog(QString("iInterfaceName=")+iInterfaceName); - //lets pass serialized QString - QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly); - intfNameStream<Des()); - iPtrProvider.Copy(reinterpret_cast(aSerializedData.constData()),aSerializedData.length()); - - - - - //convert the QByteArray into TPtr - TPtrC8 ptrSlot0(reinterpret_cast(aSerializedData.constData()),aSerializedData.length()); - writeLog("ptrSlot0 size="); - writeLog(QString::number(ptrSlot0.Size())); - //Convert the interface name into TPtr - iInterfaceName.clear(); - iInterfaceName.append(aInterfaceName) ; - writeLog(QString("iInterfaceName=")+iInterfaceName); - iInterfaceNamebyte.clear(); - //Pass serialized QString for interface name - QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly); - intfNameStream<Des()); - writeLog("After iDataPtr.Set"); - TIpcArgs args; - - //filling the slots - args.Set(0, &iPtrProvider); - args.Set(1, &iIntfNamePtr8); - args.Set(2, &iDataPtr); - writeLog("After setting 0,1,2 slots"); - if(aXtraInfo.size()) - { - TPtrC8 ptrToXtraInfo(reinterpret_cast(aXtraInfo.constData()),aXtraInfo.length()); - writeLog("ptrToXtraInfo size="); - writeLog(QString::number(ptrToXtraInfo.Size())); - args.Set(3, &ptrToXtraInfo); - } - TInt err(KErrBadHandle); - writeLog("Before Handle()"); - if (Handle()) - { - err = KErrNone; - writeLog("Before sendreceive"); - SendReceive(aRequestType, args, aStatus); - } - } - -// ----------------------------------------------------------------------------- -// CreateServerProcessL() -// Creates a server process -// ----------------------------------------------------------------------------- -// -static TInt CreateServerProcessL() - { - TInt result; - TUid KSmfServerUID3 = { 0xE5027327 }; - const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 ); - - RProcess server; - - result = server.Create( KSmfServerFilename, KNullDesC, serverUid ); - - if ( result != KErrNone ) - { - return result; - } - - server.Resume(); - server.Close(); - - return KErrNone; - } -static TInt StartServer() - { - TInt result; - - TFindServer findSmfServer( KSmfServerFilename ); - TFullName name; - - result = findSmfServer.Next( name ); - if ( result == KErrNone ) - { - // Server already running - return KErrNone; - } - - RSemaphore semaphore; - result = semaphore.CreateGlobal( KSmfServerSemaphoreName, 0 ); - if ( result != KErrNone ) - { - return result; - } - - result = CreateServerProcessL(); - if ( result != KErrNone ) - { - return result; - } - - semaphore.Wait(); - semaphore.Close(); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CreateServerProcess() -// Creates a server process -// ----------------------------------------------------------------------------- -// -static TInt CreateServerProcess() - { - TInt result; - //SmfServer SID - TUid KSmfServerUID3 = { 0xE5027327 }; - const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 ); - - RProcess server; - - result = server.Create( KSmfServerName, KNullDesC, serverUid ); - - if ( result != KErrNone ) - { - return result; - } - - server.Resume(); - server.Close(); - - return KErrNone; - }