diff -r 5cc91383ab1e -r 7333d7932ef7 installationservices/swi/source/daemon/daemoninstaller.cpp --- a/installationservices/swi/source/daemon/daemoninstaller.cpp Thu Aug 19 10:02:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,222 +0,0 @@ -/* -* 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 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: -* -*/ - - -#include -#include "daemoninstaller.h" -#include "swispubsubdefs.h" -#include "log.h" - -const static TInt KAppListRetryWaitTime = 5000000; // 5 secs -_LIT(KMCSisInstaller,"Daemon-Installer"); // Minor-Component name - -namespace Swi - { - // Two phased construction - - CSisInstaller* CSisInstaller::NewL(MDaemonInstallBehaviour* aDaemonBehaviour) - { - CSisInstaller* self = new (ELeave) CSisInstaller(aDaemonBehaviour); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - // Install Request constructor - - CSisInstaller::CSisInstaller(MDaemonInstallBehaviour* aDaemonBehaviour) : CActive(CActive::EPriorityStandard), - iDaemonBehaviour(aDaemonBehaviour), - iState(MDaemonInstallBehaviour::EStateVerifyAppCacheList), - iFileIndex(0), - iTimeStep(KAppListRetryWaitTime) - { - CActiveScheduler::Add(this); - } - - // Install Request destructor - - CSisInstaller::~CSisInstaller() - { - Cancel(); - iTimer.Close(); - iProperty.Close(); - iFilesToInstall.ResetAndDestroy(); - iFilesToInstall.Close(); - } - - // 2nd phase construction - - void CSisInstaller::ConstructL() - { - User::LeaveIfError(iTimer.CreateLocal()); - User::LeaveIfError(iProperty.Attach(KUidSystemCategory,KUidSoftwareInstallKey)); - } - - // Set the location of all sis files and the list of them - // also take ownership of the pointers to memory - - void CSisInstaller::AddFileToInstallL(const TDesC& aFileName) - { - DEBUG_PRINTF2(_L("SWI Daemon - Queueing presintalled SIS file '%S' for processing"), - &aFileName); - - HBufC* fileName = aFileName.AllocLC(); - iFilesToInstall.AppendL(fileName); - CleanupStack::Pop(fileName); - } - - // Start the request to process the Sisx file - - void CSisInstaller::StartInstallingL() - { - if(iFilesToInstall.Count() > 0) - { - iState = MDaemonInstallBehaviour::EStateVerifyAppCacheList; - ReRequestL(); - } - } - - // Requesting an asyncronous timer/subscrive event - - void CSisInstaller::ReRequestL() - { - switch (iState) - { - // Verify the app cache list at time intervals - case MDaemonInstallBehaviour::EStateVerifyAppCacheList: - iTimer.Cancel(); - iTimer.After(iStatus,iTimeStep); - SetActive(); - break; - - // Verify software installer property - case MDaemonInstallBehaviour::EStateVerifySwisProperty: - CompleteSelf(); - break; - - case MDaemonInstallBehaviour::EStateVerifySwisIdle: - iProperty.Subscribe(iStatus); - SetActive(); - break; - - case MDaemonInstallBehaviour::EStateInstall: - CompleteSelf(); - break; - - default: - // SisInstaller in an incorrect state - User::Panic(KMCSisInstaller,KErrNotSupported); - break; - } - } - - // Complete the request manually - - void CSisInstaller::CompleteSelf() - { - TRequestStatus* status = &iStatus; - User::RequestComplete(status,KErrNone); - SetActive(); - } - - // Cancel the active request - - void CSisInstaller::DoCancel() - { - iProperty.Cancel(); - iTimer.Cancel(); - } - - void CSisInstaller::Reset() - { - Cancel(); - iFileIndex = 0; - iFilesToInstall.ResetAndDestroy(); - } - - // When the software installer has changed state - // attemp to install a sisx file - - void CSisInstaller::RunL() - { - if (iStatus.Int() != KErrNone) - { - User::Leave(iStatus.Int()); // Invoke RunError - } - - switch (iState) - { - // Check the cached list of applications - case MDaemonInstallBehaviour::EStateVerifyAppCacheList: - iState = iDaemonBehaviour->VerifyAppCacheListL(); - ReRequestL(); - break; - - case MDaemonInstallBehaviour::EStateVerifySwisProperty: - iState = iDaemonBehaviour->VerifySwisPropertyL(); - ReRequestL(); - break; - - // Check the software installer is not busy - case MDaemonInstallBehaviour::EStateVerifySwisIdle: - iState = iDaemonBehaviour->VerifySwisIdleL(); - ReRequestL(); - break; - - // Install a file - case MDaemonInstallBehaviour::EStateInstall: - { - iSisFile.Copy(*iFilesToInstall[iFileIndex]); - iDaemonBehaviour->DoInstallRequestL(iSisFile); - if (++iFileIndex < iFilesToInstall.Count()) - { - iState = MDaemonInstallBehaviour::EStateVerifySwisProperty; - CompleteSelf(); - } - else - { - // All done - iDaemonBehaviour->DoNotifyMediaProcessingComplete(); - } - - break; - } - - // Active object in unknown state - default: - User::Panic(KMCSisInstaller,KErrNotSupported); - break; - } - } - - // If RunL leaves then ignore errors - - TInt CSisInstaller::RunError(TInt aError) - { - DEBUG_PRINTF3(_L8("SWI Daemon - Daemon failed in state %d with code %d"), - iState, aError); - - Reset(); - TInt err(KErrNone); - if (aError == KErrCancel) - { - iState = MDaemonInstallBehaviour::EStateVerifyAppCacheList; - } - return err; - } - }