26 #include "CSearchDocument.h" |
26 #include "CSearchDocument.h" |
27 #include "OstTraceDefinitions.h" |
27 #include "OstTraceDefinitions.h" |
28 #ifdef OST_TRACE_COMPILER_IN_USE |
28 #ifdef OST_TRACE_COMPILER_IN_USE |
29 #include "rsearchserversessionTraces.h" |
29 #include "rsearchserversessionTraces.h" |
30 #endif |
30 #endif |
31 |
31 #include "cpixwatchdogcommon.h" |
|
32 #include <centralrepository.h> |
32 |
33 |
33 |
34 |
34 // FUNCTION PROTOTYPES |
35 // FUNCTION PROTOTYPES |
35 static TInt StartServer(); |
36 static TInt StartServer( const TDesC& aServerName , TUid aServerUid ); |
36 static TInt CreateServerProcess(); |
37 static TInt CreateServerProcess( const TDesC& aServerName , TUid aServerUid ); |
37 |
38 |
38 // RsearchServerSession::RsearchServerSession() |
39 // RsearchServerSession::RsearchServerSession() |
39 // C++ default constructor can NOT contain any code, that might leave. |
40 // C++ default constructor can NOT contain any code, that might leave. |
40 EXPORT_C RSearchServerSession::RSearchServerSession(): RSessionBase() |
41 EXPORT_C RSearchServerSession::RSearchServerSession(): RSessionBase() |
41 { |
42 { |
46 // RsearchServerSession::Connect() |
47 // RsearchServerSession::Connect() |
47 // Connects to the server and create a session. |
48 // Connects to the server and create a session. |
48 // ----------------------------------------------------------------------------- |
49 // ----------------------------------------------------------------------------- |
49 EXPORT_C TInt RSearchServerSession::Connect() |
50 EXPORT_C TInt RSearchServerSession::Connect() |
50 { |
51 { |
51 TInt err = StartServer(); |
52 //read the name and Uid of the search server |
52 |
53 TInt err = KErrNotReady; |
53 if ( KErrNone == err ) |
54 // get the watchdog repro |
54 { |
55 //TRAP_IGNORE is used to avoid the code scanner error |
55 err = CreateSession(KSearchServerName, Version(), KDefaultMessageSlots); |
56 CRepository* wdrepo = NULL; |
56 } |
57 TRAP_IGNORE(wdrepo = CRepository::NewL( KWDrepoUidMenu )); |
|
58 if ( wdrepo ) |
|
59 { |
|
60 HBufC* servername = NULL; |
|
61 TUid serveruid = {0}; |
|
62 TBuf<KCenrepUidLength> temp; |
|
63 TInt64 value; |
|
64 TLex uidvalue; |
|
65 //read the searchserver UId |
|
66 if ( KErrNone == wdrepo->Get( KSearchServerUIDKey, temp )) |
|
67 { |
|
68 uidvalue.Assign(temp); |
|
69 if (KErrNone == uidvalue.Val( value,EHex )) |
|
70 serveruid.iUid = value; |
|
71 } |
|
72 //read the search server name |
|
73 if ( KErrNone == wdrepo->Get( KSearchServerNAMEKey, temp )) |
|
74 { |
|
75 //TRAP_IGNORE is used to avoid the code scanner error |
|
76 TRAP_IGNORE(servername = HBufC::NewL( temp.Length() )); |
|
77 TPtr ssname = servername->Des(); |
|
78 ssname.Copy( temp ); |
|
79 } |
|
80 // make sure the server is started before creating connection |
|
81 if ( servername ) |
|
82 err = StartServer( *servername , serveruid ); |
|
83 |
|
84 if ( KErrNone == err ) |
|
85 { |
|
86 err = CreateSession(*servername, Version(), KDefaultMessageSlots); |
|
87 } |
|
88 delete servername; |
|
89 } |
|
90 delete wdrepo; |
57 return err; |
91 return err; |
58 } |
92 } |
59 |
93 |
60 // ----------------------------------------------------------------------------- |
94 // ----------------------------------------------------------------------------- |
61 // A request to close the session. |
95 // A request to close the session. |
351 if (iSizeList) |
385 if (iSizeList) |
352 { |
386 { |
353 delete iSizeList; |
387 delete iSizeList; |
354 iSizeList = NULL; |
388 iSizeList = NULL; |
355 } |
389 } |
356 iSizeList = STATIC_CAST(TInt *, User::AllocZL(iReqCount * sizeof(TInt))); |
390 TRAP_IGNORE(iSizeList = STATIC_CAST(TInt *, User::AllocZL(iReqCount * sizeof(TInt)))); |
357 //iDocSizeArray |
391 //iDocSizeArray |
358 TPtr8 blob((TUint8*)iSizeList, iReqCount * sizeof(TInt)); |
392 TPtr8 blob((TUint8*)iSizeList, iReqCount * sizeof(TInt)); |
359 |
393 |
360 // Message arguments for the server |
394 // Message arguments for the server |
361 TIpcArgs args(aIndex, aCount, &blob); |
395 TIpcArgs args(aIndex, aCount, &blob); |
482 } |
516 } |
483 |
517 |
484 |
518 |
485 // StartServer() |
519 // StartServer() |
486 // Starts the server if it is not already running |
520 // Starts the server if it is not already running |
487 static TInt StartServer() |
521 static TInt StartServer( const TDesC& aServerName , TUid aServerUid ) |
488 { |
522 { |
489 TInt result; |
523 TInt result; |
490 |
524 |
491 TFindServer findsearchServer(KSearchServerName); |
525 TFindServer findsearchServer(aServerName); |
492 TFullName name; |
526 TFullName name; |
493 |
527 |
494 result = findsearchServer.Next(name); |
528 result = findsearchServer.Next(name); |
495 if (result == KErrNone) |
529 if (result == KErrNone) |
496 { |
530 { |
517 return KErrNone; |
551 return KErrNone; |
518 } |
552 } |
519 |
553 |
520 // CreateServerProcess() |
554 // CreateServerProcess() |
521 // Creates a server process |
555 // Creates a server process |
522 static TInt CreateServerProcess() |
556 static TInt CreateServerProcess( const TDesC& aServerName , TUid aServerUid ) |
523 { |
557 { |
524 TInt result; |
558 TInt result; |
525 |
559 |
526 const TUidType serverUid( KNullUid, KNullUid, KServerUid3); |
560 const TUidType serverUid( KNullUid, KNullUid, aServerUid); |
527 |
561 |
528 RProcess server; |
562 RProcess server; |
529 |
563 |
530 result = server.Create(KSearchServerFilename, KNullDesC, serverUid); |
564 result = server.Create(aServerName, KNullDesC, serverUid); |
531 if (result != KErrNone) |
565 if (result != KErrNone) |
532 { |
566 { |
533 return result; |
567 return result; |
534 } |
568 } |
535 |
569 |