diff -r 7333d7932ef7 -r 8b7f4e561641 installationservices/swtransactionservices/inc_private/journal.h --- a/installationservices/swtransactionservices/inc_private/journal.h Tue Aug 31 15:21:33 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,366 +0,0 @@ -/* -* Copyright (c) 2008-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: -* Definition of CJournal -* -*/ - - -/** - @file - @released - @internalTechnology -*/ - -#ifndef __JOURNAL_H__ -#define __JOURNAL_H__ - -#include -#include -#include "journalfile.h" -#include "integrityservicesevent.h" - -class RFs; - -namespace Usif -{ - -_LIT(KJournalExt, "log"); // extension for journal files on each drive -_LIT(KDriveExt, "drv"); // extension for this transaction's drive array - -/** - * The journal stores integrity services events and their related filenames - * in files spread across several drives. Each drive has its own journal file - * so that recovery of drives can occur independantly. This class handles both - * the reading and writing of these files. The filename of each journal is: - * - * JournalPath|TransactionID - * |--------|--------| - * ?:\????????\00000000.log - * - * @released - * @internalTechnology - */ -class CJournal : public CBase - { - public: - - /** - * Constructs a new CJournal - * - * @code - * - * TTime currentTime; - * currentTime.UniversalTime(); - * _LIT(KIntegrityServicesPath, "\\private\\SID\\"); - * iIntegrityServices = CIntegrityServices::NewL(currentTime.Int64(), - * KIntegrityServicesPath); - * - * @endcode - * - * @param aFs reference to the file system provided by CIntegrityServices - * @param aLoader reference to the RLoader provided by CIntegrityServices - * @param aTransactionID A unique ID provided by the client to - * identify this transaction. It is suggested - * that the client use the current time as the - * unique ID. This value can then be shared - * between different processes so that they use - * the same journal. - * @param aPath The path in which to read and write journal - * files. eg "\\private\\SID\\" - */ - static CJournal* NewL(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath); - - /** - * Constructs a new CJournal and places it on the cleanup stack - * - * @code - * - * TTime currentTime; - * currentTime.UniversalTime(); - * _LIT(KIntegrityServicesPath, "\\private\\SID\\"); - * iIntegrityServices = CIntegrityServices::NewL(currentTime.Int64(), - * KIntegrityServicesPath); - * - * @endcode - * - * @param aFs reference to the file system provided by CIntegrityServices - * @param aLoader reference to the RLoader provided by CIntegrityServices - * @param aTransactionID A unique ID provided by the client to - * identify this transaction. It is suggested - * that the client use the current time as the - * unique ID. This value can then be shared - * between different processes so that they use - * the same journal. - * @param aPath The path in which to read and write journal - * files. eg "\\private\\SID\\" - */ - static CJournal* NewLC(RFs& aFs, RLoader& aLoader, TStsTransactionId aTransactionID, const TDesC& aPath); - - virtual ~CJournal(); - - /** - * Notifies Integrity Services that a file or directory is being added - * so that it can be removed if a rollback occurs. A record is created - * in the journal file on the appropriate drive. - * - * @param aFileName - Name of file or directory including path - */ - void AddL(const TDesC& aFileName); - - /** - * Removes the specified file or directory, first backing it up before - * deleting it. A record is created in the journal file on the - * appropriate drive. - * - * @param aFileName - Name of file or directory including path - * @param aFileName - the generated backup filename to return - */ - void RemoveL(const TDesC& aFileName, TDes& aBackupFileName); - - /** - * Notifies Integrity Services that a file or directory is being added - * that must later be removed. A record is created in the journal file - * on the appropriate drive. - * - * @param aFileName - Name of file or directory including path - */ - void TemporaryL(const TDesC& aFileName); - - /** - * Commits all journals for this transaction - * */ - void CommitL(); - - /** - * Performs a file restore operation on a single drive - * - * @param aDrive The drive to apply this operation to - */ - - void RestoreFilesL(TInt aDrive); - - /** - * Rolls back the journal on all drives - @see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents - */ - void RollBackL(TBool aRecordAllRollbackEvents = ETrue); - - /** - * Creates the :\\.drv file's name - * This file is used by the journal to keep track of affected drives. - * @param aTransactionID The transaction id for which the filename is to be assembled - * @param aPath The journal path to be used when assembling the filename. - * @param aDrvFileName The assembled fully qualfied filename is returned in this descriptor - */ - static void CreateDrvFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aDrvFileName); - - /** - * Creates drive independent journal file name eg: \\. and appends to aJournalFileName - * @param aTransactionID The transaction id for which the filename is to be assembled - * @param aPath The journal path to be used when assembling the filename. - * @param aJournalFileName The assembled drive independent filename is appended to the end of this descriptor - */ - static void CreateJournalFileNameL(TStsTransactionId aTransactionID, const TDesC& aPath, TDes& aJournalFileName); - - static TInt RecoverTransactionIdFromDrvFileName(const TDesC& aDrvFileName, TStsTransactionId& aTransactionID); - - private: - - CJournal(RFs& aFs, RLoader& aLoader); - - /** - * Second phase constructor for CJournal - * - * @param aTransactionID A unique ID provided by the client to - * identify this transaction. It is suggested - * that the client use the current time as the - * unique ID. This value can then be shared - * between different processes so that they use - * the same journal. - * @param aPath The path in which to read and write journal - * files. eg "\\private\\SID\\" - */ - void ConstructL(TStsTransactionId aTransactionID, const TDesC& aPath); - - /** - * Closes then deletes all files used by this journal. Records completed - * drives to the drives array. - */ - void DeleteJournalFilesL(); - - /** - * Removes the journal file from the indicated drive if possible. - * @see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents - * - */ - - void DeleteJournalFileL(TInt aDrive, TBool aRecordAllRollbackEvents = ETrue ); - - /** - * Removes the drives file from the system drive for this journal. - * - */ - - void DeleteDrivesFileL(); - - /** - * Reads the array of drives used by this transaction from a file. - */ - void RefreshDrivesArrayL(); - - /** - * Opens a CJournalFile object on this drive, locking the journal file - * and preventing use by other instances of CIntegrityServices using - * the same Transaction ID. If a journal file does not exist it will - * be created. - * - * @param aDrive the drive on which to open the journal file - */ - TInt PrepareToWriteL(TInt aDrive); - - /** - * Adds the specified drive to the drives array used by this - * transaction an records it in a file. - * - * @param aDrive the drive to add - */ - void UpdateDrivesFileL(TInt aDrive); - - /** - * Performs the initial read of the drives file, and creates journal file - * objects for every present drive already used in this transaction. - */ - void InitJournalsL(); - - /** - * Closes, then deletes the journal file opened with StartRollbackL(). - @see CIntegrityServices::RollbackL on explanation for aRecordAllRollbackEvents - */ - void FinishRollbackL(TInt aDrive, TBool aRecordAllRollbackEvents = ETrue ); - - /** - * Returns the last event found in the journal files. - * (used to determine how far the installation progressed) - * - * @return TIntegrityServicesEvent representing the last event in the journal - */ - TIntegrityServicesEvent LastEventL() const; - - /** - * Performs a file delete operation on all drives referenced by this journal - * - * @param aTypeFilter The type of file to apply this operation to - * @param aFailType The type of test failure to induce during testing - */ - void DeleteFilesL(TIntegrityServicesEvent aTypeFilter); - - /** - * Performs a file delete operation on a single drive - * - * @param aTypeFilter The type of file to apply this operation to - * @param aDrive The drive to apply this operation to - * @param aFailType The type of test failure to induce during testing - */ - - void DeleteFilesL(TIntegrityServicesEvent aTypeFilter, TInt aDrive); - - /** - * Write a journal event to a specific drive - * - * @param aEvent the TEvent describing the current operation - * @param aDrive The drive to write the event to - * @param aSerializeEventToJournal Specifies whether the journal event should be serialized - */ - - void WriteJournalEventL(TIntegrityServicesEvent aEvent, TInt aDrive, TBool aSerializeEventToJournal); - - /** - * Performs recovery of the journal for a particular drive. - * - * @param aDrive The drive to rollback - * @param aRecordAllRollbackEvents @see CIntegrityServices::RollbackL - */ - void RollBackDriveL(TInt aDrive, TBool aRecordAllRollbackEvents); - - /** - * Writes the event to all journal files - * - * @param aEvent the TEvent describing the current operation - */ - void WriteJournalEventL(TIntegrityServicesEvent aEvent); - - /** - * Opens all journal file(s) belonging to this transaction, first - * reading and verifying the existing contents. The files remain - * open (and therefore locked) until FinishCommitL() is called. - */ - void StartCommitL(); - - /* - * Closes, then deletes the journal file(s) opened with StartCommitL(). - */ - void FinishCommitL(); - - /** - * Retrieves the last event from the journal on a specific drive - * - * @param aDrive The drive for which to retrieve the last event - * @return TIntegrityServicesEvent representing the last event in the journal - */ - - TIntegrityServicesEvent LastEventL(TInt aDrive) const; - - /** - * Retrieves the matching index in iJournalFiles for a journal which matches aDrive. Returns KErrNotFound if there's no journal for the drive - */ - - TInt FindJournalFileIndexL(TInt aDrive) const; - - /** - * Reference to opened file server session - */ - RFs& iFs; - - /** - * Reference to RLoader server session - */ - RLoader& iLoader; - /** - * The generic journal filename (does not include a drive) - */ - TFileName iJournalFileName; - - /** - * The filename for the drives array (located on the system drive) - * This file stores the drives used, and drives completed for this - * transaction. - */ - TFileName iDriveArrayFileName; - - /** - * The array of completed drives for this transaction - */ - RArray iCompletedDrives; - - RArray iAllDrives; - - /** - * Array of CJournalFile objects - */ - RPointerArray iJournalFiles; - }; - -} ///namespace -#endif