--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/backupandrestore/backupengine/src/sbmain.cpp Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,169 @@
+// Copyright (c) 2004-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:
+// Main entry point in the process
+//
+//
+
+/**
+ @file
+*/
+
+#include "sbmain.h"
+#include "sblog.h"
+#include "sbeserver.h"
+#include "abserver.h"
+#include <connect/tserverstart.h>
+#include "sbedataownermanager.h"
+#include "ecom/ecom.h"
+
+namespace conn
+ {
+
+ void CSBActiveScheduler::Error(TInt aError) const
+ /**
+ Executed by the active scheduler when an error occurs. Ideally errors
+ should be handled in the RunError() method of active objects and
+ not in here.
+
+ It logs an error and stops the active scheduler, which will cause
+ execution to terminate.
+
+ @param aError The error code
+ */
+ {
+ RDebug::Print(_L("Secure Backup unhandled error %d"), aError);
+ Stop();
+ }
+ }
+
+
+using namespace conn;
+
+//
+// EKA1 server startup code - platform unspecific.
+
+
+static void RunServerL()
+ /**
+ Installs active scheduler, creates the CSBEServer and CABServer objects,
+ signals the client, and begins to handle client requests..
+
+ @param aStart A TServerStart object passed in by the client
+ @leave RThread::Rename() If an error is returned
+ */
+ {
+ //
+ // Create and install an active scheduler.
+ CSBActiveScheduler* pScheduler = new (ELeave) CSBActiveScheduler();
+ CleanupStack::PushL(pScheduler);
+ CActiveScheduler::Install(pScheduler);
+
+ CDataOwnerManager* pDOM = CDataOwnerManager::NewLC();
+
+ // create the two servers to run in this process
+ CSBEServer* pSBEServer = CSBEServer::NewLC(pDOM);
+ CABServer* pABServer = CABServer::NewLC(pDOM);
+
+ // register the AB Server with the DOM
+ pDOM->SetActiveBackupServer(pABServer);
+
+ // Rename the thread (for debugging)
+ User::RenameThread(KSBImageName);
+
+ RProcess::Rendezvous(KErrNone);
+
+ //
+ // Start the AS. Will return after 2 seconds
+ // of inactivity on the server.
+ CSBActiveScheduler::Start();
+
+ TDriveList driveList;
+ TBURPartType burPartType = EBURUnset;
+ TBackupIncType buIncType = ENoBackup;
+ driveList.FillZ();
+
+ // Ensure that the device is put back into normal mode, in case a disconnection has ocurred
+ pDOM->SetBURModeL(driveList, burPartType, buIncType);
+
+ CleanupStack::PopAndDestroy(pABServer);
+ CleanupStack::PopAndDestroy(pSBEServer);
+ CleanupStack::PopAndDestroy(pDOM);
+ CleanupStack::PopAndDestroy(pScheduler);
+ }
+
+
+static TInt RunServer()
+/**
+Creates cleanup framework and call leaving variant of RunServer
+
+@param aStart A TServerStart object
+@return Any error trapped by RunServerL
+*/
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* pCleanup = CTrapCleanup::New();
+ TInt nRet = KErrNoMemory;
+
+ if(pCleanup != NULL)
+ {
+#ifdef __OOM_TESTING__
+ TInt i = 0;
+ while (nRet == KErrNoMemory || nRet == KErrNone)
+ {
+ __UHEAP_SETFAIL(RHeap::EDeterministic,i++);
+ __UHEAP_MARK;
+
+ TRAP(nRet, RunServerL());
+ // required because we have an indirect
+ // dependency on ecom, we apparently need
+ // need to clean up after our dependencies
+ REComSession::FinalClose();
+
+ __UHEAP_MARKEND;
+ __UHEAP_RESET;
+ }
+#else
+ TRAP(nRet, RunServerL());
+#endif
+ delete pCleanup;
+ }
+
+ // required because we have an indirect
+ // dependency on ecom, we apparently need
+ // need to clean up after our dependencies
+ REComSession::FinalClose();
+
+ __UHEAP_MARKEND;
+ return nRet;
+ }
+
+
+
+
+
+TInt E32Main()
+/**
+Standard Symbian OS entry point
+
+@return Symbian OS internal value.
+*/
+ {
+ TInt nRet = KErrNone;
+
+ nRet = RunServer();
+
+ return nRet;
+ }
+
+