diff -r 5cc91383ab1e -r 7333d7932ef7 installationservices/swi/source/daemon/daemon.cpp --- a/installationservices/swi/source/daemon/daemon.cpp Thu Aug 19 10:02:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +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 "daemon.h" -#include "drivewatcher.h" -#include "log.h" -#include "securitypolicy.h" - -#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK -#include -#include -#include -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include "stsrecovery.h" -#endif //SYMBIAN_ENABLE_SPLIT_HEADERS -#include "swiobserverclient.h" -#else -#include "sisregistrysession.h" -#endif - - -namespace Swi -{ -// CDaemon - -/*static*/ CDaemon* CDaemon::NewL(MDaemonBehaviour& aBehaviour) - { - CDaemon* self=NewLC(aBehaviour); - CleanupStack::Pop(self); - return self; - } - -/*static*/ CDaemon* CDaemon::NewLC(MDaemonBehaviour& aBehaviour) - { - CDaemon* self=new(ELeave) CDaemon(aBehaviour); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CDaemon::~CDaemon() - { - iPolicyLockFile.Close(); - iWatchers.ResetAndDestroy(); - iFs.Close(); - } - -CDaemon::CDaemon(MDaemonBehaviour& aBehaviour) - : iBehaviour(aBehaviour) - { - } - -void CDaemon::ConstructL() - { - User::LeaveIfError(iFs.Connect()); - LockSensitiveFiles(); - StartRecoveryL(); - iBehaviour.StartupL(); - StartWatchersL(); - } - -void CDaemon::StartWatchersL() - { - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - - User::LeaveIfError(fs.ShareProtected()); - - TDriveList driveList; - - User::LeaveIfError(fs.DriveList(driveList)); - - for (TInt drive=0; drive < KMaxDrives; ++drive) - { - if (driveList[drive] == 0) - { - continue; - } - TDriveInfo info; - - // Ignore errors since the next drive might work - if (KErrNone != fs.Drive(info, drive)) - { - DEBUG_PRINTF2(_L8("SWI Daemon - Not watching drive '%d', could not retrieve drive info."), - drive); - continue; - } - - if (info.iDriveAtt & KDriveAttRemovable) - { - DEBUG_PRINTF2(_L8("SWI Daemon - Watching removable drive '%d'"), drive); - CDriveWatcher* driveWatcher=CDriveWatcher::NewLC(iFs, drive, iBehaviour); - User::LeaveIfError(iWatchers.Append(driveWatcher)); - CleanupStack::Pop(driveWatcher); - } - } - CleanupStack::PopAndDestroy(&fs); - } // StartWatchersL() - -void CDaemon::LockSensitiveFiles() - { - TInt error = iPolicyLockFile.Open(iFs, KSwisPolicyFile, EFileShareReadersOnly | EFileRead); - if (error != KErrNone) - { - DEBUG_PRINTF2(_L8("SWI Daemon - Could not open SWI policy file with error %d!"), error); - } - } - -#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK -void CDaemon::StartRecoveryL() - { - DEBUG_PRINTF(_L("CDaemon::StartRecoveryL()")); - - // Check to see if a backup is in progress... - TInt backup = 0; - User::LeaveIfError(RProperty::Get(KUidSystemCategory,conn::KUidBackupRestoreKey,backup)); - - if(backup == conn::EBURUnset || (backup == (conn::EBURNormal | conn::ENoBackup))) //no backup or restore is in progress - { - //no recovery attempt is made during backup/restore as recovery may seriously affect the file system, which might impact backup/restore - //recovery will be made at next bootup - Usif::RStsRecoverySession stsRecoverySession; - // A recovery failure should not affect Daemon start up. - TRAPD(err, stsRecoverySession.RollbackAllPendingL()); - if(err != KErrNone) - { - DEBUG_PRINTF2(_L("CDaemon::StartRecoveryL() - STS server failed to recover transactions. Error code: %d"), err); - } - //Start SWI Observer so that it can process the log files left from the previous session. - RSwiObserverSession swiObserver; - swiObserver.ProcessLogsL(iFs); - swiObserver.Close(); - } - } -#else -void CDaemon::StartRecoveryL() - { - DEBUG_PRINTF(_L8("SWI Daemon - Check to see if a recovery is needed")); - RSisRegistrySession registrySession; - User::LeaveIfError(registrySession.Connect()); - CleanupClosePushL(registrySession); - - // A recovery failure should not affect SWI Daemon start up. - TRAP_IGNORE(registrySession.RecoverL()); - - CleanupStack::PopAndDestroy(®istrySession); - DEBUG_PRINTF(_L8("SWI Daemon - Recovery check finished")); - } -#endif - -} // namespace Swi