smf/smfservermodule/smfclient/client/smfclientsymbian.cpp
changeset 14 a469c0e6e7fb
parent 7 be09cf1f39dd
equal deleted inserted replaced
13:b5d63d5fc252 14:a469c0e6e7fb
    25 #include <QProcess>
    25 #include <QProcess>
    26 #include <QTextStream>
    26 #include <QTextStream>
    27 #include <QFile>
    27 #include <QFile>
    28 //testing end
    28 //testing end
    29 // For starting the server process
    29 // For starting the server process
    30 static TInt StartServerL();
    30 static TInt StartServer();
    31 static TInt CreateServerProcessL();
    31 static TInt CreateServerProcessL();
    32 
    32 
    33 CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver)
    33 CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver)
    34 : iObserver(aObserver),CActive( EPriorityStandard ),iDataPtr(NULL, 0, 0)
    34 : iObserver(aObserver),CActive( EPriorityStandard ),iDataPtr(NULL, 0, 0)
    35 	{
    35 	{
   100         	writeLog("KErrNotReady");
   100         	writeLog("KErrNotReady");
   101         	break;
   101         	break;
   102 
   102 
   103         default:
   103         default:
   104         	{
   104         	{
   105         	writeLog("RunL:-SmfContactRetrievePostsComplete");
   105         	writeLog("RunL:-default");
   106         	//This contains error followed by actual data
   106         	//This contains error followed by actual data
   107         	QByteArray receivedData(reinterpret_cast<const char*>(iSession.iDataPtr.Ptr()),iSession.iDataPtr.Length());
   107         	QByteArray receivedData(reinterpret_cast<const char*>(iSession.iDataPtr.Ptr()),iSession.iDataPtr.Length());
   108         	QString errStr;
   108         	writeLog("receivedData size=");
       
   109         	writeLog(QString::number(receivedData.size()));
   109         	SmfError errVal;
   110         	SmfError errVal;
   110         	int errInt;
   111         	int errInt;
   111         	QByteArray data;
   112         	QByteArray data;
   112         	QDataStream reader(&receivedData,QIODevice::ReadOnly);
   113         	QDataStream reader(&receivedData,QIODevice::ReadOnly);
   113         	reader>>errInt;
   114         	reader>>errInt;
       
   115         	writeLog("errInt=");
       
   116         	writeLog(QString::number(errInt));
   114         	errVal = (SmfError)errInt;
   117         	errVal = (SmfError)errInt;
   115         	reader>>data;
   118         	reader>>data;
       
   119         	writeLog("data size=");
       
   120         	writeLog(QString::number(data.size()));
   116         	SmfRequestTypeID opcode = (SmfRequestTypeID)iSession.getLastRequest();
   121         	SmfRequestTypeID opcode = (SmfRequestTypeID)iSession.getLastRequest();
   117         	iObserver->resultsAvailable(data,opcode,errVal);
   122         	if(iObserver)
       
   123         		{
       
   124 				iObserver->resultsAvailable(data,opcode,errVal);
       
   125         		}
   118         	}
   126         	}
   119         	break;
   127         	break;
   120         }
   128         }
   121 	}
   129 	}
   122 
   130 
   123 QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName,
   131 QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName,
   124 		 SmfRequestTypeID requestType)
   132 		 SmfRequestTypeID requestType,TInt maxSize)
   125 	{
   133 	{
   126 	//This will be a synchronous request
   134 	//This will be a synchronous request
   127 	//note session is opened in ctor and closed in dtor
   135 	//note session is opened in ctor and closed in dtor
   128 	writeLog("CSmfClientSymbian::sendRequest=");
   136 	writeLog("CSmfClientSymbian::sendRequest=");
   129 	writeLog(aInterfaceName);
   137 	writeLog(aInterfaceName);
   130 	//Gets data synchronously from the server
   138 	//Gets data synchronously from the server
   131     TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType));
   139     TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType,maxSize));
   132     //convert this into bytearray
   140     //convert this into bytearray
   133     QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
   141     QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
   134     return receivedData;
   142     return receivedData;
   135     //
   143     //
   136 	}
   144 	}
   137 
   145 QByteArray CSmfClientSymbian::sendDSMSyncRequest(SmfRequestTypeID requestType,QByteArray& aSerializedData,SmfError& aErr,TInt maxSize)
       
   146 	{
       
   147 	writeLog("CSmfClientSymbian::sendDSMSyncRequest=");
       
   148 	writeLog(QString::number(requestType));
       
   149 	SmfError err;
       
   150 	//Gets data synchronously from the server
       
   151     TPtr8 symbianBuf(iSession.sendDSMSyncRequest(requestType,aSerializedData,err,maxSize));
       
   152     //convert this into bytearray
       
   153     QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
       
   154     writeLog("receivedData size=");
       
   155     writeLog(QString::number(receivedData.size()));
       
   156     return receivedData;
       
   157 	}
   138 TInt CSmfClientSymbian::sendRequest(QByteArray& aSerializedData,
   158 TInt CSmfClientSymbian::sendRequest(QByteArray& aSerializedData,
   139 		 QString aInterfaceName,
   159 		 QString aInterfaceName,
   140 		 SmfRequestTypeID requestType)
   160 		 SmfRequestTypeID requestType,TInt aMaxAllocation,QByteArray xtraInfo)
   141 	{
   161 	{
   142 	//TODO:-testing puspose only, should be removed in the release
   162 		//RSessionBase objects sendreceive is called
   143 	if(requestType == SmfTest)
   163 		iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus,aMaxAllocation,xtraInfo);
   144 		{
       
   145 		QString log("Before iSesson.SendAsync");
       
   146 		writeLog(log);
       
   147 		iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus);
       
   148 		SetActive();
   164 		SetActive();
   149 		QString log2("After setactive");
       
   150 		writeLog(log2);
       
   151 		}
       
   152 	else
       
   153 		{
       
   154 		//RSessionBase objects sendreceive is called
       
   155 		iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus);
       
   156 		SetActive();
       
   157 		}
       
   158 	}
   165 	}
   159 
   166 
   160 TInt CSmfClientSymbian::sendDummyRequest(QByteArray* provider,QString aInterfaceName,
   167 TInt CSmfClientSymbian::sendDummyRequest(QByteArray* provider,QString aInterfaceName,
   161 		 SmfRequestTypeID requestType)
   168 		 SmfRequestTypeID requestType)
   162 	{
   169 	{
   179     Cancel(); // Causes call to DoCancel()
   186     Cancel(); // Causes call to DoCancel()
   180     iSession.Close();
   187     iSession.Close();
   181 	}
   188 	}
   182 
   189 
   183 RSmfClientSymbianSession::RSmfClientSymbianSession()
   190 RSmfClientSymbianSession::RSmfClientSymbianSession()
   184 :iDataPtr(NULL, 0, 0),iDataPtr16(NULL,0),iIntfNamePtr(NULL,0),iIntfNamePtr8(NULL,0),iPtrProvider(NULL,0)
   191 :iDataPtr(NULL, 0, 0),iDataPtr16(NULL,0),
       
   192  iIntfNamePtr(NULL,0),iIntfNamePtr8(NULL,0),
       
   193  iPtrProvider(NULL,0),iPtrToSlot0(NULL,0)
   185     {
   194     {
   186     // No implementation required
   195     // No implementation required
   187     }
   196     }
   188 
   197 
   189 TInt RSmfClientSymbianSession::connectToServer()
   198 TInt RSmfClientSymbianSession::connectToServer()
   190     {
   199     {
   191 	writeLog("RSmfClientSymbianSession::connectToServer");
   200 	writeLog("RSmfClientSymbianSession::connectToServer");
   192     TInt error = ::StartServerL();
   201     TInt error = ::StartServer();
   193     writeLog("StartServerL=");
   202     writeLog("StartServerL=");
   194     QString err = QString::number(error);
   203     QString err = QString::number(error);
   195     writeLog(err);
   204     writeLog(err);
   196     if ( KErrNone == error )
   205     if ( KErrNone == error )
   197         {
   206         {
   198 		
   207 		
   199         error = CreateSession( KSmfServerName,
   208         error = CreateSession(KSmfServerName,
   200                                Version(),
   209                                Version(),
   201                                4 );
   210                                4 );
   202         QString crtSessionErr = QString::number(error);
   211         QString crtSessionErr = QString::number(error);
   203         writeLog(crtSessionErr);
   212         writeLog(crtSessionErr);
   204         }
   213         }
   215     QTextStream out(&file);
   224     QTextStream out(&file);
   216     out << log << "\n";
   225     out << log << "\n";
   217     file.close();
   226     file.close();
   218 #endif
   227 #endif
   219 	}
   228 	}
   220 
   229 /**
       
   230  * Sends sync request to the Smf server
       
   231  */
       
   232 TPtr8 RSmfClientSymbianSession::sendDSMSyncRequest(SmfRequestTypeID aRequestType,
       
   233 		QByteArray& aSerializedData,SmfError aErr,
       
   234 		TInt maxSize)
       
   235 	{
       
   236 	/**
       
   237 	 * Slot 0:- Data to be passed to DSM
       
   238 	 * Slot 1:- Data returned from DSM
       
   239 	 * Slot 2:- Error
       
   240 	 */
       
   241 	writeLog("RSmfClientSymbianSession::sendDSMSyncRequest");
       
   242 	iLastRequest = aRequestType;
       
   243 	if(iSlot0Buffer)
       
   244 		{
       
   245 		delete iSlot0Buffer;
       
   246 		iSlot0Buffer = NULL;
       
   247 		}
       
   248 	iSlot0Buffer = HBufC8::NewL(aSerializedData.size());
       
   249 	iPtrToSlot0.Set(iSlot0Buffer->Des());
       
   250 	if(iBuffer)
       
   251 		{
       
   252 		delete iBuffer;
       
   253 		iBuffer = NULL;
       
   254 		}
       
   255     iBuffer = HBufC8::NewL(maxSize);
       
   256     iDataPtr.Set(iBuffer->Des());
       
   257     
       
   258     TIpcArgs args;
       
   259 
       
   260     args.Set(0, &iPtrToSlot0);
       
   261     args.Set(1, &iDataPtr);
       
   262     iDSMErr.Zero();
       
   263     args.Set(2,&iDSMErr);
       
   264     
       
   265     TInt sendErr = SendReceive(aRequestType,args);
       
   266     writeLog("SendReceive=");
       
   267     writeLog(QString::number(sendErr));
       
   268     TInt numIndex;
       
   269     TLex iLex(iDSMErr);
       
   270     
       
   271     iLex.Val(numIndex);
       
   272     aErr = (SmfError)numIndex;
       
   273     return iDataPtr;
       
   274 	}
   221 TPtr8 RSmfClientSymbianSession::sendSyncRequest(QString aInterfaceName,
   275 TPtr8 RSmfClientSymbianSession::sendSyncRequest(QString aInterfaceName,
   222 		SmfRequestTypeID aRequestType)
   276 		SmfRequestTypeID aRequestType,
       
   277 		TInt maxSize)
   223 	{
   278 	{
   224 	iLastRequest = aRequestType;
   279 	iLastRequest = aRequestType;
   225 	/**
   280 	/**
   226 	 * The message body consists of.- 
   281 	 * The message body consists of.- 
   227 	 * 1. Interface name as string ("org.symbian.smf.client.gallery")
   282 	 * 1. Interface name as string ("org.symbian.smf.client.gallery")
   265 	if(iBuffer)
   320 	if(iBuffer)
   266 		{
   321 		{
   267 		delete iBuffer;
   322 		delete iBuffer;
   268 		iBuffer = NULL;
   323 		iBuffer = NULL;
   269 		}
   324 		}
   270 	iMaxMessageSize = 1000 ;
   325 	writeLog("Allocated for SmfProviderList=");
   271     iBuffer = HBufC8::NewL(iMaxMessageSize);
   326 	writeLog(QString::number(maxSize));
       
   327 	if(iBuffer)
       
   328 		{
       
   329 		delete iBuffer;
       
   330 		iBuffer = NULL;
       
   331 		}
       
   332     iBuffer = HBufC8::NewL(maxSize);
   272     iDataPtr.Set(iBuffer->Des());
   333     iDataPtr.Set(iBuffer->Des());
   273     log.clear();
   334     log.clear();
   274     log = QString("After iDataPtr.Set");
   335     log = QString("After iDataPtr.Set");
   275     writeLog(log);
   336     writeLog(log);
   276 
   337 
   277 	
   338 	
   278     TIpcArgs args;
   339     TIpcArgs args;
   279 
   340 
   280     args.Set(0, &iInterfaceSymbian8);
   341     args.Set(0, &iInterfaceSymbian8);
   281     args.Set(1, &iDataPtr);
   342     args.Set(1, &iDataPtr);
   282     
   343     if(maxSize)
       
   344     	{
       
   345 		iMaxSize = maxSize;
       
   346 		args.Set(2,iMaxSize);
       
   347     	}
   283     TInt err(KErrBadHandle);
   348     TInt err(KErrBadHandle);
   284     writeLog("Before handle");
   349     writeLog("Before handle");
   285 	log.clear();
   350 	log.clear();
   286     log = QString("iInterfaceSymbian8 size=")+QString::number(iInterfaceSymbian8.Size());
   351     log = QString("iInterfaceSymbian8 size=")+QString::number(iInterfaceSymbian8.Size());
   287     writeLog(log);
   352     writeLog(log);
   308  *
   373  *
   309  */
   374  */
   310 void RSmfClientSymbianSession::sendAsyncRequest(QByteArray& aSerializedData,
   375 void RSmfClientSymbianSession::sendAsyncRequest(QByteArray& aSerializedData,
   311 		QString aInterfaceName,
   376 		QString aInterfaceName,
   312 		SmfRequestTypeID aRequestType,
   377 		SmfRequestTypeID aRequestType,
   313 		TRequestStatus& aStatus)
   378 		TRequestStatus& aStatus,
   314 	{
   379 		TInt aMaxAllocation,
   315 	iLastRequest = aRequestType;
   380 		QByteArray aXtraInfo)
       
   381 	{
   316 	/**
   382 	/**
   317 	 * The message body consists of.- 
   383 	 * The message body consists of.- 
   318 	 * 1. Provider Info(SmfProvider*)+ Other common class data
   384 	 * Modified,-
   319 	 *  (when applicable)-serialized
   385 	 * slot 0 = SmfProvider +PageInfo flag+ aPageNum + aPerPage + XtraInfo flag(size of xtra data) Serialized
   320 	 * 2. Interface name as string ("org.symbian.smf.client.gallery")
   386 	 * slot 1 = Interface name serialized
   321 	 * 3. Data pointer to be filled by serialized data
   387 	 * slot 2 = Data pointer to filled by server
       
   388 	 * slot 3= Xtra info when required by server else empty buffer
   322 	 */
   389 	 */
   323 	QString log("RSmfClientSymbianSession::sendAsyncRequest-start-");
   390 	writeLog("RSmfClientSymbianSession::sendAsyncRequest-start-");
   324 	writeLog(log);
   391 	iLastRequest = aRequestType;
   325 	
   392 	
   326 	iBaseProvider= aSerializedData;
   393 	
   327 	iInterfaceName = aInterfaceName ;
   394 	
   328 	
   395 	
   329     int size = aSerializedData.size();
   396 	if(iProviderBuf)
   330     log.clear();
   397 		{
   331     log = QString("aSerializedData size=")+ QString::number(size);
       
   332     
       
   333     writeLog(log);
       
   334     if(iProviderBuf)
       
   335     	{
       
   336 		delete iProviderBuf;
   398 		delete iProviderBuf;
   337 		iProviderBuf = NULL;
   399 		iProviderBuf = NULL;
   338     	}
   400 		}
   339     //TODO:- KSmfProviderMaxSize
   401 	iProviderBuf = HBufC8::NewL(aSerializedData.size());
   340     iProviderBuf = HBufC8::NewL(iBaseProvider.size()*2);
   402 	iPtrProvider.Set(iProviderBuf->Des());
   341     iPtrProvider.Set(iProviderBuf->Des());
   403 	iPtrProvider.Copy(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
       
   404 	
       
   405 	
       
   406 	
       
   407 	
   342 	//convert the QByteArray into TPtr
   408 	//convert the QByteArray into TPtr
   343     iPtrProvider.Copy(reinterpret_cast<const TText8*>(iBaseProvider.constData()),iBaseProvider.length());
   409     TPtrC8 ptrSlot0(reinterpret_cast<const TText8*>(aSerializedData.constData()),aSerializedData.length());
   344     
   410     writeLog("ptrSlot0 size=");
   345 	
   411     writeLog(QString::number(ptrSlot0.Size()));
   346     log.clear();
   412 	//Convert the interface name into TPtr
   347     log = QString("iPtrProvider.Copy");
       
   348     writeLog(log);
       
   349     
       
   350 	//Convert the interface name into TPtr////////////////////////
       
   351 	iInterfaceName.clear();
   413 	iInterfaceName.clear();
   352 	iInterfaceName = aInterfaceName ;
   414 	iInterfaceName.append(aInterfaceName) ;
   353 	writeLog(QString("iInterfaceName=")+iInterfaceName);
   415 	writeLog(QString("iInterfaceName=")+iInterfaceName);
       
   416 	iInterfaceNamebyte.clear();
   354 	//Pass serialized QString for interface name
   417 	//Pass serialized QString for interface name
   355 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   418 	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
   356 	intfNameStream<<iInterfaceName;
   419 	intfNameStream<<iInterfaceName;
   357 	log.clear();
   420 	writeLog("iInterfaceNamebyte size=");
   358     log = QString("iInterfaceNamebyte size=");
   421 	writeLog(QString::number(iInterfaceNamebyte.size()));
   359     log += QString::number(iInterfaceNamebyte.size());
       
   360     writeLog(log);
       
   361 	if(iIntfNameBuffer8)
   422 	if(iIntfNameBuffer8)
   362 		{
   423 		{
   363 		delete iIntfNameBuffer8;
   424 		delete iIntfNameBuffer8;
   364 		iIntfNameBuffer8 =NULL;
   425 		iIntfNameBuffer8 = NULL;
   365 		}
   426 		}
   366 	iIntfNameBuffer8 = HBufC8::NewL(aInterfaceName.size()*2);
   427 	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size());
   367 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   428 	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
   368 	//Convert into symbian data type
   429 	iIntfNamePtr8.Copy(reinterpret_cast<const TText8*>(iInterfaceNamebyte.constData()),iInterfaceNamebyte.length());
   369 	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
   430 	writeLog("After iIntfNamePtr8.Copy");
   370 	log.clear();
       
   371     log = QString("iIntfNamePtr8 size=")+QString::number(iIntfNamePtr8.Size());
       
   372     writeLog(log);
       
   373 	
       
   374 
       
   375 	if(iBuffer)
   431 	if(iBuffer)
   376 		{
   432 		{
   377 		delete iBuffer;
   433 		delete iBuffer;
   378 		iBuffer = NULL;
   434 		iBuffer = NULL;
   379 		}
   435 		}
   380 	//TODO:-KSmfMaxDataSize
   436     iBuffer = HBufC8::NewL(aMaxAllocation);
   381 	iMaxMessageSize = 2000 ;
       
   382     iBuffer = HBufC8::NewL(iMaxMessageSize);
       
   383     iDataPtr.Set(iBuffer->Des());
   437     iDataPtr.Set(iBuffer->Des());
   384     log.clear();
   438     writeLog("After iDataPtr.Set");
   385     log = QString("After iDataPtr.Set");
       
   386     writeLog(log);
       
   387 	
       
   388 	
       
   389     TIpcArgs args;
   439     TIpcArgs args;
   390     
   440     
   391 
   441     //filling the slots
   392     args.Set(0, &iPtrProvider);
   442     args.Set(0, &iPtrProvider);
   393     args.Set(1, &iIntfNamePtr8);
   443     args.Set(1, &iIntfNamePtr8);
   394     args.Set(2, &iDataPtr);
   444     args.Set(2, &iDataPtr);
   395     
   445     writeLog("After setting 0,1,2 slots");
       
   446     if(aXtraInfo.size())
       
   447     	{
       
   448 		TPtrC8 ptrToXtraInfo(reinterpret_cast<const TText8*>(aXtraInfo.constData()),aXtraInfo.length());
       
   449 		writeLog("ptrToXtraInfo size=");
       
   450 		writeLog(QString::number(ptrToXtraInfo.Size()));
       
   451 		args.Set(3, &ptrToXtraInfo);
       
   452     	}
   396     TInt err(KErrBadHandle);
   453     TInt err(KErrBadHandle);
   397     log.clear();
   454     writeLog("Before Handle()");
   398     log = QString("Before Handle()");
       
   399     writeLog("Before handle");
       
   400     if (Handle()) 
   455     if (Handle()) 
   401     	{
   456     	{
   402         err = KErrNone;
   457         err = KErrNone;
   403         log.clear();
   458         writeLog("Before sendreceive");
   404         log = QString("Before sendreceive");
   459         SendReceive(aRequestType, args, aStatus);
   405         writeLog(log);
   460         }
   406        SendReceive(aRequestType, args, aStatus);
   461 	}
   407 
       
   408         }
       
   409 	}
       
   410 
       
   411 // -----------------------------------------------------------------------------
       
   412 // StartServerL()
       
   413 // Starts the server if it is not already running
       
   414 // -----------------------------------------------------------------------------
       
   415 //
       
   416 static TInt StartServerL()
       
   417     {
       
   418     TInt result;
       
   419 
       
   420     TFindServer findSmfServer( KSmfServerName );
       
   421     TFullName name;
       
   422 
       
   423     result = findSmfServer.Next( name );
       
   424     if ( result == KErrNone )
       
   425         {
       
   426         // Server already running
       
   427         return KErrNone;
       
   428         }
       
   429 
       
   430     result = CreateServerProcessL();
       
   431     if ( result != KErrNone )
       
   432         {
       
   433         return  result;
       
   434         }
       
   435 
       
   436     return KErrNone;
       
   437     }
       
   438 
   462 
   439 // -----------------------------------------------------------------------------
   463 // -----------------------------------------------------------------------------
   440 // CreateServerProcessL()
   464 // CreateServerProcessL()
   441 // Creates a server process
   465 // Creates a server process
   442 // -----------------------------------------------------------------------------
   466 // -----------------------------------------------------------------------------
   443 //
   467 //
   444 static TInt CreateServerProcessL()
   468 static TInt CreateServerProcessL()
   445     {
   469     {
   446     TInt result;
   470     TInt result;
       
   471     TUid KSmfServerUID3 = { 0xE5027327 };
       
   472     const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
       
   473 
       
   474     RProcess server;
       
   475 
       
   476     result = server.Create( KSmfServerFilename, KNullDesC, serverUid );
       
   477 
       
   478     if ( result != KErrNone )
       
   479         {
       
   480         return  result;
       
   481         }
       
   482 
       
   483     server.Resume();
       
   484     server.Close();
       
   485 
       
   486     return  KErrNone;
       
   487     }
       
   488 static TInt StartServer()
       
   489     {
       
   490     TInt result;
       
   491 
       
   492     TFindServer findSmfServer( KSmfServerFilename );
       
   493     TFullName name;
       
   494 
       
   495     result = findSmfServer.Next( name );
       
   496     if ( result == KErrNone )
       
   497         {
       
   498         // Server already running
       
   499         return KErrNone;
       
   500         }
       
   501 
       
   502     RSemaphore semaphore;
       
   503     result = semaphore.CreateGlobal( KSmfServerSemaphoreName, 0 );
       
   504     if ( result != KErrNone )
       
   505         {
       
   506         return  result;
       
   507         }
       
   508 
       
   509     result = CreateServerProcessL();
       
   510     if ( result != KErrNone )
       
   511         {
       
   512         return  result;
       
   513         }
       
   514 
       
   515     semaphore.Wait();
       
   516     semaphore.Close();
       
   517 
       
   518     return KErrNone;
       
   519     }
       
   520 
       
   521 // -----------------------------------------------------------------------------
       
   522 // CreateServerProcess()
       
   523 // Creates a server process
       
   524 // -----------------------------------------------------------------------------
       
   525 //
       
   526 static TInt CreateServerProcess()
       
   527     {
       
   528     TInt result;
   447     //SmfServer SID
   529     //SmfServer SID
   448     TUid KSmfServerUID3 = { 0xE5027327 };
   530     TUid KSmfServerUID3 = { 0xE5027327 };
   449     const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
   531     const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
   450 
   532 
   451     RProcess server;
   533     RProcess server;
   452 
   534 
   453     result = server.Create( KSmfServerFilename, KNullDesC, serverUid );
   535     result = server.Create( KSmfServerName, KNullDesC, serverUid );
   454     User::LeaveIfError(result);
   536 
   455     if (KErrNone != result) {
   537     if ( result != KErrNone )
   456         return  result; 
   538         {
   457     }
   539         return  result;
   458     else {
   540         }
   459 		//User::WaitForRequest going for infinite loop, temporary work-around
   541 
   460         //TRequestStatus status;
   542     server.Resume();
   461         //server.Rendezvous(status);
   543     server.Close();
   462         server.Resume(); // logon OK - start the server
   544 
   463         //Going for infinite loop
       
   464         //User::WaitForRequest(status);// wait for start or death
       
   465         User::After(700000);
       
   466         server.Close();
       
   467         return KErrNone;
       
   468         //return status.Int(); // return the error
       
   469     }
       
   470     return  KErrNone;
   545     return  KErrNone;
   471     }
   546     }