2
* FSM pseudo code used in the design/implementation of the CC PTP monitor.
7
Stimulus CC_EVENT_AVAILABLE {
8
/* Received CCBS-T-Aailable */
9
Action Pass_Up_CC_Available;
10
Next_State CC_STATE_AVAILABLE;
12
Stimulus CC_EVENT_CANCEL {
13
Action Set_Selfdestruct;
16
State CC_STATE_AVAILABLE {
18
* The upper layer is responsible for canceling the CC available
21
Stimulus CC_EVENT_CC_REQUEST {
23
* Before event is posted:
24
* cc_record->is_ccnr is set.
25
* The signaling connection call record is created.
27
Action Queue_CC_Request;
29
* For PTP mode the T_ACTIVATE timer is not defined. However,
30
* we will use it to protect our resources from leaks caused
31
* by the network cable being disconnected.
32
* This timer should be set longer than normal so the
33
* CC records will normally be cleaned up by network activity.
35
Action Start_T_ACTIVATE;
36
Next_State CC_STATE_REQUESTED;
38
Stimulus CC_EVENT_CANCEL {
39
Action Set_Selfdestruct;
40
Next_State CC_STATE_IDLE;
43
State CC_STATE_REQUESTED {
44
Stimulus CC_EVENT_CC_REQUEST_ACCEPT {
46
* Received CCBS-T-Request/CCNR-T-Request response
47
* Before event is posted:
48
* Negotiated CC retention setting saved
50
Action Pass_Up_CC_Req_Rsp_Success;
51
Action Stop_T_ACTIVATE;
52
/* Start T_CCBS6/T_CCNR6 depending upon CC mode. */
53
Action Start_T_SUPERVISION;
54
Action Reset_A_Status;
55
Next_State CC_STATE_ACTIVATED;
57
Stimulus CC_EVENT_CC_REQUEST_FAIL {
58
Action Pass_Up_CC_Req_Rsp_Fail(error/reject, code);
59
Action Pass_Up_CC_Cancel;
61
* If this request fail comes in with the RELEASE_COMPLETE
62
* message then the post action will never get a chance to
63
* run. It will be aborted because the CC_EVENT_SIGNALING_GONE
64
* will be processed first.
66
Action Post_HANGUP_SIGNALING;
67
Action Stop_T_ACTIVATE;
68
Next_State CC_STATE_WAIT_DESTRUCTION;
70
Stimulus CC_EVENT_TIMEOUT_T_ACTIVATE {
71
Action Pass_Up_CC_Req_Rsp_Timeout;
72
Action Pass_Up_CC_Cancel;
73
Action Hangup_Signaling_Link;
74
Action Stop_T_ACTIVATE;
75
Action Set_Selfdestruct;
76
Next_State CC_STATE_IDLE;
78
Stimulus CC_EVENT_SIGNALING_GONE {
79
/* Claim it was a timeout */
80
Action Pass_Up_CC_Req_Rsp_Timeout;
81
Action Pass_Up_CC_Cancel;
82
Action Stop_T_ACTIVATE;
83
Action Set_Selfdestruct;
84
Next_State CC_STATE_IDLE;
86
Stimulus CC_EVENT_CANCEL {
87
Action Hangup_Signaling_Link;
88
Action Stop_T_ACTIVATE;
89
Action Set_Selfdestruct;
90
Next_State CC_STATE_IDLE;
93
State CC_STATE_WAIT_DESTRUCTION {
95
* Delayed disconnect of the signaling link to allow subcmd events
96
* from the signaling link to be passed up.
98
Stimulus CC_EVENT_SIGNALING_GONE {
99
/* Signaling link cleared. */
100
Action Set_Selfdestruct;
101
Next_State CC_STATE_IDLE;
103
Stimulus CC_EVENT_HANGUP_SIGNALING {
104
Action Hangup_Signaling_Link;
105
Action Set_Selfdestruct;
106
Next_State CC_STATE_IDLE;
108
Stimulus CC_EVENT_CANCEL {
109
Action Hangup_Signaling_Link;
110
Action Set_Selfdestruct;
111
Next_State CC_STATE_IDLE;
114
State CC_STATE_ACTIVATED {
115
Stimulus CC_EVENT_REMOTE_USER_FREE {
116
/* Received CCBS_T_RemoteUserFree */
117
Action Pass_Up_Remote_User_Free;
120
Action Send_CC_Suspend;
121
Next_State CC_STATE_SUSPENDED;
123
Next_State CC_STATE_WAIT_CALLBACK;
125
Stimulus CC_EVENT_SUSPEND {
126
Action Set_A_Status_Busy;
128
Stimulus CC_EVENT_RESUME {
129
Action Reset_A_Status;
131
Stimulus CC_EVENT_RECALL {
132
/* The original call parameters have already been set. */
133
Action Queue_SETUP_Recall;
135
Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
136
Action Pass_Up_CC_Cancel;
137
Action Hangup_Signaling_Link;
138
Action Stop_T_SUPERVISION;
139
Action Set_Selfdestruct;
140
Next_State CC_STATE_IDLE;
142
Stimulus CC_EVENT_SIGNALING_GONE {
143
/* Signaling link cleared. */
144
Action Pass_Up_CC_Cancel;
145
Action Stop_T_SUPERVISION;
146
Action Set_Selfdestruct;
147
Next_State CC_STATE_IDLE;
149
Stimulus CC_EVENT_CANCEL {
150
Action Hangup_Signaling_Link;
151
Action Stop_T_SUPERVISION;
152
Action Set_Selfdestruct;
153
Next_State CC_STATE_IDLE;
156
State CC_STATE_WAIT_CALLBACK {
157
Stimulus CC_EVENT_SUSPEND {
158
Action Send_CC_Suspend;
159
Next_State CC_STATE_SUSPENDED;
161
Stimulus CC_EVENT_RECALL {
162
/* The original call parameters have already been set. */
163
Action Queue_SETUP_Recall;
165
Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
166
Action Pass_Up_CC_Cancel;
167
Action Hangup_Signaling_Link;
168
Action Stop_T_SUPERVISION;
169
Action Set_Selfdestruct;
170
Next_State CC_STATE_IDLE;
172
Stimulus CC_EVENT_SIGNALING_GONE {
173
/* Signaling link cleared. */
174
Action Pass_Up_CC_Cancel;
175
Action Stop_T_SUPERVISION;
176
Action Set_Selfdestruct;
177
Next_State CC_STATE_IDLE;
179
Stimulus CC_EVENT_CANCEL {
180
Action Hangup_Signaling_Link;
181
Action Stop_T_SUPERVISION;
182
Action Set_Selfdestruct;
183
Next_State CC_STATE_IDLE;
186
State CC_STATE_SUSPENDED {
187
Stimulus CC_EVENT_RESUME {
188
Action Send_CC_Resume;
189
Action Reset_A_Status;
190
Next_State CC_STATE_ACTIVATED;
192
Stimulus CC_EVENT_RECALL {
193
/* The original call parameters have already been set. */
194
Action Queue_SETUP_Recall;
196
Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
197
Action Pass_Up_CC_Cancel;
198
Action Hangup_Signaling_Link;
199
Action Stop_T_SUPERVISION;
200
Action Set_Selfdestruct;
201
Next_State CC_STATE_IDLE;
203
Stimulus CC_EVENT_SIGNALING_GONE {
204
/* Signaling link cleared. */
205
Action Pass_Up_CC_Cancel;
206
Action Stop_T_SUPERVISION;
207
Action Set_Selfdestruct;
208
Next_State CC_STATE_IDLE;
210
Stimulus CC_EVENT_CANCEL {
211
Action Hangup_Signaling_Link;
212
Action Stop_T_SUPERVISION;
213
Action Set_Selfdestruct;
214
Next_State CC_STATE_IDLE;