bluetooth/btstack/secman/btaccessrequesterstatemachine.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/secman/btaccessrequesterstatemachine.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,528 @@
+// Copyright (c) 2008-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 _BTACCESSREQUESTERSTATEMACHINE_H
+#define _BTACCESSREQUESTERSTATEMACHINE_H
+
+#include "secman.h"
+
+class CBTAccessRequester;
+class CBTAccessRequesterTransition;
+class TBTSecEvent;
+class CBTBaseStateAction;
+
+
+enum TBTAccessRequesterState
+	{
+	EBTUninitialised,
+	EBTReady,
+	EBTWaiting,
+	EBTPhysicalLinkUp,
+	EBTAuthenticationRequested,
+	EBTRequestAuthentication,
+	EBTAuthenticationComplete,
+	EBTEncryptionChangePending,
+	EBTEncryptionChangeComplete,
+	EBTAuthorisationRequested,
+	EBTRequestAuthorisation,
+	EBTAuthorisationComplete,
+	EBTIOCapsResponse,
+	EBTIOCapsRequested,
+	EBTUserConfirmation,
+	EBTPasskeyEntry,
+	EBTRemoteOOBDataRequest,
+	EBTSimplePairingPending,
+	EBTPrefetchZombie,
+
+	// --- End of states ---
+	EBTMaximumStateNumber,
+	EBTUnknownState, //< Special state value
+	EBTNopState, //< Special state value
+	};
+
+
+NONSHARABLE_CLASS(CBTAccessRequesterStateFactory)
+	: public CBase
+	{
+public:
+	static CBTAccessRequesterStateFactory* NewL();
+	static CBTAccessRequesterStateFactory* NewLC();
+	~CBTAccessRequesterStateFactory();
+
+	void ExecuteAction(TBTAccessRequesterState aState, CBTAccessRequester& aRequester, TBTSecEvent& aEvent);
+
+	TInt ProcessRequesterState(TBTAccessRequesterState aState, CBTAccessRequester& aRequester, TBTSecEvent& aEvent);
+
+private:
+	CBTAccessRequesterStateFactory();
+	void ConstructL();
+	void ConstructStateMachineL();
+	void AddTransitionL(CBTAccessRequesterTransition* aTransition);
+	CBTBaseStateAction* GetStateL(TBTAccessRequesterState aState);
+
+
+private:
+	RPointerArray<CBTBaseStateAction> iStateActions;
+	};
+
+
+
+_LIT(KBTFlyStateStateMachine, "BT FlyStateMachine");
+enum TBTFlyStateMachinePanic
+	{
+	EBTFlyUnknowState,
+	EBTFlyMismatchState,
+	EBTFlyMismatchExecuteActionState,
+	EBTFlyUnknowNextState,
+	};
+
+
+/*********************** SECOND GENERATION CODE ************/
+
+/**
+NONSHARABLE_CLASS(CBTBaseStateAction
+*/
+NONSHARABLE_CLASS(CBTBaseStateAction) : public CBase
+	{
+
+public:
+	static CBTBaseStateAction* NewL(TBTAccessRequesterState aState);
+	static CBTBaseStateAction* NewLC(TBTAccessRequesterState aState);
+	~CBTBaseStateAction();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester, TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTBaseStateAction(TBTAccessRequesterState aState);
+
+
+protected:
+	TBTAccessRequesterState iState;
+	};
+
+
+
+NONSHARABLE_CLASS(CBTUninitialisedState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTUninitialisedState* NewL(TBTAccessRequesterState aState);
+	static CBTUninitialisedState* NewLC(TBTAccessRequesterState aState);
+	~CBTUninitialisedState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTUninitialisedState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+NONSHARABLE_CLASS(CBTWaitingState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTWaitingState* NewL(TBTAccessRequesterState aState);
+	static CBTWaitingState* NewLC(TBTAccessRequesterState aState);
+	~CBTWaitingState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTWaitingState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTReadyState
+*/
+NONSHARABLE_CLASS(CBTReadyState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTReadyState* NewL(TBTAccessRequesterState aState);
+	static CBTReadyState* NewLC(TBTAccessRequesterState aState);
+	~CBTReadyState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTReadyState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTPhysicalLinkUpState
+*/
+NONSHARABLE_CLASS(CBTPhysicalLinkUpState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTPhysicalLinkUpState* NewL(TBTAccessRequesterState aState);
+	static CBTPhysicalLinkUpState* NewLC(TBTAccessRequesterState aState);
+	~CBTPhysicalLinkUpState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTPhysicalLinkUpState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTAuthenticationRequestedState
+*/
+NONSHARABLE_CLASS(CBTAuthenticationRequestedState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTAuthenticationRequestedState* NewL(TBTAccessRequesterState aState);
+	static CBTAuthenticationRequestedState* NewLC(TBTAccessRequesterState aState);
+	~CBTAuthenticationRequestedState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTAuthenticationRequestedState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTRequestAuthenticationState
+*/
+NONSHARABLE_CLASS(CBTRequestAuthenticationState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTRequestAuthenticationState* NewL(TBTAccessRequesterState aState);
+	static CBTRequestAuthenticationState* NewLC(TBTAccessRequesterState aState);
+	~CBTRequestAuthenticationState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTRequestAuthenticationState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTAuthenticationCompleteState
+*/
+NONSHARABLE_CLASS(CBTAuthenticationCompleteState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTAuthenticationCompleteState* NewL(TBTAccessRequesterState aState);
+	static CBTAuthenticationCompleteState* NewLC(TBTAccessRequesterState aState);
+	~CBTAuthenticationCompleteState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTAuthenticationCompleteState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+
+/**
+NONSHARABLE_CLASS(CBTEncryptionChangePendingState
+*/
+NONSHARABLE_CLASS(CBTEncryptionChangePendingState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTEncryptionChangePendingState* NewL(TBTAccessRequesterState aState);
+	static CBTEncryptionChangePendingState* NewLC(TBTAccessRequesterState aState);
+	~CBTEncryptionChangePendingState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTEncryptionChangePendingState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTEncryptionChangeCompleteState
+*/
+NONSHARABLE_CLASS(CBTEncryptionChangeCompleteState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTEncryptionChangeCompleteState* NewL(TBTAccessRequesterState aState);
+	static CBTEncryptionChangeCompleteState* NewLC(TBTAccessRequesterState aState);
+	~CBTEncryptionChangeCompleteState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTEncryptionChangeCompleteState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTAuthorisationRequestedState
+*/
+NONSHARABLE_CLASS(CBTAuthorisationRequestedState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTAuthorisationRequestedState* NewL(TBTAccessRequesterState aState);
+	static CBTAuthorisationRequestedState* NewLC(TBTAccessRequesterState aState);
+	~CBTAuthorisationRequestedState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTAuthorisationRequestedState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTRequestAuthorisationState
+*/
+NONSHARABLE_CLASS(CBTRequestAuthorisationState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTRequestAuthorisationState* NewL(TBTAccessRequesterState aState);
+	static CBTRequestAuthorisationState* NewLC(TBTAccessRequesterState aState);
+	~CBTRequestAuthorisationState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTRequestAuthorisationState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTAuthorisationCompleteState
+*/
+NONSHARABLE_CLASS(CBTAuthorisationCompleteState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTAuthorisationCompleteState* NewL(TBTAccessRequesterState aState);
+	static CBTAuthorisationCompleteState* NewLC(TBTAccessRequesterState aState);
+	~CBTAuthorisationCompleteState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTAuthorisationCompleteState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTIOCapsResponseState
+*/
+NONSHARABLE_CLASS(CBTIOCapsResponseState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTIOCapsResponseState* NewL(TBTAccessRequesterState aState);
+	static CBTIOCapsResponseState* NewLC(TBTAccessRequesterState aState);
+	~CBTIOCapsResponseState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTIOCapsResponseState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTIOCapsRequestedState
+*/
+NONSHARABLE_CLASS(CBTIOCapsRequestedState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTIOCapsRequestedState* NewL(TBTAccessRequesterState aState);
+	static CBTIOCapsRequestedState* NewLC(TBTAccessRequesterState aState);
+	~CBTIOCapsRequestedState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTIOCapsRequestedState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTUserConfirmationState
+*/
+NONSHARABLE_CLASS(CBTUserConfirmationState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTUserConfirmationState* NewL(TBTAccessRequesterState aState);
+	static CBTUserConfirmationState* NewLC(TBTAccessRequesterState aState);
+	~CBTUserConfirmationState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTUserConfirmationState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTPasskeyEntryState
+*/
+NONSHARABLE_CLASS(CBTPasskeyEntryState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTPasskeyEntryState* NewL(TBTAccessRequesterState aState);
+	static CBTPasskeyEntryState* NewLC(TBTAccessRequesterState aState);
+	~CBTPasskeyEntryState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTPasskeyEntryState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTRemoteOOBDataRequestState
+*/
+NONSHARABLE_CLASS(CBTRemoteOOBDataRequestState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTRemoteOOBDataRequestState* NewL(TBTAccessRequesterState aState);
+	static CBTRemoteOOBDataRequestState* NewLC(TBTAccessRequesterState aState);
+	~CBTRemoteOOBDataRequestState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTRemoteOOBDataRequestState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+/**
+NONSHARABLE_CLASS(CBTSimplePairingPendingState
+*/
+NONSHARABLE_CLASS(CBTSimplePairingPendingState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTSimplePairingPendingState* NewL(TBTAccessRequesterState aState);
+	static CBTSimplePairingPendingState* NewLC(TBTAccessRequesterState aState);
+	~CBTSimplePairingPendingState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTSimplePairingPendingState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+NONSHARABLE_CLASS(CBTPrefetchZombieState) : public CBTBaseStateAction
+	{
+
+public:
+	static CBTPrefetchZombieState* NewL(TBTAccessRequesterState aState);
+	static CBTPrefetchZombieState* NewLC(TBTAccessRequesterState aState);
+	~CBTPrefetchZombieState();
+
+	virtual void ExecuteAction(CBTAccessRequester& aRequester,TBTSecEvent& aEvent);
+	virtual TBTAccessRequesterState GetNextState(TInt aEventId);
+
+protected:
+	CBTPrefetchZombieState(TBTAccessRequesterState aState)
+	: CBTBaseStateAction(aState)
+	{}
+
+	};
+
+
+
+#endif //_BTACCESSREQUESTERSTATEMACHINE_H