brandingserver/bsclient/bsprocessstarter.cpp
changeset 46 860cd8a5168c
parent 35 085f765766a0
--- a/brandingserver/bsclient/bsprocessstarter.cpp	Fri May 28 18:27:27 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: bsprocessstarter.cpp
-*
-*/
-//  INCLUDE FILES
-#include "bsprocessstarter.h"
-#include <e32std.h>
-#include <f32file.h>
-
-
-// CONSTANTS
-_LIT( KEka2ExeDir,"\\sys\\bin\\");
-_LIT( KEka2LaunchMutexExt, "[lMtx]" );
-const TInt KEka2SrvConnTries = 7;
-const TInt KEka2SrvConnInitialRetryWait = 500; //MicroSeconds => 0.0005s
-
-
-
-// ==============================================================
-// ====================== HELPER CLASS ==========================
-// ==============================================================
-
-/**
- * RSessionBase accessor to give to the ProcessStarter
- * access to RSessionBase::CreateSession().
- */
-class REka2SessionBaseAccessor : public RSessionBase
-    {
-    public: // Constructor
-        inline REka2SessionBaseAccessor()
-            {
-            }
-
-    public: // New functions
-
-        /**
-         * Public access to RSessionBase::CreateSession().
-         */
-        inline TInt CreateSession( const TDesC& aServer,
-                                   const TVersion& aVersion,
-                                   TInt aAsyncMessageSlots )
-            {
-            return RSessionBase::CreateSession( aServer,
-                                                aVersion,
-                                                aAsyncMessageSlots );
-            }
-    };
-
-
-
-
-
-// ==============================================================
-// ====================== PROCESSSTARTER ========================
-// ==============================================================
-
-
-// --------------------------------------------------------------
-// BSProcessStarter::FullExePathForClienLocation()
-// --------------------------------------------------------------
-//
-void BSProcessStarter::FullExePathForClienLocation(
-    const TDesC& aExeName,
-    TFileName& aFullExePath )
-    {
-    //Get drive (C:) where this client code is installed
-        {
-        TFileName tmp;
-        Dll::FileName( tmp );
-        aFullExePath.Copy( TParsePtrC( tmp ).Drive() );
-        }
-
-    //Build the rest from the exe path
-    aFullExePath.Append( KEka2ExeDir );
-    aFullExePath.Append( aExeName );
-    }
-
-
-
-// --------------------------------------------------------------
-// BSProcessStarter::StartInstance()
-// --------------------------------------------------------------
-//
-TInt BSProcessStarter::StartInstance(
-    const TDesC& aFullExePath,
-    const TDesC& aCommand,
-    const TArray< TProcessStartupParam >* aParams )
-    {
-    RMutex launchMutex;
-    TInt error = KErrNotFound;
-
-        {
-        // Dynamic mutex name used to allow code share
-        TName launchMutexName( TParsePtrC( aFullExePath ).Name() );
-        launchMutexName.Append( KEka2LaunchMutexExt );
-
-        // Open or Create mutex to serialize to access to server startup code.
-        // (race condition safe way)
-        while( error == KErrNotFound )
-            {
-            error = launchMutex.CreateGlobal( launchMutexName );
-            if( error != KErrAlreadyExists )
-                {
-                break;
-                }
-            error = launchMutex.OpenGlobal( launchMutexName );
-            }
-
-        if( error != KErrNone )
-            {
-            return error;
-            }
-        }
-
-
-    launchMutex.Wait();
-
-    //Serialized access
-    error = BSProcessStarter::DoStartInstance( aFullExePath,
-                                             aCommand,
-                                             aParams );
-
-    launchMutex.Signal();
-    launchMutex.Close();
-
-    return error;
-    }
-
-
-
-// --------------------------------------------------------------
-// BSProcessStarter::ConnectToServer()
-// --------------------------------------------------------------
-//
-TInt BSProcessStarter::ConnectToServer(
-    const TDesC& aFullExePath,
-    const TDesC& aCommand,
-    const TArray< TProcessStartupParam >* aParams,
-    RSessionBase& aSessionToConnect,
-    const TDesC& aServerName,
-    const TVersion& aClientVersion,
-    TInt aAsyncMessageSlots )
-    {
-    if( aSessionToConnect.Handle() != KNullHandle )
-        {
-        return KErrInUse;
-        }
-
-    TInt err = KErrNone;
-    TInt startupWait = KEka2SrvConnInitialRetryWait;
-
-    //Server connect and launch loop
-    for( TInt trie = 0 ; trie < KEka2SrvConnTries ; trie++ )
-        {
-        REka2SessionBaseAccessor acc;
-        err = acc.CreateSession( aServerName,
-                                 aClientVersion,
-                                 aAsyncMessageSlots );
-
-        if( err == KErrNone )
-            {
-            //session ownership is now on client
-            aSessionToConnect = acc;
-            return KErrNone;
-            }
-
-        else if( ( err == KErrNotFound ) ||
-                 ( err == KErrServerTerminated ) )
-            {
-            //Server missing or died when connecting
-            //Start a new server
-            err = BSProcessStarter::StartInstance( aFullExePath,
-                                                 aCommand,
-                                                 aParams );
-
-            //If process exist already, then all is fine
-            //(some other process started it between the origical connect and launch trie)
-            if( err == KErrAlreadyExists )
-                {
-                err = KErrNone;
-                }
-
-            //If server process start failed, bail out.
-            if( err != KErrNone )
-                {
-                return err;
-                }
-
-            //If this is 2nd or subsequent try,
-            //give some time for server to startup
-            if( trie > 0 )
-                {
-                // Code scanner warning : Use of User::After (id:92)
-                // it is required to be used here
-                User::After( startupWait ); // CSI: 92 # See above
-                startupWait = 2 * startupWait;
-                }
-            }
-
-        else
-            {
-            //Server process start failed. Bail out.
-            return err;
-            }
-        }
-
-    return err;
-    }
-
-
-
-// --------------------------------------------------------------
-// BSProcessStarter::DoStartServerInstance()
-// --------------------------------------------------------------
-//
-TInt BSProcessStarter::DoStartInstance(
-    const TDesC& aFullExePath,
-    const TDesC& aCommand,
-    const TArray< TProcessStartupParam >* aParams )
-    {
-    TInt error = KErrNone;
-
-    //Create process
-    RProcess process;
-    error = process.Create( aFullExePath, aCommand );
-
-    if( error == KErrNone )
-        {
-        //Set process startup parameters
-        error = ApplyParameters( aParams, process );
-
-        //And execute the process and wait it's startup
-       if( error == KErrNone )
-            {
-            TRequestStatus rendezvousStatus;
-            process.Rendezvous( rendezvousStatus );
-
-            process.Resume();
-            // Codescanner warning: user of User::WaitForRequest (Id:94)
-            // it is required to use at server startup
-            User::WaitForRequest( rendezvousStatus ); // CSI: 94 # See above
-            error = rendezvousStatus.Int();
-
-            if( process.ExitType() != EExitPending )
-                {
-                //Something failed in server startup
-                //Force the error code to be always something
-                //else than KErrNone
-                if( error == KErrNone )
-                    {
-                    error = KErrServerTerminated;
-                    }
-                }
-            }
-        }
-
-    process.Close();
-
-    return error;
-    }
-
-
-
-// --------------------------------------------------------------
-// BSProcessStarter::ApplyParameters()
-// --------------------------------------------------------------
-//
-TInt BSProcessStarter::ApplyParameters(
-    const TArray< TProcessStartupParam >* aParams,
-    RProcess& aProcess )
-    {
-    TInt error = KErrNone;
-    if( aParams )
-        {
-        const TInt paramCount = aParams->Count();
-        for( TInt ix = 0; ix < paramCount; ix++ )
-            {
-            error = (*aParams)[ ix ].ApplyParam( aProcess );
-            if( error != KErrNone )
-                {
-                break;
-                }
-            }
-        }
-
-    return error;
-    }
-
-
-
-// ==============================================================
-// ================== TPROCESSSTARTUPPARAM ======================
-// ==============================================================
-
-// --------------------------------------------------------------
-// TProcessStartupParam::TProcessStartupParam()
-// --------------------------------------------------------------
-//
-TProcessStartupParam::TProcessStartupParam()
-    : iType( EUnknown ),
-      iSlot( KErrNotFound )
-    {
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::Set()
-// --------------------------------------------------------------
-//
-void TProcessStartupParam::Set( TInt aSlot,
-                                const RHandleBase& aHandle )
-    {
-    iType = EHandle;
-    iSlot = aSlot;
-    iHandle = &aHandle;
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::Set()
-// --------------------------------------------------------------
-//
-void TProcessStartupParam::Set( TInt aSlot,
-                                const RSubSessionBase& aSubSession )
-    {
-    iType = ESubSession;
-    iSlot = aSlot;
-    iSubSession = &aSubSession;
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::Set()
-// --------------------------------------------------------------
-//
-void TProcessStartupParam::Set( TInt aSlot,
-                                const TDesC16& aDes )
-    {
-    iType = EDes16;
-    iSlot = aSlot;
-    iDes16.Set( aDes );
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::Set()
-// --------------------------------------------------------------
-//
-void TProcessStartupParam::Set( TInt aSlot,
-                                const TDesC8& aDes )
-    {
-    iType = EDes8;
-    iSlot = aSlot;
-    iDes8.Set( aDes );
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::Set()
-// --------------------------------------------------------------
-//
-void TProcessStartupParam::Set( TInt aSlot,
-                                TInt aInt )
-    {
-    iType = EInt;
-    iSlot = aSlot;
-    iInt = aInt;
-    }
-
-
-// --------------------------------------------------------------
-// TProcessStartupParam::ApplyParam()
-// --------------------------------------------------------------
-//
-TInt TProcessStartupParam::ApplyParam( RProcess& aProcess ) const
-    {
-    switch( iType )
-        {
-        case EHandle: return aProcess.SetParameter( iSlot, *iHandle );
-        case ESubSession: return aProcess.SetParameter( iSlot, *iSubSession );
-        case EDes16: return aProcess.SetParameter( iSlot, iDes16 );
-        case EDes8: return aProcess.SetParameter( iSlot, iDes8 );
-        case EInt: return aProcess.SetParameter( iSlot, iInt );
-        }
-
-    return KErrUnknown;
-    }
-
-
-// END OF FILE
-
-
-