filemanager/bkupengine/src/CMMCScBkupDataStrategies.cpp
branchRCL_3
changeset 20 491b3ed49290
parent 19 95243422089a
child 21 65326cf895ed
--- a/filemanager/bkupengine/src/CMMCScBkupDataStrategies.cpp	Thu Aug 19 09:42:45 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,542 +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: CMMCScBkupDataStrategy implementation
-*
-*
-*/
-
-#include "CMMCScBkupDataStrategies.h"
-
-// User includes
-#include "MMCScBkupConfig.h"
-#include "MMCScBkupLogger.h"
-
-
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::CMMCScBkupDataStrategy()
-// 
-// C++ constructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupDataStrategy::CMMCScBkupDataStrategy()
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::ReadStrategyLC()
-// 
-// Factory function
-// ---------------------------------------------------------------------------
-CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::ReadStrategyLC(const TDesC& aName, RFs& aFsSession)
-    {
-    // Fetch the size
-    TEntry entry;
-    const TInt error = aFsSession.Entry(aName, entry);
-    User::LeaveIfError(error);
-
-    // Construct
-    return CMMCScBkupDataStrategy::ReadStrategyLC(aName, aFsSession, 0, entry.iSize);
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::ReadStrategyLC()
-// 
-// Factory function
-// ---------------------------------------------------------------------------
-CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::ReadStrategyLC(const TDesC& aName, RFs& aFsSession, TInt aOffset, TInt aLength)
-    {
-    CMMCScBkupDataStrategy* ret = NULL;
-
-    // First, try a normal read strategy
-    TRAPD(err, ret = CMMCScBkupDataFileStrategy::NewForReadingL(aName, aFsSession));
-    if  (err != KErrNone)
-        {
-        // Try the file section read strategy - don't trap this - if it fails
-        // then this file cannot be read...
-        ret = CMMCScBkupDataFileSectionReadStrategy::NewL(aName, aFsSession);
-        }
-    //
-    if  (ret)
-        {
-        ret->SetOffsetAndLength(aOffset, aLength);
-        }
-    //
-    CleanupStack::PushL( ret );
-    return ret;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::WriteStrategyLC()
-// 
-// Factory function
-// ---------------------------------------------------------------------------
-CMMCScBkupDataStrategy* CMMCScBkupDataStrategy::WriteStrategyLC( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile )
-    {
-    CMMCScBkupDataStrategy* ret = CMMCScBkupDataFileStrategy::NewForWritingL( aName, aFsSession, aUseTempFile );
-    CleanupStack::PushL(ret);
-    return ret;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::Write()
-// 
-// 
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataStrategy::Write(const TDesC8& /*aSource*/)
-    {
-    return KErrNotSupported;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::Finalize()
-// 
-// 
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataStrategy::Finalize()
-    {
-    return KErrNone;
-    }
-    
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataStrategy::SetOffsetAndLength()
-// 
-// 
-// ---------------------------------------------------------------------------
-void CMMCScBkupDataStrategy::SetOffsetAndLength(TInt aStartOffset, TInt aLengthToRead)
-    {
-    iOffset = aStartOffset; 
-    iLengthToRead = aLengthToRead;
-    }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::CMMCScBkupDataFileStrategy()
-// 
-// C++ constructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileStrategy::CMMCScBkupDataFileStrategy( RFs& aFsSession, TBool aUseTempFile )
-:   iFsSession( aFsSession ), iUseTempFile( aUseTempFile )
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::~CMMCScBkupDataFileStrategy()
-// 
-// C++ destructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileStrategy::~CMMCScBkupDataFileStrategy()
-    {
-    iFile.Close();
-    delete iFileName;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::ConstructL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void CMMCScBkupDataFileStrategy::ConstructL( const TDesC& aName, TUint aMode )
-    {
-    iFileName = aName.AllocL();
-    
-    // The previous version of this engine would attempt to use the old
-    // backup & restore API to close this file. 
-    //
-    // With the new Symbian Secure Backup Architecture, data owners are expected
-    // to release file locks on public files as soon as they receive
-    // notification that a backup is beginning.
-    TInt error = KErrNone;
-    //
-    if  ( iUseTempFile )
-        {
-        // Ensure path for temporary files exists on same drive where file will eventually
-        // be stored. This is important, because we estimate available size on target drive
-        // and so also temporary file size affects whether restore can be carried out.
-        HBufC* tempPath = HBufC::NewLC( KMaxFileName );
-        TPtr pTempPath( tempPath->Des() );
-        pTempPath.Zero();
-        if(aName.Length())
-            {
-            pTempPath.Append( aName[0] );
-            }
-        else
-            {
-            const TDriveUnit driveUnit( KMMCScBkupTempFileDrive );
-            const TDriveName drive( driveUnit.Name() );
-            pTempPath.Append( drive );
-            }
-        pTempPath.Append( KMMCScBkupTempDir );
-
-        error = iFsSession.MkDirAll( pTempPath );
-        if  ( ! (error == KErrNone || error == KErrAlreadyExists) )
-            {
-            User::LeaveIfError( error );
-            }
-            
-        // Make a temporary file
-        error = iFile.Temp( iFsSession, pTempPath, iTempFileName, aMode );
-        __LOG2("CMMCScBkupDataFileStrategy::ConstructL() - Created temporary file: %S, error code: %d", &iTempFileName, error);
-        
-        // Clean up
-        CleanupStack::PopAndDestroy( tempPath );
-        }
-    else
-        {
-        if( aMode & EFileWrite )
-            {
-            error = PrepareToOverwriteFile( iFsSession, *iFileName );
-
-            if  ( error == KErrNone )
-                {
-                error = iFile.Create( iFsSession, *iFileName, aMode );
-                __LOG2("CMMCScBkupDataFileStrategy::ConstructL() - Created file %S, error code: %d", iFileName, error);
-                }
-            }
-        else
-            {
-            error = iFile.Open( iFsSession, aName, aMode );
-            }
-        }
-    //
-    User::LeaveIfError(error);
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::NewForReadingL()
-// 
-// Factory function
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileStrategy* CMMCScBkupDataFileStrategy::NewForReadingL( const TDesC& aName, RFs& aFsSession )
-    {
-    const TUint mode = EFileRead | EFileShareReadersOnly | EFileStream;
-    //
-    CMMCScBkupDataFileStrategy* self = new(ELeave) CMMCScBkupDataFileStrategy( aFsSession );
-    CleanupStack::PushL(self);
-    self->ConstructL( aName, mode );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::NewForWritingL()
-// 
-// Factory function
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileStrategy* CMMCScBkupDataFileStrategy::NewForWritingL( const TDesC& aName, RFs& aFsSession, TBool aUseTempFile )
-    {
-    const TUint mode = EFileWrite | EFileStream;
-    //
-    CMMCScBkupDataFileStrategy* self = new(ELeave) CMMCScBkupDataFileStrategy( aFsSession, aUseTempFile );
-    CleanupStack::PushL(self);
-    self->ConstructL( aName, mode );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::Read()
-// 
-//
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataFileStrategy::Read(TDes8& aSink)
-    {
-    TInt error = KErrNone;
-    //
-    aSink.Zero();
-    TInt amountToRead = (LengthToRead() - Offset());
-    if  (amountToRead > aSink.MaxLength())
-        {
-        amountToRead = aSink.MaxLength();
-        }
-    //
-    if  (amountToRead > 0)
-        {
-        // Do the read
-        error = iFile.Read( static_cast<TInt64>(Offset()), aSink, amountToRead );
-        if  (error == KErrNone)
-            {
-            SetOffset( Offset() + aSink.Length() );
-            }
-        }
-    //
-    return error;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::Write()
-// 
-//
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataFileStrategy::Write(const TDesC8& aSource)
-    {
-    // Offset writing not supported (no requirement)
-    const TInt error = iFile.Write( aSource );
-    return error;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::Finalize()
-// 
-// 
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataFileStrategy::Finalize()
-    {
-    TInt error = KErrNone;
-    //
-    if  ( iUseTempFile )
-        {
-        // Prepare for over-write
-        error = PrepareToOverwriteFile( iFsSession, *iFileName );
-        //
-        if  ( error == KErrNone )
-            {
-            // Finally, do the rename
-            error = iFile.Rename( *iFileName );
-            __LOG2("CMMCScBkupDataFileStrategy::Finalize() - Renamed temporary file as: %S, error code: %d", iFileName, error);
-            }
-        }
-
-    // Whatever the situation, we close the file now
-    iFile.Close();
-    return error;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileStrategy::PrepareToOverwriteFile()
-// 
-// 
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataFileStrategy::PrepareToOverwriteFile( RFs& aFsSession, const TDesC& aFileName )
-    {
-    TInt err = KErrNone;
-
-    // Create the full path, if not exists
-    err = aFsSession.MkDirAll( aFileName );
-
-    if( err == KErrAlreadyExists || !err )
-        {
-        // Reset file flags
-        err = aFsSession.SetAtt( aFileName, KEntryAttNormal, !KEntryAttNormal );
-        }
-
-    if( !err )
-        {
-        // Delete the file
-        err = aFsSession.Delete( aFileName );
-        }
-
-    if( err == KErrNotFound )
-        {
-        // These errors are ignored
-        err = KErrNone;
-        }
-
-    return err;
-    }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileSectionReadStrategy::CMMCScBkupDataFileSectionReadStrategy()
-// 
-// C++ constructor.
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileSectionReadStrategy::CMMCScBkupDataFileSectionReadStrategy(RFs& aFsSession)
-:   iFsSession(aFsSession)
-    {
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileSectionReadStrategy::~CMMCScBkupDataFileSectionReadStrategy()
-// 
-// 
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileSectionReadStrategy::~CMMCScBkupDataFileSectionReadStrategy()
-    {
-    delete iFileName;
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileSectionReadStrategy::ConstructL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void CMMCScBkupDataFileSectionReadStrategy::ConstructL(const TDesC& aName)
-    {
-    iFileName = aName.AllocL();
-    }
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileSectionReadStrategy::NewL()
-// 
-// 
-// ---------------------------------------------------------------------------
-CMMCScBkupDataFileSectionReadStrategy* CMMCScBkupDataFileSectionReadStrategy::NewL(const TDesC& aName, RFs& aFsSession)
-    {
-    CMMCScBkupDataFileSectionReadStrategy* self = new(ELeave) CMMCScBkupDataFileSectionReadStrategy(aFsSession);
-    CleanupStack::PushL(self);
-    self->ConstructL(aName);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// CMMCScBkupDataFileSectionReadStrategy::Read()
-// 
-//
-// ---------------------------------------------------------------------------
-TInt CMMCScBkupDataFileSectionReadStrategy::Read(TDes8& aSink)
-    {
-    TInt error = KErrNone;
-    //
-    aSink.Zero();
-    TInt amountToRead = (LengthToRead() - Offset());
-    if  (amountToRead > aSink.MaxLength())
-        {
-        amountToRead = aSink.MaxLength();
-        }
-    //
-    if  (amountToRead > 0)
-        {
-        // Do the read
-        error = iFsSession.ReadFileSection( *iFileName, Offset(), aSink, amountToRead );
-        if  (error == KErrNone)
-            {
-            SetOffset( Offset() + aSink.Length() );
-            }
-        }
-    return error;
-    }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-