datacommsserver/esockserver/inc/ss_subconnstates.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_subconnstates.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,471 @@
+// Copyright (c) 1997-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 SYMBIAN_SS_SUBCONNSTATES_H
+#define SYMBIAN_SS_SUBCONNSTATES_H
+
+#include <comms-infras/ss_esockstates.h>
+#include <comms-infras/ss_esockactivities.h>
+#include <comms-infras/ss_corepractivities.h>
+#include <comms-infras/sockmes.h>
+#include "ss_subconn.h"
+
+
+#ifdef _DEBUG
+// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module
+// (if it could happen through user error then you should give it an explicit, documented, category + code)
+_LIT(KSpecAssert_ESocks_sbcnsts, "ESocks_sbcnsts.");
+#endif
+
+//-=========================================================
+//
+//Activities
+//
+//-=========================================================
+namespace SubConnActivities
+{
+class CSubConnBindingActivityBase : public SubSessActivities::CESockClientActivityBase, public CoreActivities::ABindingActivity,
+                public ITFHIERARCHY_LINK_1(CSubConnBindingActivityBase, SubSessActivities::CESockClientActivityBase, CoreActivities::ABindingActivity)
+	{
+public:
+	typedef ITFHIERARCHY_LINK_1(CSubConnBindingActivityBase, SubSessActivities::CESockClientActivityBase, CoreActivities::ABindingActivity) TIfStaticFetcherNearestInHierarchy;
+
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CSubConnBindingActivityBase() {}
+
+    void ReturnInterfacePtrL(CoreActivities::ABindingActivity*& aInterface)
+        {
+        aInterface = this;
+        }
+
+    void CompleteMessage();
+
+protected:
+	CSubConnBindingActivityBase( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
+	:	SubSessActivities::CESockClientActivityBase(aActivitySig, aNode),
+		CoreActivities::ABindingActivity(aNode.Id()),
+	    TIfStaticFetcherNearestInHierarchy(this)
+		{
+		}
+	};
+
+
+//-=========================================================
+//CNoBearer
+//-=========================================================
+/**
+@internalComponent
+*/
+class CNoBearer : public CSubConnBindingActivityBase
+	{
+public:
+	typedef ITFHIERARCHY_LINK_1(CNoBearer, SubSessActivities::CESockClientActivityBase, CoreActivities::ABindingActivity) TIfStaticFetcherNearestInHierarchy;
+
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CNoBearer();
+
+    inline ESock::RCFParameterFamilyBundleC& GetFlowRequestParameters()
+    	{return iFlowRequestBundle;}
+
+    void SetFlowRequestParameters(const ESock::RCFParameterFamilyBundleC& aParams);
+		
+    void ReturnInterfacePtrL(CoreActivities::ABindingActivity*& aInterface)
+        {aInterface = this;}
+
+DECLARE_SMELEMENT_HEADER( TStoreFlowParams, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TStoreFlowParams )
+
+protected:
+	CNoBearer( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
+	:	CSubConnBindingActivityBase(aActivitySig, aNode)
+		{
+		}
+private:
+    ESock::RCFParameterFamilyBundleC iFlowRequestBundle;
+	};
+
+
+//-=========================================================
+//CBuildStack
+//-=========================================================
+class CBuildStack : public MeshMachine::CNodeActivityBase, public CoreActivities::ABindingActivity,
+	public ITFHIERARCHY_1(CBuildStack, CoreActivities::ABindingActivity)
+	{
+public:
+	typedef ITFHIERARCHY_1(CBuildStack, CoreActivities::ABindingActivity) TIfStaticFetcherNearestInHierarchy;
+
+    void ReturnInterfacePtrL(CoreActivities::ABindingActivity*& aInterface)
+        {
+        aInterface = this;
+        }
+
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CBuildStack();
+
+protected:
+	CBuildStack(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+
+public:
+typedef MeshMachine::TNodeContext<ESock::CSubConnection, SubSessStates::TContext> TContext;
+DECLARE_SMELEMENT_HEADER( TSendBuildStackResponse, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendBuildStackResponse )
+
+DECLARE_SMELEMENT_HEADER( TAwaitingBuildStack, MeshMachine::TState<TContext>, NetStateMachine::MState, TContext )
+	virtual TBool Accept();
+DECLARE_SMELEMENT_FOOTER( TAwaitingBuildStack )
+
+DECLARE_SMELEMENT_HEADER( TRequestServiceProviderFromCPR, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TRequestServiceProviderFromCPR )
+
+private:
+	void RequestServiceProviderFromCPRL(TContext& aContext);
+};
+
+
+//-=========================================================
+//CCreate
+//-=========================================================
+class CCreate : public CSubConnBindingActivityBase
+	{
+public:
+	typedef ITFHIERARCHY_LINK_1(CCreate, SubSessActivities::CESockClientActivityBase, CoreActivities::ABindingActivity) TIfStaticFetcherNearestInHierarchy;
+
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CCreate();
+
+protected:
+	CCreate(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode)
+	:	CSubConnBindingActivityBase(aActivitySig, aNode),
+	    iSubConnectionNode(aNode.Id())
+		{
+		}
+private:
+	//We are taking ownership of the sub session for the duration of this activity
+	//If something goes wrong, we need to destroy this subsession.
+    Messages::TNodeId iSubConnectionNode;
+	};
+
+//-=========================================================
+//CRejoin
+//-=========================================================
+class ESock::CSubConnection;
+class CRejoin : public SubSessActivities::CESockClientActivityBase
+/*
+
+*/
+	{
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CRejoin();
+	const Messages::TNodeId& OldOwner()
+    	{
+    	__ASSERT_DEBUG(!iOldOwner.IsNull(), User::Panic(KSpecAssert_ESocks_sbcnsts, 1));
+    	return iOldOwner;
+    	}
+
+	const Messages::TNodeId& NewOwner()
+    	{
+    	__ASSERT_DEBUG(!iNewOwner.IsNull(), User::Panic(KSpecAssert_ESocks_sbcnsts, 2));
+    	return iNewOwner;
+    	}
+
+  	const Messages::TNodeId& TheOtherOwner()
+    	{
+    	__ASSERT_DEBUG(!iOldOwner.IsNull() && !iNewOwner.IsNull(), User::Panic(KSpecAssert_ESocks_sbcnsts, 3));
+    	return iMessage.Function() == ESCAddSocket ? iOldOwner : iNewOwner;
+    	}
+
+	const Messages::TNodeId& Flow()
+    	{
+    	__ASSERT_DEBUG(!iFlow.IsNull(), User::Panic(KSpecAssert_ESocks_sbcnsts, 4));
+    	return iFlow;
+    	}
+
+	void InitialiseL(ESock::CSubConnection& aSC);
+
+    void SetOldOwnerIntf(Messages::RNodeInterface * aIntf)
+        {
+        iOldOwnerIntf = aIntf;
+        }
+	
+	Messages::RNodeInterface* OldOwnerIntf()
+	    {
+        __ASSERT_DEBUG(iOldOwnerIntf != NULL, User::Panic(KSpecAssert_ESocks_sbcnsts, 1));
+        return iOldOwnerIntf;
+	    }
+
+protected:
+	CRejoin( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
+	:	SubSessActivities::CESockClientActivityBase(aActivitySig, aNode)
+		{
+		}
+
+
+private:
+    Messages::TNodeId iOldOwner;
+    Messages::TNodeId iNewOwner;
+    Messages::TNodeId iFlow;
+	
+	Messages::RNodeInterface * iOldOwnerIntf;
+	};
+
+//-=========================================================
+//CSetParameters
+//-=========================================================
+class CSetParameters : public SubSessActivities::CESockClientActivityBase
+/*
+
+*/
+	{
+public:
+	typedef MeshMachine::TNodeContext<ESock::CSubConnection, SubSessStates::TContext> TContext;
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CSetParameters();
+
+    ESock::RCFParameterFamilyBundleC& GetParameterBundleL();
+    void CompleteMessage();
+
+protected:
+	CSetParameters( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
+	:	SubSessActivities::CESockClientActivityBase(aActivitySig, aNode)
+		{
+		}
+private:
+	void StoreParametersInSubConn(TContext& aContext);
+
+    ESock::RCFParameterFamilyBundleC iParameterBundle;
+
+public:
+DECLARE_SMELEMENT_HEADER( TCompleteClient, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+ 	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TCompleteClient )
+
+DECLARE_SMELEMENT_HEADER( TStoreNewParams, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TStoreNewParams )
+
+	};
+
+//-=========================================================
+//CEventNotification
+//-=========================================================
+class CEventNotification : public SubSessActivities::CESockClientActivityBase
+/*
+
+*/
+	{
+public:
+    static MeshMachine::CNodeActivityBase* NewL(const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode);
+	virtual ~CEventNotification();
+
+    void RequestEventNotificationSetupL();
+    void RequestAllEventNotificationsL();
+    TBool FillInEvent(const CSubConNotificationEvent& aEvent);
+
+protected:
+	CEventNotification( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode )
+	:	SubSessActivities::CESockClientActivityBase(aActivitySig, aNode)
+		{
+		}
+private:
+	RSubConnection::TEventFilter iEventUidFilterList[KMaxUidFilterListLen];
+	TUint		                 iEventUidFilterListLength;
+	};
+
+} //namespace SubConnActivities
+
+
+//-=========================================================
+//
+//States
+//
+//-=========================================================
+namespace SubConnStates
+{
+typedef MeshMachine::TNodeContext<ESock::CSubConnection, SubSessStates::TContext> TContext;
+
+//-=========================================================
+//Create
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TNoTagOrWaitForIncoming, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+ 	virtual TInt TransitionTag();
+DECLARE_SMELEMENT_FOOTER( TNoTagOrWaitForIncoming )
+
+DECLARE_SMELEMENT_HEADER( TJoinCPR, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TJoinCPR )
+
+DECLARE_SMELEMENT_HEADER( TRequestServiceProvider, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TRequestServiceProvider )
+
+DECLARE_SMELEMENT_HEADER( TLeaveCPR, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TLeaveCPR )
+
+DECLARE_SMELEMENT_HEADER( TNoTagOrAttachToDefaultOrWaitForIncoming, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+ 	virtual TInt TransitionTag();
+DECLARE_SMELEMENT_FOOTER( TNoTagOrAttachToDefaultOrWaitForIncoming )
+
+//-=========================================================
+//Rejoin
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TJoinTheOtherOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TJoinTheOtherOwner )
+
+DECLARE_SMELEMENT_HEADER( TLeaveTheOtherOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TLeaveTheOtherOwner )
+
+DECLARE_SMELEMENT_HEADER( TSendRejoinDataClientRequestToOldOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendRejoinDataClientRequestToOldOwner )
+
+DECLARE_SMELEMENT_HEADER( TSendApplyToOldOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendApplyToOldOwner )
+
+DECLARE_SMELEMENT_HEADER( TSendApplyToNewOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendApplyToNewOwner )
+
+DECLARE_SMELEMENT_HEADER( TSendCancelToOldOwner, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendCancelToOldOwner )
+
+//-=========================================================
+//Get/Set Params
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TSendParamsToServiceProvider, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendParamsToServiceProvider )
+
+DECLARE_SMELEMENT_HEADER( TStoreParams, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TStoreParams )
+
+DECLARE_AGGREGATED_TRANSITION2(
+    TStoreParamsAndSendApply,
+	SubConnStates::TStoreParams,
+	CoreNetStates::TSendApplyRequest
+	)
+
+DECLARE_SMELEMENT_HEADER( TSendParamRequest, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendParamRequest )
+
+DECLARE_SMELEMENT_HEADER( TNoTagOrParamsPresent, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+	virtual TInt TransitionTag();
+DECLARE_SMELEMENT_FOOTER( TNoTagOrParamsPresent )
+
+DECLARE_SMELEMENT_HEADER( TWriteSubConnParamsLength, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TWriteSubConnParamsLength )
+
+DECLARE_SMELEMENT_HEADER( TWriteSubConnParams, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TWriteSubConnParams )
+
+DECLARE_SERIALIZABLE_STATE(
+	TNoTagOrParamsPresentBlockedBySetParams,
+	MeshMachine::TActivityIdMutex<ESock::ECFActivityParamRequest>,
+	SubConnStates::TNoTagOrParamsPresent
+	)
+
+//-=========================================================
+//Events
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TAwaitingEventNotificationSubscription, MeshMachine::TState<TContext>, NetStateMachine::MState, TContext )
+	virtual TBool Accept();
+DECLARE_SMELEMENT_FOOTER( TAwaitingEventNotificationSubscription )
+
+DECLARE_SMELEMENT_HEADER( TNoTagOrAllNotifications, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+	virtual TInt TransitionTag();
+DECLARE_SMELEMENT_FOOTER( TNoTagOrAllNotifications )
+
+DECLARE_SMELEMENT_HEADER( TSetupFilteredEventNotification, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSetupFilteredEventNotification )
+
+DECLARE_SMELEMENT_HEADER( TSetupAllEventNotification, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSetupAllEventNotification )
+
+DECLARE_SMELEMENT_HEADER( TFillInEvent, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TFillInEvent )
+
+DECLARE_SMELEMENT_HEADER( TEnqueueEvent, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+	protected:
+    void CreateOrUpdateBundleL(CSubConGenEventParamsGranted* aEvent);
+DECLARE_SMELEMENT_FOOTER( TEnqueueEvent )
+
+DECLARE_SMELEMENT_HEADER( TNoTagOrActiveWhenEventEnqued, MeshMachine::TStateFork<TContext>, NetStateMachine::MStateFork, TContext )
+	virtual TInt TransitionTag();
+DECLARE_SMELEMENT_FOOTER( TNoTagOrActiveWhenEventEnqued )
+
+
+
+//-=========================================================
+//Start/Stop SubConnection
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TStartSubConnection, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TStartSubConnection )
+
+DECLARE_SMELEMENT_HEADER( TStopSubConnection, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TStopSubConnection )
+
+//-=========================================================
+//Close
+//-=========================================================
+DECLARE_SMELEMENT_HEADER( TDetachControlProvider, SubSessStates::TECABStateTransitionBase<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TDetachControlProvider )
+
+DECLARE_AGGREGATED_TRANSITION2(
+	TProcessClose,
+	SubSessStates::TProcessClose,
+	TDetachControlProvider
+	)
+
+//-=========================================================
+// Build stack
+//-=========================================================
+
+DECLARE_SMELEMENT_HEADER( TAwaitingBuildStackResponse, MeshMachine::TState<TContext>, NetStateMachine::MState, TContext )
+	virtual TBool Accept();
+DECLARE_SMELEMENT_FOOTER( TAwaitingBuildStackResponse )
+
+DECLARE_SMELEMENT_HEADER( TSendBuildStack, MeshMachine::TStateTransition<TContext>, NetStateMachine::MStateTransition, TContext )
+	virtual void DoL();
+DECLARE_SMELEMENT_FOOTER( TSendBuildStack )
+
+} //namespace SubConnStates
+
+
+#endif
+// SYMBIAN_SS_SUBCONNSTATES_H
+