--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothmgmt/btmgr/BTManServer/btmanserverburstatemachine.h Mon Mar 15 12:44:59 2010 +0200
@@ -0,0 +1,267 @@
+// Copyright (c) 2010 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:
+// Implements the state machine which drives backup and restore support for the
+// Bluetooth Manager server.
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#ifndef BTMANSERVERBURSTATEMACHINE_H
+#define BTMANSERVERBURSTATEMACHINE_H
+
+/**
+TBTBURState - records the state of the BUR manager.
+**/
+enum TBTBURState
+ {
+ EBTBURStateNormal, // Waiting for a BUR event
+
+ EBTBURStateBackupRequest, // Processing a backup request
+ EBTBURStateBackupOngoing, // Taking part in a backup operation
+ EBTBURStateBackupIgnore, // Not taking part in a backup operation (e.g. operation may not affect us)
+
+ EBTBURStateRestoreRequest, // Processing a restore request
+ EBTBURStateRestoreOngoing, // Taking part in a restore operation
+ EBTBURStateRestoreIgnore, // Not taking part in a restore operation (e.g. operation may not affect us)
+
+ EBTBURStateProcessRestoreFile, // Processing an available restore file.
+ EBTBURStateRestoreFileProcessingComplete, // Processing of restore file has completed and registry has been updated
+
+ EBTBURStateUnknown, // Used to indicate an invalid transition
+ };
+
+/**
+TBTBUREvent - Events which can cause transitions in the state of the BUR manager
+**/
+enum TBTBUREvent
+ {
+ // Events relating to P&S key changes from BUR engine
+ EBTBUREventUnset, // Unset notification event received from the Secure Backup Engine
+ EBTBUREventNormal, // Normal mode notification event received from the Secure Backup Engine
+ EBTBUREventBackup, // Backup notification event received from the Secure Backup Engine
+ EBTBUREventRestore, // Restore notification event received from the Secure Backup Engine
+
+ // Internally generated events
+ EBTBUREventBackupProceed, // BUR manager should proceed with backup operation
+ EBTBUREventBackupReject, // BUR manager should not proceed with backup operation
+ EBTBUREventRestoreProceed, // BUR manager should proceed with restore operation
+ EBTBUREventRestoreReject, // BUR manager should not proceed with restore operation
+ EBTBUREventProcessRestoreFile, // Request to process an available restore file
+ EBTBUREventProcessRestoreFileComplete, // Parsing of restore file has completed
+ EBTBUREventRestoreFileTransitionNormal, // Parsing of restore file has been completed, transition should be made to normal state.
+
+ EBTBUREventAbortStateAction, // A state action has encountered an error which requires an abort back to normal state.
+ };
+
+/**
+State handling mechanisms - these classes support the state machine used by the BUR manager.
+**/
+
+class CBTManServerBURMgr;
+class CBTManServerBURMgrStateAction;
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateFactory) : public CBase
+ {
+public:
+ static CBTManServerBURMgrStateFactory* NewL(CBTManServerBURMgr& aBURMgr);
+ ~CBTManServerBURMgrStateFactory();
+
+ inline TBTBURState GetCurrentState();
+ TInt TransitionState(TBTBUREvent aTransitionEvent);
+ void ExecuteAction();
+
+private:
+ CBTManServerBURMgrStateFactory(CBTManServerBURMgr& aBURMgr);
+ void ConstructL();
+
+ void ConstructStateMachineL();
+ CBTManServerBURMgrStateAction* ConstructStateLC(TBTBURState aState);
+
+private:
+ RPointerArray<CBTManServerBURMgrStateAction> iStateActions;
+ CBTManServerBURMgr& iBURMgr;
+ TBTBURState iState;
+
+ };
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateAction) : public CBase
+ {
+public:
+ ~CBTManServerBURMgrStateAction();
+
+ inline TBTBURState GetThisState();
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent)=0;
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr)=0;
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateAction(TBTBURState aState);
+
+protected:
+ TBTBURState iState;
+
+ };
+
+/**
+Normal state
+**/
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateNormal) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateNormal* NewLC();
+ ~CBTManServerBURMgrStateNormal();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+
+protected:
+ CBTManServerBURMgrStateNormal();
+
+ };
+
+/**
+Backup states
+**/
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateBackupRequest) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateBackupRequest* NewLC();
+ ~CBTManServerBURMgrStateBackupRequest();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateBackupRequest();
+
+ };
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateBackupOngoing) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateBackupOngoing* NewLC();
+ ~CBTManServerBURMgrStateBackupOngoing();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateBackupOngoing();
+
+ };
+
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateBackupIgnore) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateBackupIgnore* NewLC();
+ ~CBTManServerBURMgrStateBackupIgnore();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+
+protected:
+ CBTManServerBURMgrStateBackupIgnore();
+
+ };
+
+/**
+Restore states
+**/
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateRestoreRequest) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateRestoreRequest* NewLC();
+ ~CBTManServerBURMgrStateRestoreRequest();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateRestoreRequest();
+
+ };
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateRestoreOngoing) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateRestoreOngoing* NewLC();
+ ~CBTManServerBURMgrStateRestoreOngoing();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateRestoreOngoing();
+
+ };
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateRestoreIgnore) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateRestoreIgnore* NewLC();
+ ~CBTManServerBURMgrStateRestoreIgnore();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+
+protected:
+ CBTManServerBURMgrStateRestoreIgnore();
+
+ };
+
+/**
+Restore file processing states
+**/
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateProcessRestoreFile) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateProcessRestoreFile* NewLC();
+ ~CBTManServerBURMgrStateProcessRestoreFile();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+ virtual void HandleActionError(CBTManServerBURMgr& aBURMgr, TInt aError);
+
+protected:
+ CBTManServerBURMgrStateProcessRestoreFile();
+
+ };
+
+NONSHARABLE_CLASS(CBTManServerBURMgrStateRestoreFileProcessingComplete) : public CBTManServerBURMgrStateAction
+ {
+public:
+ static CBTManServerBURMgrStateRestoreFileProcessingComplete* NewLC();
+ ~CBTManServerBURMgrStateRestoreFileProcessingComplete();
+
+ virtual TBTBURState GetNextState(TBTBUREvent aTransitionEvent);
+ virtual void ExecuteActionL(CBTManServerBURMgr& aBURMgr);
+
+protected:
+ CBTManServerBURMgrStateRestoreFileProcessingComplete();
+
+ };
+
+#endif // BTMANSERVERBURSTATEMACHINE_H