--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatemgr/sus/src/main.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,139 @@
+// Copyright (c) 2007-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:
+//
+
+#include <e32base.h>
+#include "ssmdebug.h"
+#include "susutilserver.h"
+#include "susadaptionserver.h"
+#include "susadaptionclisrv.h"
+
+
+//
+// Functions run in the Adaption Server's thread
+//
+
+/**
+ This function is creating the AdaptionServer and starting its scheduler.
+ */
+static void RunAdaptionSrvL()
+ {
+ CActiveScheduler* sched = new(ELeave) CActiveScheduler();
+ CleanupStack::PushL( sched );
+ CActiveScheduler::Install( sched );
+
+ CSsmAdaptationServer* server = CSsmAdaptationServer::NewLC();
+ RThread::Rendezvous( KErrNone );
+
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy( server );
+ CleanupStack::PopAndDestroy( sched );
+ }
+
+/**
+ This function is called when the AdaptionServer's thread is resumed.
+ */
+static TInt AdaptionSrvInitFunction( TAny* /*aNull*/ )
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+ TInt err = KErrNoMemory;
+ if (cleanup)
+ {
+ TRAP( err, RunAdaptionSrvL());
+ delete cleanup;
+ }
+ return err;
+ }
+
+//
+// Functions to launch the servers (these will run in the main thread)
+//
+
+/**
+Function to launch the AdaptionServer in a new thread.
+ */
+static TInt StartAdaptionSrv()
+ {
+ DEBUGPRINT1( _L("Starting SusAdaptionServer") );
+
+ RThread server;
+ const TInt KMinHeapSize = 0x1000; // 4kB
+ const TInt KMaxHeapSize = 0x100000;// 1MB
+
+ TInt err = server.Create( KSusAdaptionServerName, &AdaptionSrvInitFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize,
+ NULL );
+
+ if( KErrNone == err )
+ {
+ TRequestStatus trs;
+ server.Rendezvous( trs );
+ server.Resume();
+
+ User::WaitForRequest( trs );
+
+ //We can't use the 'exit reason' if the server panicked as this is the
+ //panic 'reason' and may be '0' which cannot be distinguished from KErrNone
+ err = (server.ExitType()==EExitPanic) ? KErrGeneral : trs.Int();
+ server.Close();
+ }
+
+ return err;
+ }
+
+/**
+Function to launch the UtilServer in this thread.
+ */
+static void StartUtilSrvL()
+ {
+ DEBUGPRINT1( _L("Starting SusUtilServer") );
+
+ CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+
+ CSusUtilServer* server = CSusUtilServer::NewLC();
+ RProcess::Rendezvous(KErrNone);
+ sched->Start();
+
+ CleanupStack::PopAndDestroy(server);
+ CleanupStack::PopAndDestroy(sched);
+ }
+
+//
+// The main() function itself
+//
+/**
+Process entry point. Called by client using RProcess API
+@return - Standard Epoc error code on process exit
+*/
+TInt E32Main() //lint -e765 -e714 Suppress 'not referenced' and 'could be static'
+ {
+ __UHEAP_MARK;
+ TInt err = StartAdaptionSrv(); //started in a new thread
+ if(KErrNone == err)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ err = KErrNoMemory;
+ if(cleanup)
+ {
+ TRAP(err, StartUtilSrvL()); //started in this thread
+ delete cleanup;
+ }
+ }
+ __UHEAP_MARKEND;
+ return err;
+ }
+