diff -r 0fd27995241b -r 9ac0a0a7da70 javatools/javaupdater/src/main.cpp --- a/javatools/javaupdater/src/main.cpp Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,307 +0,0 @@ -/* -* 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 "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: OMJ S60 environment updater process. -* When OMJ is installed, this program is executed to allow -* new Java environment taken into use. -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "javauids.h" -#include "systemamstraderprivateclient.h" -#include "logger.h" - -// This file is used to indicate when converting old S60 midlets -// to OMJ midlets has been done. -_LIT(KConversionOngoing, "D:\\OMJConverting.dat"); - - -/** - * Kill old and running javaregistry.exe. After killing next call of - * Registry API re-starts the new server process. - */ -static void KillRegistry() -{ - JELOG2(EJavaConverters); - TFullName processName; - _LIT(KJavaRegistryProcess, "javaregistr*"); - TFindProcess finder(KJavaRegistryProcess); - - if (finder.Next(processName) != KErrNotFound) - { - RProcess processToKill; - TInt err = processToKill.Open(finder); - - if (KErrNone != err) - { - WLOG1(EJavaConverters, - "javaupdater: KillRegistry: Process open: %d", err); - } - else - { - LOG(EJavaConverters, EInfo, "javaupdater: KillRegistry: Killing javaregistry"); - processToKill.Kill(KErrNone); - processToKill.Close(); - } - } - else - { - WLOG(EJavaConverters, "javaupdater: KillRegistry: Registry process not found"); - } -} - -/** - * Kill running System AMS processes. - */ -static void KillSystemAms() -{ - JELOG2(EJavaConverters); - - TBool connectionOK(EFalse); - TRequestStatus status(KRequestPending); - RSystemAMSTraderPrivateClient amsClient; - - connectionOK = amsClient.ShutdownJavaEnv(status); - if (connectionOK) - { - // systemams process in this device supports nice shutdown. - // Wait until the S60 java environment has been shutdown - LOG(EJavaConverters, - EInfo, "javaupdater: KillSystemAms: Waiting for systemams nice shutdown"); - User::WaitForRequest(status); - LOG(EJavaConverters, - EInfo, "javaupdater: KillSystemAms: Systemams has shutdown"); - amsClient.Close(); - } - else - { - // must kill SystemAMS trader and SystemAMS itself - TFullName processName; - _LIT(KJavaSystemAmsTraderProcess, "SystemAMS.EXE*"); - TFindProcess finder(KJavaSystemAmsTraderProcess); - - if (finder.Next(processName) == KErrNone) - { - RProcess processToKill; - TInt err = processToKill.Open(finder); - - if (KErrNone != err) - { - WLOG1(EJavaConverters, - "javaupdater: KillSystemAms: Cannot open SystemAMS trader process: %d", err); - } - else - { - LOG(EJavaConverters, EInfo, - "javaupdater:KillSystemAms: Killing SystemAMS trader"); - processToKill.Kill(KErrNone); - processToKill.Close(); - } - } - - // now kill SystemAMS itself - _LIT(KJavaSystemAmsProcess, "SystemAMSCore.EXE*"); - finder.Find(KJavaSystemAmsProcess); - - if (finder.Next(processName) == KErrNone) - { - RProcess processToKill; - TInt err = processToKill.Open(finder); - - if (KErrNone != err) - { - WLOG1(EJavaConverters, - "javaupdater: KillSystemAms: Cannot open SystemAMS process: %d", err); - } - else - { - LOG(EJavaConverters, EInfo, "javaupdater: KillSystemAms Killing SystemAMS "); - processToKill.Kill(KErrNone); - processToKill.Close(); - } - } - } -} - -/** - * Try to kill old javapreinstaller - */ -static void KillOldPreinstaller() -{ - JELOG2(EJavaConverters); - - TFullName processName; - _LIT(KJavaOldPreinstallerProcess, "MIDP2SilentMIDletInstall.exe*"); - TFindProcess finder(KJavaOldPreinstallerProcess); - - if (finder.Next(processName) == KErrNone) - { - RProcess processToKill; - TInt err = processToKill.Open(finder); - - if (KErrNone != err) - { - WLOG1(EJavaConverters, - "javaupdater: KillOldPreinstallerL: Process open: %d", err); - } - else - { - LOG(EJavaConverters, EInfo, "javaupdater: Killing MIDP2SilentMIDletInstall"); - processToKill.Kill(KErrNone); - processToKill.Close(); - } - } -} - -/** - * Start OMJ trader (systemams.exe) in IAD mode. - * It will start Java Captain in IAD mode and - * it will start Java Preinstaller in IAD mode. - */ -_LIT(KOmjTraderExe, "systemams.exe"); -_LIT(KOmjTraderArg, "iad"); -static void StartOmjTrader() -{ - JELOG2(EJavaConverters); - RProcess proc; - int rc = proc.Create(KOmjTraderExe, KOmjTraderArg); - if (rc == KErrNone) - { - proc.Resume(); - LOG(EJavaConverters, EInfo, "javaupdater: StartOmjTrader systemams.exe was started ok"); - } - else - { - ELOG1(EJavaConverters, "javaupdater: StartOmjTrader failed: %d", rc); - } - proc.Close(); -} - -/** - * Copies (and configures) the certificates from legacy java - */ -_LIT(KJavaCertfictatesConfiguratorExe, "javacertificatesconfigurator.exe"); -static void ConfigureCertificates() -{ - JELOG2(EJavaConverters); - RProcess proc; - int rc = proc.Create(KJavaCertfictatesConfiguratorExe, KNullDesC()); - if (rc == KErrNone) - { - proc.Resume(); - TRequestStatus status; - proc.Logon(status); - User::WaitForRequest(status); - } - else - { - ELOG1(EJavaConverters, "javaupdater: ConfigureCertificates failed: %d", rc); - } - proc.Close(); -} - -/** - * Wait until preinstallation of OMJ midlets has been done. - */ -static void WaitUntilPreinstallerReady() -{ - // Create a temporary file that javapreinstaller.exe will - // then destroy after reinstallation has been done - TUint value; - RFs fs; - RFile flagFile; - TBool flagFileExists(ETrue); - TInt err = fs.Connect(); - if (KErrNone != err) - { - ELOG1(EJavaConverters, - "javaupdater: WaitUntilPreinstallerReady: Cannot connect to RFs, err %d", - err); - return; - } - err = flagFile.Replace(fs, KConversionOngoing, EFileShareAny|EFileWrite); - if (KErrNone != err) - { - ELOG1(EJavaConverters, - "javaupdater: WaitUntilPreinstallerReady: Cannot create conversion flag file, err %d", - err); - fs.Close(); - return; - } - flagFile.Close(); - - // Now wait until the file is destroyed - do - { - TRequestStatus status; - fs.NotifyChange(ENotifyFile, status, KConversionOngoing); - User::WaitForRequest(status); - LOG1(EJavaConverters, - EInfo, - "javaupdater: WaitUntilPreinstallerReady: Wait ended with status %d", - status.Int()); - - // Check whether the flag file has been destroyed - err = fs.Att(KConversionOngoing, value); - if ((KErrNotFound == err) || (KErrPathNotFound == err)) - { - flagFileExists = EFalse; - } - else if (KErrNone == err) - { - flagFileExists = ETrue; - LOG(EJavaConverters, - EInfo, - "javaupdater: WaitUntilPreinstallerReady: Flag file still exists, must wait more"); - } - else - { - WLOG1(EJavaConverters, - "javaupdater: WaitUntilPreinstallerReady: Unexpected error %d, stop waiting", - err); - flagFileExists = EFalse; - } - - } - while (flagFileExists); - - fs.Close(); -} - -/** - * Create cleanup stack and run the cleaner code inside TRAP harness - * to log unexpected leaves. - */ -TInt E32Main() -{ - __UHEAP_MARK; - CTrapCleanup* cleanupStack = CTrapCleanup::New(); - KillRegistry(); - KillSystemAms(); - KillOldPreinstaller(); - ConfigureCertificates(); - StartOmjTrader(); - WaitUntilPreinstallerReady(); - delete cleanupStack; - __UHEAP_MARKEND; - return KErrNone; -}