[libpri-commits] rmudgett: branch rmudgett/q931_fsm r2250 - /team/rmudgett/q931_fsm/doc/
SVN commits to the libpri project
libpri-commits at lists.digium.com
Thu Mar 10 20:26:58 CST 2011
Author: rmudgett
Date: Thu Mar 10 20:26:52 2011
New Revision: 2250
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=2250
Log:
Q.931 user side FSM states. Need superstate events handling.
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=2250&r1=2249&r2=2250
==============================================================================
--- team/rmudgett/q931_fsm/doc/q931_user.fsm (original)
+++ team/rmudgett/q931_fsm/doc/q931_user.fsm Thu Mar 10 20:26:52 2011
@@ -18,12 +18,20 @@
/* Terminate the FSM */
Next_State *;
}
+ Stimulus Q931_EV_MSG_STATUS_ENQUIRY {
+ Action Send(STATUS(Current_state));
+ }
Stimulus Q931_EV_MSG_STATUS {
+ if (!Get_STATUS_Call_State) {
+ Action Post_Mgmt(HANGUP(cause));
+ Next_State q931_user_null;
+ }
}
Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
}
Stimulus Q931_EV_MSG_other {
- Action Send(STATUS(PRI_CAUSE_INVALID_CALL_REFERENCE));
+ //Action Send(STATUS(PRI_CAUSE_WRONG_CALL_STATE));
+ //Action Send(STATUS(PRI_CAUSE_INVALID_CALL_REFERENCE));
}
State q931_user_null {// aka U0
@@ -34,6 +42,38 @@
}
Epilog {
}
+ Stimulus Q931_EV_MGMT_RESUME_REQ(call_id) {
+ /* 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 {
+ Action Post_Mgmt(SETUP);
+ Next_State q931_user_call_present;
+ }
+ Stimulus Q931_EV_MGMT_SETUP {
+ /* 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 {
+ if (Get_STATUS_Call_State) {
+ Action Send(RELEASE_COMPLETE(PRI_CAUSE_WRONG_CALL_STATE));
+ }
+ }
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Send(RELEASE_COMPLETE(PRI_CAUSE_NORMAL_CLEARING));
+ }
+ Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
+ /* Ignore RELEASE_COMPLETE messages. */
+ }
+ Stimulus Q931_EV_MSG_other {
+ Action Send(RELEASE_COMPLETE(PRI_CAUSE_INVALID_CALL_REFERENCE));
+ }
}
State q931_user_call_initiated {// aka U1
@@ -44,6 +84,57 @@
}
Epilog {
}
+ Stimulus Q931_EV_MGMT_OVERLAP_DIGIT(digit) {
+ Action Save_Overlap_Digit(digit);
+ }
+ Stimulus Q931_EV_MGMT_DISCONNECT_REQUEST(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));
+ 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;
+ }
+ Stimulus Q931_EV_TIMEOUT_T303 {
+ if (First_Time) {
+ Action Send(SETUP);
+ Action Start_T303;
+ } else {
+ Action Post_Mgmt(HANGUP(PRI_CAUSE_NO_USER_RESPONSE));
+ Next_State q931_user_null;
+ }
+ }
+ 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);
+ }
+ Next_State q931_user_active;
+ }
}
State q931_user_overlap_sending {// aka U2
@@ -54,6 +145,49 @@
}
Epilog {
}
+ Stimulus Q931_EV_MGMT_OVERLAP_DIGIT(digit) {
+ Action Send(INFORMATION(digit));
+ Action Stop_T304;
+ 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;
+ }
+ Stimulus Q931_EV_MSG_PROGRESS {
+ /* PROGRESS with interworking or tone code */
+ if (interworking) {
+ Action Stop_T304;
+ }
+ Action Post_Mgmt(PROGRESS);
+ }
+ Stimulus Q931_EV_MSG_CONNECT {
+ Action Stop_T304;
+ Action Post_Mgmt(CONNECT);
+ if (Connect_Ack_Option) {
+ Action Send(CONNECT_ACKNOWLEDGE);
+ }
+ Next_State q931_user_active;
+ }
+ 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());
+ Action Start_T305;
+ Action Post_Mgmt(HANGUP(cause));
+ Next_State q931_user_disconnect_request;
+ }
}
State q931_user_outgoing_call_proceeding {// aka U3
@@ -64,6 +198,36 @@
}
Epilog {
}
+ 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
@@ -74,6 +238,13 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_CONNECT {
+ Action Post_Mgmt(CONNECT);
+ if (Connect_Ack_Option) {
+ Action Send(CONNECT_ACKNOWLEDGE);
+ }
+ Next_State q931_user_active;
+ }
}
State q931_user_call_present {// aka U6
@@ -84,6 +255,42 @@
}
Epilog {
}
+ 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);
+ Action Start_T302;
+ Next_State q931_user_call_delivered;
+ }
+ Stimulus Q931_EV_MGMT_CONNECT {
+ Action Send(CONNECT);
+ Action Start_T313;
+ Next_State q931_user_connect_request;
+ }
+ Stimulus Q931_EV_MGMT_REJECT_REQ(cause) {
+ /* Section 5.2.5.1 */
+ if (Reject_Option) {
+ Send(RELEASE_COMPLETE(PRI_CAUSE_INCOMPATIBLE_DESTINATION))
+ }
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_MGMT_PROCEEDING {
+ Action Send(PROCEEDING);
+ Next_State q931_user_incoming_call_proceeding;
+ }
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Post_Mgmt(HANGUP(cause));
+ Action Send(RELEASE_COMPLETE);
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_MSG_DISCONNECT {
+ Action Post_Mgmt(HANGUP_REQ(cause));
+ Next_State q931_user_disconnect_indication;
+ }
}
State q931_user_call_received {// aka U7
@@ -94,6 +301,11 @@
}
Epilog {
}
+ Stimulus Q931_EV_MGMT_CONNECT {
+ Action Send(CONNECT);
+ Action Start_T313;
+ Next_State q931_user_connect_request;
+ }
}
State q931_user_connect_request {// aka U8
@@ -104,6 +316,17 @@
}
Epilog {
}
+ Stimulus Q931_EV_TIMEOUT_T313 {
+ Action Send(DISCONNECT);
+ Action Start_T305;
+ Action Post_Mgmt(HANGUP(cause));
+ 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;
+ }
}
State q931_user_incoming_call_proceeding {// aka U9
@@ -114,6 +337,18 @@
}
Epilog {
}
+ Stimulus Q931_EV_MGMT_CONNECT {
+ Action Send(CONNECT);
+ Action Start_T313;
+ Next_State q931_user_connect_request;
+ }
+ Stimulus Q931_EV_MGMT_ALERTING {
+ Action Send(ALERTING);
+ Next_State q931_user_call_received;
+ }
+ Stimulus Q931_EV_MGMT_PROGRESS {
+ Action Send(PROGRESS);
+ }
}
State q931_user_active {// aka U10
@@ -124,6 +359,17 @@
}
Epilog {
}
+ 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 {
+ Action Post_Mgmt(NOTIFY);
+ }
+ Stimulus Q931_EV_MGMT_NOTIFY {
+ Action Send(NOTIFY);
+ }
}
State q931_user_disconnect_request {// aka U11
@@ -134,6 +380,27 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Stop_T305;
+ Action Post_Mgmt(HANGUP(cause));
+ Action Send(RELEASE_COMPLETE(cause));
+ 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 {
+ // There does not seem to be any reason for
+ // this being here in the spec.
+ //}
}
State q931_user_disconnect_indication {// aka U12
@@ -144,6 +411,16 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Post_Mgmt(HANGUP(cause));
+ Action Send(RELEASE_COMPLETE(cause));
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_MGMT_RELEASE_REQ {
+ Action Send(RELEASE(cause));
+ Action Start_T308;
+ Next_State q931_user_release_request;
+ }
}
State q931_user_suspend_request {// aka U15
@@ -154,6 +431,31 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_SUSPEND_ACKNOWLEDGE {
+ Action Stop_T319;
+ Action Post_Mgmt(SUSPEND_ACKNOWLEDGE);
+ 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));
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_TIMEOUT_T319 {
+ Action Post_Mgmt(SUSPEND_REJECT(timeout));
+ Next_State q931_user_active;
+ }
}
State q931_user_resume_request {// aka U17
@@ -164,6 +466,23 @@
}
Epilog {
}
+ 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 Start_T308;
+ Next_State q931_user_release_request;
+ }
}
State q931_user_release_request {// aka U19
@@ -174,6 +493,29 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
+ Action Stop_T308;
+ Action Post_Mgmt(HANGUP_ACKNOWLEDGE);
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Stop_T308;
+ Action Post_Mgmt(HANGUP_ACKNOWLEDGE);
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_TIMEOUT_T308 {
+ if (First_Timeout) {
+ Action Send(RELEASE(cause));
+ Action Start_T308;
+ } else {
+ /* B channel should be placed in maintenance mode */
+ Action Post_Mgmt(HANGUP_ACKNOWLEDGE(timeout));
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
+ }
}
State q931_user_overlap_receiving {// aka U25
@@ -184,6 +526,32 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_INFORMATION {
+ Action Post_Mgmt(INFORMATION(digits));
+ 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 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);
+ }
}
State q931_user_call_independent_service {// aka U31
@@ -194,5 +562,20 @@
}
Epilog {
}
+ Stimulus Q931_EV_MSG_FACILITY {
+ Action Post_Mgmt(FACILITY);
+ }
+ Stimulus Q931_EV_MSG_DISCONNECT {
+ Action Send(RELEASE(PRI_CAUSE_NORMAL_CLEARING));
+ }
+ Stimulus Q931_EV_MSG_RELEASE {
+ Action Send(RELEASE_COMPLETE(PRI_CAUSE_NORMAL_CLEARING));
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
+ Stimulus Q931_EV_MSG_RELEASE_COMPLETE {
+ Action Post_Event(Q931_EV_MGMT_DESTROY);
+ Next_State q931_user_null;
+ }
}
}
More information about the libpri-commits
mailing list