diff -r 000000000000 -r 1bce908db942 multimediacommsengine/mmcecli/src/mceserverstarter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommsengine/mmcecli/src/mceserverstarter.cpp Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 2005 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: +* +*/ + + + + + + +#include +#include "mceserverstarter.h" +#include "mceclientserver.h" + +#define RETURN_IF_ERROR(err) {TInt _err=err; if(_err!=KErrNone) {return _err;}} + +// ----------------------------------------------------------------------------- +// MceServerStarter::Start +// ----------------------------------------------------------------------------- +// +TInt MceServerStarter::Start () + { + TInt err = KErrNone; + + TFindServer findServer( KMceServerName ); + TFullName name; + if ( findServer.Next( name ) == KErrNone) + { + return KErrNone; // Server already running + } + + RSemaphore semaphore; + err = semaphore.CreateGlobal( KMceServerSemaphoreName , 0 ); + if ( err != KErrNone ) + { + return err; + } + + err = CreateServerProcess( semaphore ); + semaphore.Close (); + + return err; + + } + +// ----------------------------------------------------------------------------- +// MceServerStarter::CreateServerProcess +// ----------------------------------------------------------------------------- +// +TInt MceServerStarter::CreateServerProcess (RSemaphore& aSemaphore) + { + const TUidType serverUid (KNullUid, KNullUid, KServerUid3); + + +#if ((defined (__WINS__) || defined(__WINSCW__)) && !defined (EKA2)) + + RLibrary lib; + RETURN_IF_ERROR (lib.Load(KMceServerFilename,serverUid)) + + // Get the WinsMain function + TLibraryFunction functionWinsMain = lib.Lookup (1); + + // Call it and cast the result to a thread function + TThreadFunction serverThreadFunction = + reinterpret_cast (functionWinsMain()); + + TName threadName (KSipServerName); + + // Append a random number to make it unique + threadName.AppendNum (Math::Random(), EHex); + + RThread server; + TInt err = server.Create (threadName, + serverThreadFunction, // thread's main function + KDefaultStackSize, + NULL, + &lib, + NULL, + KServerMinHeapSize, + KServerMaxHeapSize, + EOwnerProcess ); + + lib.Close (); // if successful, server thread has handle to library now + RETURN_IF_ERROR (err) + + server.SetPriority (EPriorityMore); + +#else // HW build + + RProcess server; + RETURN_IF_ERROR (server.Create( KMceServerName, KNullDesC, serverUid ) ) + +#endif + + + server.Resume (); + aSemaphore.Wait(); + TInt exitReason = server.ExitReason(); + server.Close (); + + return exitReason; + }