javatools/javarestoreconverter/src.s60/main.cpp
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javatools/javarestoreconverter/src.s60/main.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,115 @@
+/*
+* 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 the License "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: Java platform 2.0 javarestoreconverter process.
+*              Java restore executes this when restoring Java 1.x
+*              applications that must be converted to Java 2.x
+*              applications.
+*/
+
+
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+
+#include "javauids.h"
+#include "restoreconvertmidlet.h"
+#include "logger.h"
+
+// The secure Uid of javabackup.exe
+_LIT_SECURE_ID(KJavaBackupSecureID, 0x1028246F);
+
+
+/**
+ * Allow starting process only from Java Restore,
+ * allow running only one instance of the process,
+ * create file server connection,
+ * create active scheduler and start it
+ *
+ */
+static void RestoreConvertJavaAppsL()
+{
+    _LIT(KPreinstallerMatch, "javarestoreconverter*");
+    TFindProcess find(KPreinstallerMatch);
+    TFullName ignoreName;
+    find.Next(ignoreName);
+
+    // Can only have one javarestoreconverter. If a second is found exit
+    if (find.Next(ignoreName) == KErrNone)
+    {
+        ELOG(EJavaPreinstaller, "javarestoreconverter.exe already running.");
+        User::Leave(KErrAlreadyExists);
+    }
+
+    // The only time that this application should be executed
+    // is when java restore calls it.
+    // Allow starting javarestoreconverter.exe from test programs in
+    // debug builds.
+#ifndef _DEBUG
+
+    if (User::CreatorSecureId() != KJavaBackupSecureID)
+    {
+        ELOG(EJavaConverters,
+             "ConvertJavaAppsL: Mismatch in secure ID, only java backup can launch this exe.");
+        User::Leave(KErrPermissionDenied);
+    }
+#endif
+
+    RFs fs;
+    User::LeaveIfError(fs.Connect());
+    CleanupClosePushL(fs);
+
+    CActiveScheduler* as = new(ELeave) CActiveScheduler();
+
+    // Install active scheduler
+    CActiveScheduler::Install(as);
+    CleanupStack::PushL(as);
+
+    // Setup and start the MIDlet conversion
+    CRestoreConvertMIDlet* si = CRestoreConvertMIDlet::NewLC(fs);
+
+    LOG(EJavaConverters, EInfo, "RestoreConvertJavaAppsL: Call CRestoreConvertMIDlet::Start()");
+
+    si->Start();
+
+    // Start active scheduler, starts conversion
+    LOG(EJavaConverters, EInfo, "RestoreConvertJavaAppsL: Starting CActiveScheduler");
+    CActiveScheduler::Start();
+
+    LOG(EJavaConverters, EInfo, "RestoreConvertJavaAppsL: Cleaning up");
+
+    CleanupStack::PopAndDestroy(si);
+    CleanupStack::PopAndDestroy(as);
+    CleanupStack::PopAndDestroy(&fs); // close connection to file server
+
+    return;
+}
+
+
+/**
+ * Create cleanup stack and run the javarestoreconverter code inside TRAP
+ * harness to log unexpected leaves.
+ */
+TInt E32Main()
+{
+    CTrapCleanup* cleanupStack = CTrapCleanup::New();
+
+    TRAPD(err, RestoreConvertJavaAppsL());
+    if (err != KErrNone)
+    {
+        ELOG1(EJavaConverters, "RestoreConvertJavaAppsL:Main error %d", err);
+    }
+
+    delete cleanupStack;
+    return err;
+}