File: cc_qsig_agent.fsm

package info (click to toggle)
libpri 1.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 2,696 kB
  • sloc: ansic: 39,045; makefile: 159; sh: 66
file content (140 lines) | stat: -rw-r--r-- 3,525 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * FSM pseudo code used in the design/implementation of the CC Q.SIG agent.
 */
FSM CC_QSIG_Agent
{
	State CC_STATE_IDLE {
		Init {
		}
		Prolog {
			Action Set_Selfdestruct;
		}
		Stimulus CC_EVENT_AVAILABLE {
			Next_State CC_STATE_AVAILABLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Set_Selfdestruct;
		}
	}
	State CC_STATE_AVAILABLE {
		/*
		 * For Q.SIG mode the T_RETENTION timer is not defined.  However,
		 * we will use it anyway in this state to protect our resources
		 * from leaks caused by user A not requesting CC.  This timer
		 * should be set much longer than the PTMP network link to
		 * allow for variations in user A's CC offer timer.
		 */
		Epilog {
			Action Stop_T_RETENTION;
		}
		Stimulus CC_EVENT_MSG_RELEASE {
			Action Stop_T_RETENTION;
			Action Start_T_RETENTION;
		}
		Stimulus CC_EVENT_MSG_RELEASE_COMPLETE {
			Action Stop_T_RETENTION;
			Action Start_T_RETENTION;
		}
		Stimulus CC_EVENT_CC_REQUEST {
			Action Pass_Up_CC_Request;
			/* Send Q931_CALL_PROCEEDING message on signaling link. */
			Action Send_Call_Proceeding;
			Next_State CC_STATE_REQUESTED;
		}
		Stimulus CC_EVENT_INTERNAL_CLEARING {
			Action Stop_T_RETENTION;
			Action Start_T_RETENTION;
		}
		Stimulus CC_EVENT_TIMEOUT_T_RETENTION {
			Action Pass_Up_CC_Cancel;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Next_State CC_STATE_IDLE;
		}
	}
	State CC_STATE_REQUESTED {
		Stimulus CC_EVENT_CC_REQUEST_ACCEPT {
			Next_State CC_STATE_ACTIVATED;
		}
		Stimulus CC_EVENT_SIGNALING_GONE {
			/* Signaling link cleared. */
			Action Pass_Up_CC_Cancel;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Hangup_Signaling_Link;
			Next_State CC_STATE_IDLE;
		}
	}
	State CC_STATE_WAIT_DESTRUCTION {
		/*
		 * Delayed disconnect of the signaling link to allow subcmd events
		 * from the signaling link to be passed up.
		 */
		Stimulus CC_EVENT_SIGNALING_GONE {
			/* Signaling link cleared. */
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_HANGUP_SIGNALING {
			Action Hangup_Signaling_Link;
			Next_State CC_STATE_IDLE;
		}
	}
	State CC_STATE_ACTIVATED {
		Stimulus CC_EVENT_REMOTE_USER_FREE {
			/* Send ccExecPossible in FACILITY or SETUP. */
			Action Send_RemoteUserFree;
			Next_State CC_STATE_WAIT_CALLBACK;
		}
	}
	State CC_STATE_WAIT_CALLBACK {
		Stimulus CC_EVENT_SUSPEND {
			/* Received ccSuspend */
			Action Set_A_Status_Busy;
			Action Pass_Up_A_Status;
			Next_State CC_STATE_SUSPENDED;
		}
		Stimulus CC_EVENT_RECALL {
			/* Received ccRingout */
			Action Pass_Up_CC_Call;
			Action Set_Original_Call_Parameters;
		}
	}
	State CC_STATE_SUSPENDED {
		Stimulus CC_EVENT_RESUME {
			/* Received ccResume */
			Action Set_A_Status_Free;
			Action Pass_Up_A_Status;
			Next_State CC_STATE_ACTIVATED;
		}
	}
	Superstate CC_ACTIVE(CC_STATE_ACTIVATED, CC_STATE_WAIT_CALLBACK, CC_STATE_SUSPENDED) {
		Prolog {
			/* Start QSIG_CCBS_T2/QSIG_CCNR_T2 depending upon CC mode. */
			Action Start_T_SUPERVISION;
		}
		Epilog {
			Action Stop_T_SUPERVISION;
		}
		Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
			Action Pass_Up_CC_Cancel;
			Action Send_CC_Cancel;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_SIGNALING_GONE {
			/* Signaling link cleared. */
			Action Disassociate_Signaling_Link;
		}
		Stimulus CC_EVENT_LINK_CANCEL {
			/* Received ccCancel */
			Action Pass_Up_CC_Cancel;
			Action Post_HANGUP_SIGNALING;
			Next_State CC_STATE_WAIT_DESTRUCTION;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Send_CC_Cancel;
			Next_State CC_STATE_IDLE;
		}
	}
}