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 } |
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 } |