diff -r 000000000000 -r 63b37f68c1ce connectivitylayer/isce/isaaccessextension_dll/inc/pep.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectivitylayer/isce/isaaccessextension_dll/inc/pep.h Fri Nov 06 17:28:23 2009 +0000 @@ -0,0 +1,283 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + + +#include // For TUint16 +#include // For TDesC8 +#include // For DBase +#include "iadinternaldefinitions.h" +#include "peptransceiver.h" +#include "iadtrace.h" // For ASSERT_RESET_ALWAYS + +class DRouter; +class MIAD2ChannelApi; +class DPep; +class DPipeHandler; + +enum TPipeState + { + ECreating, + ECreatingEnabled, + EDisabled, + EDisabling, + EEnabling, + EEnabled, +//TBR + EEnableEnabled, + EDisabledDisabled, + EDisabledEnabled, + EEnabledDisabled, + EEnabledEnabled, + EDisconnected, + }; + + +NONSHARABLE_CLASS(DPipeState) : public DBase + { + public: + + DPipeState(DPep& aPep); + //virtual ~DPipeState(); + void NextState(TPipeState aNextState); + virtual void EnterState(); + // Pipe events + virtual void PnsPipeCreatedInd(){ ASSERT_RESET_ALWAYS( 0, 0 ); }; + virtual void PnsPipeEnabledInd(){ ASSERT_RESET_ALWAYS( 0, 0 ); }; + virtual void PnsPipeRedirectedInd(){ ASSERT_RESET_ALWAYS( 0, 0 ); }; + virtual void PnsPipeResetInd(){ ASSERT_RESET_ALWAYS( 0, 0 ); }; + virtual void PnsPipeDisabledInd(){ ASSERT_RESET_ALWAYS( 0, 0 ); }; + virtual TInt PnsPepConnectReq( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + virtual TInt PnsPepResetReq( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + virtual TInt PnsPepDisconnectReq(const TDesC8& aData); + virtual TInt PnsPepEnableReq( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + virtual TInt PnsPepDisableReq( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + virtual TInt RxPnsPipeData( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + virtual TInt TxPnsPipeData( TDes8& aData ); + + DPep& iPep;// TODO: public? + + }; + + +NONSHARABLE_CLASS(DDisconnected) : public DPipeState + { + public: + + DDisconnected(DPep& aPep); + // Override base class functions cause should not be allowed to do nothing at all, just to be removed. + TInt PnsPepDisconnectReq( const TDesC8& aData ){ aData;ASSERT_RESET_ALWAYS( 0, 0 ); return KErrNotFound; }; + // TxPnsPipeData in base class already appropriate returns KErrOverFlow. + + }; + +// Creating state comes when pep is created, use cases pipe creation and pipe redirection (new pep). +// Default is disabled. +NONSHARABLE_CLASS( DCreating ) : public DPipeState + { + + public: + + DCreating( DPep& aPep ); + TInt PnsPepConnectReq( const TDesC8& aReq ); + void PnsPipeCreatedInd(); + void PnsPipeRedirectedInd(); + + }; +// Creating / redirecting an enabled pipe. +NONSHARABLE_CLASS( DCreatingEnabled ) : public DPipeState + { + + public: + + DCreatingEnabled( DPep& aPep ); + void PnsPipeCreatedInd(); + void PnsPipeRedirectedInd(); + + }; + +NONSHARABLE_CLASS(DDisabled) : public DPipeState + { + public: + + DDisabled(DPep& aPep); + void EnterState(); + TInt PnsPepEnableReq(const TDesC8& aData); + TInt PnsPepResetReq(const TDesC8& aData); + TInt PnsPepDisableReq(const TDesC8& aData); + void PnsPipeRedirectedInd(); + void PnsPipeDisabledInd(); + + }; + +NONSHARABLE_CLASS( DDisabling ) : public DPipeState + { + + public: + + DDisabling( DPep& aPep ); + void EnterState(); + void PnsPipeDisabledInd(); + + }; + +NONSHARABLE_CLASS( DEnabled ) : public DPipeState + { + public: + + DEnabled(DPep& aPep); + void EnterState(); + TInt PnsPepEnableReq(const TDesC8& aData); + TInt RxPnsPipeData( const TDesC8& aData ); + TInt TxPnsPipeData( TDes8& aData ); + TInt PnsPepResetReq(const TDesC8& aData); + TInt PnsPepDisableReq(const TDesC8& aData); + void PnsPipeEnabledInd(); + + }; + +NONSHARABLE_CLASS( DEnabling ) : public DPipeState + { + + public: + + DEnabling( DPep& aPep ); + void PnsPipeEnabledInd(); + void PnsPipeRedirectedInd(); + + }; + +//TBR +NONSHARABLE_CLASS( DEnableEnabled ) : public DEnabled + { + + public: + + DEnableEnabled( DPep& aPep ); + void EnterState(); + + }; +//TBR +NONSHARABLE_CLASS( DEnabledEnabled ) : public DPipeState + { + public: + + DEnabledEnabled( DPep& aPep); + void PnsPipeResetInd(); + + }; + +NONSHARABLE_CLASS( DEnabledDisabled ) : public DPipeState + { + public: + + DEnabledDisabled( DPep& aPep); + void EnterState(); + void PnsPipeResetInd(); + + }; + +NONSHARABLE_CLASS( DDisabledEnabled ) : public DPipeState + { + public: + + DDisabledEnabled( DPep& aPep); + void PnsPipeResetInd(); + + }; + +NONSHARABLE_CLASS( DDisabledDisabled ) : public DPipeState + { + public: + + DDisabledDisabled( DPep& aPep); + void PnsPipeResetInd(); + + }; + +NONSHARABLE_CLASS( DPep ) : public DBase +{ + +public: + + DPep( DRouter* aDl, MIAD2ChannelApi* aUl, TUint16 aChannelId, DPipeHandler& aHandler ); + ~DPep(); + TUint8 GetPipeHandle() + { + return iPipeHandle; + }; + + TUint16 ChannelId() + { + return iChannelId; + } + + void NextState(TPipeState aState); + virtual TInt ReceiveMessage(const TDesC8& aMsg, MIAD2ChannelApi* aToCb); + virtual TInt SendMessage(TDes8& aMsg, TUint16 aFromChannel); + TInt SendPepConnectResp(const TDesC8& aData); + TInt SendPepResetResp(const TDesC8& aData); + TInt SendPepDisconnectResp(const TDesC8& aData); + TInt SendPepEnableResp(const TDesC8& aData); + TInt SendPepDisableResp(const TDesC8& aData); + TInt RxPipeData(const TDesC8& aData); + TInt TxPipeData(TDes8& aData); + void PipeDisabling(); + void PipeDisabled(); + void PipeEnabled(); + void PipeDisableDisabled(); + void PipeEnableEnabled(); + +#if (NCP_COMMON_SOS_VERSION_SUPPORT >= SOS_VERSION_95) + void SetLoaned( MIAD2ChannelApi* aCh ); + void SetLoanReturned( MIAD2ChannelApi* aOldCh ); +#endif + +protected: + + void HandlePnPipeSbNegotiatedFC( const TDesC8& aMessage ); + +protected: + + DRouter* iRouter; + TUint8 iPipeHandle; + TUint8 iChannelId; + DPipeHandler& iPipeHandler; + + MIAD2ChannelApi* iChannel; // must be pointer due to it is not always available + DPepTransceiver* iDecoratedRx; + DPepTransceiver* iDecoratedTx; + DPepTransceiver iMainTxRx; // the one having pointers other classes + +// StateMachine states: + DCreating iCreating; + DCreatingEnabled iCreatingEnabled; + DDisabled iDisabled; + DDisabling iDisabling; + DEnabling iEnabling; + DEnabled iEnabled; +//TBR + DEnableEnabled iEnableEnabled; + DDisabledDisabled iDisabledDisabled; + DDisabledEnabled iDisabledEnabled; + DEnabledDisabled iEnabledDisabled; + DEnabledEnabled iEnabledEnabled; + DDisconnected iDisconnected; + + DPipeState* iCurrentState; +}; +