diff -r 491b3ed49290 -r 65326cf895ed filemanager/src/fmbkupengine/src/CMMCScBkupArchiveDataManager.cpp --- a/filemanager/src/fmbkupengine/src/CMMCScBkupArchiveDataManager.cpp Tue Aug 31 15:06:05 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,647 +0,0 @@ -/* -* 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: CMMCScBkupArchiveDataManager Implementation -* -* -*/ - -#include "CMMCScBkupArchiveDataManager.h" - -// System includes -#include -#include - -// User includes -#include "MMCScBkupLogger.h" -#include "RMMCScBkupArchiveStreams.h" -#include "MMCScBkupOperations.h" - - - -// ========================= MEMBER FUNCTIONS ================================ - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager() -// -// C++ constructor. -// --------------------------------------------------------------------------- -CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager ) -: CActive( CActive::EPriorityIdle ), iFsSession( aFsSession ), iFile( aFile ), iProgressManager( aProgressManager ) - { - __LOG1("CMMCScBkupArchiveDataManager::CMMCScBkupArchiveDataManager() - START - aFile: 0x%08x", aFile.SubSessionHandle() ); - CActiveScheduler::Add(this); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::~CMMCScBkupArchiveDataManager() -// -// Destructor. -// --------------------------------------------------------------------------- -CMMCScBkupArchiveDataManager::~CMMCScBkupArchiveDataManager() - { - Cancel(); - // - iWriteStream.Close(); - // - delete iCompressor; - delete iDecompressor; - delete iBufferManager; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ConstructL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ConstructL() - { - TInt64 size = 0; - User::LeaveIfError( iFile.Size( size ) ); - // - iOverallArchiveVectorInfo.SetOffset( 0 ); - iOverallArchiveVectorInfo.SetLength( size ); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::NewL() -// -// -// --------------------------------------------------------------------------- -CMMCScBkupArchiveDataManager* CMMCScBkupArchiveDataManager::NewL( RFs& aFsSession, RFile64& aFile, MMMCScBkupProgressObserver& aProgressManager ) - { - CMMCScBkupArchiveDataManager* self = new(ELeave) CMMCScBkupArchiveDataManager( aFsSession, aFile, aProgressManager ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CurrentOffsetL() -// -// -// --------------------------------------------------------------------------- -TInt CMMCScBkupArchiveDataManager::CurrentOffsetL() const - { - TInt offset = CurrentOffset(); - User::LeaveIfError(offset); - return offset; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CurrentOffset() -// -// -// --------------------------------------------------------------------------- -TInt CMMCScBkupArchiveDataManager::CurrentOffset() const - { - TInt64 offsetOrError = 0; - TInt error = iFile.Seek( ESeekCurrent, offsetOrError ); - // - if (error != KErrNone) - { - offsetOrError = error; - } - // - return offsetOrError; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::SetCurrentVector() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::SetCurrentVector( const TMMCScBkupArchiveVector& aVector ) - { - iCurrentVectorInfo = aVector; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIFsSession() -// -// -// --------------------------------------------------------------------------- -RFs& CMMCScBkupArchiveDataManager::ADIFsSession() const - { - return iFsSession; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIRawArchiveFile() -// -// -// --------------------------------------------------------------------------- -RFile64& CMMCScBkupArchiveDataManager::ADIRawArchiveFile() const - { - return iFile; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADICurrentArchiveVectorInfo() -// -// -// --------------------------------------------------------------------------- -const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADICurrentArchiveVectorInfo() const - { - return iCurrentVectorInfo; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIOverallArchiveVectorInfo() -// -// -// --------------------------------------------------------------------------- -const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIOverallArchiveVectorInfo() const - { - return iOverallArchiveVectorInfo; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() -// -// -// --------------------------------------------------------------------------- -RWriteStream& CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC( TInt aPos ) - { - __LOG1("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - START - aPos: %d", aPos ); - // - __ASSERT_ALWAYS( !iWriteStream.IsOpen(), User::Invariant() ); - TInt offset = aPos; - if (offset == KMMCScBkupArchiveWriteStreamCurrentPos) - { - offset = CurrentOffsetL(); - __LOG1("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - current offset is: %d", offset ); - } - // - iWriteStream.OpenLC(*this, iFile, offset); - - __LOG("CMMCScBkupArchiveDataManager::ADIWriteStreamUncompressedLC() - END - stream opened and pushed"); - - iCurrentVectorInfo.Reset(); - return iWriteStream; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIReadStreamUncompressedLC() -// -// -// --------------------------------------------------------------------------- -RReadStream& CMMCScBkupArchiveDataManager::ADIReadStreamUncompressedLC( TInt aPos ) - { - __ASSERT_ALWAYS( !iReadStream.IsOpen(), User::Invariant() ); - TInt offset = aPos; - if (offset == KMMCScBkupArchiveReadStreamCurrentPos) - { - offset = CurrentOffsetL(); - } - // - iReadStream.OpenLC(*this, iFile, offset); - iCurrentVectorInfo.Reset(); - return iReadStream; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIWriteL() -// -// -// --------------------------------------------------------------------------- -const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIWriteL( const TDesC8& aData ) - { - const TInt offset = CurrentOffsetL(); - const TInt error = iFile.Write( aData ); - User::LeaveIfError(error); - -#ifdef RD_FILE_MANAGER_BACKUP - CalculateCrc(aData.Ptr(), aData.Length()); -#endif - // - iCurrentVectorInfo.SetOffset( offset ); - iCurrentVectorInfo.SetLength( aData.Length() ); - // - return iCurrentVectorInfo; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIReadL() -// -// -// --------------------------------------------------------------------------- -const TMMCScBkupArchiveVector& CMMCScBkupArchiveDataManager::ADIReadL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo ) - { - TMMCScBkupArchiveVector readInfo(aInfo); - - // Read straight into aSink. - const TInt maxLength = aSink.MaxLength(); - if (aInfo.Length() > maxLength) - { - readInfo.SetLength( maxLength ); - } - - aSink.Zero(); - const TInt error = iFile.Read( static_cast(readInfo.Offset()), aSink, readInfo.Length() ); - User::LeaveIfError( error ); - // - iCurrentVectorInfo.SetOffset( readInfo.Offset() ); - iCurrentVectorInfo.SetLength( aSink.Length() ); - // - return iCurrentVectorInfo; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIWriteFileL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIWriteFileL( const TDesC& aSourceFileName, TRequestStatus& aStatus ) - { - __LOG1("CMMCScBkupArchiveDataManager::ADIWriteFileL() - START - file: %S", &aSourceFileName); - - if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeFileToArchive) - { - CMMCScBkupBufferManagerBase* bm = - CMMCScBkupBufferManagerBase::NewByTypeL( - CMMCScBkupBufferManagerBase::ETypeFileToArchive, - iProgressManager, - *this, - (TAny*) &aSourceFileName); - // - delete iBufferManager; - iBufferManager = bm; - } - else - { - iBufferManager->InitializeL( (TAny*) &aSourceFileName ); - } - - // Setup our observer & op - SetOperation(EOperationCompressing); - SetObserver(aStatus); - - // Compressing aData to the archive file - EnsureCompressorExistsL(*iBufferManager); - - // Do the compression asynchronously - CompleteSelf(); - - __LOG("CMMCScBkupArchiveDataManager::ADIWriteFileL() - END"); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIReadFileL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIReadFileL( const TDesC& aDestinationFileName, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus ) - { - __LOG3("CMMCScBkupArchiveDataManager::ADIReadFileL() - START - file: %S, offset: %8d, length: %8d", &aDestinationFileName, aInfo.Offset(), aInfo.Length()); - - if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeArchiveToFile) - { - CMMCScBkupBufferManagerBase* bm = - CMMCScBkupBufferManagerBase::NewByTypeL( - CMMCScBkupBufferManagerBase::ETypeArchiveToFile, - iProgressManager, - *this, - (TAny*) &aDestinationFileName, - (TAny*) &aInfo ); - // - delete iBufferManager; - iBufferManager = bm; - } - else - { - iBufferManager->InitializeL( (TAny*) &aDestinationFileName, (TAny*) &aInfo ); - } - - // Setup our observer & op - SetOperation(EOperationDecompressing); - SetObserver(aStatus); - - // Compressing aData to the archive file - EnsureDecompressorExistsL(*iBufferManager); - - // Do the compression asynchronously - CompleteSelf(); - - __LOG("CMMCScBkupArchiveDataManager::ADIReadFileL() - END"); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIWriteCompressedL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIWriteCompressedL( const TDesC8& aData, TRequestStatus& aStatus ) - { - if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeDescriptorToArchive) - { - CMMCScBkupBufferManagerBase* bm = - CMMCScBkupBufferManagerBase::NewByTypeL( - CMMCScBkupBufferManagerBase::ETypeDescriptorToArchive, - iProgressManager, - *this, - (TAny*) &aData ); - // - delete iBufferManager; - iBufferManager = bm; - } - else - { - iBufferManager->InitializeL( (TAny*) &aData ); - } - - // Setup our observer & op - SetOperation(EOperationCompressing); - SetObserver(aStatus); - - // Compressing aData to the archive file - EnsureCompressorExistsL(*iBufferManager); - - // Do the compression asynchronously - CompleteSelf(); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIReadDecompressedL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIReadDecompressedL( TDes8& aSink, const TMMCScBkupArchiveVector& aInfo, TRequestStatus& aStatus ) - { - if (!iBufferManager || iBufferManager->Type() != CMMCScBkupBufferManagerBase::ETypeArchiveToDescriptor) - { - CMMCScBkupBufferManagerBase* bm = - CMMCScBkupBufferManagerBase::NewByTypeL( - CMMCScBkupBufferManagerBase::ETypeArchiveToDescriptor, - iProgressManager, - *this, - (TAny*) &aSink, - (TAny*) &aInfo ); - // - delete iBufferManager; - iBufferManager = bm; - } - else - { - iBufferManager->InitializeL( (TAny*) &aSink, (TAny*) &aInfo ); - } - - // Setup our observer & op - SetOperation(EOperationDecompressing); - SetObserver(aStatus); - - // Compressing aData to the archive file - EnsureDecompressorExistsL(*iBufferManager); - - // Do the compression asynchronously - CompleteSelf(); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIAsynchronousCancel() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIAsynchronousCancel() - { - Cancel(); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::ADIResetResources() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::ADIResetResources(TMMCScBkupOperationType /* aType */) - { - __LOG("CMMCScBkupArchiveDataManager::ADIResetResources()"); - - delete iCompressor; - iCompressor = NULL; - delete iDecompressor; - iDecompressor = NULL; - delete iBufferManager; - iBufferManager = NULL; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::EnsureCompressorExistsL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::EnsureCompressorExistsL( MEZBufferManager& aBufferManager ) - { - delete iDecompressor; - iDecompressor = NULL; - // - if (iCompressor == NULL) - { - iCompressor = CEZCompressor::NewL( aBufferManager ); - } - else - { - iCompressor->ResetL(aBufferManager); - } - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::EnsureDecompressorExistsL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::EnsureDecompressorExistsL( MEZBufferManager& aBufferManager ) - { - delete iCompressor; - iCompressor = NULL; - // - if (iDecompressor == NULL) - { - iDecompressor = CEZDecompressor::NewL( aBufferManager ); - } - else - { - iDecompressor->ResetL(aBufferManager); - } - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::SetObserver() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::SetObserver( TRequestStatus& aStatus ) - { - __ASSERT_DEBUG(iObserverStatus == NULL, User::Invariant()); - iObserverStatus = &aStatus; - *iObserverStatus = KRequestPending; - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CompleteSelf() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::CompleteSelf( TInt aCompletionCode ) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, aCompletionCode); - } - - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CompleteObserver(() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::CompleteObserver( TInt aCompletionCode ) - { - __ASSERT_ALWAYS(iObserverStatus != NULL, User::Invariant()); - User::RequestComplete(iObserverStatus, aCompletionCode); - - // Implicitly, we must be finished - SetOperation(EOperationIdle); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::SetOperation() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::SetOperation( TOperation aOperation ) - { - iOperation = aOperation; - } - - -#ifdef RD_FILE_MANAGER_BACKUP -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::CalculateCrc() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::CalculateCrc( const TAny* aPtr,TInt aLength ) - { - if(iCrcCalcActivated) - { -#if defined(__MMCSCBKUPLOGGING_ENABLED__) - TUint32 startTime = User::NTickCount(); -#endif - Mem::Crc32(iCrc, aPtr, aLength); -#if defined(__MMCSCBKUPLOGGING_ENABLED__) - iTotalTickCount += (User::NTickCount() - startTime); - //__LOG5("CMMCScBkupArchiveDataManager::CalculateCrc() - crc %u, addr 0x%08x, len %d, offset %d, ticks in ms %u", - // iCrc, aPtr, aLength, CurrentOffset(), iTotalTickCount); -#endif - } - } -#endif - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::RunL() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::RunL() - { - User::LeaveIfError(iStatus.Int()); - TBool moreToDo = EFalse; - // - switch(iOperation) - { - case EOperationIdle: - ASSERT( EFalse ); - break; - case EOperationCompressing: - __LOG("CMMCScBkupArchiveDataManager::RunL() - START - EOperationCompressing"); - moreToDo = iCompressor->DeflateL(); - break; - case EOperationDecompressing: - __LOG("CMMCScBkupArchiveDataManager::RunL() - START - EOperationDecompressing"); - moreToDo = iDecompressor->InflateL(); - break; - } - // - if (moreToDo) - { - CompleteSelf(); - } - else - { - // Update current offset & length info based upon buffer manager indications - const TMMCScBkupArchiveVector& finalInfo = iBufferManager->Info(); - iCurrentVectorInfo = finalInfo; - - // Ensure we set the state back to idle, ready for next operation... - iOperation = EOperationIdle; - - __LOG2("CMMCScBkupArchiveDataManager::RunL() - operation complete - offset: %8d, length: %8d", iCurrentVectorInfo.Offset(), iCurrentVectorInfo.Length()); - CompleteObserver(); - } - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::DoCancel() -// -// -// --------------------------------------------------------------------------- -void CMMCScBkupArchiveDataManager::DoCancel() - { - __ASSERT_DEBUG(iOperation != EOperationIdle, User::Invariant()); - // - CompleteObserver(KErrCancel); - } - - -// --------------------------------------------------------------------------- -// CMMCScBkupArchiveDataManager::RunError() -// -// -// --------------------------------------------------------------------------- -TInt CMMCScBkupArchiveDataManager::RunError( TInt aError ) - { - __LOG1("CMMCScBkupArchiveDataManager::RunError() - START - aError: %d", aError); - CompleteObserver(aError); - // - return KErrNone; - } -