syncmlfw/common/sosserver/src/NSmlSOSBackup.cpp
changeset 0 b497e44ab2fc
child 54 085438c28042
child 58 4af31167ea77
--- /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 <sbdefs.h>
+#include <d32dbms.h>
+#include <nsmldebug.h>
+#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<conn::TBURPartType>( 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<conn::TBURPartType>( 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