filemanager/src/fmbkupengine/src/MMCScBkupArchiveUtils.cpp
branchRCL_3
changeset 39 65326cf895ed
parent 38 491b3ed49290
child 42 f5c50b8af68c
--- a/filemanager/src/fmbkupengine/src/MMCScBkupArchiveUtils.cpp	Tue Aug 31 15:06:05 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,709 +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: MMCScBkupArchiveUtils implementation
-*
-*
-*/
-
-#include "MMCScBkupArchiveUtils.h"
-
-// System includes
-#include <s32file.h>
-#include <s32mem.h>
-
-// User includes
-#include "MMCScBkupLogger.h"
-#include "MMCScBkupDllUids.h"
-#include "MMCScBkupPhoneModelUtils.h"
-#include "CMMCScBkupArchiveFooter.h"
-#include "CMMCScBkupArchiveHeader.h"
-#include "MMMCScBkupArchiveDataInterface.h"
-#include "MMCScBkupArchiveFlags.h"
-
-// Constants
-const TInt8 KMMCScBkupArchiveFileFormatVersionMajor = 1;
-#ifdef RD_FILE_MANAGER_BACKUP
-const TInt8 KMMCScBkupArchiveFileFormatVersionMinor = 1;
-#else
-const TInt8 KMMCScBkupArchiveFileFormatVersionMinor = 0;
-#endif
-const TInt16 KMMCScBkupArchiveFileFormatVersionBuild = 1;
-const TUid KMMCScBkupArchiveFileFormatUid1 = { KMMCAppEngUID3 };
-const TUid KMMCScBkupArchiveFileFormatUid2 = { 0 };
-const TUid KMMCScBkupArchiveFileFormatUid3 = { 0x0BACCCCC }; // FIX
-
-    /**
-     * Fixed Header
-     * ============
-     * 
-     * 12 bytes = 3 uids
-     *  4 bytes = 1 uid crc checksum
-     *
-     * ARCHIVE FILE FORMAT VERSION
-     * {
-     *    1 byte  = version major
-     *    1 byte  = version minor
-     *    2 bytes = version build
-     * }
-     * 
-     * 4 bytes = size of footer in bytes - this is always the same
-     *           fixed length, hence we can write the size here. 
-     *           The value can then be used to work from the back of the
-     *           archive to the starting position of the footer (where
-     *           most of the juicy info is).
-     *
-     *  4 bytes = archive flags
-     *
-     *  4 bytes = archive payload CRC (activated when RD_FILE_MANAGER_BACKUP)
-     * 
-     *  4 bytes = archive category
-     * 
-     *  4 bytes = archive header CRC (activated when RD_FILE_MANAGER_BACKUP)
-     * 
-     * KMMCScSpareByteCount bytes = spare padding
-     *
-     *  1 byte = phone model version string length
-     *  n bytes = phone model version string
-     *
-     *
-     *
-     * Note that we deliberately do not use the streaming chevrons
-     * as we then risk the problem of running the string through
-     * a unicode compressor first.
-     */
-
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ArchiveUidType()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::ArchiveUidType(TUidType& aType)
-    {
-    aType = TUidType( KMMCScBkupArchiveFileFormatUid1,
-                      KMMCScBkupArchiveFileFormatUid2,
-                      KMMCScBkupArchiveFileFormatUid3 );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ArchiveCheckedUid()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::ArchiveCheckedUid(TCheckedUid& aCheckedUids)
-    {
-    TUidType uidType;
-    ArchiveUidType( uidType );
-    aCheckedUids.Set( uidType );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::PhoneModelFromArchiveLC()
-// 
-// 
-// ---------------------------------------------------------------------------
-HBufC8* MMCScBkupArchiveUtils::PhoneModelFromArchiveLC( MMMCScBkupArchiveDataInterface& aADI )
-    {
-    const TInt phoneModelOffset = OffsetOfModelInformation();
-    //
-    RReadStream stream( aADI.ADIReadStreamUncompressedLC( phoneModelOffset ) );
-    HBufC8* modelInfo = PhoneModelFromArchiveLC( stream);
-    CleanupStack::PopAndDestroy(); // stream
-    //
-    return modelInfo;  
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ReadPhoneValidityInformationL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::ReadPhoneValidityInformationL( RFs& aFsSession, const TDesC& aFileName, HBufC8*& aPhoneModelData, TBitFlags& aArchiveFlags, TVersion& aArchiveVersion )
-    {
-    __ASSERT_DEBUG( aPhoneModelData == NULL, User::Invariant() );
-    //
-    RFile64 file;
-    TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileStream | EFileRead );
-    User::LeaveIfError( error );
-    CleanupClosePushL(file);
-
-    // First, read the archive flags
-    aArchiveFlags = ReadArchiveFlagsL( file );
-    
-    // Read version
-    ReadArchiveVersionL( file, aArchiveVersion );
-    
-    // Then, create a stream interface to the file
-    const TInt phoneModelOffset = OffsetOfModelInformation();
-    RFileReadStream stream( file, phoneModelOffset );
-    CleanupStack::Pop( &file );
-    CleanupClosePushL( stream ); // stream takes ownership of the file now
-    //
-    HBufC8* modelInfo = PhoneModelFromArchiveLC( stream );
-    
-    // Unfortunately we have to juggle the cleanup stack
-    CleanupStack::Pop( modelInfo );
-    CleanupStack::PopAndDestroy( &stream ); // also closes the file
-    
-    // Done
-    aPhoneModelData = modelInfo;
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ArchiveRunTimeFileFormatVersion()
-// 
-// 
-// ---------------------------------------------------------------------------
-TVersion MMCScBkupArchiveUtils::ArchiveRunTimeFileFormatVersion()
-    {
-    return TVersion( KMMCScBkupArchiveFileFormatVersionMajor, 
-                     KMMCScBkupArchiveFileFormatVersionMinor, 
-                     KMMCScBkupArchiveFileFormatVersionBuild );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::WriteHeaderL()
-// 
-// 
-// ---------------------------------------------------------------------------
-const TMMCScBkupArchiveVector& MMCScBkupArchiveUtils::WriteHeaderL( MMMCScBkupArchiveDataInterface& aADI, 
-    TBitFlags aCategory )
-    {
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - START");
-    RWriteStream stream( aADI.ADIWriteStreamUncompressedLC() );
-
-    // 16 bytes = uids + *uid* checksum
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [16] write uids + checksum");
-    TCheckedUid checkedUid;
-    ArchiveCheckedUid( checkedUid );
-    const TPtrC8 pUidAndCRC( checkedUid.Des() );
-    stream.WriteL( pUidAndCRC );
-    
-    // 4 bytes = file format version
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] write version");
-    const TVersion version( ArchiveRunTimeFileFormatVersion() );
-    stream.WriteInt8L( version.iMajor );
-    stream.WriteInt8L( version.iMinor );
-    stream.WriteInt16L( version.iBuild );
-
-    // 4 bytes = Footer length - starts life as length of 0, and
-    // is then written to again later on after the footer has
-    // been exteranlised.
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] write size of footer (starts life as 0)");
-    const TInt footerLength = 0;
-    stream.WriteInt32L( footerLength );
-
-    // 4 bytes = Archive flags
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive flags (archive starts life invalid)");
-    const TUint32 defaultArchiveFlags = DefaultArchiveFlags();
-    stream.WriteUint32L( defaultArchiveFlags );
-
-    // 4 bytes = Initial payload CRC value, this will be updated with the final 
-    // CRC once the entire archive has been prepared.
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive payload CRC");
-    const TUint32 initialPayloadCRC = 0;
-    stream.WriteUint32L( initialPayloadCRC );
-    
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive category");
-    stream.WriteUint32L( aCategory.iFlags );
-    
-    // 4 bytes = Initial header CRC value, this will be updated with the final 
-    // CRC once the entire archive has been prepared.
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 4] archive header CRC");
-    const TUint32 initialHeaderCRC = 0;
-    stream.WriteUint32L( initialHeaderCRC );
-    
-    // KMMCScSpareByteCount = padding, for future use
-    __LOG1("MMCScBkupArchiveUtils::WriteHeaderL() - [%d] padding/spare data", KMMCScSpareByteCount);
-    for(TInt i = 0; i < KMMCScSpareByteCount/sizeof(TInt32); i++)
-        {
-        stream.WriteInt32L( 0 );
-        }
-
-    // 1 byte = Phone model version string length
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [ 1] phone model length");
-    HBufC8* phoneModelString = MMCScBkupPhoneModelUtils::CurrentPhoneModelLC();
-    stream.WriteInt8L( phoneModelString->Length() );
-
-    // Then the version string itself
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - [??] phone model string");
-    stream.WriteL( *phoneModelString );
-
-    // Tidy up
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - committing stream...");
-    stream.CommitL();
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - destroying stream...");
-    CleanupStack::PopAndDestroy( 2 ); // phoneModelString and stream
-
-    __LOG("MMCScBkupArchiveUtils::WriteHeaderL() - END");
-    return aADI.ADICurrentArchiveVectorInfo();
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ReadHeaderL()
-// 
-// 
-// ---------------------------------------------------------------------------
-const TMMCScBkupArchiveVector& MMCScBkupArchiveUtils::ReadHeaderL( MMMCScBkupArchiveDataInterface& aADI, CMMCScBkupArchiveHeader& aHeader )
-    {
-    __LOG("MMCScBkupArchiveUtils::ReadHeaderL() - START");
-    RReadStream stream( aADI.ADIReadStreamUncompressedLC() );
-
-    // 16 bytes = uids + *uid* checksum
-    TBuf8<16> uidBuffer;
-    stream.ReadL( uidBuffer, uidBuffer.MaxLength() );
-
-    // Create a UID type objjec
-    TCheckedUid checkedUid( uidBuffer );
-    const TUidType uids( checkedUid.UidType()) ;
-    __LOG3("MMCScBkupArchiveUtils::ReadHeaderL() - uids: 0x%08x/0x%08x/0x%08x", uids[0], uids[1], uids[2] );
-    if  ( uids[0] == KNullUid && uids[1] == KNullUid && uids[2] == KNullUid )
-        {
-        // Apparently, TCheckedUid sets the uids to 0 when the CRC doesn't match
-        // the value read from the file.
-        User::Leave( KErrNotSupported );
-        }
-    aHeader.SetCheckedUid( checkedUid );
-    
-    // 4 bytes = file format version
-    TVersion version;
-    version.iMajor = stream.ReadInt8L();
-    version.iMinor = stream.ReadInt8L();
-    version.iBuild = stream.ReadInt16L();
-    aHeader.SetVersion( version );
-    __LOG3("MMCScBkupArchiveUtils::ReadHeaderL() - version: %3d.%3d.%6d", version.iMajor, version.iMinor, version.iBuild );
-
-    // 4 bytes = Length of footer
-    const TInt footerLength = stream.ReadInt32L();
-    aHeader.SetFooterLength( footerLength );
-    __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - footerLength: %d", footerLength);
-
-    // 4 bytes = Archive flags
-    const TUint32 archiveFlags = stream.ReadUint32L();
-    aHeader.SetArchiveFlags( archiveFlags );
-    __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archiveFlags: %d", archiveFlags);
-
-    // 4 bytes = Archive payload CRC
-    const TUint32 payloadCRC = stream.ReadUint32L();
-    __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archive payload CRC: %d", payloadCRC);
-
-    // 4 bytes = Archive Category
-    const TUint32 archiveCategory = stream.ReadUint32L();
-    __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archiveCategory: %d", archiveCategory);
-
-    // 4 bytes = Archive header CRC
-    const TUint32 headerCRC = stream.ReadUint32L();
-    __LOG1("MMCScBkupArchiveUtils::ReadHeaderL() - archive header CRC: %d", headerCRC);
-
-    // KMMCScSpareByteCount of padding (spare) data. Skip for now
-    for(TInt i = 0; i < KMMCScSpareByteCount/sizeof(TInt32); i++)
-        {
-        (void) stream.ReadInt32L();
-        }
-
-    // Then the version string itself - which is handled through a separate method:
-    HBufC8* phoneModel = PhoneModelFromArchiveLC( stream );
-    aHeader.SetPhoneModelIdentifierL( *phoneModel );
-    CleanupStack::PopAndDestroy( phoneModel );
-
-    // Clean up
-    CleanupStack::PopAndDestroy(); // stream
-
-    __LOG("MMCScBkupArchiveUtils::ReadHeaderL() - END");
-    return aADI.ADICurrentArchiveVectorInfo();
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::OffsetOfModelInformation()
-// 
-// 
-// ---------------------------------------------------------------------------
-TInt MMCScBkupArchiveUtils::OffsetOfModelInformation()
-    {
-    return EArchiveOffsetPhoneModelStringLength;
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::PhoneModelFromArchiveLC()
-// 
-// 
-// ---------------------------------------------------------------------------
-HBufC8* MMCScBkupArchiveUtils::PhoneModelFromArchiveLC( RReadStream& aStream )
-    {
-    const TInt length = aStream.ReadInt8L();
-    
-    // Validate against preconditions
-    const TInt maxLength = MMCScBkupPhoneModelUtils::MaximumPhoneModelIdentifierLength();
-    if  ( length > maxLength || length < 0 )
-        {
-        User::Leave( KErrCorrupt );
-        }
-
-    // Now try to read the model identifier
-    HBufC8* model = HBufC8::NewLC( length );
-    TPtr8 pModel( model->Des() );
-    aStream.ReadL( pModel, length );
-
-    // All done
-    return model;
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::DefaultArchiveFlags()
-// 
-// 
-// ---------------------------------------------------------------------------
-TUint32 MMCScBkupArchiveUtils::DefaultArchiveFlags()
-    {
-    return EMMCScBkupArchiveFlagsDefault;
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::SetArchiveContentAsValidL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::SetArchiveContentAsValidL( RFile64& aArchive )
-    {
-    TInt error = KErrNone;
-    
-    // Calculate the offset to the archive flags:
-    const TUint archiveFlagsFileOffset = EArchiveOffsetArchiveFlags;
-    
-    // Flags are four bytes. Read the existing raw flag data
-    TBuf8< KMMCScArchiveFlagsByteCount > flagData;
-    error = aArchive.Read( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
-    User::LeaveIfError( error );
-    
-    // Interpret the flag data as real flags
-    RDesReadStream readStream( flagData );
-    CleanupClosePushL( readStream );
-    TUint32 archiveFlags = readStream.ReadUint32L();
-    CleanupStack::PopAndDestroy( &readStream );
-    
-    // Twiddle the "archive is complete/valid" bits
-    archiveFlags |= EMMCScBkupArchiveFlagsContentValid;
-    
-    // Write the flags back out the descriptor
-    flagData.Zero();
-    RDesWriteStream writeStream( flagData );
-    CleanupClosePushL( writeStream );
-    writeStream.WriteUint32L( archiveFlags );
-    writeStream.CommitL();
-    CleanupStack::PopAndDestroy( &writeStream );
-    
-    // Then write them to the file itself
-    error = aArchive.Write( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
-    User::LeaveIfError( error );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::SetFooterLengthL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::SetFooterLengthL( RFile64& aArchive, TInt aLength )
-    {
-    TInt error = KErrNone;
-    
-    // Calculate the offset to the footer length:
-    const TUint archiveFooterLengthOffset = EArchiveOffsetFooterLength;
-    
-    // Prepare externalized representation of length
-    TBuf8< KMMCScArchiveFooterLengthByteCount > footerLengthData;
-    RDesWriteStream writeStream( footerLengthData );
-    CleanupClosePushL( writeStream );
-    writeStream.WriteInt32L( aLength );
-    writeStream.CommitL();
-    CleanupStack::PopAndDestroy( &writeStream );
-    
-    // Then write them to the file itself
-    error = aArchive.Write( static_cast<TInt64>( archiveFooterLengthOffset ), footerLengthData );
-    User::LeaveIfError( error );
-    }
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ReadBkUpCategoryInformationL()
-// 
-// 
-// ---------------------------------------------------------------------------
-TBitFlags MMCScBkupArchiveUtils::ReadBkUpCategoryInformationL( RFs& aFsSession, const TDesC& aFileName )
-    {
-    RFile64 file;
-    TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileStream | EFileRead );
-    User::LeaveIfError( error );
-    CleanupClosePushL(file);
-
-    // Then, create a stream interface to the file
-    RFileReadStream stream( file, EArchiveOffsetArchiveCategory );
-    CleanupStack::Pop( &file );
-    CleanupClosePushL( stream ); // stream takes ownership of the file now
-    //
-    TUint category = stream.ReadUint32L();
-
-    CleanupStack::PopAndDestroy( &stream ); // also closes the file
-    
-    TBitFlags ret;
-    ret.SetValue( category );
-    
-    return ret;
-    }
-
-
-#ifdef RD_FILE_MANAGER_BACKUP
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::SetArchiveCrcsL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::SetArchiveCrcsL( RFile64& aArchive, TUint32 aCrc )
-    {
-    TInt error = KErrNone;
-    
-    // Payload crc 
-    SetArchiveCrcL( aArchive, aCrc, EArchiveOffsetArchivePayloadCRC );
-    
-    // Calculate and write header crc also to the file
-    TBuf8< KMMCScArchivePhoneModelStringLength > length;
-    TUint32 modelLength;
-    TUint32 headerCrc = 0;
-    
-    error = aArchive.Read( static_cast<TInt64>( EArchiveOffsetPhoneModelStringLength ), length );
-    User::LeaveIfError(error);
-    RDesReadStream readStream( length );
-    CleanupClosePushL( readStream );
-    modelLength = readStream.ReadUint8L();
-    CleanupStack::PopAndDestroy( &readStream );
-    
-	CalculateCrcFromArchive( headerCrc, aArchive, 0, EArchiveOffsetArchiveHeaderCRC);
-	CalculateCrcFromArchive( headerCrc, aArchive, EArchiveOffsetArchiveHeaderCRC + KMMCScArchiveCrcByteCount, 
-	     KMMCScSpareByteCount + KMMCScArchivePhoneModelStringLength + modelLength);
-    SetArchiveCrcL( aArchive, headerCrc, EArchiveOffsetArchiveHeaderCRC );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ValidateArchiveCrcsL()
-// 
-// 
-// ---------------------------------------------------------------------------
-TBool MMCScBkupArchiveUtils::ValidateArchiveCrcsL( RFs& aFsSession, const TDesC& aFileName )
-    {
-    TBool validCrc = EFalse;
-
-    RFile64 file;
-    TInt64 size;
-    
-    TInt error = file.Open( aFsSession, aFileName, EFileShareReadersOnly | EFileRead );
-    
-    if ( error == KErrNone && file.Size(size) == KErrNone)
-        {
-        TBuf8< KMMCScArchiveFlagsByteCount > headerCrc;
-        TBuf8< KMMCScArchiveFlagsByteCount > payloadCrc;
-        TBuf8< KMMCScArchivePhoneModelStringLength > length;
-        TUint32 archivedHeaderCrc, calculatedHeaderCrc;
-        TUint32 archivedPayloadCrc, calculatedPayloadCrc;
-        TUint32 modelLength;
-        
-        // Read crcs from header
-        error = file.Read( static_cast<TInt64>( EArchiveOffsetArchiveHeaderCRC ), headerCrc );
-        User::LeaveIfError(error);
-        error = file.Read( static_cast<TInt64>( EArchiveOffsetArchivePayloadCRC ), payloadCrc );
-        User::LeaveIfError(error);
-        error = file.Read( static_cast<TInt64>( EArchiveOffsetPhoneModelStringLength ), length );
-        User::LeaveIfError(error);
-        CleanupClosePushL( file );
-
-        RDesReadStream readStream( headerCrc );
-        CleanupClosePushL( readStream );
-        archivedHeaderCrc = readStream.ReadUint32L();
-        readStream.Close();
-        readStream.Open(payloadCrc);
-        archivedPayloadCrc = readStream.ReadUint32L();
-        readStream.Close();
-        readStream.Open(length);
-        modelLength = readStream.ReadUint8L();
-        CleanupStack::PopAndDestroy( &readStream );
-        
-        // Calculate crc from header in two parts
-        calculatedHeaderCrc = 0;
-    	CalculateCrcFromArchive( calculatedHeaderCrc, file, 0, EArchiveOffsetArchiveHeaderCRC);
-    	CalculateCrcFromArchive( calculatedHeaderCrc, file, EArchiveOffsetArchiveHeaderCRC + KMMCScArchiveCrcByteCount, 
-    	     KMMCScSpareByteCount + KMMCScArchivePhoneModelStringLength + modelLength);
-
-        // Calculate crc from payload and footer
-        TInt payloadSize = size - (EArchiveOffsetPhoneModelString + modelLength);
-        calculatedPayloadCrc = 0;
-    	CalculateCrcFromArchive( calculatedPayloadCrc, file, EArchiveOffsetPhoneModelString + modelLength, payloadSize);
-
-    	if(archivedPayloadCrc == calculatedPayloadCrc && archivedHeaderCrc == calculatedHeaderCrc)
-    	    {
-    	    validCrc = ETrue;
-    	    }
-    	else
-    	    {
-    	    __LOG4("MMCScBkupArchiveUtils::ValidateArchiveCrcsL() - crc mismatch: %u vs. %u - %u vs. %u", 
-    	        archivedPayloadCrc, calculatedPayloadCrc, archivedHeaderCrc, calculatedHeaderCrc);
-    	    }
-        
-        CleanupStack::PopAndDestroy( &file );
-        }
-        
-	return validCrc;
-	}
-#endif // RD_FILE_MANAGER_BACKUP
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ReadArchiveFlagsL()
-// 
-// 
-// ---------------------------------------------------------------------------
-TBitFlags MMCScBkupArchiveUtils::ReadArchiveFlagsL( RFile64& aArchive )
-    {
-    TInt error = KErrNone;
-    
-    // Calculate the offset to the archive flags:
-    const TUint archiveFlagsFileOffset = EArchiveOffsetArchiveFlags;
-    
-    // Flags are four bytes. Read the existing raw flag data
-    TBuf8< KMMCScArchiveFlagsByteCount > flagData;
-    error = aArchive.Read( static_cast<TInt64>( archiveFlagsFileOffset ), flagData );
-    User::LeaveIfError( error );
-    
-    // Interpret the flag data as real flags
-    RDesReadStream readStream( flagData );
-    CleanupClosePushL( readStream );
-    TUint32 archiveFlags = readStream.ReadUint32L();
-    CleanupStack::PopAndDestroy( &readStream );
-
-    // Done
-    TBitFlags ret;
-    ret.SetValue( archiveFlags );
-    return ret;
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::ReadArchiveVersionL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::ReadArchiveVersionL( RFile64& aArchive, TVersion& aVersion )
-    {
-    TInt error = KErrNone;
-    
-    // Calculate the offset to the archive flags:
-    const TUint archiveVersionFileOffset = EArchiveOffsetFileFormatVersion;
-    
-    // Flags are four bytes. Read the existing raw flag data
-    TBuf8< KMMCScArchiveVersionByteCount > versionData;
-    error = aArchive.Read( static_cast<TInt64>( archiveVersionFileOffset ), versionData );
-    User::LeaveIfError( error );
-    
-    // Interpret the flag data as real flags
-    RDesReadStream readStream( versionData );
-    CleanupClosePushL( readStream );
-    aVersion.iMajor = readStream.ReadInt8L();
-    aVersion.iMinor = readStream.ReadInt8L();
-    aVersion.iBuild = readStream.ReadInt16L();
-    CleanupStack::PopAndDestroy( &readStream );
-    }
-
-
-#ifdef RD_FILE_MANAGER_BACKUP
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::SetArchiveCrcL()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::SetArchiveCrcL( RFile64& aArchive, TUint32 aCrc, TUint aOffset )
-    {
-    TInt error = KErrNone;
-    
-    // Prepare externalized representation of crc
-    TBuf8< KMMCScArchiveCrcByteCount > crcData;
-    RDesWriteStream writeStream( crcData );
-    CleanupClosePushL( writeStream );
-    writeStream.WriteInt32L( aCrc );
-    writeStream.CommitL();
-    CleanupStack::PopAndDestroy( &writeStream );
-    
-    // Then write crc to the file itself
-    error = aArchive.Write( static_cast<TInt64>( aOffset ), crcData );
-    User::LeaveIfError( error );
-    }
-
-
-// ---------------------------------------------------------------------------
-// MMCScBkupArchiveUtils::CalculateCrcFromArchive()
-// 
-// 
-// ---------------------------------------------------------------------------
-void MMCScBkupArchiveUtils::CalculateCrcFromArchive( TUint32& aCrc, RFile64& aArchive, TUint32 aOffset, TUint32 aLength )
-    {
-    const TInt KBigBufSize=0x10000;
-    const TInt KMediumBufSize=0x8000;
-    const TInt KSmallBufSize=0x1000;
-
-    // Allocate as large buffer as possible for crc validation, because 
-    // need to read file content in chunks for crc calculation.
-	HBufC8* bufPtr = HBufC8::New(KBigBufSize);
-	
-	if ( bufPtr == NULL )
-		bufPtr = HBufC8::New(KMediumBufSize);
-	if ( bufPtr == NULL )
-		bufPtr = HBufC8::New(KSmallBufSize);
-	
-	if ( bufPtr != NULL)
-	    {
-        TPtr8 copyBuf = bufPtr->Des();
-        TInt64 pos = aOffset;
-        TInt size = aLength;
-        
-        // Loop through archive file skipping archive crc
-    	while(size)
-    		{
-    		TInt s;
-    		
-		    s = Min( size, copyBuf.MaxSize() );
-    		
-    		TInt error = aArchive.Read( pos, copyBuf, s );
-    		
-    		if ( error == KErrNone && copyBuf.Length() != s )
-    			break;
-    		
-    		pos += s;
-    		size -= s;
-    		Mem::Crc32(aCrc, copyBuf.Ptr(), copyBuf.Length());
-    		}
-    		
-        delete bufPtr;
-	    }
-    }
-#endif // RD_FILE_MANAGER_BACKUP
-