smf/smfservermodule/smfclient/smfclientsymbian.cpp
changeset 25 a180113055cb
parent 18 013a02bf2bb0
child 26 83d6a149c755
equal deleted inserted replaced
24:1cee9f1b95e0 25:a180113055cb
    42     self->ConstructL();
    42     self->ConstructL();
    43     return self;
    43     return self;
    44     }
    44     }
    45 
    45 
    46 CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver)
    46 CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver)
    47 		: iObserver(aObserver),
    47 		: CActive( EPriorityStandard ),
    48 		  CActive( EPriorityStandard ),
    48 		iObserver(aObserver),
    49 		  iDataPtr(NULL, 0, 0)
    49 		iDataPtr(NULL, 0, 0)
    50 	{
    50 	{
    51 	CActiveScheduler::Add(this);
    51 	CActiveScheduler::Add(this);
    52 	}
    52 	}
    53 
    53 
    54 void CSmfClientSymbian::ConstructL()
    54 void CSmfClientSymbian::ConstructL()
    55     {
    55     {
    56 	qDebug()<<"Inside CSmfClientSymbian::ConstructL()";
       
    57     User::LeaveIfError(iSession.connectToServer());
    56     User::LeaveIfError(iSession.connectToServer());
    58     }
    57     }
    59 
    58 
    60 CSmfClientSymbian::~CSmfClientSymbian()
    59 CSmfClientSymbian::~CSmfClientSymbian()
    61 	{
    60 	{
   123 QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName, 
   122 QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName, 
   124 				 SmfRequestTypeID requestType, 
   123 				 SmfRequestTypeID requestType, 
   125 				 TInt aMaxAllocation,
   124 				 TInt aMaxAllocation,
   126 				 QByteArray& aSerializedData)
   125 				 QByteArray& aSerializedData)
   127 	{
   126 	{
   128 	qDebug()<<"Inside CSmfClientSymbian::sendRequest() for intf = "<<aInterfaceName;
       
   129 	
       
   130 	//Gets data synchronously from the server
   127 	//Gets data synchronously from the server
   131     TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType, aMaxAllocation, aSerializedData));
   128     TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType, aMaxAllocation, aSerializedData));
   132     //convert this into bytearray
   129     //convert this into bytearray
   133     QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
   130     QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
   134     return receivedData;
   131     return receivedData;
   176 
   173 
   177 
   174 
   178 
   175 
   179 
   176 
   180 RSmfClientSymbianSession::RSmfClientSymbianSession()
   177 RSmfClientSymbianSession::RSmfClientSymbianSession()
   181 		:iDataPtr8(NULL, 0, 0),iDataPtr16(NULL,0),
   178 		:iDataPtr8(NULL, 0, 0),
   182 		 iIntfNamePtr(NULL,0),iIntfNamePtr8(NULL,0),
   179 		 iDataPtr16(NULL,0),
   183 		 iPtrProvider(NULL,0),iPtrProvider8(NULL,0),
   180 		 iPtrProvider(NULL,0),
   184 		 iPtrToXtraInfo8(NULL,0),iPtrToXtraInfo(NULL, 0),
   181 		 iPtrProvider8(NULL,0),
       
   182 		 iIntfNamePtr(NULL,0),
       
   183 		 iIntfNamePtr8(NULL,0),
       
   184 		 iPtrToXtraInfo(NULL, 0),
       
   185 		 iPtrToXtraInfo8(NULL,0),
   185 		 iPtr8ToSlot0(NULL,0)
   186 		 iPtr8ToSlot0(NULL,0)
   186     {
   187     {
   187     // No implementation required
   188     // No implementation required
   188     }
   189     }
   189 
   190 
   190 TInt RSmfClientSymbianSession::connectToServer()
   191 TInt RSmfClientSymbianSession::connectToServer()
   191     {
   192     {
   192 	qDebug()<<"Inside RSmfClientSymbianSession::connectToServer()";
       
   193 	
       
   194     TInt error = ::StartServerL();
   193     TInt error = ::StartServerL();
   195     qDebug()<<"StartServerL = "<<error;
   194     qDebug()<<"StartServerL = "<<error;
   196 
   195 
   197     if ( KErrNone == error )
   196     if ( KErrNone == error )
   198         {
   197         {
   205     }
   204     }
   206 
   205 
   207 TPtr8 RSmfClientSymbianSession::sendSyncRequest(QByteArray& aSerializedData, 
   206 TPtr8 RSmfClientSymbianSession::sendSyncRequest(QByteArray& aSerializedData, 
   208 		QString aInterfaceName, SmfRequestTypeID aRequestType, TInt maxSize)
   207 		QString aInterfaceName, SmfRequestTypeID aRequestType, TInt maxSize)
   209 	{
   208 	{
   210 	qDebug()<<"Inside RSmfClientSymbianSession::sendSyncRequest() for plugins";
       
   211 	qDebug()<<"iInterfaceName = "<<aInterfaceName;
       
   212 	iLastRequest = aRequestType;
   209 	iLastRequest = aRequestType;
   213 	/**
   210 	/**
   214 	 * The message body consists of.- 
   211 	 * The message body consists of.- 
   215 	 * 1. Serialized data to server SmfProvider+page information+extra information
   212 	 * 1. Serialized data to server SmfProvider+page information+extra information
   216 	 * 2. Interface name as string ("org.symbian.smf.client.gallery")
   213 	 * 2. Interface name as string ("org.symbian.smf.client.gallery")
   227 	iPtrProvider8.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   224 	iPtrProvider8.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   228 
   225 
   229 	//convert the QByteArray into TPtr
   226 	//convert the QByteArray into TPtr
   230 	TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   227 	TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   231 	qDebug()<<"ptrSlot0 size = "<<ptrSlot0.Size();
   228 	qDebug()<<"ptrSlot0 size = "<<ptrSlot0.Size();
   232 
       
   233 	
   229 	
   234 	iInterfaceNamebyte.clear();
   230 	iInterfaceNamebyte.clear();
   235 	//Pass serialized QString for interface name
   231 	//Pass serialized QString for interface name
   236 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   232 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   237 	intfNameStream<<aInterfaceName;
   233 	intfNameStream<<aInterfaceName;
   261     args.Set(0, &iPtrProvider8);
   257     args.Set(0, &iPtrProvider8);
   262     args.Set(1, &iIntfNamePtr8);
   258     args.Set(1, &iIntfNamePtr8);
   263     args.Set(2, &iDataPtr8);
   259     args.Set(2, &iDataPtr8);
   264     qDebug()<<"After setting 0,1,2 slots";
   260     qDebug()<<"After setting 0,1,2 slots";
   265 
   261 
   266     TInt err(KErrBadHandle);
       
   267     qDebug()<<"Before handle";
   262     qDebug()<<"Before handle";
   268     if (Handle()) 
   263     if (Handle()) 
   269     	{
   264     	{
   270         err = KErrNone;
       
   271         qDebug()<<"Before sendreceive";
   265         qDebug()<<"Before sendreceive";
   272         //synchronous request
   266         //synchronous request
   273         TInt sendErr = SendReceive(aRequestType, args);
   267         TInt sendErr = SendReceive(aRequestType, args);
   274         if(sendErr)
   268         if(sendErr)
   275 			qDebug()<<"SendReceive error = "<<sendErr;
   269 			qDebug()<<"SendReceive error = "<<sendErr;
   308 		iIntfNameBuffer8 = NULL;
   302 		iIntfNameBuffer8 = NULL;
   309 		}
   303 		}
   310 	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
   304 	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
   311 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   305 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   312 	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
   306 	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
   313     qDebug()<<"iIntfNamePtr8 size = "<<iIntfNamePtr8.Size();
   307     qDebug()<<"iIntfNamePtr8 (1) size = "<<iIntfNamePtr8.Size();
   314 	
   308 	
   315 	if(iBuffer8)
   309 	if(iBuffer8)
   316 		{
   310 		{
   317 		delete iBuffer8;
   311 		delete iBuffer8;
   318 		iBuffer8 = NULL;
   312 		iBuffer8 = NULL;
   319 		}
   313 		}
   320 	qDebug()<<"Allocated for output = "<<maxSize;
   314 	qDebug()<<"Allocated for output = "<<maxSize;
   321     iBuffer8 = HBufC8::NewL(maxSize);
   315     iBuffer8 = HBufC8::NewL(maxSize);
   322     iDataPtr8.Set(iBuffer8->Des());
   316     iDataPtr8.Set(iBuffer8->Des());
   323     qDebug()<<"After iDataPtr8.Set";
       
   324     
   317     
   325 	if(iProviderBuf8)
   318 	if(iProviderBuf8)
   326 		{
   319 		{
   327 		delete iProviderBuf8;
   320 		delete iProviderBuf8;
   328 		iProviderBuf8 = NULL;
   321 		iProviderBuf8 = NULL;
   338     TIpcArgs args;
   331     TIpcArgs args;
   339     args.Set(0, &iPtrProvider8);
   332     args.Set(0, &iPtrProvider8);
   340     args.Set(1, &iIntfNamePtr8);
   333     args.Set(1, &iIntfNamePtr8);
   341     args.Set(2, &iDataPtr8);
   334     args.Set(2, &iDataPtr8);
   342         
   335         
   343     TInt err(KErrBadHandle);
       
   344     qDebug()<<"Before handle";
   336     qDebug()<<"Before handle";
   345     if (Handle()) 
   337     if (Handle()) 
   346     	{
   338     	{
   347         err = KErrNone;
       
   348         qDebug()<<"Before sendreceive";
   339         qDebug()<<"Before sendreceive";
   349         TInt sendErr = SendReceive(aRequestType, args);
   340         TInt sendErr = SendReceive(aRequestType, args);
   350         if(sendErr)
   341         if(sendErr)
   351 			qDebug()<<"SendReceive error = "<<sendErr;
   342 			qDebug()<<"SendReceive error = "<<sendErr;
   352         }
   343         }
   355 
   346 
   356 /**
   347 /**
   357  * Sends sync DSM request to the Smf server
   348  * Sends sync DSM request to the Smf server
   358  */
   349  */
   359 TPtr8 RSmfClientSymbianSession::sendDSMSyncRequest(SmfRequestTypeID aRequestType,
   350 TPtr8 RSmfClientSymbianSession::sendDSMSyncRequest(SmfRequestTypeID aRequestType,
   360 		QByteArray& aSerializedData, SmfError aErr, TInt maxSize)
   351 		QByteArray& aSerializedData, SmfError& aErr, TInt maxSize)
   361 	{
   352 	{
   362 	/**
   353 	/**
   363 	 * Slot 0:- Data to be passed to DSM
   354 	 * Slot 0:- Data to be passed to DSM
   364 	 * Slot 1:- Data returned from DSM
   355 	 * Slot 1:- Data returned from DSM
   365 	 * Slot 2:- Error
   356 	 * Slot 2:- Error
   371 		delete iSlot0Buffer8;
   362 		delete iSlot0Buffer8;
   372 		iSlot0Buffer8 = NULL;
   363 		iSlot0Buffer8 = NULL;
   373 		}
   364 		}
   374 	iSlot0Buffer8 = HBufC8::NewL(aSerializedData.size());
   365 	iSlot0Buffer8 = HBufC8::NewL(aSerializedData.size());
   375 	iPtr8ToSlot0.Set(iSlot0Buffer8->Des());
   366 	iPtr8ToSlot0.Set(iSlot0Buffer8->Des());
       
   367 	iPtr8ToSlot0.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   376 	
   368 	
   377 	if(iBuffer8)
   369 	if(iBuffer8)
   378 		{
   370 		{
   379 		delete iBuffer8;
   371 		delete iBuffer8;
   380 		iBuffer8 = NULL;
   372 		iBuffer8 = NULL;
   428 	iPtrProvider8.Set(iProviderBuf8->Des());
   420 	iPtrProvider8.Set(iProviderBuf8->Des());
   429 	iPtrProvider8.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   421 	iPtrProvider8.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   430 
   422 
   431 	//convert the QByteArray into TPtr
   423 	//convert the QByteArray into TPtr
   432     TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   424     TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   433     qDebug()<<"ptrSlot0 size = "<<ptrSlot0.Size();
   425     qDebug()<<"ptrSlot0 size = "<<iPtrProvider8.Size();
   434     
   426     
   435 	//Convert the interface name into TPtr
   427 	//Convert the interface name into TPtr
   436     //Pass serialized QString for interface name
   428     //Pass serialized QString for interface name
   437 	iInterfaceNamebyte.clear();
   429 	iInterfaceNamebyte.clear();
   438 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   430 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   444 		iIntfNameBuffer8 = NULL;
   436 		iIntfNameBuffer8 = NULL;
   445 		}
   437 		}
   446 	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
   438 	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
   447 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   439 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   448 	iIntfNamePtr8.Copy(reinterpret_cast<const TText8*>(iInterfaceNamebyte.constData()),iInterfaceNamebyte.length());
   440 	iIntfNamePtr8.Copy(reinterpret_cast<const TText8*>(iInterfaceNamebyte.constData()),iInterfaceNamebyte.length());
   449 	qDebug()<<"After iIntfNamePtr8.Copy";
   441 	qDebug()<<"ptrSlot1 size = "<<iIntfNamePtr8.Size();
   450 	
   442 	
   451 	if(iBuffer8)
   443 	if(iBuffer8)
   452 		{
   444 		{
   453 		delete iBuffer8;
   445 		delete iBuffer8;
   454 		iBuffer8 = NULL;
   446 		iBuffer8 = NULL;
   455 		}
   447 		}
   456     iBuffer8 = HBufC8::NewL(aMaxAllocation);
   448     iBuffer8 = HBufC8::NewL(aMaxAllocation);
   457     iDataPtr8.Set(iBuffer8->Des());
   449     iDataPtr8.Set(iBuffer8->Des());
   458     qDebug()<<"After iDataPtr.Set";
   450     qDebug()<<"After iDataPtr.Set";
   459     
       
   460     
   451     
   461     TIpcArgs args;
   452     TIpcArgs args;
   462     
   453     
   463     //filling the slots
   454     //filling the slots
   464     args.Set(0, &iPtrProvider8);
   455     args.Set(0, &iPtrProvider8);
   465     args.Set(1, &iIntfNamePtr8);
   456     args.Set(1, &iIntfNamePtr8);
   466     args.Set(2, &iDataPtr8);
   457     args.Set(2, &iDataPtr8);
   467     qDebug()<<"After setting 0,1,2 slots";
   458     qDebug()<<"After setting 0,1,2 slots";
   468     
   459     
   469     TInt err(KErrBadHandle);
       
   470     qDebug()<<"Before Handle()";
   460     qDebug()<<"Before Handle()";
   471     if (Handle()) 
   461     if (Handle()) 
   472     	{
   462     	{
   473         err = KErrNone;
       
   474         qDebug()<<"Before sendreceive";
   463         qDebug()<<"Before sendreceive";
   475         SendReceive(aRequestType, args, aStatus);
   464         SendReceive(aRequestType, args, aStatus);
       
   465         qDebug()<<"After sendreceive";
   476         }
   466         }
   477 	}
   467 	}
   478 
   468 
   479 // -----------------------------------------------------------------------------
   469 // -----------------------------------------------------------------------------
   480 // CreateServerProcessL()
   470 // CreateServerProcessL()
   488     const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
   478     const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
   489 
   479 
   490     RProcess server;
   480     RProcess server;
   491 
   481 
   492     result = server.Create( KSmfServerFilename, KNullDesC, serverUid );
   482     result = server.Create( KSmfServerFilename, KNullDesC, serverUid );
       
   483     qDebug()<<"server.Create() = "<<result;
   493     if ( result != KErrNone )
   484     if ( result != KErrNone )
   494         {
   485         {
   495         return  result;
   486         return  result;
   496         }
   487         }
   497 
   488 
   511 
   502 
   512     TFindServer findSmfServer( KSmfServerFilename );
   503     TFindServer findSmfServer( KSmfServerFilename );
   513     TFullName name;
   504     TFullName name;
   514 
   505 
   515     result = findSmfServer.Next( name );
   506     result = findSmfServer.Next( name );
   516     
       
   517     if ( result == KErrNone )
   507     if ( result == KErrNone )
   518         {
   508         {
   519         // Server already running
   509         // Server already running
   520         return KErrNone;
   510         return KErrNone;
   521         }
   511         }