1/* 2 * FSM pseudo code used in the design/implementation of the CC PTP monitor. 3 */ 4FSM CC_PTP_Monitor 5{ 6 State CC_STATE_IDLE { 7 Stimulus CC_EVENT_AVAILABLE { 8 /* Received CCBS-T-Aailable */ 9 Action Pass_Up_CC_Available; 10 Next_State CC_STATE_AVAILABLE; 11 } 12 Stimulus CC_EVENT_CANCEL { 13 Action Set_Selfdestruct; 14 } 15 } 16 State CC_STATE_AVAILABLE { 17 /* 18 * The upper layer is responsible for canceling the CC available 19 * offering. 20 */ 21 Stimulus CC_EVENT_CC_REQUEST { 22 /* 23 * Before event is posted: 24 * cc_record->is_ccnr is set. 25 * The signaling connection call record is created. 26 */ 27 Action Queue_CC_Request; 28 /* 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. 34 */ 35 Action Start_T_ACTIVATE; 36 Next_State CC_STATE_REQUESTED; 37 } 38 Stimulus CC_EVENT_CANCEL { 39 Action Set_Selfdestruct; 40 Next_State CC_STATE_IDLE; 41 } 42 } 43 State CC_STATE_REQUESTED { 44 Stimulus CC_EVENT_CC_REQUEST_ACCEPT { 45 /* 46 * Received CCBS-T-Request/CCNR-T-Request response 47 * Before event is posted: 48 * Negotiated CC retention setting saved 49 */ 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; 56 } 57 Stimulus CC_EVENT_CC_REQUEST_FAIL { 58 Action Pass_Up_CC_Req_Rsp_Fail(error/reject, code); 59 Action Pass_Up_CC_Cancel; 60 /* 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. 65 */ 66 Action Post_HANGUP_SIGNALING; 67 Action Stop_T_ACTIVATE; 68 Next_State CC_STATE_WAIT_DESTRUCTION; 69 } 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; 77 } 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; 85 } 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; 91 } 92 } 93 State CC_STATE_WAIT_DESTRUCTION { 94 /* 95 * Delayed disconnect of the signaling link to allow subcmd events 96 * from the signaling link to be passed up. 97 */ 98 Stimulus CC_EVENT_SIGNALING_GONE { 99 /* Signaling link cleared. */ 100 Action Set_Selfdestruct; 101 Next_State CC_STATE_IDLE; 102 } 103 Stimulus CC_EVENT_HANGUP_SIGNALING { 104 Action Hangup_Signaling_Link; 105 Action Set_Selfdestruct; 106 Next_State CC_STATE_IDLE; 107 } 108 Stimulus CC_EVENT_CANCEL { 109 Action Hangup_Signaling_Link; 110 Action Set_Selfdestruct; 111 Next_State CC_STATE_IDLE; 112 } 113 } 114 State CC_STATE_ACTIVATED { 115 Stimulus CC_EVENT_REMOTE_USER_FREE { 116 /* Received CCBS_T_RemoteUserFree */ 117 Action Pass_Up_Remote_User_Free; 118 Test = Get_A_Status; 119 Test == Busy { 120 Action Send_CC_Suspend; 121 Next_State CC_STATE_SUSPENDED; 122 } 123 Next_State CC_STATE_WAIT_CALLBACK; 124 } 125 Stimulus CC_EVENT_SUSPEND { 126 Action Set_A_Status_Busy; 127 } 128 Stimulus CC_EVENT_RESUME { 129 Action Reset_A_Status; 130 } 131 Stimulus CC_EVENT_RECALL { 132 /* The original call parameters have already been set. */ 133 Action Queue_SETUP_Recall; 134 } 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; 141 } 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; 148 } 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; 154 } 155 } 156 State CC_STATE_WAIT_CALLBACK { 157 Stimulus CC_EVENT_SUSPEND { 158 Action Send_CC_Suspend; 159 Next_State CC_STATE_SUSPENDED; 160 } 161 Stimulus CC_EVENT_RECALL { 162 /* The original call parameters have already been set. */ 163 Action Queue_SETUP_Recall; 164 } 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; 171 } 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; 178 } 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; 184 } 185 } 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; 191 } 192 Stimulus CC_EVENT_RECALL { 193 /* The original call parameters have already been set. */ 194 Action Queue_SETUP_Recall; 195 } 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; 202 } 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; 209 } 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; 215 } 216 } 217} 218