smf/smfservermodule/smfclient/client/smfclientsymbian.cpp
changeset 18 013a02bf2bb0
parent 17 106a4bfcb866
child 19 c412f0526c34
--- 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 <e32cmn.h>
-#include <QtGlobal>
-#include <e32svr.h>
-#include <e32base.h>
-#include <QByteArray>
-#include "smfglobal.h"
-#include "smfclientglobal.h"
-//testing purpose
-#include <QProcess>
-#include <QTextStream>
-#include <QFile>
-//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<const char*>(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<const char*>(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<const char*>(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<smfProvider>)
-	 */
-	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<<iInterfaceName;
-	log.clear();
-    log = QString("iInterfaceNamebyte size=");
-    log += QString::number(iInterfaceNamebyte.size());
-    writeLog(log);
-	if(iIntfNameBuffer8)
-		{
-		delete iIntfNameBuffer8;
-		iIntfNameBuffer8 =NULL;
-		}
-	TInt serializedintfsize = iInterfaceNamebyte.size();
-	writeLog("iInterfaceNamebyte.size()=");
-	writeLog(QString::number(serializedintfsize));
-	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size()*2);
-	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
-	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
-	log.clear();
-    log = QString("iIntfNamePtr8 size=")+QString::number(iIntfNamePtr8.Size());
-    writeLog(log);
-
-    writeLog("Before provider symbian copy");
-	
-	
-	iInterfaceSymbian8.Copy(iIntfNamePtr8);	
-	if(iBuffer)
-		{
-		delete iBuffer;
-		iBuffer = NULL;
-		}
-	writeLog("Allocated for SmfProviderList=");
-	writeLog(QString::number(maxSize));
-	if(iBuffer)
-		{
-		delete iBuffer;
-		iBuffer = NULL;
-		}
-    iBuffer = HBufC8::NewL(maxSize);
-    iDataPtr.Set(iBuffer->Des());
-    log.clear();
-    log = QString("After iDataPtr.Set");
-    writeLog(log);
-
-	
-    TIpcArgs args;
-
-    args.Set(0, &iInterfaceSymbian8);
-    args.Set(1, &iDataPtr);
-    if(maxSize)
-    	{
-		iMaxSize = maxSize;
-		args.Set(2,iMaxSize);
-    	}
-    TInt err(KErrBadHandle);
-    writeLog("Before handle");
-	log.clear();
-    log = QString("iInterfaceSymbian8 size=")+QString::number(iInterfaceSymbian8.Size());
-    writeLog(log);
-    if (Handle()) 
-    	{
-        err = KErrNone;
-        log.clear();
-        log = QString("Before sendreceive");
-        writeLog(log);
-        //synchronous request
-        TInt sendErr = SendReceive(aRequestType, args);
-        if(sendErr)
-        	{
-			writeLog("SendReceive error=");
-			QString errStr = QString::number(sendErr);
-			writeLog(errStr);
-        	}
-        return iDataPtr;
-        }
-	}
-
-/**
- * Calls SendReceive() after converting into symbian descriptors
- *
- */
-void RSmfClientSymbianSession::sendAsyncRequest(QByteArray& aSerializedData,
-		QString aInterfaceName,
-		SmfRequestTypeID aRequestType,
-		TRequestStatus& aStatus,
-		TInt aMaxAllocation,
-		QByteArray aXtraInfo)
-	{
-	/**
-	 * The message body consists of.- 
-	 * Modified,-
-	 * slot 0 = SmfProvider +PageInfo flag+ aPageNum + aPerPage + XtraInfo flag(size of xtra data) Serialized
-	 * slot 1 = Interface name serialized
-	 * slot 2 = Data pointer to filled by server
-	 * slot 3= Xtra info when required by server else empty buffer
-	 */
-	writeLog("RSmfClientSymbianSession::sendAsyncRequest-start-");
-	iLastRequest = aRequestType;
-	
-	
-	
-	
-	if(iProviderBuf)
-		{
-		delete iProviderBuf;
-		iProviderBuf = NULL;
-		}
-	iProviderBuf = HBufC8::NewL(aSerializedData.size());
-	iPtrProvider.Set(iProviderBuf->Des());
-	iPtrProvider.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
-	
-	
-	
-	
-	//convert the QByteArray into TPtr
-    TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(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<<iInterfaceName;
-	writeLog("iInterfaceNamebyte size=");
-	writeLog(QString::number(iInterfaceNamebyte.size()));
-	if(iIntfNameBuffer8)
-		{
-		delete iIntfNameBuffer8;
-		iIntfNameBuffer8 = NULL;
-		}
-	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
-	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
-	iIntfNamePtr8.Copy(reinterpret_cast<const TText8*>(iInterfaceNamebyte.constData()),iInterfaceNamebyte.length());
-	writeLog("After iIntfNamePtr8.Copy");
-	if(iBuffer)
-		{
-		delete iBuffer;
-		iBuffer = NULL;
-		}
-    iBuffer = HBufC8::NewL(aMaxAllocation);
-    iDataPtr.Set(iBuffer->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<const TText8*>(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;
-    }