diff -r 000000000000 -r 3ad9d5175a89 remotestoragefw/remotefileengine/src/rsfwmetadatastore.cpp --- /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 + +#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(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