persistentstorage/sql/SRC/Server/SqlBur.cpp
author hgs
Mon, 27 Sep 2010 11:59:56 +0100
changeset 51 7d4490026038
parent 40 b8bdbc8f59c7
child 55 44f437012c90
permissions -rw-r--r--
201037_06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17
55f2396f6d25 Revision: 201018
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 15
diff changeset
     1
// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
// All rights reserved.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
// This component and the accompanying materials are made available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
// which accompanies this distribution, and is available
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
// Initial Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
// Contributors:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
// Description:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
//
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
#include "SqlBur.h"
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include "SqlAssert.h"
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    18
#include "OstTraceDefinitions.h"
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    19
#ifdef OST_TRACE_COMPILER_IN_USE
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    20
#include "SqlBurTraces.h"
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    21
#endif
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    22
#include "SqlTraceDef.h"
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    23
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    24
#define UNUSED_ARG(arg) arg = arg
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    26
_LIT(KSqlBurBackupExt,  ".bak");
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    27
_LIT(KSqlBurRestoreDir, "temprestore");
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    28
_LIT(KSqlBurAllFiles,   "*");
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    29
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    30
const TUint K8to16bitShift = 1;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    31
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    32
//Extracts and returns 32-bit integer from aNumBuf buffer.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
static TUint32 GetNumUint32L(const TDesC& aNumBuf)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
	TLex lex(aNumBuf);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
	lex.SkipSpace();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
	TUint32 num = 0xFFFFFFFF;
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    38
	__SQLLEAVE_IF_ERROR2(lex.Val(num, EHex));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
	return num;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
//Extracts and returns 64-bit integer from aNumBuf buffer.
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
static TInt64 GetNumInt64L(const TDesC& aNumBuf)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
	TLex lex(aNumBuf);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
	lex.SkipSpace();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
	TInt64 num = -1;
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
    48
	__SQLLEAVE_IF_ERROR2(lex.Val(num, EHex));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
	return num;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    50
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    51
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    52
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    53
///////////////////////////////   CSqlBurEventMonitor    //////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    54
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    56
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    57
Standard two phase construction. Creates a CSqlBurEventMonitor instance.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    58
@param aInterface A reference to an interface that is used for retrieving list of databases to be sent for backup.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    59
@return An instance of the backup notifier
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    60
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    61
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    62
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    63
CSqlBurEventMonitor* CSqlBurEventMonitor::NewL(MSqlSrvBurInterface& aInterface)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    64
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    65
	CSqlBurEventMonitor* self = new (ELeave) CSqlBurEventMonitor(aInterface);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    66
	CleanupStack::PushL(self);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
	self->ConstructL();
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    68
	CleanupStack::Pop(self);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    69
	SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_NEWL, "0x%X;CSqlBurEventMonitor::NewL", (TUint)self));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    70
	return self;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    73
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    74
Releases the allocated resources.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    75
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    76
CSqlBurEventMonitor::~CSqlBurEventMonitor()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    77
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    78
	SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_CSQLBACKUPNOTIFIER2, "0x%X;CSqlBurEventMonitor::~CSqlBurEventMonitor", (TUint)this));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    79
	Cancel();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    80
	iBurProperty.Close();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    81
	DestroyContent();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    82
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    83
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    84
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    85
Initializes data members with their default values. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    86
@param aInterface A reference to an interface that is used for retrieving list of databases to be sent for backup.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    87
*/		
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    88
CSqlBurEventMonitor::CSqlBurEventMonitor(MSqlSrvBurInterface& aInterface) :
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    89
	CActive(EPriorityStandard), 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    90
	iBurInterface(aInterface)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    92
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    94
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    95
Initializes the created CSqlBurEventMonitor object.  
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    96
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    97
                      Note that the function may also leave with some other system-wide error codes.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    98
*/	
7d4490026038 201037_06
hgs
parents: 40
diff changeset
    99
void CSqlBurEventMonitor::ConstructL()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   100
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   101
	__SQLLEAVE_IF_ERROR(iBurProperty.Attach(KSqlBurPropertyCategoryUid, KSqlBurBackupRestoreKey));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
	CActiveScheduler::Add(this);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   103
	iBurProperty.Subscribe(iStatus);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   104
	SetActive();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
17
55f2396f6d25 Revision: 201018
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 15
diff changeset
   107
/** 
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   108
RunL() is called when the value of the {KUidSystemCategory, KUidBackupRestoreKey} gets changed.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   109
That indicates: a backup or a restore is about to begin.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   110
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   111
How the function works:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   112
 - When a backup or restore notification is received, the function will subscribe again for notifications from
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   113
   the backup and restore property and will read the property status;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   114
 - If the property status is conn::EBURUnset or conn::EBURNormal, the function will destroy iSqlBurCallback
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   115
   and iActiveBackupClient interfaces. No more callbacks will be reseived from the backup and restore server.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   116
   This is the end of the backup or restore processing;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   117
 - If the property status is conn::EBURBackupFull, conn::EBURBackupPartial, conn::EBURRestoreFull or 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   118
   conn::EBURRestorePartial, the function will create iSqlBurCallback and iActiveBackupClient interface
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   119
   (iActiveBackupClient's NewL() receives iSqlBurCallback as an input parameter, registering this way the callback
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   120
   in the backup and restore server to be called later, when sending or retrieving data to/from the server).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   121
   If the property read and the interface creation operations have been successful, the function will call 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   122
   ConfirmReadyForBURL(KErrNone) to notify the backup and restore server that the SQL server is ready to send/retrieve 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   123
   backup/restore data.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   124
   If the current notification is that a backup is about to begin, after the confirmation the backup and restore server will
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   125
   call CSqlBurCallback::InitialiseGetProxyBackupDataL() once per {client secure id, drive} 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   126
   followed by CSqlBurCallback::GetBackupDataSectionL() calls to retrieve the backup data. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   127
   If the current notification is that a restore is about to begin, after the confirmation the backup and restore server will
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   128
   call CSqlBurCallback::InitialiseRestoreProxyBaseDataL() once per {client secure id, drive} 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   129
   followed by CSqlBurCallback::RestoreBaseDataSectionL() calls to send the restore data.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   130
     
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   131
The current implementation has one design flaw. If a backup or restore notification is received, there are at lest 3
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   132
places before the ConfirmReadyForBURL() call, where the code may leave: 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   133
 - the "property get" operation;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   134
 - the iSqlBurCallback creation;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   135
 - the iActiveBackupClient creation;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   136
If a leave occurs at some of the mentioned places, that leave will be trapped by the current CActiveScheduler object
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   137
and CSqlBurEventMonitor::RunError() will be called with the leaved error code.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   138
Problem #1: CSqlBurEventMonitor::RunError() won't do anything with the error (apart from printing a trace in the OST builds).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   139
            The error is silently suppressed. The backup or restore won't start. But the client won't see any notification
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   140
            for that problem.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   141
Problem #2: ConfirmReadyForBURL() won't be called. According to the backup and restore documentation, if
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   142
            ConfirmReadyForBURL() is called with KErrNone parameter, that's a confirmation for the backup and restore
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   143
            server to start the processing. If ConfirmReadyForBURL() is called with an error different than KErrNone,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   144
            that's a confirmation for the backup and restore server that the client is not ready. No backup or restore
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   145
            will be started. The remote backup client will be notified about the problem.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   146
After an investigation it was found that the same problems do exist in all active backup clients, none of them has 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   147
solved the problems. Then, the code here will be kept as it is, it might be too dangerous to do a change right now.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   148
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   149
@see CSqlBurEventMonitor::RunError()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   150
@see CSqlBurCallback
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   151
@see CActiveBackupClient
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   152
@see CSqlBurCallback::InitialiseGetProxyBackupDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   153
@see CSqlBurCallback::GetBackupDataSectionL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   154
@see CSqlBurCallback::InitialiseRestoreProxyBaseDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   155
@see CSqlBurCallback::RestoreBaseDataSectionL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   156
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   157
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   158
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   159
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   160
void CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   161
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   162
	SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_RUNL_ENTRY, "Entry;0x%X;CSqlBurEventMonitor::RunL", (TUint)this));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   163
	iBurProperty.Subscribe(iStatus);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   164
	SetActive();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   165
	TInt status;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   166
	__SQLLEAVE_IF_ERROR(iBurProperty.Get(status));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   167
	status &= conn::KBURPartTypeMask;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   168
#ifdef _SQL_RDEBUG_PRINT
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   169
	SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_RUNL1, "0x%X;CSqlBurEventMonitor::RunL;status=%d", (TUint)this, status));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   170
#else
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   171
	SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_RUNL2, "0x%X;CSqlBurEventMonitor::RunL;status=%{TBURPartType}", (TUint)this, status));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   172
#endif	    
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   173
	switch(status)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   174
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   175
		case conn::EBURBackupFull:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   176
		case conn::EBURBackupPartial:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   177
		case conn::EBURRestoreFull:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   178
		case conn::EBURRestorePartial:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   179
			{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   180
			// we only do full backups and full restores
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   181
			if(!(iSqlBurCallback && iActiveBackupClient))
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   182
				{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   183
				DestroyContent();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   184
				TRAPD(err, CreateContentL());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   185
				if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   186
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   187
					DestroyContent();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   188
					__SQLLEAVE(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   189
					}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   190
				}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   191
			iActiveBackupClient->ConfirmReadyForBURL(KErrNone);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   192
			}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   193
			break;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   194
		//case conn::EBURUnset:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   195
		//case conn::EBURNormal:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   196
		default:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   197
			DestroyContent();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   198
			break;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   199
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   200
	SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPNOTIFIER_EXIT, "Exit;0x%X;CSqlBurEventMonitor::RunL", (TUint)this));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   201
	SQL_BUR_TEST_STOP();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   202
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   203
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   204
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   205
Cancels the subscribtion for {KUidSystemCategory, KUidBackupRestoreKey} property changes.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   206
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   207
void CSqlBurEventMonitor::DoCancel()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
	{
17
55f2396f6d25 Revision: 201018
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 15
diff changeset
   209
	iBurProperty.Cancel();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   210
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   211
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   212
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   213
No-op. The method does nothing with the reported from CSqlBurEventMonitor::RunL() error  
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   214
(apart from logging a trace in OST builds).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   215
Actually, the right action is to return KErrNone (as it is implemented), otherwise the default implementation of 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   216
CActiveScheduler::Error() will panic the current thread.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   217
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   218
@see CActiveScheduler::Error()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   219
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   220
 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   221
@return The RunL() error, if the RunL() call leaves.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   222
@param The RunL() error
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   223
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   224
TInt CSqlBurEventMonitor::RunError(TInt aError)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   225
	{
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   226
	UNUSED_ARG(aError);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   227
	SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RUNERROR, "0x%X;CSqlBurEventMonitor::RunError;aError=%d", (TUint)this, aError));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   228
	SQL_BUR_TEST_SET_ERROR(aError); 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   229
	SQL_BUR_TEST_STOP();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   230
	return KErrNone;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   231
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   232
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   233
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   234
Creates iActiveBackupClient and iSqlBurCallback objects.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   235
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   236
void CSqlBurEventMonitor::CreateContentL()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   237
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   238
	iSqlBurCallback = CSqlBurCallback::NewL(iBurInterface);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   239
	iActiveBackupClient = conn::CActiveBackupClient::NewL(iSqlBurCallback);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   240
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   241
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   242
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   243
Destroys iActiveBackupClient and iSqlBurCallback objects.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   244
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   245
void CSqlBurEventMonitor::DestroyContent()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   246
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   247
	delete iActiveBackupClient;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   248
	iActiveBackupClient = NULL;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   249
	delete iSqlBurCallback;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   250
	iSqlBurCallback = NULL;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   251
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   252
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   253
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   254
///////////////////////////////   CSqlBackupClient    /////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   255
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   256
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   257
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   258
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   259
Creates new CSqlBurCallback instance.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   260
The CSqlBurEventMonitor object monitors the state of the {KUidSystemCategory, KUidBackupRestoreKey} 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   261
property. When a backup or a restore is about to begin, the CSqlBurEventMonitor object creates a
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   262
CSqlBurCallback instance, establishes a connection with the B&R server and passes a pointer to
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   263
the CSqlBurCallback callback to the BYR conenction.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   264
The CSqlBurCallback methods will be called during the backup/restore for sending/retrieving data.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   265
    
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   266
@param aInterface A reference to an interface that is used for retrieving list of databases to be sent for backup.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   267
@return A pointer to the created CSqlBurCallback instance
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   268
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   269
                      Note that the function may also leave with some other system-wide error codes.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   270
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   271
CSqlBurCallback* CSqlBurCallback::NewL(MSqlSrvBurInterface& aInterface)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   272
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   273
	CSqlBurCallback* self = new (ELeave) CSqlBurCallback(aInterface);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   274
	SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPCLIENT_NEWLC, "0x%X;CSqlBurCallback::NewL", (TUint)self));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   275
	return self;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   276
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   277
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   278
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   279
Initializes CSqlBurCallback data members with their default values. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   280
@param aInterface A reference to an interface that is used for retrieving list of databases to be sent for backup.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   281
*/		
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   282
CSqlBurCallback::CSqlBurCallback(MSqlSrvBurInterface& aInterface) :
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   283
	iInterface(aInterface)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   284
	{
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   285
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   286
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   287
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   288
Releases the allocated resources.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   289
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   290
CSqlBurCallback::~CSqlBurCallback()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   291
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   292
	SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_CSQLBACKUPCLIENT2, "0x%X;CSqlBurCallback::~CSqlBurCallback;iFile.SubSessionHandle()=0x%X", (TUint)this, (TUint)iFile.SubSessionHandle()));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   293
	BackupCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   294
	(void)RestoreCleanup();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   295
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   296
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   297
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   298
/////////////////////////////////////       Full backup   //////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   299
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   300
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   301
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   302
This is called to let us know that the given SID is to be backed up.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   303
We ask the SQL server (using iInterface, see MSqlSrvBurInterface for more details) 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   304
for a list of databases that want to be backed up.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   305
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   306
The backup is initiated by a notification received in CSqlBurEventMonitor::RunL() method.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   307
InitialiseGetProxyBackupDataL() is called once per {client secure id, drive} and each 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   308
InitialiseGetProxyBackupDataL() call is followed after that by a set of CSqlBurCallback::GetBackupDataSectionL() calls,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   309
made from the backup and restore client dll.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   310
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   311
During GetBackupDataSectionL() calls the CSqlBurCallback object will read the content of the databases from the list,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   312
retrieved from the MSqlSrvBurInterface::GetBackUpListL() call and send the content to the backup and restore server.     
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   313
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   314
@see MSqlSrvBurInterface
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   315
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   316
@see CSqlBurCallback::GetBackupDataSectionL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   317
@see CSqlServer::GetBackUpListL() 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   318
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   319
@param aSid the UID of the application to backup
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   320
@param aDrive the drive to be backed up
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   321
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   322
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   323
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   324
void CSqlBurCallback::InitialiseGetProxyBackupDataL(TSecureId aSid, TDriveNumber aDrive)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   325
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   326
	SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_INITIALIZEGETPROXYBACKUPDATAL, "0x%X;CSqlBurCallback::InitialiseGetProxyBackupDataL;aSid=0x%X;aDrive=%d", (TUint)this, (TUint)aSid.iId, (TInt)aDrive));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   327
	BackupCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   328
	iInterface.GetBackUpListL(aSid, aDrive, iFileList);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   329
	iFileIndex = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   330
	iState = EBackupNoFileOpen;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   331
	iBackupError = KErrNone;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   332
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   333
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   334
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   335
This is supposed to allow the B&R framework to know in advance how much
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   336
data is coming - but unfortunately there is no way to know this
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   337
at this stage since we don't even know yet what SID is being processed
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   338
So we just answer some number to make the BUE happy. It doesn't
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   339
actually rely on this number so there is no risk - the aFinishedFlag
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   340
indicates the end of data, not the value returned here. It is
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   341
supposed to allow the BUE to optimise its behaviour by know up front
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   342
the data volume.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   343
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   344
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   345
@see CSqlBurCallback::InitialiseGetProxyBackupDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   346
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   347
@param aDrive Unused parameter (the drive number is logged in OST builds).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   348
@return an arbitrary number (1024 at the moment)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   349
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   350
TUint CSqlBurCallback::GetExpectedDataSize(TDriveNumber aDrive)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   351
	{
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   352
	UNUSED_ARG(aDrive);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   353
	// we have no idea at this point - we even don't know who is to be backed up yet
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   354
	const TUint KArbitraryNumber = 1024;
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   355
	SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETEXPECTEDDATASIZE, "0x%X;CSqlBurCallback::GetExpectedDataSize;aDrive=%d;rc=%u", (TUint)this, (TInt)aDrive, KArbitraryNumber));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   356
	return KArbitraryNumber;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   357
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   358
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   359
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   360
This is the backup state machine
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   361
Because the data has to be sent back in sections and the various
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   362
components of the dataflow may straddle chunks, we have to keep
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   363
track of where we are between each transfer - a state machine is
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   364
the simplest and most understandable implementation.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   365
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   366
Please note how the function processes the errors occuring during the backup.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   367
If an error occurs, the error is not propagated back to the B&R server immediatelly.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   368
The error is stored in iBurError data member and is reported at the end of the backup process.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   369
The reason for such unusual error reporting poicy is: the SQL server performs full backup of possibly more
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   370
than one database file. If an error occurs during the backup of the first file for example, the backup
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   371
process should not stop at that point. All files will be processed and then at the end, the error will be reproted.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   372
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   373
In details, the function runs a state machine, where:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   374
 - every file in the list retrieved in InitialiseGetProxyBackupDataL() is opened;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   375
 - the file is read and 32-bit checksum over the file data - calculated;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   376
 - a file backup header is prepared, including there the file size, file name, file name length, protocol verison number
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   377
   and the checksum. The header is sent to the backup restore server;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   378
 - the file data is read and sent to the backup and restore server;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   379
 - during the described above sequence no leave ever occurs. The error that occurs during the file processing,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   380
   is stored into a data member of CSqlBurCallback class. At the end, after the last file in the list is processed,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   381
   the backup and restore server will get a notification (via a User::Leave() call) regarding the error;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   382
   The used error reporting policy allows all files to be process without interrupting the backup process.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   383
   For example, if there are 5 files to be sent to the backup and restore server, an error that occurs during the 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   384
   processing of file #3, won't prevent files #4 and #5 from being sent for backup.       
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   385
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   386
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   387
@see CSqlBurCallback::InitialiseGetProxyBackupDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   388
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   389
@param aBuffer Output parameter, the buffer where the data will be put to be passed back
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   390
@param aFinishedFlag Set to true when all data has been submitted for backup
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   391
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   392
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   393
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   394
void CSqlBurCallback::GetBackupDataSectionL(TPtr8& aBuffer, TBool& aFinishedFlag)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   395
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   396
	// don't assume they set it to false
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   397
	aFinishedFlag=EFalse;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   398
	// any files to backup
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   399
	if(iFileList.Count()==0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   400
		{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   401
		// nothing to backup
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   402
		SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL1, "0x%X;CSqlBurCallback::GetBackupDataSectionL;file count is 0", (TUint)this));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   403
		aFinishedFlag = ETrue;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   404
		BackupCleanup();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   405
		return;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   406
		}
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   407
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   408
	// run the state machine
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   409
	for(TInt bufFreeSpace=aBuffer.MaxSize()-aBuffer.Size(); bufFreeSpace>0; bufFreeSpace=aBuffer.MaxSize()-aBuffer.Size())
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   410
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   411
		switch(iState)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   412
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   413
			case EBackupNoFileOpen: // open a file for processing
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   414
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   415
				if(iFileIndex>=iFileList.Count())
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   416
					{// all files have been processed - send the finished flag
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   417
					SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL2, "0x%X;CSqlBurCallback::GetBackupDataSectionL;all files processed;iBackupError=%d", (TUint)this, iBackupError));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   418
					aFinishedFlag = ETrue;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   419
					BackupCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   420
					__SQLLEAVE_IF_ERROR(iBackupError);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   421
					return;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   422
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   423
				// open the database file to send
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   424
				TPtrC fname = iFileList[iFileIndex]->Des();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   425
				TInt err = iFile.Open(iInterface.Fs(), fname, EFileRead | EFileShareExclusive);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   426
				SQL_TRACE_BUR(OstTraceExt5(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL3, "0x%X;CSqlBurCallback::GetBackupDataSectionL;BEGIN;fname=%S;iFileIndex=%d;iFile.SubSessionHandle()=0x%X;err=%d", (TUint)this, __SQLPRNSTR(fname), iFileIndex, (TUint)iFile.SubSessionHandle(), err));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   427
				if(KErrNone != err)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   428
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   429
					// there's nothing we can do if we can't open the file so we just skip it
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   430
					SetBackupError(err);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   431
					++iFileIndex;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   432
					break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   433
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   434
				iState=EBackupOpenNothingSent;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   435
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   436
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   437
			case EBackupOpenNothingSent: // nothing sent (so far) for this file - send the header info
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   438
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   439
				TInt64 fileSize;
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   440
				TInt err = iFile.Size(fileSize);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   441
				if(KErrNone != err)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   442
					{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   443
					SetBackupError(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   444
					iState = EBackupEndOfFile;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   445
					break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   446
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   447
				
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   448
				TUint64 checksum64 = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   449
				err = CheckSum(iFile, checksum64);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   450
				SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL4, "0x%X;CSqlBurCallback::GetBackupDataSectionL;CheckSum();iFileIndex=%d;err=%d", (TUint)this, iFileIndex, err));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   451
				if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   452
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   453
					//An error occured while reading the file (or there was not enough memory for the read buffer)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   454
					SetBackupError(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   455
					iState = EBackupEndOfFile;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   456
					break;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   457
					}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   458
				// Only grab last 4 bytes of the checksum - enough to be satisfied that the backup and restore worked ok
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   459
				TUint32 checksum32 = checksum64 & KMaxTUint32;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   460
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   461
                // build the header - this is an instance member because it
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   462
                // has to persist over multiple calls to this method
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   463
				TPtrC fname = iFileList[iFileIndex]->Des();
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   464
				iBuffer.Format(_L("%8x%8x%4x%16lx%8x%S"),
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   465
					checksum32,					// %8x
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   466
					KSqlBurMagicNum,			// %8x
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   467
					KSqlBurHeaderVersion,		// %4x
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   468
					fileSize,					// %16lx
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   469
					fname.Length(),				// %8x
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   470
					&fname);					// %S
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   471
				SQL_TRACE_BUR(OstTraceExt4(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL5, "0x%X;CSqlBackupClient::GetBackupDataSectionL;fileName=%S;hdrPtr=|%S|;fileSize=%lld", (TUint)this, __SQLPRNSTR(fname), __SQLPRNSTR(iBuffer), fileSize));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   472
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   473
				// we need it to look like an 8bit buffer
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   474
				TPtr8 hdrPtr8((TUint8*)iBuffer.Ptr(), iBuffer.Size(), iBuffer.Size());
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   475
							
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   476
				TInt len = Min(hdrPtr8.Size(), bufFreeSpace);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   477
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   478
				// append the header to the buffer (only till it's full)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   479
				aBuffer.Append(hdrPtr8.Ptr(), len);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   480
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   481
				// decide what needs to happen next
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   482
				// if complete then we need data, otherwise we need to put
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   483
				// the rest of the header in the next chunk
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   484
				if(hdrPtr8.Size() <= bufFreeSpace)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   485
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   486
					iState = EBackupOpenAllHeaderSent;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   487
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   488
				else
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   489
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   490
					// we need to keep track of how much of the header has
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   491
					// been sent so that we only send the reminder on the next
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   492
					// iteration
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   493
					iHeaderSent = len;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   494
					iState = EBackupOpenPartHeaderSent;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   495
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   496
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   497
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   498
			case EBackupOpenPartHeaderSent: // need to send the rest of the header
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   499
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   500
				// get back the header - this is already loaded with the necessary info
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   501
				// from the previous state we were in - EBackupOpenNothingSent
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   502
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   503
				// we need it to look like an 8bit buffer
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   504
				TPtr8 hdrPtr8((TUint8*)iBuffer.Ptr(), iBuffer.Size(), iBuffer.Size());
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   505
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   506
				// how many bytes have we yet to send?
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   507
				TInt bytesRemaining = hdrPtr8.Size() - iHeaderSent;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   508
				TInt len = Min(bytesRemaining, bufFreeSpace);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   509
				aBuffer.Append(hdrPtr8.Ptr() + iHeaderSent, len);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   510
				
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   511
				if(bytesRemaining <= bufFreeSpace)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   512
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   513
					iHeaderSent = 0; // ready for next header
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   514
					iState = EBackupOpenAllHeaderSent;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   515
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   516
				else
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   517
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   518
					iHeaderSent += len; // ready to do round again
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   519
					//iState=EBackupOpenPartHeaderSent; same state as now!
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   520
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   521
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   522
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   523
			case EBackupOpenAllHeaderSent: // need to send some data
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   524
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   525
				TPtr8 ptr((TUint8*)aBuffer.Ptr() + aBuffer.Size(), 0, bufFreeSpace);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   526
				TInt err = iFile.Read(ptr);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   527
				if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   528
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   529
					//An error occured while reading the file 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   530
					SetBackupError(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   531
					iState = EBackupEndOfFile;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   532
					SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL6, "0x%X;CSqlBurCallback::GetBackupDataSectionL;File read;iFileIndex=%d;err=%d", (TUint)this, iFileIndex, err));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   533
					break;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   534
					}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   535
				TInt bytesRead = ptr.Size();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   536
				aBuffer.SetLength(aBuffer.Size() + bytesRead);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   537
				// EOF
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   538
				if(bytesRead == 0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   539
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   540
					iState = EBackupEndOfFile;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   541
					break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   542
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   543
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   544
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   545
			case EBackupEndOfFile:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   546
				{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   547
				SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_GETBACKUPDATASECTIONL7, "0x%X;CSqlBurCallback::GetBackupDataSectionL;END;iFile.SubSessionHandle()=0x%X;iFileIndex=%d", (TUint)this, (TUint)iFile.SubSessionHandle(), iFileIndex));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   548
				iFile.Close();
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   549
				++iFileIndex; // move on to next file
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   550
				iState = EBackupNoFileOpen; // go round again
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   551
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   552
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   553
			default:
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   554
				__ASSERT_DEBUG(EFalse, __SQLPANIC(ESqlPanicInternalError));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   555
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   556
			}//end of the "switch" statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   557
		}//end of the "for" statement
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   558
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   559
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   560
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   561
/////////////////////////////////////       Full restore   /////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   562
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   563
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   564
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   565
Called when the BUE wants to start sending data to us.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   566
Creates the folder (if the folder does not exist) where the temporary files will be created during the restore process.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   567
Deletes all files from the restore folder.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   568
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   569
The restore is initiated by a notification received in CSqlBurEventMonitor::RunL() method.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   570
InitialiseRestoreProxyBaseDataL() is called once per {client secure id, drive} and each 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   571
InitialiseRestoreProxyBaseDataLL() call is followed after that by a set of CSqlBurCallback::RestoreBaseDataSectionL() 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   572
calls, made from the backup and restore client dll.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   573
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   574
During RestoreBaseDataSectionLL() calls the CSqlBurCallback object will receive data from the backup and resore server.     
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   575
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   576
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   577
@see CSqlBurCallback::RestoreBaseDataSectionL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   578
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   579
@param aSid the UID of the application that is to be restored. Not used (only logged in OST builds).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   580
@param aDrive the drive to restore.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   581
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   582
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   583
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   584
void CSqlBurCallback::InitialiseRestoreProxyBaseDataL(TSecureId aSid, TDriveNumber aDrive)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   585
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   586
	UNUSED_ARG(aSid);
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   587
	UNUSED_ARG(aDrive);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   588
	SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_INITIALIZERESTOREPROXYBASEDATAL, "0x%X;CSqlBurCallback::InitialiseRestoreProxyBaseDataL;aSid=0x%X;aDrive=%d", (TUint)this, (TUint)aSid.iId, (TInt)aDrive));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   589
	iBuffer.Zero();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   590
	iState = ERestoreExpectChecksum;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   591
	iRestoreDrive = aDrive;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   592
	iRestoreId = aSid;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   593
	//Create the directory for the temporary files created during the restore process.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   594
	TFileName privatePath;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   595
	__SQLLEAVE_IF_ERROR(iInterface.Fs().PrivatePath(privatePath));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   596
	TDriveUnit driveUnit(iRestoreDrive);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   597
	TDriveName driveName = driveUnit.Name();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   598
	privatePath.Insert(0, driveName);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   599
	__SQLLEAVE_IF_ERROR(iParse.Set(KSqlBurRestoreDir, &privatePath, 0));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   600
	iRestoreDir.Copy(iParse.FullName());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   601
	iRestoreDir.Append(KPathDelimiter);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   602
	TInt err = iInterface.Fs().MkDirAll(iRestoreDir);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   603
	if(err != KErrAlreadyExists)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   604
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   605
		__SQLLEAVE_IF_ERROR(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   606
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   607
	//Cleanup the restore directory
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   608
	err = RestoreCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   609
	if(err != KErrNotFound)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   610
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   611
		__SQLLEAVE_IF_ERROR(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   612
		}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   613
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   614
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   615
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   616
This is called by BUE when the restore has completed.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   617
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   618
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   619
@see CSqlBurCallback::InitialiseRestoreProxyBaseDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   620
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   621
@param aDrive the drive that is being restored. Not used (only logged in OST builds).
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   622
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   623
void CSqlBurCallback::RestoreComplete(TDriveNumber aDrive)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   624
	{
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   625
	UNUSED_ARG(aDrive);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   626
	SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTORECOMPLETE, "0x%X;CSqlBurCallback::RestoreComplete;aDrive=%d", (TUint)this, (TInt)aDrive));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   627
	iRestoreDrive = TDriveNumber(-1);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   628
	iRestoreId = TSecureId(KNullUid);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   629
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   630
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   631
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   632
This is repeatedly called by the BUE to send us chunks of restore data (for the current SID)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   633
Becuase the data is spread over chunks we need to manage the state across mutiple calls
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   634
to this method so we use a state machine.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   635
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   636
The function runs the state machine and for each file block detected in the coming data, the function does:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   637
 - creates a temporary file in the restore directory (created by InitialiseRestoreProxyBaseDataL());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   638
 - stores the file data in the created temporary file;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   639
 - During the 2 steps descirbed above, if an error occurs, that erro will be reproted to the backup and restore
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   640
   server (via a User::Leave() call);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   641
 - When all data is received and stored in temporary files in the restore directory, 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   642
   for each received file the function will:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   643
   = move the original database file to the restore directory with a ".bak" extension added to the file name;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   644
   = move the temporary file, which has the same name as the original database file, to the location of the
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   645
     original database file - the SQL server private data cage;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   646
   = delete the file with the ".bak" extension;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   647
   The three steps described above are implemented as "all or none" operation - if an error occurs during step (2),
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   648
   the content of the original database file will be restored from the file with the ".bak" extension.   
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   649
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   650
@see CSqlBurEventMonitor::RunL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   651
@see CSqlBurCallback::InitialiseRestoreProxyBaseDataL()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   652
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   653
@param aInBuffer Buffer with data to be restored
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   654
@param aFinishedFlag Set when there is not more data to restore
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   655
@leave  KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   656
                      Note that the function may also leave with some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   657
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   658
void CSqlBurCallback::RestoreBaseDataSectionL(TDesC8& aInBuffer, TBool aFinishedFlag)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   659
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   660
	// used to walk the buffer
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   661
	// got a new buffer - because each time this method is called, we have a
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   662
	// fresh chunk of data
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   663
	TInt inBufferPos = 0;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   664
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   665
	// to mark when the state machine is through
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   666
	TBool done = EFalse;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   667
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   668
	// check whether this is an empty restore
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   669
	if(aFinishedFlag && aInBuffer.Size() == 0)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   670
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   671
		return;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   672
		}
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   673
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   674
	TInt iterations = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   675
	
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   676
	// run the state machine
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   677
	do
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   678
		{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   679
		// how many bytes are there available in the buffer for processing?
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   680
		TInt bytesAvailable = aInBuffer.Size() - inBufferPos;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   681
		// the reason why we are testing finishedFlag is because we must
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   682
		// make sure we re-enter the machine to do the tidyup
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   683
		if(bytesAvailable <= 0 && !aFinishedFlag)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   684
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   685
			// ran out of data in the chunk
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   686
			// so we return and wait for more data to arrive
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   687
			return;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   688
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   689
		switch(iState)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   690
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   691
			case ERestoreExpectChecksum: // 16 bytes (the header is UTF16 encoded, 8 unicode characters for the checksum)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   692
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   693
				const TInt KCheckSumStrLen = 8;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   694
				CopyBufData(aInBuffer, inBufferPos, iBuffer, KCheckSumStrLen);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   695
				if(iBuffer.Length() == KCheckSumStrLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   696
					{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   697
					iChecksum = ::GetNumUint32L(iBuffer);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   698
					iState = ERestoreExpectOldFileSize;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   699
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   700
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   701
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   702
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   703
			case ERestoreExpectOldFileSize: // 16 bytes (the header is UTF16 encoded, 8 unicode characters for 32-bit old file size)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   704
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   705
				const TInt KOldFileSizeStrLen = 8;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   706
				CopyBufData(aInBuffer, inBufferPos, iBuffer, KOldFileSizeStrLen);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   707
				if(iBuffer.Length() == KOldFileSizeStrLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   708
					{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   709
					TUint32 oldFileSize = ::GetNumUint32L(iBuffer);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   710
					if(oldFileSize == KSqlBurMagicNum)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   711
						{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   712
						iState = ERestoreExpectVersion;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   713
						}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   714
					else
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   715
						{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   716
						iFileSize = oldFileSize;	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   717
						iState = ERestoreExpectFileNameSize;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   718
						}
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   719
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   720
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   721
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   722
				}	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   723
			case ERestoreExpectVersion:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   724
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   725
				const TInt KVersionStrLen = 4;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   726
				CopyBufData(aInBuffer, inBufferPos, iBuffer, KVersionStrLen);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   727
				if(iBuffer.Length() == KVersionStrLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   728
					{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   729
					//Ignore the version: ::GetNumUint32L(iBuffer);	
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   730
					//At this stage we know that the version is 2+
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   731
					iState = ERestoreExpectFileSize;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   732
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   733
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   734
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   735
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   736
			case ERestoreExpectFileSize:
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   737
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   738
				const TInt KFileSizeStrLen = 16;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   739
				CopyBufData(aInBuffer, inBufferPos, iBuffer, KFileSizeStrLen);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   740
				if(iBuffer.Length() == KFileSizeStrLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   741
					{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   742
					iFileSize = GetNumInt64L(iBuffer);	
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   743
					iState = ERestoreExpectFileNameSize;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   744
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   745
					}
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   746
				SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL1, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;iFileSize=%lld", (TUint)this, iFileSize));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   747
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   748
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   749
			case ERestoreExpectFileNameSize: // the size of the file name to restore
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   750
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   751
				const TInt KFileNameLenStrLen = 8;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   752
				CopyBufData(aInBuffer, inBufferPos, iBuffer, KFileNameLenStrLen);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   753
				if(iBuffer.Length() == KFileNameLenStrLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   754
					{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   755
					iFileNameSize = GetNumUint32L(iBuffer);		
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   756
					iState = ERestoreExpectFileName;
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   757
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   758
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   759
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   760
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   761
			case ERestoreExpectFileName:  // the name of the file to restore
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   762
				{
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   763
				CopyBufData(aInBuffer, inBufferPos, iBuffer, iFileNameSize);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   764
				SQL_TRACE_BUR(OstTraceExt4(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL2, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;BEGIN;iBuffer=%S;iBuffer.Length()=%d;iFileNameSize=%d", (TUint)this, __SQLPRNSTR(iBuffer), iBuffer.Length(), iFileNameSize));
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   765
				if(iBuffer.Length() == iFileNameSize)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   766
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   767
					iState = ERestoreExpectData;
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   768
					TParse parse;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   769
					__SQLLEAVE_IF_ERROR(parse.Set(iBuffer, 0, 0));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   770
					__SQLLEAVE_IF_ERROR(iParse.Set(parse.NameAndExt(), &iRestoreDir, 0));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   771
					TPtrC fname(iParse.FullName());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   772
					//The database is restored first to a temporary file, in the restore folder, on the same drive.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   773
					__SQLLEAVE_IF_ERROR(iFile.Replace(iInterface.Fs(), fname, EFileWrite | EFileShareExclusive));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   774
					SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL3, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;fname=%S;iFile.SubSessionHandle()=0x%X", (TUint)this, __SQLPRNSTR(fname), (TUint)iFile.SubSessionHandle()));
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   775
					iBuffer.Zero();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   776
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   777
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   778
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   779
			case ERestoreExpectData: // now for the data
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   780
				{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   781
				TInt len = Min((aInBuffer.Size() - inBufferPos), iFileSize);
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   782
				TInt err = iFile.Write(aInBuffer.Mid(inBufferPos, len));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   783
				if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   784
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   785
					(void)RestoreCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   786
					__SQLLEAVE(err);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   787
					}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   788
				inBufferPos += len;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   789
				iFileSize -= len;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   790
				if(iFileSize == 0)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   791
					{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   792
					iState = ERestoreComplete;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   793
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   794
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   795
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   796
			case ERestoreComplete: // file completely restored
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   797
				{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   798
				TUint64 checkSum64 = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   799
			    TInt restoreErr = iFile.Flush();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   800
				if(restoreErr == KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   801
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   802
					// calculate the checksum
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   803
					restoreErr = CheckSum(iFile, checkSum64);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   804
					}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   805
				iFile.Close();
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   806
				if(restoreErr != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   807
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   808
					(void)RestoreCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   809
					__SQLLEAVE(restoreErr);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   810
					}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   811
				SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL4, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;END;iFile.SubSessionHandle()=0x%X", (TUint)this, (TUint)iFile.SubSessionHandle()));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   812
				TUint32 checkSum32 = checkSum64 & KMaxTUint32;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   813
                if(checkSum32 != iChecksum)
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   814
                    {
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   815
					(void)RestoreCleanup();
15
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   816
                    __SQLLEAVE(KErrCorrupt);
3eacc0623088 Revision: 201015
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   817
                    }
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   818
				if((aInBuffer.Size() - inBufferPos) > 0)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   819
					{//There are bytes to be consumed in the input buffer
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   820
					iState = ERestoreExpectChecksum;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   821
					break;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   822
					}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   823
				SQL_TRACE_BUR(OstTrace1(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL5, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;aFinishedFlag=ETrue", (TUint)this));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   824
				//End of data. We have all data restored in the restore folder.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   825
				//The final step of the "restoring files" process consists of the following sub-steps:
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   826
				// - Rename the database file to be restored to a file with ".bak" extension
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   827
				// - Rename the file with the restored data to the database file
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   828
				// - Delete the file with ".bak" extension
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   829
				//Do not leave during the restore process! Restore as much files as possible.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   830
				//The only excpetion is TParse::Set() - if it fails it is a fatal error, the
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   831
				//restored file path cannot be constructed.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   832
				__ASSERT_DEBUG(iRestoreDrive != TDriveNumber(-1), __SQLPANIC(ESqlPanicInternalError));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   833
				__ASSERT_DEBUG(iRestoreId != TSecureId(KNullUid), __SQLPANIC(ESqlPanicInternalError));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   834
				//Include the aUid and the "*" mask
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   835
				TUidName uidName = (static_cast <TUid> (iRestoreId)).Name();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   836
				TBuf<KMaxUidName + sizeof(KSqlBurAllFiles)> fileNameMask(uidName);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   837
				fileNameMask.Append(KSqlBurAllFiles);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   838
				__SQLLEAVE_IF_ERROR(iParse.Set(fileNameMask, &iRestoreDir, 0));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   839
				CDir* dir = NULL;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   840
				TPtrC searchPattern(iParse.FullName());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   841
				SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL55, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;search pattern=%S", (TUint)this, __SQLPRNSTR(searchPattern)));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   842
				restoreErr = iInterface.Fs().GetDir(searchPattern, KEntryAttNormal, ESortNone, dir);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   843
				if(restoreErr == KErrNone)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   844
					{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   845
					SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL6, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;restored files=%d", (TUint)this, dir->Count()));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   846
					for(TInt i=0;i<dir->Count();++i)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   847
						{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   848
						const TEntry& entry = (*dir)[i];
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   849
						__SQLLEAVE_IF_ERROR(iParse.Set(entry.iName, &iRestoreDir, 0));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   850
						TFileName dbName(iParse.FullName());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   851
						SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL7, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;restored file=%S", (TUint)this, __SQLPRNSTR(dbName)));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   852
						TInt pos = dbName.Find(KSqlBurRestoreDir);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   853
						__ASSERT_DEBUG(pos >= 0, __SQLPANIC(ESqlPanicInternalError));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   854
						dbName.Delete(pos, KSqlBurRestoreDir().Length() + 1);//"+1" for the path delimitier
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   855
						SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL8, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;database=%S", (TUint)this, __SQLPRNSTR(dbName)));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   856
						TFileName bakDbName(iParse.FullName());
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   857
						bakDbName.Append(KSqlBurBackupExt);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   858
						SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL9, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;backup file=%S", (TUint)this, __SQLPRNSTR(dbName)));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   859
						//Now, dbName contains the original database (full path), iParse - the restored file,
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   860
						//bakDbName - backup file name
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   861
						TInt err = iInterface.Fs().Rename(dbName, bakDbName);
40
b8bdbc8f59c7 201031_02
hgs
parents: 31
diff changeset
   862
						if(err == KErrNone || err == KErrNotFound)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   863
							{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   864
							err = iInterface.Fs().Rename(iParse.FullName(), dbName);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   865
							if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   866
								{//commit: delete the backup database file
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   867
								SQL_TRACE_BUR(OstTraceExt2(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL10, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;Commit;file=%S", (TUint)this, __SQLPRNSTR(dbName)));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   868
								(void)iInterface.Fs().Delete(bakDbName);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   869
								}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   870
							else
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   871
								{//rollback: restore the original database file
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   872
								err = iInterface.Fs().Rename(bakDbName, dbName);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   873
								SQL_TRACE_BUR(OstTraceExt3(TRACE_INTERNALS, CSQLBACKUPCLIENT_RESTOREBASEDATASECTONL11, "0x%X;CSqlBurCallback::RestoreBaseDataSectionL;Rollback;file=%S;err=%d", (TUint)this, __SQLPRNSTR(dbName), err));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   874
								}
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
   875
							}
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   876
						if(err != KErrNone && err != KErrNotFound)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   877
							{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   878
							if(restoreErr == KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   879
								{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   880
								restoreErr = err;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   881
								}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   882
							}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   883
						}//for(...)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   884
					delete dir;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   885
					}//iInterface.Fs().GetDir(...)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   886
				done = ETrue;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   887
				(void)RestoreCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   888
				if(restoreErr != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   889
					{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   890
					__SQLLEAVE(restoreErr);
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   891
					}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   892
				break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   893
				}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   894
			default:
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   895
				__ASSERT_DEBUG(EFalse, __SQLPANIC(ESqlPanicInternalError));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   896
				break;
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   897
			}//switch(...)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   898
		if((aInBuffer.Size() - inBufferPos) == bytesAvailable)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   899
			{//No bytes have been consumed from the buffer. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   900
			if(++iterations > 1 && !done)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   901
				{//This is the second iteration in the loop where no bytes have been consumed from the input buffer. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   902
				 //But the "done" flag is still false. Corrupted archive.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   903
				__SQLLEAVE(KErrCorrupt);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   904
				}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   905
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   906
		} while(!done);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   907
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   908
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   909
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   910
The operation was terminated - we should tidyup here (as best we can)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   911
Backup: close the file, free the allocated memory for the file names.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   912
Restore: since the final restore step is a non-leaving one, nothing special needs to be done here - 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   913
RestoreCleanup() is called to close the file and delete if there are any temporary files left.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   914
*/	
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   915
void CSqlBurCallback::TerminateMultiStageOperation()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   916
	{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   917
	BackupCleanup();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   918
	(void)RestoreCleanup();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   919
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   920
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   921
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   922
We do our own checksumming so we don't need this
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   923
@return the checksum
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   924
@param aDrive the drive affected (unused)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   925
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   926
TUint CSqlBurCallback::GetDataChecksum(TDriveNumber /* aDrive */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   927
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   928
	// not required - not implemented
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   929
	const TUint KArbitraryNumber = 1024;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   930
	return KArbitraryNumber;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   931
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   932
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   933
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   934
///////////////////////////     Incremental backup/restore      ////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   935
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   936
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   937
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   938
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   939
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   940
void CSqlBurCallback::GetSnapshotDataL(TDriveNumber /* aDrive */, TPtr8& /* aBuffer */, TBool& /* aFinishedFlag */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   941
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   942
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   943
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   944
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   945
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   946
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   947
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   948
void CSqlBurCallback::InitialiseGetBackupDataL(TDriveNumber /* aDrive */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   949
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   950
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   951
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   952
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   953
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   954
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   955
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   956
void CSqlBurCallback::InitialiseRestoreBaseDataL(TDriveNumber /* aDrive */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   957
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   958
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   959
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   960
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   961
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   962
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   963
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   964
void CSqlBurCallback::InitialiseRestoreIncrementDataL(TDriveNumber /* aDrive */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   965
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   966
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   967
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   968
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   969
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   970
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   971
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   972
void CSqlBurCallback::RestoreIncrementDataSectionL(TDesC8& /* aBuffer */, TBool /* aFinishedFlag */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   973
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   974
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   975
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   976
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   977
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   978
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   979
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   980
void CSqlBurCallback::AllSnapshotsSuppliedL()
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   981
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   982
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   983
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   984
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   985
We don't support incremental backup
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   986
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   987
void CSqlBurCallback::ReceiveSnapshotDataL(TDriveNumber /* aDrive */, TDesC8& /* aBuffer */, TBool /* aFinishedFlag */)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   988
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   989
	__SQLLEAVE(KErrNotSupported);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   990
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   991
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   992
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   993
///////////////////////////     Helper functions      //////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   994
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   995
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   996
/** 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   997
A simple checksumming algorithm to allow a degree
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   998
of trust that the backup and restore worked.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
   999
Note the file pointer will be back at the start when the function call completes successfully.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1000
In case of an error, the position of the file pointer is undetermined.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1001
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1002
@param aOpenFile Already opened database file on which the checksum is calculated.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1003
@param aCheckSum Output parameter. The checksum is returned in this parameter.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1004
@return KErrNoMemory, an out of memory condition has occurred;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1005
                      Note that the function may also return some other system-wide error codes.
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1006
*/
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1007
TInt CSqlBurCallback::CheckSum(const RFile64& aOpenFile, TUint64& aCheckSum) const
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1008
	{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1009
	// scoot through the database file building the checksum
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1010
	aCheckSum = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1011
	TInt64 seekPos = 0; // rewind first
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1012
	TInt err = aOpenFile.Seek(ESeekStart, seekPos);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1013
	if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1014
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1015
		return err;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1016
		}
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1017
	const TUint KCheckSumBlockSize = 4 * 1024;
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1018
	HBufC8* buf = HBufC8::New(KCheckSumBlockSize);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1019
	if(!buf)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1020
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1021
		return KErrNoMemory;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1022
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1023
	TPtr8 ptr = buf->Des();
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1024
	for(;;)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1025
		{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1026
		err = aOpenFile.Read(ptr);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1027
		if(err != KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1028
			{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1029
			delete buf;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1030
			return err;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1031
			}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1032
		TInt len = ptr.Length();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1033
		if(len == 0)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1034
			{
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1035
			break;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1036
			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1037
		// calculate the checksum
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1038
		for(TInt i=0;i<len;++i)
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1039
			{
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1040
			aCheckSum = (aCheckSum << 1) | (aCheckSum >> 63);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1041
			aCheckSum += ptr[i];
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1042
 			}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1043
		};		
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1044
	delete buf;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1045
	// restore file position
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1046
	seekPos = 0;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1047
	err = aOpenFile.Seek(ESeekStart,seekPos);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1048
	return err;
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1049
	}
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1050
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1051
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1052
Reads the content of aInBuf from position aInBufReadPos and stores the data into aOutBuf.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1053
aDataLen is the length of the data. If the input buffer does not contain all the data, then only the
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1054
available data will be copied to the output buffer.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1055
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1056
How the function works. It is called during the restore process and aInBuf parameter contains a block of raw
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1057
data sent by the B&R server. The calling function, RestoreBaseDataSectionL(), uses a state 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1058
machine to processes the incoming data. At particular moment RestoreBaseDataSectionL() will process the data header 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1059
and will have to read "aDataLen" 16-bit characters at position "aInBufReadPos". If there are "aDataLen" characters
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1060
at position "aInBufReadPos" and enough free space in "aOutBuf", CopyBufData() will copy all of them,  
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1061
otherwise CopyBufData() will copy as much characters as possible (in which case RestoreBaseDataSectionL() will
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1062
stay in the same state, waiting for more data from the B&R server).
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1063
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1064
@param aInBuf        8-bit buffer with input data
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1065
@param aInBufReadPos The position in the buffer from which the read operation starts. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1066
                     When the "buffer read" operatio completes, aInBufReadPos is updated with the 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1067
                     number of bytes read from the input buffer. 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1068
@param aOutBuf       16-bit output buffer. The data read from the input buffer is stored in the output buffer.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1069
@param aDataLen      How much bytes to be read from the input buffer. Note that if there is not enough
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1070
                     data in the input buffer, the function will read as much as possible from the input buffer.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1071
                     The aInBufReadPos in/out parameter will be updated with the actual number of bytes read.                     
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1072
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1073
void CSqlBurCallback::CopyBufData(const TDesC8& aInBuf, TInt& aInBufReadPos, TDes& aOutBuf, TInt aDataLen)
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1074
	{
31
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
  1075
    __ASSERT_DEBUG(aInBufReadPos >= 0, __SQLPANIC(ESqlPanicBadArgument));
ba1c4f4a893f 201025_02
hgs
parents: 17
diff changeset
  1076
    __ASSERT_DEBUG(aDataLen > 0, __SQLPANIC(ESqlPanicBadArgument));
0
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1077
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1078
	TInt needed = (aDataLen - aOutBuf.Length()) << K8to16bitShift;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1079
	TInt available = aInBuf.Size() - aInBufReadPos;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1080
	TInt len = Min(needed, available);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1081
	TPtrC8 ptr8 = aInBuf.Mid(aInBufReadPos, len);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1082
	aInBufReadPos += len;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1083
	
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1084
	len >>= K8to16bitShift;
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1085
	aOutBuf.Append((const TUint16*)ptr8.Ptr(), len);
08ec8eefde2f Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
  1086
	}
51
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1087
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1088
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1089
Cleans up the allocated during the backup resources - file handles, buffers allocated for the file names.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1090
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1091
void CSqlBurCallback::BackupCleanup()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1092
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1093
	for(TInt i=0;i<iFileList.Count();++i)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1094
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1095
		delete iFileList[i];
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1096
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1097
	iFileList.Close();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1098
	iFile.Close();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1099
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1100
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1101
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1102
Deletes created during the restore temporary files.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1103
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1104
TInt CSqlBurCallback::RestoreCleanup()
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1105
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1106
	if(iRestoreDir.Find(KSqlBurRestoreDir) < 0)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1107
		{//iRestoreDir is not initialized - that means RestoreCleanup() was called either from the
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1108
		 //destructor or from the TerminateMultistageOperation() during a backup.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1109
		return KErrNone;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1110
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1111
	iFile.Close();
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1112
	CFileMan* fm = NULL;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1113
	TRAPD(err, fm = CFileMan::NewL(iInterface.Fs()));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1114
	if(err == KErrNone)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1115
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1116
		TFileName allFiles;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1117
		allFiles.Copy(iRestoreDir);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1118
		allFiles.Append(KSqlBurAllFiles);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1119
		err = fm->Delete(allFiles);
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1120
		delete fm;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1121
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1122
	return err;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1123
	}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1124
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1125
/**
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1126
Stores the error occured during backup for furhter processing.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1127
Please note that the function asserts if the aError parameter is KErrNone.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1128
Call the function only with a real error.
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1129
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1130
@param aError The backup error to be stored 
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1131
*/
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1132
void CSqlBurCallback::SetBackupError(TInt aError)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1133
	{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1134
	__ASSERT_DEBUG(aError != KErrNone, __SQLPANIC(ESqlPanicBadArgument));
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1135
	if(aError != KErrNotFound && aError != KErrPathNotFound)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1136
		{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1137
		if(iBackupError == KErrNone || aError == KErrDiskFull || aError == KErrCorrupt)
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1138
			{
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1139
			iBackupError = aError;
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1140
			}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1141
		}
7d4490026038 201037_06
hgs
parents: 40
diff changeset
  1142
	}