Exemplo n.º 1
0
        internal TSIP_DialogRegister(TSIP_SessionRegister session, String callId)
            : base(tsip_dialog_type_t.REGISTER, callId, session)
        {
            /* Initialize the state machine. */
            mFSM = new TSK_StateMachine((Int32)FSMState.Started, (Int32)FSMState.Terminated, OnTerminated, this);
            mFSM.IsDebugEnabled = true;

            // Initialize client side
            InitClientFSM();
            // initialize server side
            InitServerFSM();

            // initialize common transitions side

            /*=======================
             * === Any ===
             */
            // Any -> (hangup) -> InProgress
            mFSM.AddEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Hangup, IsNotSilentHangup, (Int32)FSMState.InProgress, Any_2_InProgress_X_hangup, "REGISTER_Any_2_InProgress_X_hangup")
            // Any -> (silenthangup) -> Terminated
            .AddEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Hangup, IsSilentHangup, (Int32)FSMState.Terminated, null, "REGISTER_Any_2_InProgress_X_silenthangup")
            // Any -> (shutdown) -> InProgress
            .AddEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Shutdown, IsNotSilentHangup, (Int32)FSMState.InProgress, Any_2_InProgress_X_shutdown, "REGISTER_Any_2_InProgress_X_shutdown")
            // Any -> (silentshutdown) -> Terminated
            .AddEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Shutdown, IsSilentHangup, (Int32)FSMState.Terminated, null, "REGISTER_Any_2_InProgress_X_silentshutdow")
            // Any -> (shutdown timedout) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.ShutdownTimedout, (Int32)FSMState.Terminated, null, "REGISTER_shutdown_timedout")
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Any_2_Terminated_X_transportError, "REGISTER_Any_2_Terminated_X_transportError")
            // Any -> (error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Error, (Int32)FSMState.Terminated, Any_2_Terminated_X_Error, "REGISTER_Any_2_Terminated_X_Error");

            // hook callback
            base.Callback = this.OnCallbackEvent;
        }
Exemplo n.º 2
0
        internal static void DefaultTest()
        {
            TSK_StateMachine stateMachine = new TSK_StateMachine((Int32)__S__.Started, (Int32)__S__.Terminated, test_fsm_onterminated, null);

            /*=======================
             * === Started ===
             */
            // Started -> (Send) -> Trying
            stateMachine.AddAlwaysEntry((Int32)__S__.Started, (Int32)__A__.Subscribe, (Int32)__S__.Trying, test_fsm_exec_Started_2_Trying_X_subscribe, "test_fsm_exec_Started_2_Trying_X_subscribe")
            // Started -> (Any) -> Started
            .AddAlwaysNothingEntry((Int32)__S__.Started, "test_fsm_exec_Started_2_Started_X_any")

            /*=======================
             * === Trying ===
             */
            // Trying -> (1xx) -> Trying
            .AddAlwaysEntry((Int32)__S__.Trying, (Int32)__A__.R1xx, (Int32)__S__.Trying, test_fsm_exec_Trying_2_Trying_X_1xx, "test_fsm_exec_Trying_2_Trying_X_1xx")
            // Trying -> (2xx) -> Terminated
            .AddEntry((Int32)__S__.Trying, (Int32)__A__.R2xx, test_fsm_cond_unsubscribing, (Int32)__S__.Terminated, test_fsm_exec_Trying_2_Terminated_X_2xx, "test_fsm_exec_Trying_2_Terminated_X_2xx")
            // Trying -> (2xx) -> Connected
            .AddEntry((Int32)__S__.Trying, (Int32)__A__.R2xx, test_fsm_cond_subscribing, (Int32)__S__.Connected, test_fsm_exec_Trying_2_Connected_X_2xx, "test_fsm_exec_Trying_2_Connected_X_2xx")


            /*=======================
             * === Connected ===
             */
            // Connected -> (SUBSCRIBE) -> Trying
            .AddAlwaysEntry((Int32)__S__.Connected, (Int32)__A__.Unsubscribe, (Int32)__S__.Trying, test_fsm_exec_Connected_2_Trying_X_unsubscribe, "test_fsm_exec_Connected_2_Trying_X_unsubscribe")

            /*=======================
             * === Any ===
             */
            // Any -> (error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)__A__.Error, (Int32)__S__.Terminated, test_fsm_exec_Any_2_Terminated_X_Error, "test_fsm_exec_Any_2_Terminated_X_Error")

            // Fake to test ANY
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)__A__.Subscribe, (Int32)__S__.Trying, test_fsm_exec_Started_2_Trying_X_subscribe, "fakefakefakefakefakefakefakefakefakefake")
            ;



            stateMachine.IsDebugEnabled = true;

            stateMachine.ExecuteAction((Int32)__A__.Subscribe, null, null, null, null, null, null);
            stateMachine.ExecuteAction((Int32)__A__.R1xx, null, null, null, null, null, null);
            stateMachine.ExecuteAction((Int32)__A__.R2xx, null, null, null, null, null, null);

            stateMachine.ExecuteAction((Int32)__A__.Unsubscribe, null, null, null, null, null, null);
            stateMachine.ExecuteAction((Int32)__A__.R2xx, null, null, null, null, null, null);

            stateMachine.ExecuteAction((Int32)__A__.R2xx, null, null, null, null, null, null);
        }
Exemplo n.º 3
0
        internal TSIP_TransacNIST(Boolean reliable, Int32 cseq_value, String cseq_method, String callid, TSIP_Dialog dialog)
            : base(tsip_transac_type_t.NIST, reliable, cseq_value, cseq_method, callid, dialog)
        {
            /* Initialize the state machine. */
            mFSM = new TSK_StateMachine((Int32)FSMState.Started, (Int32)FSMState.Terminated, OnTerminated, this);

            /*=======================
             * === Started ===
             */
            // Started -> (receive request) -> Trying
            mFSM.AddAlwaysEntry((Int32)FSMState.Started, (Int32)FSMAction.Request, (Int32)FSMState.Trying, Started_2_Trying_X_request, "Started_2_Trying_X_request")
            // Started -> (Any other) -> Started
            .AddAlwaysNothingEntry((Int32)FSMState.Started, "Started_2_Started_X_any")

            /*=======================
             * === Trying ===
             */
            // Trying -> (send 1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction.Send_1xx, (Int32)FSMState.Proceeding, Trying_2_Proceeding_X_send_1xx, "Trying_2_Proceeding_X_send_1xx")
            // Trying -> (send 200 to 699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction.Send_200_to_699, (Int32)FSMState.Completed, Trying_2_Completed_X_send_200_to_699, "Trying_2_Completed_X_send_200_to_699")

            /*=======================
             * === Proceeding ===
             */
            // Proceeding -> (send 1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Send_1xx, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_send_1xx, "Proceeding_2_Proceeding_X_send_1xx")
            // Proceeding -> (send 200 to 699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Send_200_to_699, (Int32)FSMState.Completed, Proceeding_2_Completed_X_send_200_to_699, "Proceeding_2_Completed_X_send_200_to_699")
            // Proceeding -> (receive request) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Request, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_request, "Proceeding_2_Proceeding_X_request")

            /*=======================
             * === Completed ===
             */
            // Completed -> (receive request) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.Request, (Int32)FSMState.Completed, Completed_2_Completed_X_request, "Completed_2_Completed_X_request")
            // Completed -> (timer J) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.TimerJ, (Int32)FSMState.Terminated, Completed_2_Terminated_X_tirmerJ, "Completed_2_Terminated_X_tirmerJ")

            /*=======================
             * === Any ===
             */
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Any_2_Terminated_X_transportError, "Any_2_Terminated_X_transportError")
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Error, (Int32)FSMState.Terminated, Any_2_Terminated_X_Error, "Any_2_Terminated_X_Error")
            // Any -> (cancel) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Cancel, (Int32)FSMState.Terminated, Any_2_Terminated_X_cancel, "Any_2_Terminated_X_cancel");
        }
Exemplo n.º 4
0
        internal TSIP_TransacICT(Boolean reliable, Int32 cseq_value, String cseq_method, String callid, TSIP_Dialog dialog)
            : base(tsip_transac_type_t.ICT, reliable, cseq_value, cseq_method, callid, dialog)
        {
            /* Initialize the state machine. */
            mFSM = new TSK_StateMachine((Int32)FSMState.Started, (Int32)FSMState.Terminated, OnTerminated, this);

            /*=======================
             * === Started ===
             */
            // Started -> (Send) -> Calling
            mFSM.AddAlwaysEntry((Int32)FSMState.Started, (Int32)FSMAction.Send, (Int32)FSMState.Calling, Started_2_Calling_X_send, "Started_2_Calling_X_send")
            // Started -> (Any) -> Started
            .AddAlwaysNothingEntry((Int32)FSMState.Started, "Started_2_Started_X_any")

            /*=======================
             * === Calling ===
             */
            // Calling -> (timerA) -> Calling
            .AddAlwaysEntry((Int32)FSMState.Calling, (Int32)FSMAction.TimerA, (Int32)FSMState.Calling, Calling_2_Calling_X_timerA, "Calling_2_Calling_X_timerA")
            // Calling -> (timerB) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Calling, (Int32)FSMAction.TimerB, (Int32)FSMState.Terminated, Calling_2_Terminated_X_timerB, "Calling_2_Terminated_X_timerB")
            // Calling -> (300-699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Calling, (Int32)FSMAction._300_to_699, (Int32)FSMState.Completed, Calling_2_Completed_X_300_to_699, "Calling_2_Completed_X_300_to_699")
            // Calling  -> (1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Calling, (Int32)FSMAction._1xx, (Int32)FSMState.Proceeding, Calling_2_Proceeding_X_1xx, "Calling_2_Proceeding_X_1xx")
            // Calling  -> (2xx) -> Accepted
            .AddAlwaysEntry((Int32)FSMState.Calling, (Int32)FSMAction._2xx, (Int32)FSMState.Accepted, Calling_2_Accepted_X_2xx, "Calling_2_Accepted_X_2xx")

            /*=======================
             * === Proceeding ===
             */
            // Proceeding -> (1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction._1xx, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_1xx, "Proceeding_2_Proceeding_X_1xx")
            // Proceeding -> (300-699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction._300_to_699, (Int32)FSMState.Completed, Proceeding_2_Completed_X_300_to_699, "Proceeding_2_Completed_X_300_to_699")
            // Proceeding -> (2xx) -> Accepted
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction._2xx, (Int32)FSMState.Accepted, Proceeding_2_Accepted_X_2xx, "Proceeding_2_Accepted_X_2xx")

            /*=======================
             * === Completed ===
             */
            // Completed -> (300-699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction._300_to_699, (Int32)FSMState.Completed, Completed_2_Completed_X_300_to_699, "Completed_2_Completed_X_300_to_699")
            // Completed -> (timerD) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.TimerD, (Int32)FSMState.Terminated, Completed_2_Terminated_X_timerD, "Completed_2_Terminated_X_timerD")

            /*=======================
             * === Accepted ===
             */
            // Accepted -> (2xx) -> Accepted
            .AddAlwaysEntry((Int32)FSMState.Accepted, (Int32)FSMAction._2xx, (Int32)FSMState.Accepted, Accepted_2_Accepted_X_2xx, "Accepted_2_Accepted_X_2xx")
            // Accepted -> (timerM) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Accepted, (Int32)FSMAction.TimerM, (Int32)FSMState.Terminated, Accepted_2_Terminated_X_timerM, "Accepted_2_Terminated_X_timerM")

            /*=======================
             * === Any ===
             */
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Any_2_Terminated_X_transportError, "Any_2_Terminated_X_transportError")
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Error, (Int32)FSMState.Terminated, Any_2_Terminated_X_Error, "Any_2_Terminated_X_Error")
            // Any -> (cancel) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Cancel, (Int32)FSMState.Terminated, Any_2_Terminated_X_cancel, "Any_2_Terminated_X_cancel");
        }
Exemplo n.º 5
0
        internal TSIP_TransacNICT(Boolean reliable, Int32 cseq_value, String cseq_method, String callid, TSIP_Dialog dialog)
            : base(tsip_transac_type_t.NICT, reliable, cseq_value, cseq_method, callid, dialog)
        {
            /* Initialize the state machine. */
            mFSM = new TSK_StateMachine((Int32)FSMState.Started, (Int32)FSMState.Terminated, OnTerminated, this);
            mFSM.IsDebugEnabled = true;

            /*=======================
             * === Started ===
             */
            // Started -> (Send) -> Trying
            mFSM.AddAlwaysEntry((Int32)FSMState.Started, (Int32)FSMAction.Send, (Int32)FSMState.Trying, Started_2_Trying_X_send, "NICT_Started_2_Trying_X_send")
            // Started -> (Any) -> Started
            .AddAlwaysNothingEntry((Int32)FSMState.Started, "Started_2_Started_any")

            /*=======================
             * === Trying ===
             */
            // Trying -> (timerE) -> Trying
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction.TimerE, (Int32)FSMState.Trying, Trying_2_Trying_X_timerE, "NICT_Trying_2_Trying_X_timerE")
            // Trying -> (timerF) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction.TimerF, (Int32)FSMState.Terminated, Trying_2_Terminated_X_timerF, "NICT_Trying_2_Terminated_X_timerF")
            // Trying -> (transport error) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Trying_2_Terminated_X_transportError, "NICT_Trying_2_Terminated_X_transportError")
            // Trying  -> (1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction._1xx, (Int32)FSMState.Proceeding, Trying_2_Proceedding_X_1xx, "NICT_Trying_2_Proceedding_X_1xx")
            // Trying  -> (200 to 699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Trying, (Int32)FSMAction._200_to_699, (Int32)FSMState.Completed, Trying_2_Completed_X_200_to_699, "NICT_Trying_2_Completed_X_200_to_699")

            /*=======================
             * === Proceeding ===
             */
            // Proceeding -> (timerE) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.TimerE, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_timerE, "NICT_Proceeding_2_Proceeding_X_timerE")
            // Proceeding -> (timerF) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.TimerF, (Int32)FSMState.Terminated, Proceeding_2_Terminated_X_timerF, "NICT_Proceeding_2_Terminated_X_timerF")
            // Proceeding -> (transport error) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Proceeding_2_Terminated_X_transportError, "NICT_Proceeding_2_Terminated_X_transportError")
            // Proceeding -> (1xx) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction._1xx, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_1xx, "NICT_Proceeding_2_Proceeding_X_1xx")
            // Proceeding -> (200 to 699) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction._200_to_699, (Int32)FSMState.Completed, Proceeding_2_Completed_X_200_to_699, "NICT_Proceeding_2_Completed_X_200_to_699")

            /*=======================
             * === Completed ===
             */
            // Completed -> (timer K) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.TimerK, (Int32)FSMState.Terminated, Completed_2_Terminated_X_timerK, "NICT_Completed_2_Terminated_X_timerK")

            /*=======================
             * === Any ===
             */
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Any_2_Terminated_X_transportError, "NICT_Any_2_Terminated_X_transportError")
            // Any -> (error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Error, (Int32)FSMState.Terminated, Any_2_Terminated_X_Error, "NICT_Any_2_Terminated_X_Error")
            // Any -> (cancel) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Cancel, (Int32)FSMState.Terminated, Any_2_Terminated_X_cancel, "NICT_Any_2_Terminated_X_cancel");

            base.Callback = this.OnCallbackEvent;
        }
Exemplo n.º 6
0
        internal TSIP_TransacIST(Boolean reliable, Int32 cseq_value, String cseq_method, String callid, TSIP_Dialog dialog)
            : base(tsip_transac_type_t.IST, reliable, cseq_value, cseq_method, callid, dialog)
        {
            /* Initialize the state machine. */
            mFSM = new TSK_StateMachine((Int32)FSMState.Started, (Int32)FSMState.Terminated, OnTerminated, this);

            /*=======================
             * === Started ===
             */
            // Started -> (recv INVITE) -> Proceeding
            mFSM.AddAlwaysEntry((Int32)FSMState.Started, (Int32)FSMAction.RecvINVITE, (Int32)FSMState.Proceeding, Started_2_Proceeding_X_INVITE, "Started_2_Proceeding_X_INVITE")
            // Started -> (Any other) -> Started
            .AddAlwaysNothingEntry((Int32)FSMState.Started, "Started_2_Started_X_any")

            /*=======================
             * === Proceeding ===
             */
            // Proceeding -> (recv INVITE) -> Proceeding
            .AddAlwaysEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.RecvINVITE, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_INVITE, "Proceeding_2_Proceeding_X_INVITE")
            // Proceeding -> (send 1xx) -> Proceeding
            .AddEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Send1xx, IsResp2INVITE, (Int32)FSMState.Proceeding, Proceeding_2_Proceeding_X_1xx, "Proceeding_2_Proceeding_X_1xx")
            // Proceeding -> (send 300to699) -> Completed
            .AddEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Send300_to_699, IsResp2INVITE, (Int32)FSMState.Completed, Proceeding_2_Completed_X_300_to_699, "Proceeding_2_Completed_X_300_to_699")
            // Proceeding -> (send 2xx) -> Accepted
            .AddEntry((Int32)FSMState.Proceeding, (Int32)FSMAction.Send2xx, IsResp2INVITE, (Int32)FSMState.Accepted, Proceeding_2_Accepted_X_2xx, "Proceeding_2_Accepted_X_2xx")

            /*=======================
             * === Completed ===
             */
            // Completed -> (recv INVITE) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.RecvINVITE, (Int32)FSMState.Completed, Completed_2_Completed_INVITE, "Completed_2_Completed_INVITE")
            // Completed -> (timer G) -> Completed
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.TimerG, (Int32)FSMState.Completed, Completed_2_Completed_timerG, "Completed_2_Completed_timerG")
            // Completed -> (timerH) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.TimerH, (Int32)FSMState.Terminated, Completed_2_Terminated_timerH, "Completed_2_Terminated_timerH")
            // Completed -> (recv ACK) -> Confirmed
            .AddAlwaysEntry((Int32)FSMState.Completed, (Int32)FSMAction.RecvACK, (Int32)FSMState.Confirmed, Completed_2_Confirmed_ACK, "Completed_2_Confirmed_ACK")

            /*=======================
             * === Accepted ===
             */
            // Accepted -> (recv INVITE) -> Accepted
            .AddAlwaysEntry((Int32)FSMState.Accepted, (Int32)FSMAction.RecvINVITE, (Int32)FSMState.Accepted, Accepted_2_Accepted_INVITE, "Accepted_2_Accepted_INVITE")
            // Accepted -> (send 2xx) -> Accepted
            .AddEntry((Int32)FSMState.Accepted, (Int32)FSMAction.Send2xx, IsResp2INVITE, (Int32)FSMState.Accepted, Accepted_2_Accepted_2xx, "Accepted_2_Accepted_2xx")
            // Accepted -> (recv ACK) -> Accepted
            .AddAlwaysEntry((Int32)FSMState.Accepted, (Int32)FSMAction.RecvACK, (Int32)FSMState.Accepted, Accepted_2_Accepted_iACK, "Accepted_2_Accepted_iACK")
            // Accepted -> (timerL) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Accepted, (Int32)FSMAction.TimerL, (Int32)FSMState.Terminated, Accepted_2_Terminated_timerL, "Accepted_2_Terminated_timerL")

            /*=======================
             * === Confirmed ===
             */
            // Confirmed -> (timerI) -> Terminated
            .AddAlwaysEntry((Int32)FSMState.Confirmed, (Int32)FSMAction.TimerI, (Int32)FSMState.Terminated, Confirmed_2_Terminated_timerI, "Confirmed_2_Terminated_timerI")


            /*=======================
             * === Any ===
             */
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.TransportError, (Int32)FSMState.Terminated, Any_2_Terminated_X_transportError, "Any_2_Terminated_X_transportError")
            // Any -> (transport error) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Error, (Int32)FSMState.Terminated, Any_2_Terminated_X_Error, "Any_2_Terminated_X_Error")
            // Any -> (cancel) -> Terminated
            .AddAlwaysEntry(TSK_StateMachine.STATE_ANY, (Int32)FSMAction.Cancel, (Int32)FSMState.Terminated, Any_2_Terminated_X_cancel, "Any_2_Terminated_X_cancel");
        }