--- /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
+