File: cc_ptp_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 (152 lines) | stat: -rw-r--r-- 3,694 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
/*
 * FSM pseudo code used in the design/implementation of the CC PTP agent.
 */
FSM CC_PTP_Agent
{
	State CC_STATE_IDLE {
		Init {
		}
		Prolog {
			Action Set_Selfdestruct;
		}
		Stimulus CC_EVENT_AVAILABLE {
			Next_State CC_STATE_PENDING_AVAILABLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Action Set_Selfdestruct;
		}
	}
	State CC_STATE_PENDING_AVAILABLE {
		Stimulus CC_EVENT_MSG_ALERTING {
			Action Send_CC_Available(Q931_ALERTING);
			Next_State CC_STATE_AVAILABLE;
		}
		Stimulus CC_EVENT_MSG_DISCONNECT {
			Action Send_CC_Available(Q931_DISCONNECT);
			Next_State CC_STATE_AVAILABLE;
		}
		Stimulus CC_EVENT_INTERNAL_CLEARING {
			Action Pass_Up_CC_Cancel;
			Next_State CC_STATE_IDLE;
		}
		Stimulus CC_EVENT_CANCEL {
			Next_State CC_STATE_IDLE;
		}
	}
	State CC_STATE_AVAILABLE {
		/*
		 * For PTP 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;
			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;
			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_ACTIVATED {
		Prolog {
			Action Reset_A_Status;
		}
		Stimulus CC_EVENT_REMOTE_USER_FREE {
			Action Pass_Up_A_Status_Indirect;
			Test = Get_A_Status;
			Test == Busy {
				Next_State CC_STATE_SUSPENDED;
			}
			Action Send_RemoteUserFree;
			Next_State CC_STATE_WAIT_CALLBACK;
		}
		Stimulus CC_EVENT_SUSPEND {
			/* Received CCBS_T_Suspend */
			Action Set_A_Status_Busy;
		}
		Stimulus CC_EVENT_RESUME {
			/* Received CCBS_T_Resume */
			Action Reset_A_Status;
		}
	}
	State CC_STATE_WAIT_CALLBACK {
		Stimulus CC_EVENT_SUSPEND {
			/* Received CCBS_T_Suspend */
			Action Set_A_Status_Busy;
			Action Pass_Up_A_Status;
			Next_State CC_STATE_SUSPENDED;
		}
	}
	State CC_STATE_SUSPENDED {
		Stimulus CC_EVENT_RESUME {
			/* Received CCBS_T_Resume */
			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 T_CCBS5/T_CCNR5 depending upon CC mode. */
			Action Start_T_SUPERVISION;
		}
		Epilog {
			Action Stop_T_SUPERVISION;
		}
		Stimulus CC_EVENT_RECALL {
			/* Received CCBS_T_Call */
			Action Pass_Up_CC_Call;
			Action Set_Original_Call_Parameters;
		}
		Stimulus CC_EVENT_TIMEOUT_T_SUPERVISION {
			Action Pass_Up_CC_Cancel;
			Action Hangup_Signaling_Link;
			Next_State CC_STATE_IDLE;
		}
		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;
		}
	}
}