backupandrestore/backupengine/inc/absession.h
changeset 0 d0791faffa3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/backupandrestore/backupengine/inc/absession.h	Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,154 @@
+/**
+* Copyright (c) 2004-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:
+* Declaration of CABSession class.
+* 
+*
+*/
+
+
+
+/**
+ @file
+*/
+#ifndef __ABSESSION_H__
+#define __ABSESSION_H__
+
+#include <e32std.h>
+#include "abserver.h"
+#include <connect/sbtypes.h>
+#include <connect/abclientserver.h>
+
+namespace conn
+	{
+	class CDataOwner;
+	
+	/** Constant definition for the watchdog timer */
+	const TTimeIntervalMicroSeconds32 KABCallbackWatchdogTimeout(200000000);
+	
+	class CABSession : public CSession2
+	/**
+    @internalComponent
+	@ingroup Server
+
+	A AB client Session.
+	*/
+		{
+		public:
+			virtual void CreateL();
+			static CABSession* NewL(TSecureId aSecureId);
+			
+			// Methods
+			void RestoreCompleteL(TDriveNumber aDriveNumber);
+			void AllSnapshotsSuppliedL();
+		    void GetExpectedDataSizeL(TDriveNumber aDriveNumber, TUint& aSize);
+		    void SupplyDataL(TDriveNumber aDriveNumber, TTransferDataType aTransferType, TDesC8& aBuffer,
+		                     TBool aLastSection, TBool aSuppressInitDataOwner, TSecureId aProxySID);
+		    void RequestDataL(TDriveNumber aDriveNumber, TTransferDataType aTransferType, TPtr8& aBuffer,
+		    				  TBool& aLastSection, TBool aSuppressInitDataOwner, TSecureId aProxySID);
+			void TerminateMultiStageOperationL();
+			TUint GetDataChecksumL(TDriveNumber aDrive);
+			static TInt ABSessionStaticWatchdogCaller(TAny* aWatchdoggingObject);
+			TInt WatchdogExpired();
+			TBool ConfirmedReadyForBUR() const;
+			TBool CallbackInterfaceAvailable() const;
+			void RestoreCompleteL();
+			void SetInvalid();
+			TBool Invalidated();
+
+		private:
+			CABSession(TSecureId aSecureId);
+			~CABSession();
+			void ConstructL();
+			inline CABServer& Server() const;
+			CDataOwner& DataOwnerL() const;
+			void ServiceL(const RMessage2& aMessage);
+			void TakeOwnershipOfIPCMessage(const RMessage2& aMessage);
+			void CleanupClientSendState();
+			
+			// Handle IPC messages
+			void HandleIPCBURModeInfoL(const RMessage2& aMessage);
+			void HandleIPCDoesPartialBURAffectMeL(const RMessage2& aMessage);
+			void HandleIPCConfirmReadyForBURL(const RMessage2& aMessage);
+			void HandleIPCPropagateLeaveL(const RMessage2& aMessage);
+			TInt HandleIPCGetDataSyncL(const RMessage2& aMessage);
+			TInt HandleIPCSendDataLengthL(const RMessage2& aMessage);
+			TInt HandleIPCClosingDownCallback();
+			
+			// Callback methods
+		    void MadeCallback();
+		    void ReturnFromCallback();
+		    void CheckCallbackAvailableL();
+			void MakeCallbackAllSnapshotsSuppliedL();
+			void MakeCallbackReceiveSnapshotDataL(TDriveNumber aDrive, TDesC8& aBuffer, TBool aLastSection);
+			TUint MakeCallbackGetExpectedDataSizeL(TDriveNumber aDrive);
+			void MakeCallbackGetSnapshotDataL(TDriveNumber aDrive, TPtr8& aBuffer, TBool& aFinished);
+			void MakeCallbackInitialiseGetBackupDataL(TDriveNumber aDrive);
+			void MakeCallbackGetBackupDataSectionL(TPtr8& aBuffer, TBool& aFinished);
+			void MakeCallbackInitialiseRestoreBaseDataL(TDriveNumber aDrive);
+			void MakeCallbackRestoreBaseDataSectionL(TDesC8& aBuffer, TBool aFinished);
+			void MakeCallbackInitialiseRestoreIncrementDataL(TDriveNumber aDrive);
+			void MakeCallbackRestoreIncrementDataSectionL(TDesC8& aBuffer, TBool aFinished);
+			void MakeCallbackRestoreCompleteL(TDriveNumber aDrive);
+			void MakeCallbackInitialiseGetProxyBackupDataL(TSecureId aSID, TDriveNumber aDrive);
+			void MakeCallbackInitialiseRestoreProxyBaseDataL(TSecureId aSID, TDriveNumber aDrive);
+			void MakeCallbackTerminateMultiStageOperationL();
+			TUint MakeCallbackGetDataChecksumL(TDriveNumber aDrive);
+
+		private:
+			/** Last message received from client.  Stored and used when 
+			the connection status changes. */
+			RMessage2 iMessage;
+			
+			/** The SecureId of the client that should be connecting to this session */
+			TSecureId iClientSID;
+			
+			/** Callback Timer used to determine whether a rogue client is attempting a denial of service */
+			CPeriodic* iCallbackWatchdog;
+
+		    CActiveSchedulerWait* iActiveSchedulerWait; /*!< Inner scheduler for blocking on active callback */
+		    
+		    /** The leave code that must persist so that leaves can be propagated from the abclient */
+		    TInt iABClientLeaveCode;
+		    
+		    /** Identifies the callback that is in progress. Used for validating multiple calls for a callback */
+		    TABCallbackCommands iCallbackInProgress;
+		    
+		    /** This flag records whether or not the client has finished sending data */
+		    TBool iReceiveFromClientFinished;
+		    
+		    /** Assign data to this TPtr so that it may be sent to the client */
+		    TPtrC8 iSendToClientBuffer;
+		    
+		    /** Function pointer to the handler function that */
+		    TCallBack iWatchdogHandler;
+		    
+		    /** Client has not responded - potentially allow some operations */
+		    TBool iMisbehavingClient;
+		    
+		    /** The drive that snapshot data has been supplied for */
+		    TDriveNumber iSuppliedSnapshotDriveNum;
+		    
+		    /** Flag to store whether or not client has called ConfirmReadyForBURL */
+		    TBool iConfirmedReadyForBUR;
+		    
+		    /** Flag to indicate whether this session is valid or not,invalid
+		     * session means this session is for a backup/restore event which is
+		     * already over, but not disconnect from the client
+		     */
+		    TBool iInvalid;
+		};
+
+	}
+#endif //__ABSESSION_H__