diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/secman/btaccessrequesterstatemachine.h --- /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 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