File: cc_qsig_agent_flattened.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 (187 lines) | stat: -rw-r--r-- 4,967 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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/*
 * FSM pseudo code used in the design/implementation of the CC Q.SIG agent.
 */
FSM CC_QSIG_Agent
{
	State CC_STATE_IDLE {
		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.
		 */
		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;
			Action Stop_T_RETENTION;
			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;
			Action Stop_T_RETENTION;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Stop_T_RETENTION;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
	}
	State CC_STATE_REQUESTED {
		Stimulus CC_EVENT_CC_REQUEST_ACCEPT {
			/* Start QSIG_CCBS_T2/QSIG_CCNR_T2 depending upon CC mode. */
			Action Start_T_SUPERVISION;
			Next_State CC_STATE_ACTIVATED;
		}
		Stimulus CC_EVENT_SIGNALING_GONE {
			/* Signaling link cleared. */
			Action Pass_Up_CC_Cancel;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Hangup_Signaling_Link;
			Action Set_Selfdestruct;
			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. */
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_HANGUP_SIGNALING {
			Action Hangup_Signaling_Link;
			Action Set_Selfdestruct;
			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;
		}
		Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
			Action Pass_Up_CC_Cancel;
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			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;
			Action Stop_T_SUPERVISION;
			Next_State CC_STATE_WAIT_DESTRUCTION;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
	}
	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;
		}
		Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
			Action Pass_Up_CC_Cancel;
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			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;
			Action Stop_T_SUPERVISION;
			Next_State CC_STATE_WAIT_DESTRUCTION;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
	}
	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;
		}
		Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
			Action Pass_Up_CC_Cancel;
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			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;
			Action Stop_T_SUPERVISION;
			Next_State CC_STATE_WAIT_DESTRUCTION;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Send_CC_Cancel;
			Action Stop_T_SUPERVISION;
			Action Set_Selfdestruct;
			Next_State CC_STATE_IDLE;
		}
	}
}