searcher/searchclient/src/rsearchserversession.cpp
changeset 17 7cda54f2d97f
parent 16 2729d20a0010
child 23 d4d56f5e7c55
equal deleted inserted replaced
16:2729d20a0010 17:7cda54f2d97f
    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 		{
   503 	if (result != KErrNone)
   537 	if (result != KErrNone)
   504 		{
   538 		{
   505 		return result;
   539 		return result;
   506 		}
   540 		}
   507 
   541 
   508 	result = CreateServerProcess();
   542 	result = CreateServerProcess( aServerName,aServerUid );
   509 	if (result != KErrNone)
   543 	if (result != KErrNone)
   510 		{
   544 		{
   511 		return result;
   545 		return result;
   512 		}
   546 		}
   513 
   547 
   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