diff -r 000000000000 -r b497e44ab2fc syncmlfw/common/sosserver/src/NSmlSOSBackup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/common/sosserver/src/NSmlSOSBackup.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,211 @@ +/* +* Copyright (c) 2004 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: Symbian OS Server source. +* +*/ + + +#include +#include +#include +#include "nsmlsosserver.h" +#include "nsmlagentlog.h" +// -------------------------------------------------------------------------- +// CNSmlSOSBackup* CNSmlSOSBackup::NewL( CNSmlSOSHandler* aHandler ) +// -------------------------------------------------------------------------- +// +CNSmlSOSBackup* CNSmlSOSBackup::NewL( CNSmlSOSHandler* aHandler ) + { + CNSmlSOSBackup* self = new (ELeave) CNSmlSOSBackup( aHandler ); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +// -------------------------------------------------------------------------- +// CNSmlSOSBackup::CNSmlSOSBackup( CNSmlSOSHandler* aHandler ) +// -------------------------------------------------------------------------- +// +CNSmlSOSBackup::CNSmlSOSBackup( CNSmlSOSHandler* aHandler ) : + CActive( EPriorityNormal ), + iHandler( aHandler ), + iRestoring( EFalse ) + { + CActiveScheduler::Add(this); + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::Subscribe() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::Subscribe() + { + if ( !IsActive() ) + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::ConstructL() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::ConstructL() + { + iProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey ); + Subscribe(); + TInt currValue(0); + iProperty.Get( currValue ); + + if ( currValue && currValue != ( conn::EBURNormal | conn::ENoBackup ) ) + { + iHandler->ServerSuspendedL( ETrue ); + } + + BackUpModeL(); + } + +// -------------------------------------------------------------------------- +// CNSmlSOSBackup::~CNSmlSOSBackup() +// -------------------------------------------------------------------------- +// +CNSmlSOSBackup::~CNSmlSOSBackup() + { + Cancel(); + iProperty.Close(); + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::RunL() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::RunL() + { + _DBG_FILE("CNSmlSOSBackup::RunL() : Begin"); + Subscribe(); + + TInt value(0); + iProperty.Get( value ); + + const conn::TBURPartType partType = + static_cast( value & conn::KBURPartTypeMask ); + if ( partType && partType != ( conn::EBURUnset | conn::EBURNormal ) ) + { + _DBG_FILE("CNSmlSOSBackup::RunL() :: Before BackUpModeL"); + BackUpModeL(); + iHandler->ServerSuspendedL( ETrue ); + _DBG_FILE("CNSmlSOSBackup::RunL() :: After BackUpModeL"); + } + else + { + if ( iRestoring ) + { + _DBG_FILE("Before : ->DeleteDataInRestoreL()"); + TRAP_IGNORE( DeleteDataInRestoreL() ); + _DBG_FILE("After : ->DeleteDataInRestoreL()"); + + _DBG_FILE("Ending restoring"); + iRestoring = EFalse; + } + iHandler->ServerSuspendedL( EFalse ); + } + + _DBG_FILE("CNSmlSOSBackup::RunL() : End"); + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::DoCancel() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::DoCancel() + { + iProperty.Cancel(); + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::BackUpModeL() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::BackUpModeL() + { + _DBG_FILE("CNSmlSOSBackup::BackUpModeL() : Begin"); + + TInt value(0); + iProperty.Get( value ); + + //Get the type of current backup process + const conn::TBURPartType partType = + static_cast( value & conn::KBURPartTypeMask ); + + conn::CActiveBackupClient* client = conn::CActiveBackupClient::NewL(); + CleanupStack::PushL( client ); + + _DBG_FILE("Before : ->ConfirmReadyForBURL()"); + client->ConfirmReadyForBURL( KErrNone ); + _DBG_FILE("After : ->ConfirmReadyForBURL()"); + + if ( ( partType == conn::EBURRestoreFull ) || + ( partType == conn::EBURRestorePartial ) ) + { + _DBG_FILE("Started restoring"); + iRestoring = ETrue; + } + + CleanupStack::PopAndDestroy( client ); //client + + _DBG_FILE("CNSmlSOSBackup::BackUpModeL() : End"); + } + +// -------------------------------------------------------------------------- +// void CNSmlSOSBackup::DeleteDataInRestoreL() +// -------------------------------------------------------------------------- +// +void CNSmlSOSBackup::DeleteDataInRestoreL() + { + _DBG_FILE("CNSmlSOSBackup::DeleteDataInRestore() : Begin"); + + RDbs database; + User::LeaveIfError( database.Connect() ); + CleanupClosePushL( database ); + TParse name; + +#ifdef SYMBIAN_SECURE_DBMS + name.Set( KNSmlAgentLogDbName(), NULL, NULL ); +#else + name.Set( KNSmlAgentLogDbName(), KNSmlDatabasesNonSecurePath, NULL ); +#endif + + TInt error = database.DeleteDatabase( name.FullName(), KNSmlSOSServerPolicyUID ); + CleanupStack::PopAndDestroy( &database ); // database + + if ( error != KErrNone && error != KErrNotFound ) + { + _DBG_FILE("CNSmlSOSBackup::DeleteDataInRestore() : End with error"); + User::Leave( error ); + } + // update the settings db + CNSmlDSSettings* settings = CNSmlDSSettings::NewLC(); + settings->UpdateHiddenProfilesL(); + CleanupStack::PopAndDestroy(); //settings + CNSmlDMSettings* dmsettings = CNSmlDMSettings::NewLC(); + dmsettings->ScanAndRepairRestoredProfilesL(); + CleanupStack::PopAndDestroy(); //dmsettings + + _DBG_FILE("CNSmlSOSBackup::DeleteDataInRestore() : End"); + } + + +// End of File