remotestoragefw/remotefileengine/src/rsfwmetadatastore.cpp
changeset 0 3ad9d5175a89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/remotestoragefw/remotefileengine/src/rsfwmetadatastore.cpp	Thu Dec 17 09:07:59 2009 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2004-2006 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:  Keeps metadata persistent
+*
+*/
+
+
+// INCLUDE FILES
+#include <s32mem.h>
+
+#include "rsfwmetadatastore.h"
+#include "mdebug.h"
+
+// CONSTANTS
+const TUint32 KMetaDataStoreVersion        = 0x010101; // current version
+const TInt KMaxExternalizedMountConfigSize = 512;
+const TInt KDefaultMetaDataBlockSize       = 128;
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CRsfwMetaDataStore::NewL
+// ----------------------------------------------------------------------------
+//
+CRsfwMetaDataStore* CRsfwMetaDataStore::NewL(const TDesC& aPath)
+    {
+    DEBUGSTRING(("CRsfwMetaDataStore::NewL"));
+    CRsfwMetaDataStore* self = CRsfwMetaDataStore::NewLC(aPath);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CRsfwMetaDataStore::NewLC
+// ----------------------------------------------------------------------------
+//    
+CRsfwMetaDataStore* CRsfwMetaDataStore::NewLC(const TDesC& aPath)
+    {
+    DEBUGSTRING(("CRsfwMetaDataStore::NewLC"));
+    CRsfwMetaDataStore* self = new (ELeave) CRsfwMetaDataStore();
+    CleanupStack::PushL(self);
+    self->ConstructL(aPath);
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CRsfwMetaDataStore::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CRsfwMetaDataStore::ConstructL(const TDesC& aPath)
+    {
+    DEBUGSTRING(("CRsfwMetaDataStore::ConstructL"));
+    CRsfwPermanentStore::ConstructL(aPath,
+                                KMaxExternalizedMountConfigSize,
+                                KDefaultMetaDataBlockSize);
+    }
+
+// ----------------------------------------------------------------------------
+// CRsfwMetaDataStore::GetMountConfigL
+// ----------------------------------------------------------------------------
+//
+void CRsfwMetaDataStore::GetMountConfigL(TRsfwMountConfig& aMountConfig)
+    {
+    // Load the configuration information
+    DEBUGSTRING(("CRsfwMetaDataStore::GetMountConfigL"));
+    const HBufC8* header = Header();
+    if (header)
+        {
+        RMemReadStream stream(header->Ptr(), header->Length());
+        CleanupClosePushL(stream);
+        TUint32 version = stream.ReadUint32L();
+        if (version != KMetaDataStoreVersion)
+            {
+            DEBUGSTRING(("metadata store version 0x%x differs from 0x%x",
+                         version,
+                         KMetaDataStoreVersion));
+            User::Leave(KErrCorrupt);
+            }
+        aMountConfig.InternalizeL(stream);
+        CleanupStack::PopAndDestroy(&stream); // stream
+        }
+    else
+        {
+        User::Leave(KErrNotFound);
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CRsfwMetaDataStore::SetMountConfigL
+// ----------------------------------------------------------------------------
+//
+void CRsfwMetaDataStore::SetMountConfigL(const TRsfwMountConfig& aMountConfig)
+    {
+    // Store the configuration information
+    HBufC8* buf = HBufC8::NewLC(KMaxExternalizedMountConfigSize);
+    TPtr8 ptr = buf->Des();
+    TUint8* data = const_cast<TUint8 *>(ptr.Ptr());
+    RMemWriteStream stream(data, KMaxExternalizedMountConfigSize);
+    CleanupClosePushL(stream);
+
+    // Dump the externalized data in the memory buffer
+    stream.WriteUint32L(KMetaDataStoreVersion);
+    aMountConfig.ExternalizeL(stream);
+    MStreamBuf* streamBuf = stream.Sink();
+    TInt dataLen = streamBuf->TellL(MStreamBuf::EWrite).Offset();
+    DEBUGSTRING(("mount config data len = %d,", dataLen));
+    stream.CommitL();
+    TPtrC8 header(data, dataLen);
+    SetHeaderL(header);
+
+    CleanupStack::PopAndDestroy(2, buf); // stream, buf
+    }
+
+// End of File