sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "sessmgr.h" // CSessionManager sl@0: #include "srvparams.h" // KServerName sl@0: #include "srvres.h" // TServerResources sl@0: #include "srvrepos_noc.h" // CServerRepository sl@0: #include // CCommandLineArguments sl@0: #include "backup.h" // CRepositoryBackupClient sl@0: #include "install.h" // SWI watcher sl@0: sl@0: enum sl@0: { sl@0: ESoftReset = 0x01, sl@0: } TStartupOptions; sl@0: sl@0: _LIT(KSoftReset, "--SoftReset"); sl@0: sl@0: static void ParseCmdLineOptionsL(TInt& aOptions) sl@0: { sl@0: CCommandLineArguments* args = CCommandLineArguments::NewLC(); sl@0: sl@0: for (TInt i = 1; i < args->Count(); ++i) sl@0: { sl@0: if (args->Arg(i).Compare(KSoftReset) == 0) sl@0: { sl@0: aOptions |= ESoftReset; sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(args); sl@0: } sl@0: sl@0: static void CloseTServerResources(TAny*) sl@0: { sl@0: // Ready to exit. sl@0: TServerResources::Close(); sl@0: } sl@0: sl@0: // sl@0: // Perform all server initialisation, in particular creation of the sl@0: // scheduler and server and then run the scheduler sl@0: // sl@0: static void RunServerL() sl@0: { sl@0: TInt options = 0; sl@0: sl@0: #ifndef SYSLIBS_TEST sl@0: // Set the server as a system critical thread. sl@0: User::LeaveIfError(User::SetCritical(User::ESystemCritical)); sl@0: #endif sl@0: sl@0: ParseCmdLineOptionsL(options); sl@0: sl@0: // NOTE: Insert TraceHeap install here, sl@0: // when RAllocator is available. sl@0: // sl@0: // naming the server thread after the server helps to debug panics sl@0: User::LeaveIfError(User::RenameThread(KServerName)); sl@0: sl@0: // create and install the active scheduler we need sl@0: CActiveScheduler* s=new(ELeave) CActiveScheduler; sl@0: CleanupStack::PushL(s); sl@0: CActiveScheduler::Install(s); sl@0: sl@0: CleanupStack::PushL(TCleanupItem(CloseTServerResources, 0)); sl@0: TServerResources::InitialiseL(); sl@0: sl@0: CSessionManager::NewLC(); sl@0: sl@0: CCentRepSWIWatcher* swiWatcher = 0; sl@0: sl@0: sl@0: if( TServerResources::iInstallDirectory) sl@0: { sl@0: swiWatcher = CCentRepSWIWatcher::NewL(TServerResources::iFs); sl@0: CleanupStack::PushL(swiWatcher) ; sl@0: swiWatcher->Start(); sl@0: } sl@0: sl@0: CRepositoryBackupClient* backupClient = sl@0: CRepositoryBackupClient::NewL(TServerResources::iFs); sl@0: sl@0: CleanupStack::PushL(backupClient) ; sl@0: sl@0: backupClient->StartL(); sl@0: #ifdef SYMBIAN_BAFL_SYSUTIL sl@0: PERF_TEST_SERVER_START(); sl@0: sl@0: TRAPD(err, CServerRepository::CheckROMReflashL()); sl@0: if(err != KErrNone) sl@0: { sl@0: if(err == KErrNoMemory) sl@0: { sl@0: User::LeaveNoMemory(); sl@0: } sl@0: else sl@0: {//Dont stop the centrep from starting up from any other error. sl@0: __CENTREP_TRACE1("CENTREP: CServerRepository::CheckROMReflashL - Error = %d", err); sl@0: } sl@0: } sl@0: PERF_TEST_SERVER_END(); sl@0: #endif sl@0: sl@0: // check command line options sl@0: if (options & ESoftReset) sl@0: { sl@0: CServerRepository::RFSAllRepositoriesL(); sl@0: } sl@0: sl@0: // Initialisation complete, now signal the client sl@0: RProcess::Rendezvous(KErrNone); sl@0: sl@0: // Ready to run sl@0: CActiveScheduler::Start(); sl@0: sl@0: // Delete backup client if it exists sl@0: if(backupClient) sl@0: CleanupStack::PopAndDestroy(backupClient); sl@0: sl@0: // Delete file watcher if it exists sl@0: if(swiWatcher) sl@0: CleanupStack::PopAndDestroy(swiWatcher); sl@0: sl@0: // Ready to exit. sl@0: sl@0: TServerResources::Close(); sl@0: sl@0: // Cleanup the server and scheduler sl@0: CleanupStack::PopAndDestroy(2);//CSessionManager, s sl@0: } sl@0: sl@0: // Entry point for the server sl@0: TInt E32Main() sl@0: { sl@0: __UHEAP_MARK; sl@0: CTrapCleanup* cleanup = CTrapCleanup::New(); sl@0: TInt r = KErrNoMemory; sl@0: if(cleanup) sl@0: { sl@0: TRAP(r, RunServerL()); sl@0: delete cleanup; sl@0: } sl@0: sl@0: __UHEAP_MARKEND; sl@0: sl@0: return r; sl@0: } sl@0: