--- a/filemanager/bkupengine/src/CMMCScBkupArchiveDataManager.cpp Thu Aug 19 09:42:45 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 <ezcompressor.h>
-#include <ezdecompressor.h>
-
-// 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<TInt64>(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;
- }
-