diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Server/SqlBur.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/sql/SRC/Server/SqlBur.h Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,140 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __SQLBUR_H__ +#define __SQLBUR_H__ + +#include +#include +#include +#include +#include // MactiveBackupDataClient +#include "SqlSrvBurInterface.h" + +using namespace conn; + +//----------------------------------------- +// CSqlBackupClient +//----------------------------------------- + +/** + This class is called by the Backup and Restore Framework + when a backup or restore is requested by the user + It implements the active proxy backup and restore as + defined in the MActiveBackupDataClient interface. + + @internalComponent +*/ + +// derives from the framework mixin MActiveBackupClient +class CSqlBackupClient : public CActive, public MActiveBackupDataClient + { + public: + static CSqlBackupClient *NewLC(MSqlSrvBurInterface *aBurInterface); + static CSqlBackupClient *NewL(MSqlSrvBurInterface *aBufInterface); + + ~CSqlBackupClient(); + + // AO implementations + void StartL(); + void NotifyChange(); + + // impl of virtuals from MActiveBackupDataClient + void AllSnapshotsSuppliedL(); + void ReceiveSnapshotDataL(TDriveNumber aDrive, TDesC8& aBuffer, TBool aLastSection); + TUint GetExpectedDataSize(TDriveNumber aDrive); + void GetSnapshotDataL(TDriveNumber aDrive, TPtr8& aBuffer, TBool& aFinished); + void InitialiseGetBackupDataL(TDriveNumber aDrive); + void GetBackupDataSectionL(TPtr8& aBuffer, TBool& aFinished); + void InitialiseRestoreBaseDataL(TDriveNumber aDrive); + void RestoreBaseDataSectionL(TDesC8& aBuffer, TBool aFinished); + void InitialiseRestoreIncrementDataL(TDriveNumber aDrive); + void RestoreIncrementDataSectionL(TDesC8& aBuffer, TBool aFinished); + void RestoreComplete(TDriveNumber aDrive); + void InitialiseGetProxyBackupDataL(TSecureId aSid, TDriveNumber aDrive); + void InitialiseRestoreProxyBaseDataL(TSecureId aSid, TDriveNumber aDrive); + void TerminateMultiStageOperation(); + TUint GetDataChecksum(TDriveNumber aDrive); + + // to validate successful BUR + TUint64 CheckSumL(const RFile64 &aOpenFile) const; + + // for debug + //void SetConsole(CConsoleBase *aConsole); + private: + CSqlBackupClient(MSqlSrvBurInterface *aInterface); + void ConstructL(); + + // active object methods + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + + // used to determine what the BUR status is and to respond as required + void TestBurStatusL(); + + // this is used to ask the SQL server for a list of databases to backup + // we ask the database server because the decision to backup is not + // only based on the UID but also the database backup flag stored in + // the database metadata - and we don't want to have to know how that + // is implemented + void GetBackupListL(TSecureId aSid); + void CopyBufData(const TDesC8& aInBuf, TInt& aInBufReadPos, TDes& aOutBuf, TInt aDataLen); + + private: + + // state machine for backup + enum + { + EBackupNoFileOpen=0, // not currently processing a file + EBackupOpenNothingSent, // file open and ready, but nothing sent yet + EBackupOpenPartHeaderSent, // part of the header is sent, but more remains + EBackupOpenAllHeaderSent, // all of the header is sent, ready to send the data + EBackupEndOfFile // all done, tidy up after backup + }; + + // state machine for restore + // this is more complicated because we are driven by the backup engine + // and have incomplete information most of the time + enum + { + ERestoreExpectChecksum=0, // checksum marks the start of the next file + ERestoreExpectOldFileSize, // the size of the file - backup file header version 0 + ERestoreExpectVersion, // backup header version + ERestoreExpectFileSize, // the size of the file, backup file header version 2+ + ERestoreExpectFileNameSize, // the size of the file name + ERestoreExpectFileName, // the name of the file to restore + ERestoreExpectData, // now for the data + ERestoreComplete // tidy up after restore + }; + + CActiveBackupClient *iActiveBackupClient; + RProperty iProperty; + MSqlSrvBurInterface *iInterface; // the SQL server + RArray iFileList; // which is populated by the SQL server + RFile64 iFile; + TInt iFileIndex; + TUint iState; + HBufC* iBuffer; // used for the header data + TInt iHeaderSent; // how many header bytes sent so far + TUint32 iChecksum; // used by restore + TInt64 iFileSize; // used by restore + TUint32 iFileNameSize; // used by restore + TBool iAnyData; // set to true if the restore actually sends any data to us + TSecureId iSid; // the sid being backed up/restored + + }; + +#endif // __SQLBUR_H__