diff -r 000000000000 -r 6a9f87576119 filemanager/bkupengine/src/CMMCScBkupStateArchiveOpSystemData.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/bkupengine/src/CMMCScBkupStateArchiveOpSystemData.cpp Mon Jan 18 20:09:41 2010 +0200 @@ -0,0 +1,367 @@ +/* +* Copyright (c) 2005 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: CMMCScBkupStateArchiveOpSystemData implementation +* +* +*/ + +#include "CMMCScBkupStateArchiveOpSystemData.h" + +// User includes +#include "MMCScBkupLogger.h" +#include "CMMCScBkupDataOwnerCollection.h" +#include "CMMCScBkupDataOwnerInfo.h" +#include "MMCScBkupSBEUtils.h" +#include "CMMCScBkupArchive.h" +#include "CMMCScBkupArchiveFooter.h" +#include "CMMCScBkupIndexWithIdentifier.h" +#include "MMMCScBkupArchiveDataInterface.h" + + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData() +// +// C++ constructor. +// --------------------------------------------------------------------------- +CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData( MMMCScBkupDriver& aDriver ) +: CMMCScBkupStateOpAware( aDriver ), iIndexValueCurrent( -1 ) + { + __LOG1("CMMCScBkupStateArchiveOpSystemData::CMMCScBkupStateArchiveOpSystemData() - 0x%08x", StateId().iUid ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::~CMMCScBkupStateArchiveOpSystemData() +// +// Destructor. +// --------------------------------------------------------------------------- +CMMCScBkupStateArchiveOpSystemData::~CMMCScBkupStateArchiveOpSystemData() + { + Cancel(); + // + delete iBackupTransferObject; + delete iRestoreTransferObject; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::NewL() +// +// +// --------------------------------------------------------------------------- +CMMCScBkupStateArchiveOpSystemData* CMMCScBkupStateArchiveOpSystemData::NewL( MMMCScBkupDriver& aDriver ) + { + CMMCScBkupStateArchiveOpSystemData* self = new(ELeave) CMMCScBkupStateArchiveOpSystemData( aDriver ); + return self; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::StateId() +// +// +// --------------------------------------------------------------------------- +TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::StateId() const + { + return KMMCScBkupStateIdArchiveOpSystemData; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::NextStateBackupId() +// +// +// --------------------------------------------------------------------------- +TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::NextStateBackupId( TBool /*aPartial*/ ) const + { + return KMMCScBkupStateIdArchiveOpJavaData; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::NextStateRestoreId() +// +// +// --------------------------------------------------------------------------- +TMMCScBkupStateId CMMCScBkupStateArchiveOpSystemData::NextStateRestoreId( TBool /*aPartial*/ ) const + { + return KMMCScBkupStateIdArchiveOpJavaData; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformStateInitBackupL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformStateInitBackupL( TBool /*aPartial*/ ) + { + __DEBUG_TESTING_SKIP_BACKUP_SYS_DATA; + + iBackupTransferObject = CMMCScBkupWriteDataTransferRequest< TPackageDataType >::NewL( + Driver(), + *this, + EMMCScBkupOwnerDataTypeSystemData, + EPackageTransferDerivedType, + ESystemData + ); + CompleteSelf(); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL( TBool /*aPartial*/ ) + { + __LOG("CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL() - START" ); + __DEBUG_TESTING_SKIP_RESTORE_SYS_DATA; + + iRestoreTransferObject = CMMCScBkupReadDataTransferRequest< TPackageDataType >::NewL( + Driver(), + EMMCScBkupOwnerDataTypeSystemData, + ESystemData + ); + + CompleteSelf(); + __LOG("CMMCScBkupStateArchiveOpSystemData::PerformStateInitRestoreL() - END" ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepBackupL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepBackupL( TBool /*aPartial*/ ) + { + CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners(); + const TInt count = dataOwners.Count(); + // + while ( ++iIndexValueCurrent < count ) + { + CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent ); + // + if ( owner.CompletionStatus( EMMCScBkupOwnerDataTypeSystemData ) == EFalse ) + { + // Request all the system data (on all supported drives) for this + // particular data owner + __ASSERT_ALWAYS( iBackupTransferObject->IsActive() == EFalse, User::Invariant() ); + iBackupTransferObject->RequestL( owner, + iStatus, + Driver().DrvParamsBase().DriveAndOperations() ); + SetActive(); + break; // while loop + } + } + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL( TBool /*aPartial*/ ) + { + CMMCScBkupIndexBase& indexBase = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeSystemData ); + CMMCScBkupIndexWithIdentifier< TInt32 >& index = static_cast< CMMCScBkupIndexWithIdentifier< TInt32 >& >( indexBase ); + const TInt count = index.Count(); + __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - START - %d data owners...", count ); + // + if ( ++iIndexValueCurrent < count ) + { + __LOG2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - getting system data index record [%03d/%03d]", iIndexValueCurrent + 1, count); + const CMMCScBkupIndexEntry< TInt32 >& entry = index.At( iIndexValueCurrent ); + iSecureId = entry.Identifier(); + + __LOG("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - getting sub-entries for index record..."); + const RArray< TMMCScBkupArchiveDriveAndVector >& subEntries = entry.Entries(); + __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousStateStepRestoreL() - got %d sub-entries for index record", subEntries.Count()); +#ifdef __MMCSCBKUPLOGGING_ENABLED__ + for(TInt i=0; iIsActive() == EFalse, User::Invariant() ); + + // Request all the system data (on all supported drives) for this + // particular data owner + iRestoreTransferObject->RequestL( owner, + iStatus, + subEntries ); + SetActive(); + } + else + { + CompleteSelf(); + } + } + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup() +// +// +// --------------------------------------------------------------------------- +TBool CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup( TBool /*aPartial*/, TInt aError ) + { + (void) aError; + __LOG1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup() - error: %d", aError ); + + // Reset state and move to next item. Treat the current (badly behaving) item + // as completed/processed. + CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners(); + if ( iIndexValueCurrent < dataOwners.Count() ) + { + CMMCScBkupDataOwnerInfo& owner = dataOwners.Owner( iIndexValueCurrent ); + owner.SetCompletionStatus( EMMCScBkupOwnerDataTypeSystemData, ETrue ); + + __LOGFILE2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupBackup() - **** - error: %d, SID: 0x%08x - system data skipped for DO", aError, owner.SecureId().iId ); + } + + CompleteSelf(); + return ETrue; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore() +// +// +// --------------------------------------------------------------------------- +TBool CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore( TBool /*aPartial*/, TInt aError ) + { + (void) aError; + __LOGFILE1("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d", aError ); + + // If system data restore phase returns "not supported", let's treat it as + // such an error, that other data types for this data owner are not + // allowed to restore either. + + if( aError == KErrNotSupported || aError == KErrAlreadyExists ) + { + CMMCScBkupDataOwnerCollection& dataOwners = Driver().DrvDataOwners(); + CMMCScBkupDataOwnerInfo* owner = NULL; + TRAPD( err, owner = &dataOwners.OwnerL( iSecureId ) ); + if( err == KErrNone && owner ) + { + owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeJavaData, ETrue ); + owner->SetCompletionStatus( EMMCScBkupOwnerDataTypePublicData, ETrue ); + owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeSystemData, ETrue ); + owner->SetCompletionStatus( EMMCScBkupOwnerDataTypeActiveData, ETrue ); + owner->SetCompletionStatus( EMMCScBkupOwnerDataTypePassiveData, ETrue ); + + __LOGFILE2("CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousErrorCleanupRestore() - **** - error: %d, SID: 0x%08x - all data types skipped for DO", aError, owner->SecureId().iId ); + } + } + + CompleteSelf(); + return ETrue; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousCancellation() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformAsynchronousCancellation() + { + if (iBackupTransferObject) + { + iBackupTransferObject->Cancel(); + } + if (iRestoreTransferObject) + { + iRestoreTransferObject->Cancel(); + } + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformLastRightsBackupL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformLastRightsBackupL( TBool /*aPartial*/ ) + { + CMMCScBkupIndexBase& index = Driver().DrvArchive().Footer().IndexByType( EMMCScBkupOwnerDataTypeSystemData ); + index.StoreL( Driver() ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::PerformLastRightsRestoreL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::PerformLastRightsRestoreL( TBool /*aPartial*/ ) + { + Driver().DrvSecureBackupClient().AllSystemFilesRestored(); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateArchiveOpSystemData::AddIndexRecordL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateArchiveOpSystemData::AddIndexRecordL( CMMCScBkupArchiveFooter& aFooter, CMMCScBkupDataOwnerInfo& aDataOwner, const TMMCScBkupArchiveVector& aInfo, TDriveNumber aDrive ) + { + CMMCScBkupIndexBase& indexBase = aFooter.IndexByType( EMMCScBkupOwnerDataTypeSystemData ); + CMMCScBkupIndexWithIdentifier< TInt32 >& index = static_cast< CMMCScBkupIndexWithIdentifier< TInt32 >& >( indexBase ); + index.AddIndexRecordL( aInfo, aDrive, aDataOwner.SecureId().iId ); + } + + + + + + + + + + + +