2
* FSM pseudo code used in the design/implementation of the CC PTMP agent.
10
Action Set_Selfdestruct;
12
Stimulus CC_EVENT_AVAILABLE {
13
Next_State CC_STATE_PENDING_AVAILABLE;
15
Stimulus CC_EVENT_CANCEL {
16
Action Set_Selfdestruct;
19
State CC_STATE_PENDING_AVAILABLE {
20
Stimulus CC_EVENT_MSG_ALERTING {
21
Action Send_CC_Available(Q931_ALERTING);
22
Next_State CC_STATE_AVAILABLE;
24
Stimulus CC_EVENT_MSG_DISCONNECT {
25
Action Send_CC_Available(Q931_DISCONNECT);
26
Next_State CC_STATE_AVAILABLE;
28
Stimulus CC_EVENT_INTERNAL_CLEARING {
29
Action Release_LinkID;
30
Action Pass_Up_CC_Cancel;
31
Next_State CC_STATE_IDLE;
33
Stimulus CC_EVENT_CANCEL {
34
Action Release_LinkID;
35
Next_State CC_STATE_IDLE;
38
State CC_STATE_AVAILABLE {
40
Action Stop_T_RETENTION;
42
Stimulus CC_EVENT_MSG_RELEASE {
43
Action Stop_T_RETENTION;
44
Action Start_T_RETENTION;
46
Stimulus CC_EVENT_MSG_RELEASE_COMPLETE {
47
Action Stop_T_RETENTION;
48
Action Start_T_RETENTION;
50
Stimulus CC_EVENT_CC_REQUEST {
51
Action Pass_Up_CC_Request;
52
Next_State CC_STATE_REQUESTED;
54
Stimulus CC_EVENT_INTERNAL_CLEARING {
55
Action Stop_T_RETENTION;
56
Action Start_T_RETENTION;
58
Stimulus CC_EVENT_TIMEOUT_T_RETENTION {
59
Action Send_EraseCallLinkageID;
60
Action Release_LinkID;
61
Action Pass_Up_CC_Cancel;
62
Next_State CC_STATE_IDLE;
64
Stimulus CC_EVENT_CANCEL {
65
Action Send_EraseCallLinkageID;
66
Action Release_LinkID;
67
Next_State CC_STATE_IDLE;
70
State CC_STATE_REQUESTED {
72
Action Send_EraseCallLinkageID;
73
Action Release_LinkID;
75
Stimulus CC_EVENT_CC_REQUEST_ACCEPT {
76
Next_State CC_STATE_ACTIVATED;
78
Stimulus CC_EVENT_CANCEL {
79
Next_State CC_STATE_IDLE;
83
* Pass_Up_A_Status passes up the current final status of A.
84
* Does nothing if status is invalid.
86
* Pass_Up_A_Status_Indirect is the same as Pass_Up_A_Status but
87
* sets a timer to expire immediately to pass up the event.
88
* Does nothing if status is invalid.
90
* Pass_Up_Status_Rsp_A passes up the current accumulated status of A.
91
* Does nothing if status is invalid.
93
* Pass_Up_Status_Rsp_A_Indirect is the same as Pass_Up_Status_Rsp_A but
94
* sets a timer to expire immediately to pass up the event.
95
* Does nothing if status is invalid.
97
State CC_STATE_ACTIVATED {
99
Action Reset_A_Status;
100
Action Raw_Status_Count_Reset;
102
Stimulus CC_EVENT_RECALL {
103
Action Send_Error_Recall(ROSE_ERROR_CCBS_NotReadyForCall);
104
Action Set_Call_To_Hangup;
106
Stimulus CC_EVENT_B_FREE {
107
Action Send_CCBSBFree;
109
Stimulus CC_EVENT_REMOTE_USER_FREE {
112
Next_State CC_STATE_B_AVAILABLE;
115
Action Pass_Up_A_Status_Indirect;
116
Action Send_CCBSBFree;
117
Next_State CC_STATE_SUSPENDED;
120
//Action Pass_Up_A_Status_Indirect;
121
Action Send_RemoteUserFree;
122
Next_State CC_STATE_WAIT_CALLBACK;
125
Stimulus CC_EVENT_A_STATUS {
126
Test = Get_T_CCBS1_Status;
128
Action Pass_Up_Status_Rsp_A_Indirect;
132
Action Reset_A_Status;
133
Action Reset_Raw_A_Status;
134
Action Send_CCBSStatusRequest;
135
Action Start_T_CCBS1;
136
Action Stop_Extended_T_CCBS1;
137
Action Start_Extended_T_CCBS1;
141
Stimulus CC_EVENT_A_FREE {
142
Action Raw_Status_Count_Reset;
143
Action Set_Raw_A_Status_Free;
144
Action Promote_Raw_A_Status;
145
Action Pass_Up_Status_Rsp_A;
148
Stimulus CC_EVENT_A_BUSY {
149
Action Add_Raw_A_Status_Busy;
150
Action Pass_Up_Status_Rsp_A;
152
Stimulus CC_EVENT_TIMEOUT_T_CCBS1 {
153
Action Promote_Raw_A_Status;
156
/* Only received User A busy. */
157
Action Raw_Status_Count_Reset;
160
/* Did not get any responses. */
161
Action Raw_Status_Count_Increment;
162
Test = Get_Raw_Status_Count;
163
Test >= RAW_STATUS_COUNT_MAX {
164
/* User A no longer present. */
165
Action Send_CCBSErase(Normal_Unspecified);
166
Action Pass_Up_CC_Cancel;
167
Next_State CC_STATE_IDLE;
171
Stimulus CC_EVENT_TIMEOUT_EXTENDED_T_CCBS1 {
172
Action Reset_A_Status;
173
Action Raw_Status_Count_Reset;
176
State CC_STATE_B_AVAILABLE {
177
/* A status is always invalid on entry. */
179
Test = Get_T_CCBS1_Status;
181
Action Reset_Raw_A_Status;
182
Action Send_CCBSStatusRequest;
183
Action Start_T_CCBS1;
186
Stimulus CC_EVENT_RECALL {
187
Action Send_Error_Recall(ROSE_ERROR_CCBS_NotReadyForCall);
188
Action Set_Call_To_Hangup;
190
Stimulus CC_EVENT_A_STATUS {
191
Action Stop_Extended_T_CCBS1;
192
Action Start_Extended_T_CCBS1;
193
Action Pass_Up_Status_Rsp_A_Indirect;
195
Stimulus CC_EVENT_A_FREE {
196
Action Send_RemoteUserFree;
197
Action Set_Raw_A_Status_Free;
198
//Action Promote_Raw_A_Status;
199
//Action Pass_Up_A_Status;
200
Test = Get_Extended_T_CCBS1_Status;
202
Action Pass_Up_Status_Rsp_A;
204
Next_State CC_STATE_WAIT_CALLBACK;
206
Stimulus CC_EVENT_A_BUSY {
207
Action Add_Raw_A_Status_Busy;
208
Test = Get_Extended_T_CCBS1_Status;
210
Action Pass_Up_Status_Rsp_A;
213
Stimulus CC_EVENT_TIMEOUT_T_CCBS1 {
214
Test = Get_Raw_A_Status;
216
/* Only received User A is busy. */
217
Action Raw_Status_Count_Reset;
218
Action Send_CCBSBFree;
219
Action Promote_Raw_A_Status;
220
Action Pass_Up_A_Status;
221
Next_State CC_STATE_SUSPENDED;
224
/* Did not get any responses. */
225
Action Raw_Status_Count_Increment;
226
Test = Get_Raw_Status_Count;
227
Test >= RAW_STATUS_COUNT_MAX {
228
/* User A no longer present. */
229
Action Send_CCBSErase(Normal_Unspecified);
230
Action Pass_Up_CC_Cancel;
231
Next_State CC_STATE_IDLE;
233
//Action Reset_Raw_A_Status;
234
Action Send_CCBSStatusRequest;
235
Action Start_T_CCBS1;
239
State CC_STATE_SUSPENDED {
241
Test = Get_T_CCBS1_Status;
243
Action Reset_Raw_A_Status;
244
Action Send_CCBSStatusRequest;
245
Action Start_T_CCBS1;
248
Stimulus CC_EVENT_RECALL {
249
Action Send_Error_Recall(ROSE_ERROR_CCBS_NotReadyForCall);
250
Action Set_Call_To_Hangup;
252
Stimulus CC_EVENT_A_STATUS {
253
Action Stop_Extended_T_CCBS1;
254
Action Start_Extended_T_CCBS1;
255
Action Pass_Up_Status_Rsp_A_Indirect;
257
Stimulus CC_EVENT_A_FREE {
258
Action Set_Raw_A_Status_Free;
259
Action Promote_Raw_A_Status;
260
Action Pass_Up_A_Status;
261
Test = Get_Extended_T_CCBS1_Status;
263
Action Pass_Up_Status_Rsp_A;
266
Action Stop_Extended_T_CCBS1;
267
Next_State CC_STATE_ACTIVATED;
269
Stimulus CC_EVENT_A_BUSY {
270
Action Add_Raw_A_Status_Busy;
271
Test = Get_Extended_T_CCBS1_Status;
273
Action Pass_Up_Status_Rsp_A;
276
Stimulus CC_EVENT_TIMEOUT_T_CCBS1 {
277
Test = Get_Raw_A_Status;
279
/* Only received User A is busy. */
280
Action Raw_Status_Count_Reset;
283
/* Did not get any responses. */
284
Action Raw_Status_Count_Increment;
285
Test = Get_Raw_Status_Count;
286
Test >= RAW_STATUS_COUNT_MAX {
287
/* User A no longer present. */
288
Action Send_CCBSErase(Normal_Unspecified);
289
Action Pass_Up_CC_Cancel;
290
Next_State CC_STATE_IDLE;
293
Action Reset_Raw_A_Status;
294
Action Send_CCBSStatusRequest;
295
Action Start_T_CCBS1;
298
State CC_STATE_WAIT_CALLBACK {
301
Action Start_T_RECALL;
304
Action Stop_T_RECALL;
306
Stimulus CC_EVENT_TIMEOUT_T_RECALL {
307
Action Pass_Up_CC_Cancel;
308
Action Send_CCBSErase(T_CCBS3_TIMEOUT);
309
Next_State CC_STATE_IDLE;
311
Stimulus CC_EVENT_STOP_ALERTING {
313
* If an earlier link can send us this event then we
314
* really should be configured for globalRecall like
317
Test = Get_Recall_Mode;
318
Test == globalRecall {
319
Action Send_CCBSStopAlerting;
321
Next_State CC_STATE_ACTIVATED;
323
Stimulus CC_EVENT_RECALL {
324
Action Pass_Up_CC_Call;
325
Action Set_Original_Call_Parameters;
326
Test = Get_Recall_Mode;
327
Test == globalRecall {
328
Action Send_CCBSStopAlerting;
330
Next_State CC_STATE_CALLBACK;
332
Stimulus CC_EVENT_A_STATUS {
333
Action Set_Raw_A_Status_Free;
334
Action Pass_Up_Status_Rsp_A_Indirect;
337
State CC_STATE_CALLBACK {
338
Stimulus CC_EVENT_RECALL {
339
Action Send_Error_Recall(ROSE_ERROR_CCBS_AlreadyAccepted);
340
Action Set_Call_To_Hangup;
342
Stimulus CC_EVENT_A_STATUS {
343
Action Set_Raw_A_Status_Free;
344
Action Pass_Up_Status_Rsp_A_Indirect;
347
Superstate CC_ACTIVE(CC_STATE_ACTIVATED, CC_STATE_B_AVAILABLE, CC_STATE_SUSPENDED, CC_STATE_WAIT_CALLBACK, CC_STATE_CALLBACK) {
349
/* Start T_CCBS2 or T_CCNR2 depending upon CC mode. */
350
Action Start_T_SUPERVISION;
353
Action Stop_T_SUPERVISION;
355
Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
356
Action Pass_Up_CC_Cancel;
357
Action Send_CCBSErase(T_CCBS2_TIMEOUT);
358
Next_State CC_STATE_IDLE;
360
Stimulus CC_EVENT_LINK_CANCEL {
361
Action Pass_Up_CC_Cancel;
362
Action Send_CCBSErase(Normal_Unspecified);
363
Next_State CC_STATE_IDLE;
365
Stimulus CC_EVENT_CANCEL {
366
Action Send_CCBSErase(Normal_Unspecified);
367
Next_State CC_STATE_IDLE;
370
Superstate CC_STATUS(CC_STATE_ACTIVATED, CC_STATE_B_AVAILABLE, CC_STATE_SUSPENDED) {
373
Action Stop_Extended_T_CCBS1;