diff -r 000000000000 -r 6a9f87576119 filemanager/bkupengine/src/CMMCScBkupStateGetDataOwners.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/filemanager/bkupengine/src/CMMCScBkupStateGetDataOwners.cpp Mon Jan 18 20:09:41 2010 +0200 @@ -0,0 +1,206 @@ +/* +* 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: CMMCScBkupStateGetDataOwners implementation +* +* +*/ + +#include "CMMCScBkupStateGetDataOwners.h" + +#include +// User includes +#include "MMCScBkupLogger.h" +#include "CMMCScBkupDataOwnerCollection.h" +#include "MMCScBkupSBEUtils.h" + +// Constants +const TInt KMMCScBkupDataOwnerGranularity = 20; + + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners() +// +// C++ constructor. +// --------------------------------------------------------------------------- +CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners( MMMCScBkupDriver& aDriver ) +: CMMCScBkupState( aDriver ) + { + __LOG1("CMMCScBkupStateGetDataOwners::CMMCScBkupStateGetDataOwners() - 0x%08x", StateId().iUid ); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::NewL() +// +// +// --------------------------------------------------------------------------- +CMMCScBkupStateGetDataOwners* CMMCScBkupStateGetDataOwners::NewL( MMMCScBkupDriver& aDriver ) + { + CMMCScBkupStateGetDataOwners* self = new(ELeave) CMMCScBkupStateGetDataOwners( aDriver ); + return self; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::StateId() +// +// +// --------------------------------------------------------------------------- +TMMCScBkupStateId CMMCScBkupStateGetDataOwners::StateId() const + { + return KMMCScBkupStateIdGetDataOwners; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::NextStateId() +// +// +// --------------------------------------------------------------------------- +TMMCScBkupStateId CMMCScBkupStateGetDataOwners::NextStateId() const + { + // This is the same for backup & restore + return KMMCScBkupStateIdSetPhoneMode; + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::PerformStateInitL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateGetDataOwners::PerformStateInitL() + { + // Query asynchronously + CompleteSelf(); + } + + +// --------------------------------------------------------------------------- +// CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() +// +// +// --------------------------------------------------------------------------- +void CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() + { + RMMCScBkupPointerArray dataOwners(KMMCScBkupDataOwnerGranularity); + CleanupClosePushL( dataOwners ); + + // Get data owner listing from secure backup engine + Driver().DrvSecureBackupClient().ListOfDataOwnersL(dataOwners); + + // Inform driver of result +#ifdef RD_FILE_MANAGER_BACKUP + RPointerArray& dataOwnerLists = Driver().DrvDataOwnersAll(); + TInt count = dataOwners.Count(); + + // Construct an info array to get introduced for every category + for(TInt i = count-1; i >= 0; i--) + { + // Ownership is immediately transferred to the backup owner info object + // so we should remove it from the array prior to passing into NewLC + conn::CDataOwnerInfo* sbDataOwner = dataOwners[i]; + + dataOwners.Remove( i ); // Ensures it won't be deleted twice + + const TSBDerivedType type = sbDataOwner->Identifier().DerivedTypeL(); + if ( type == EJavaDerivedType || type == EJavaTransferDerivedType ) + { + HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( sbDataOwner->Identifier() ); + __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Assigning java owner with hash %S for categories", + hash ); + CleanupStack::PopAndDestroy( hash ); + } + else + { + __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Assigning data owner 0x%08x for categories", + MMCScBkupSBEUtils::SecureIdFromGenericL( sbDataOwner->Identifier() ).iId ); + } + + // We have to create copy of original data owner for each category, so we have to externalize it + RPointerArray sbDataOwnerCopies(dataOwnerLists.Count()); + CleanupClosePushL( sbDataOwnerCopies ); + HBufC8* dataOwner = sbDataOwner->ExternaliseL(); + CleanupStack::PushL( dataOwner ); + // Delete original data owner instance + delete sbDataOwner; + + // Create copies for each category (even if they do not eventually end up to those lists) + for(TInt j = 0; j < dataOwnerLists.Count(); j++) + { + conn::CDataOwnerInfo* sbDataOwnerCopy = conn::CDataOwnerInfo::NewL(*dataOwner); + CleanupStack::PushL( sbDataOwnerCopy ); + sbDataOwnerCopies.AppendL(sbDataOwnerCopy); + CleanupStack::Pop( sbDataOwnerCopy ); + } + CleanupStack::PopAndDestroy( dataOwner ); + + // Loop through all lists and assign copied data owners there + for(TInt j = 0; j < dataOwnerLists.Count(); j++) + { + // Again we have to create instances for each category, + // because each has to have own copy of data owner + CMMCScBkupDataOwnerInfo* info = CMMCScBkupDataOwnerInfo::NewLC( sbDataOwnerCopies[j] ); + + if(dataOwnerLists[j]->AssignL( *info )) + { + CleanupStack::Pop( info ); + } + else + { + CleanupStack::PopAndDestroy( info ); + } + } + + CleanupStack::PopAndDestroy( &sbDataOwnerCopies ); + } + +#if defined(__MMCSCBKUPLOGGING_ENABLED__) + __LOG("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Data owners per categories:"); + + for(TInt i = 0; i < dataOwnerLists.Count(); i++) + { + __LOG2("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - Category 0x%x contains %d data owners", + dataOwnerLists[i]->Category().iFlags, dataOwnerLists[i]->Count() ); + + for(TInt j = 0; j < dataOwnerLists[i]->Count(); j++) + { + CMMCScBkupDataOwnerInfo* entry = &dataOwnerLists[i]->Owner(j); + + const TSBDerivedType type = entry->Owner().Identifier().DerivedTypeL(); + if ( type == EJavaDerivedType || type == EJavaTransferDerivedType ) + { + HBufC* hash = MMCScBkupSBEUtils::JavaHashFromGenericLC( entry->Owner().Identifier() ); + __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - java data owner with hash %S", + hash ); + CleanupStack::PopAndDestroy( hash ); + } + else + { + __LOG1("CMMCScBkupStateGetDataOwners::PerformAsynchronousStateStepL() - data owner 0x%08x", + MMCScBkupSBEUtils::SecureIdFromGenericL( entry->Owner().Identifier() ).iId ); + } + } + } +#endif + +#else // RD_FILE_MANAGER_BACKUP + Driver().DrvDataOwners().AssignL( dataOwners ); +#endif // RD_FILE_MANAGER_BACKUP + + CleanupStack::PopAndDestroy( &dataOwners ); + }