[libpri-commits] rmudgett: branch rmudgett/q931_fsm r2256 - /team/rmudgett/q931_fsm/doc/
SVN commits to the libpri project
libpri-commits at lists.digium.com
Tue Mar 15 17:36:14 CDT 2011
Author: rmudgett
Date: Tue Mar 15 17:36:10 2011
New Revision: 2256
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=2256
Log:
* Converted timers to use state Prolog/Epilog events.
* Fixed T301 handling not covered by SDL diagrams.
* Updated T309 processing. Only Null(U0) and Active(U10) are stable
states.
Modified:
team/rmudgett/q931_fsm/doc/q931_user.fsm
Modified: team/rmudgett/q931_fsm/doc/q931_user.fsm
URL: http://svnview.digium.com/svn/libpri/team/rmudgett/q931_fsm/doc/q931_user.fsm?view=diff&rev=2256&r1=2255&r2=2256
==============================================================================
--- team/rmudgett/q931_fsm/doc/q931_user.fsm (original)
+++ team/rmudgett/q931_fsm/doc/q931_user.fsm Tue Mar 15 17:36:10 2011
@@ -48,7 +48,6 @@
/* Need to pick a new call reference */
Action Pick_Call_Reference;
Action Send(RESUME(call_id));
- Action Start_T318;
Next_State q931_user_resume_request;
}
Stimulus Q931_EV_MSG_SETUP {
@@ -59,7 +58,6 @@
/* Call reference already selected when call structure created. */
Action Pick_Call_Reference;
Action Send(SETUP);
- Action Start_T303;
Next_State q931_user_call_initiated;
}
Stimulus Q931_EV_MSG_STATUS {
@@ -83,38 +81,33 @@
State q931_user_call_initiated {// aka U1
Prolog {
Action Set_State(Q931_CALL_STATE_CALL_INITIATED);
- }
- Init {
- }
- Epilog {
+ Action Start_T303;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T303;
}
Stimulus Q931_EV_MGMT_OVERLAP_DIGIT(digit) {
Action Save_Overlap_Digit(digit);
}
- Stimulus Q931_EV_MGMT_DISCONNECT_REQUEST(cause) {
+ Stimulus Q931_EV_MGMT_DISCONNECT_REQ(cause) {
Action Send(DISCONNECT(cause));
- Action Stop_T303;
- Action Start_T305;
Next_State q931_user_disconnect_request;
}
Stimulus Q931_EV_MSG_SETUP_ACKNOWLEDGE {
- Action Stop_T303;
if (Stored_Overlap_Digits) {
Action Send(INFORMATION(Stored_Overlap_Digits));
}
Action Post_Mgmt(SETUP_ACKNOWLEDGE);
- Action Start_T304;
Next_State q931_user_overlap_sending;
}
Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
- Action Stop_T303;
Action Post_Mgmt(HANGUP(cause));
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_MSG_PROCEEDING {
- Action Stop_T303;
- Action Start_T310;
Action Post_Mgmt(PROCEEDING);
Next_State q931_user_outgoing_call_proceeding;
}
@@ -129,12 +122,10 @@
}
}
Stimulus Q931_EV_MSG_ALERTING {
- Action Stop_T303;
Action Post_Mgmt(ALERTING);
Next_State q931_user_call_delivered;
}
Stimulus Q931_EV_MSG_CONNECT {
- Action Stop_T303;
Action Post_Mgmt(CONNECT);
if (Connect_Ack_Option) {
Action Send(CONNECT_ACKNOWLEDGE);
@@ -148,10 +139,16 @@
State q931_user_overlap_sending {// aka U2
Prolog {
Action Set_State(Q931_CALL_STATE_OVERLAP_SENDING);
- }
- Init {
- }
- Epilog {
+ /*
+ * If T304 is -1(default) do not start it because the
+ * upper layer is to enforce/implement the timer.
+ */
+ Action Start_T304;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T304;
}
Stimulus Q931_EV_MGMT_OVERLAP_DIGIT(digit) {
Action Send(INFORMATION(digit));
@@ -159,13 +156,10 @@
Action Start_T304;
}
Stimulus Q931_EV_MSG_PROCEEDING {
- Action Stop_T304;
- Action Start_T310;
Action Post_Mgmt(PROCEEDING);
Next_State q931_user_outgoing_call_proceeding;
}
Stimulus Q931_EV_MSG_ALERTING {
- Action Stop_T304;
Action Post_Mgmt(ALERTING);
Next_State q931_user_call_delivered;
}
@@ -177,7 +171,6 @@
Action Post_Mgmt(PROGRESS);
}
Stimulus Q931_EV_MSG_CONNECT {
- Action Stop_T304;
Action Post_Mgmt(CONNECT);
if (Connect_Ack_Option) {
Action Send(CONNECT_ACKNOWLEDGE);
@@ -186,25 +179,20 @@
}
Stimulus Q931_EV_MGMT_RELEASE_REQ {
Action Send(RELEASE(PRI_CAUSE_CHANNEL_UNACCEPTABLE));
- Action Stop_T304;
- Action Start_T308;
Next_State q931_user_release_request;
}
Stimulus Q931_EV_TIMEOUT_T304 {
+ Action Send(DISCONNECT(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Next_State q931_user_disconnect_request;
+ }
+ Stimulus Q931_EV_DL_ESTABLISH_IND {
Action Send(DISCONNECT());
- Action Start_T305;
Action Post_Mgmt(HANGUP(cause));
Next_State q931_user_disconnect_request;
}
- Stimulus Q931_EV_DL_ESTABLISH_IND {
- Action Send(DISCONNECT());
- Action Start_T305;
- Action Post_Mgmt(HANGUP(cause));
- Next_State q931_user_disconnect_request;
- }
Stimulus Q931_EV_DL_RELEASE_IND {
Action Post_Mgmt(HANGUP(PRI_CAUSE_NETWORK_OUT_OF_ORDER));
- Action Stop_T304;
Action Release_Call_Reference;
Next_State q931_user_null;
}
@@ -215,52 +203,20 @@
State q931_user_outgoing_call_proceeding {// aka U3
Prolog {
Action Set_State(Q931_CALL_STATE_OUTGOING_CALL_PROCEEDING);
- }
- Init {
- }
- Epilog {
+ Action Start_T310;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T310;
}
Stimulus Q931_EV_MSG_PROGRESS {
Action Stop_T310;
Action Post_Mgmt(PROGRESS);
}
Stimulus Q931_EV_MSG_ALERTING {
- Action Stop_T310;
- Action Start_T301;
Action Post_Mgmt(ALERTING);
Next_State q931_user_call_delivered;
- }
- Stimulus Q931_EV_MSG_CONNECT {
- Action Stop_T310;
- Action Post_Mgmt(CONNECT);
- if (Connect_Ack_Option) {
- Action Send(CONNECT_ACKNOWLEDGE);
- }
- Next_State q931_user_active;
- }
- Stimulus Q931_EV_TIMEOUT_T310 {
- Action Send(DISCONNECT());
- Action Start_T305;
- Action Post_Mgmt(HANGUP(cause));
- Next_State q931_user_disconnect_request;
- }
- Stimulus Q931_EV_MGMT_RELEASE_REQ {
- Action Stop_T310;
- Action Send(RELEASE(PRI_CAUSE_CHANNEL_UNACCEPTABLE));
- Action Start_T308;
- Next_State q931_user_release_request;
- }
- }
-
-/* ******************************************************************** */
-
- State q931_user_call_delivered {// aka U4
- Prolog {
- Action Set_State(Q931_CALL_STATE_CALL_DELIVERED);
- }
- Init {
- }
- Epilog {
}
Stimulus Q931_EV_MSG_CONNECT {
Action Post_Mgmt(CONNECT);
@@ -269,6 +225,41 @@
}
Next_State q931_user_active;
}
+ Stimulus Q931_EV_TIMEOUT_T310 {
+ Action Send(DISCONNECT(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Next_State q931_user_disconnect_request;
+ }
+ Stimulus Q931_EV_MGMT_RELEASE_REQ {
+ Action Send(RELEASE(PRI_CAUSE_CHANNEL_UNACCEPTABLE));
+ Next_State q931_user_release_request;
+ }
+ }
+
+/* ******************************************************************** */
+
+ State q931_user_call_delivered {// aka U4
+ Prolog {
+ Action Set_State(Q931_CALL_STATE_CALL_DELIVERED);
+ Action Start_T301;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T301;
+ }
+ Stimulus Q931_EV_MSG_CONNECT {
+ Action Post_Mgmt(CONNECT);
+ if (Connect_Ack_Option) {
+ Action Send(CONNECT_ACKNOWLEDGE);
+ }
+ Next_State q931_user_active;
+ }
+ Stimulus Q931_EV_TIMEOUT_T301 {
+ Action Send(DISCONNECT(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Next_State q931_user_disconnect_request;
+ }
}
/* ******************************************************************** */
@@ -283,16 +274,14 @@
}
Stimulus Q931_EV_MGMT_SETUP_ACKNOWLEDGE {
Action Send(SETUP_ACKNOWLEDGE);
- Action Start_T302;
Next_State q931_user_overlap_receiving;
}
Stimulus Q931_EV_MGMT_ALERTING {
Action Send(ALERTING);
- Next_State q931_user_call_delivered;
+ Next_State q931_user_call_received;
}
Stimulus Q931_EV_MGMT_CONNECT {
Action Send(CONNECT);
- Action Start_T313;
Next_State q931_user_connect_request;
}
Stimulus Q931_EV_MGMT_REJECT_REQ(cause) {
@@ -330,29 +319,28 @@
}
Stimulus Q931_EV_MGMT_CONNECT {
Action Send(CONNECT);
+ Next_State q931_user_connect_request;
+ }
+ }
+
+/* ******************************************************************** */
+
+ State q931_user_connect_request {// aka U8
+ Prolog {
+ Action Set_State(Q931_CALL_STATE_CONNECT_REQUEST);
Action Start_T313;
- Next_State q931_user_connect_request;
- }
- }
-
-/* ******************************************************************** */
-
- State q931_user_connect_request {// aka U8
- Prolog {
- Action Set_State(Q931_CALL_STATE_CONNECT_REQUEST);
- }
- Init {
- }
- Epilog {
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T313;
}
Stimulus Q931_EV_TIMEOUT_T313 {
- Action Send(DISCONNECT);
- Action Start_T305;
- Action Post_Mgmt(HANGUP(cause));
+ Action Send(DISCONNECT(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
Next_State q931_user_disconnect_request;
}
Stimulus Q931_EV_MSG_CONNECT_ACKNOWLEDGE {
- Action Stop_T313;
Action Post_Mgmt(CONNECT_ACKNOWLEDGE);
Next_State q931_user_active;
}
@@ -370,7 +358,6 @@
}
Stimulus Q931_EV_MGMT_CONNECT {
Action Send(CONNECT);
- Action Start_T313;
Next_State q931_user_connect_request;
}
Stimulus Q931_EV_MGMT_ALERTING {
@@ -394,7 +381,6 @@
}
Stimulus Q931_EV_MGMT_SUSPEND_REQ(call_id) {
Action Send(SUSPEND(call_id));
- Action Start_T319;
Next_State q931_user_suspend_request;
}
Stimulus Q931_EV_MSG_NOTIFY {
@@ -403,6 +389,13 @@
Stimulus Q931_EV_MGMT_NOTIFY {
Action Send(NOTIFY);
}
+ Stimulus Q931_EV_DL_RELEASE_IND {
+ /* i.e. if T309 is not already running, start it. */
+ if (!Any_Timer_Running) {
+ Action Start_T309;
+ }
+ Action DL_Establish_Request;
+ }
}
/* ******************************************************************** */
@@ -410,27 +403,25 @@
State q931_user_disconnect_request {// aka U11
Prolog {
Action Set_State(Q931_CALL_STATE_DISCONNECT_REQUEST);
- }
- Init {
- }
- Epilog {
+ Action Start_T305;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T305;
}
Stimulus Q931_EV_MSG_RELEASE {
- Action Stop_T305;
Action Post_Mgmt(HANGUP(cause));
Action Send(RELEASE_COMPLETE(cause));
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_MSG_DISCONNECT {
- Action Stop_T305;
Action Send(RELEASE(cause));
- Action Start_T308;
Next_State q931_user_release_request;
}
Stimulus Q931_EV_TIMEOUT_T305 {
Action Send(RELEASE(cause));
- Action Start_T308;
Next_State q931_user_release_request;
}
Stimulus Q931_EV_MSG_NOTIFY {
@@ -462,7 +453,6 @@
}
Stimulus Q931_EV_MGMT_RELEASE_REQ {
Action Send(RELEASE(cause));
- Action Start_T308;
Next_State q931_user_release_request;
}
}
@@ -472,29 +462,27 @@
State q931_user_suspend_request {// aka U15
Prolog {
Action Set_State(Q931_CALL_STATE_SUSPEND_REQUEST);
- }
- Init {
- }
- Epilog {
+ Action Start_T319;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T319;
}
Stimulus Q931_EV_MSG_SUSPEND_ACKNOWLEDGE {
- Action Stop_T319;
Action Post_Mgmt(SUSPEND_ACKNOWLEDGE);
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_MSG_SUSPEND_REJECT {
- Action Stop_T319;
Action Post_Mgmt(SUSPEND_REJECT(cause));
Next_State q931_user_active;
}
Stimulus Q931_EV_MSG_DISCONNECT {
- Action Stop_T319;
Action Post_Mgmt(HANGUP_REQ(cause));
Next_State q931_user_disconnect_indication;
}
Stimulus Q931_EV_MSG_RELEASE {
- Action Stop_T319;
Action Post_Mgmt(HANGUP(cause));
Action Send(RELEASE_COMPLETE(cause));
Action Release_Call_Reference;
@@ -511,48 +499,47 @@
State q931_user_resume_request {// aka U17
Prolog {
Action Set_State(Q931_CALL_STATE_RESUME_REQUEST);
- }
- Init {
- }
- Epilog {
+ Action Start_T318;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T318;
}
Stimulus Q931_EV_MSG_RESUME_ACKNOWLEDGE {
- Action Stop_T318;
Action Post_Mgmt(RESUME_ACKNOWLEDGE);
Next_State q931_user_active;
}
Stimulus Q931_EV_MSG_RESUME_REJECT {
- Action Stop_T318;
Action Post_Mgmt(RESUME_REJECT(cause));
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_TIMEOUT_T318 {
Action Post_Mgmt(RESUME_REJECT(timeout));
- Action Send(RELEASE(cause));
+ Action Send(RELEASE(PRI_CAUSE_RECOVERY_ON_TIMER_EXPIRE));
+ Next_State q931_user_release_request;
+ }
+ }
+
+/* ******************************************************************** */
+
+ State q931_user_release_request {// aka U19
+ Prolog {
+ Action Set_State(Q931_CALL_STATE_RELEASE_REQUEST);
Action Start_T308;
- Next_State q931_user_release_request;
- }
- }
-
-/* ******************************************************************** */
-
- State q931_user_release_request {// aka U19
- Prolog {
- Action Set_State(Q931_CALL_STATE_RELEASE_REQUEST);
- }
- Init {
- }
- Epilog {
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T308;
}
Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
- Action Stop_T308;
Action Post_Mgmt(HANGUP_ACKNOWLEDGE);
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_MSG_RELEASE {
- Action Stop_T308;
Action Post_Mgmt(HANGUP_ACKNOWLEDGE);
Action Release_Call_Reference;
Next_State q931_user_null;
@@ -582,10 +569,16 @@
State q931_user_overlap_receiving {// aka U25
Prolog {
Action Set_State(Q931_CALL_STATE_OVERLAP_RECEIVING);
- }
- Init {
- }
- Epilog {
+ /*
+ * If T302 is -1(default) do not start it because the
+ * upper layer is to enforce/implement the timer.
+ */
+ Action Start_T302;
+ }
+ Init {
+ }
+ Epilog {
+ Action Stop_T302;
}
Stimulus Q931_EV_MSG_INFORMATION {
if (keypad_digits) {
@@ -596,40 +589,35 @@
if (display) {
Action Post_Mgmt(INFORMATION(display_text));
}
+ Action Stop_T302;
Action Start_T302;
}
Stimulus Q931_EV_MGMT_PROCEEDING {
- Action Stop_T302;
Action Send(PROCEEDING);
Next_State q931_user_incoming_call_proceeding;
}
Stimulus Q931_EV_MGMT_ALERTING {
- Action Stop_T302;
Action Send(ALERTING);
Next_State q931_user_call_received;
}
Stimulus Q931_EV_MGMT_CONNECT {
+ Action Send(CONNECT);
+ Next_State q931_user_connect_request;
+ }
+ Stimulus Q931_EV_TIMEOUT_T302 {
Action Stop_T302;
- Action Send(CONNECT);
- Action Start_T313;
- Next_State q931_user_connect_request;
- }
- Stimulus Q931_EV_TIMEOUT_T302 {
Post_Mgmt(OVERLAP_TIMEOUT);
}
Stimulus Q931_EV_MGMT_PROGRESS {
Action Send(PROGRESS);
}
Stimulus Q931_EV_DL_ESTABLISH_IND {
- Action Stop_T302;
Action Send(DISCONNECT());
- Action Start_T305;
Action Post_Mgmt(HANGUP(cause));
Next_State q931_user_disconnect_request;
}
Stimulus Q931_EV_DL_RELEASE_IND {
Action Post_Mgmt(HANGUP(PRI_CAUSE_NETWORK_OUT_OF_ORDER));
- Action Stop_T302;
Action Release_Call_Reference;
Next_State q931_user_null;
}
@@ -671,7 +659,8 @@
Action pri_error("Should never be used.");
}
Epilog {
- Action Stop_All_Timers;
+ Action Stop_T309;
+ //Action Stop_All_Timers;
if (!upper_layer_knows_call_reference) {
Action Post_Event(Q931_EV_MGMT_DESTROY);
}
@@ -695,13 +684,13 @@
}
}
Stimulus Q931_EV_DL_RELEASE_IND {
- if (!Any_Timer_Running) {
- Action Start_T309;
- }
- Action DL_Establish_Request;
+ //Action Stop_All_Timers;
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_NETWORK_OUT_OF_ORDER));
+ Action Release_Call_Reference;
+ Next_State q931_user_null;
}
Stimulus Q931_EV_DL_ESTABLISH_CONFIRM {
- Action Stop_T309;
+ Action Stop_T309;
Action Send(STATUS());
}
Stimulus Q931_EV_TIMEOUT_T309 {
@@ -735,7 +724,6 @@
if (cause == PRI_CAUSE_WRONG_CALL_STATE) {
Action Post_Mgmt(HANGUP(cause));
Action Send(DISCONNECT(cause));
- Action Start_T305;
Next_State q931_user_disconnect_request;
}
#endif
@@ -785,7 +773,7 @@
Epilog {
}
Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
- Action Stop_All_Timers;
+ //Action Stop_All_Timers;
Action Post_Mgmt(HANGUP_ACK(cause));
Action Release_Call_Reference;
Next_State q931_user_null;
@@ -803,20 +791,19 @@
Epilog {
}
Stimulus Q931_EV_MSG_RELEASE {
- Action Stop_All_Timers;
+ //Action Stop_All_Timers;
Action Post_Mgmt(HANGUP(cause));
Action Send(RELEASE_COMPLETE(cause));
Action Release_Call_Reference;
Next_State q931_user_null;
}
Stimulus Q931_EV_MSG_DISCONNECT {
- Action Stop_All_Timers;
+ //Action Stop_All_Timers;
Action Post_Mgmt(HANGUP_REQ(cause));
Next_State q931_user_disconnect_indication;
}
- Stimulus Q931_EV_MGMT_DISCONNECT_REQUEST(cause) {
+ Stimulus Q931_EV_MGMT_DISCONNECT_REQ(cause) {
Action Send(DISCONNECT(cause));
- Action Start_T305;
Next_State q931_user_disconnect_request;
}
}
More information about the libpri-commits
mailing list