filemanager/bkupengine/src/CMMCScBkupIndexDataOwners.cpp
changeset 0 6a9f87576119
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/bkupengine/src/CMMCScBkupIndexDataOwners.cpp	Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,210 @@
+/*
+* 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: CMMCScBkupIndexDataOwners implementation
+*
+*
+*/
+
+#include "CMMCScBkupIndexDataOwners.h"
+
+// User includes
+#include "MMMCScBkupArchiveDataInterface.h"
+
+// Constants
+const TInt KMMCScBkupDataOwnerIndexGranularity = 50;
+
+
+    /**
+     * Registration Data
+     * =================
+     * 
+     * This is the format of the data written by the
+     * CMMCScBkupStateGetDataOwners object
+     * 
+     * 
+     *  REG DATA for DO 0
+     *  {
+     *      RD for DO 0, 1st drive
+     *      RD for DO 0, 2nd drive
+     *      RD for DO 0, 'n'th drive
+     *  },
+     *  REG DATA for DO 1
+     *  {
+     *      RD for DO 0, 1st drive
+     *      RD for DO 0, 2nd drive
+     *      RD for DO 0, 'n'th drive
+     *  },
+     *  REG DATA for DO n
+     *  {
+     *      RD for DO 0, 1st drive
+     *      RD for DO 0, 2nd drive
+     *      RD for DO 0, 'n'th drive
+     *  }
+     * 
+     * Registration Data Index
+     * =======================
+     * 
+     * This is the format of the data written by this method.
+     * The format allows the possibility of a future partial
+     * restore (hopefully).
+     * 
+     * 
+     *  4 bytes = count of data owners
+     *
+     *  FOR EACH DATA OWNER
+     *  {
+     *      4 bytes = secure id of data owner's process
+     *      4 bytes = the number of different registration data files
+     *                for this particular data owner (one for each drive that
+     *                was backed up)
+     *      ENTRY
+     *      {
+     *          1 byte = Associated TDriveNumber of the registration data 
+     *          n bytes = raw drive data    
+     *      }
+     *  }
+     *
+     *
+     **/
+
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::CMMCScBkupIndexDataOwners()
+// 
+// C++ constructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners::CMMCScBkupIndexDataOwners()
+:   CMMCScBkupIndexBase( EMMCScBkupOwnerDataTypeDataOwner ), iEntries( KMMCScBkupDataOwnerIndexGranularity )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::~CMMCScBkupIndexDataOwners()
+// 
+// Destructor.
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners::~CMMCScBkupIndexDataOwners()
+    {
+    iEntries.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::NewLC()
+// 
+// 
+// ---------------------------------------------------------------------------
+CMMCScBkupIndexDataOwners* CMMCScBkupIndexDataOwners::NewLC()
+    {
+    CMMCScBkupIndexDataOwners* self = new(ELeave) CMMCScBkupIndexDataOwners();
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::AddIndexRecordL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::AddIndexRecordL( const TMMCScBkupArchiveVector& aInfo )
+    {
+    iEntries.AppendL( aInfo );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::StoreL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::StoreL(MMMCScBkupDriver& aDriver)
+    {
+    MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+    RWriteStream& stream = archiveDataInterface.ADIWriteStreamUncompressedLC();
+    //    
+    stream.WriteInt32L( EStreamFormatVersion1 );
+    stream.WriteInt32L( 0 ); // spare1
+    stream.WriteInt32L( 0 ); // spare2
+    stream.WriteInt32L( 0 ); // spare3
+    //
+    const TInt count = iEntries.Count();
+    stream.WriteInt32L(count);
+    //
+    for(TInt i=0; i<count; i++)
+        {
+        const TMMCScBkupArchiveVector& entry = iEntries[i];
+        stream << entry;
+        //
+        stream.WriteInt32L( 0 ); // spare1
+        stream.WriteInt32L( 0 ); // spare2
+        }
+    //
+    stream.CommitL();
+    CleanupStack::PopAndDestroy(); // stream
+
+    // Update our base class info with the offset to the index
+    const TMMCScBkupArchiveVector& writeInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+    SetVector( writeInfo );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CMMCScBkupIndexDataOwners::RestoreL()
+// 
+// 
+// ---------------------------------------------------------------------------
+void CMMCScBkupIndexDataOwners::RestoreL(MMMCScBkupDriver& aDriver)
+    {
+    MMMCScBkupArchiveDataInterface& archiveDataInterface = aDriver.DrvADI();
+    RReadStream& stream = archiveDataInterface.ADIReadStreamUncompressedLC( Vector().Offset() );
+    //
+    stream.ReadInt32L(); // EStreamFormatVersion1 
+    stream.ReadInt32L(); // spare1
+    stream.ReadInt32L(); // spare2
+    stream.ReadInt32L(); // spare3
+    //    
+    const TInt count = stream.ReadInt32L();
+    //
+    for(TInt i=0; i<count; i++)
+        {
+        TMMCScBkupArchiveVector entry;
+        stream >> entry;
+        //
+        stream.ReadInt32L(); // spare1
+        stream.ReadInt32L(); // spare2
+        //
+        iEntries.AppendL( entry );
+        }
+    //
+    CleanupStack::PopAndDestroy(); // stream
+    //
+    const TMMCScBkupArchiveVector& readInfo = archiveDataInterface.ADICurrentArchiveVectorInfo();
+    if  ( readInfo.Length() > Vector().Length() )
+        {
+        // We've read too much!
+        User::Leave( KErrCorrupt );
+        }
+    }
+
+
+
+
+
+
+