# HG changeset patch # User Mychaela Falconia # Date 1664419039 28800 # Node ID c1c94b7fc2e278a9041bb28d917c8f09978674a1 # Parent 9b87894704eb2c390b9cc2535730ac144b380007 sip-in call clearing: DEAD_SIP transition implemented diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/bye_in.c --- a/sip-in/bye_in.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/bye_in.c Wed Sep 28 18:37:19 2022 -0800 @@ -67,6 +67,7 @@ case SIP_STATE_BYE_SENT: call->sip_state = SIP_STATE_ENDED; sip_mark_end_time(call, sip_linger_gotbye); + transition_dead_sip(call); break; case SIP_STATE_INVITE_ERR: case SIP_STATE_ENDED: diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/bye_out.c --- a/sip-in/bye_out.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/bye_out.c Wed Sep 28 18:37:19 2022 -0800 @@ -73,7 +73,8 @@ if (rc < 0) { syslog(LOG_ERR, "outgoing BYE request msg length exceeded"); call->sip_state = SIP_STATE_MSG_SIZE_ERR; - /* TODO: transition from TEARDOWN to DEAD_SIP */ + sip_mark_end_time(call, sip_linger_error); + transition_dead_sip(call); return; } sip_tx_packet(&msg, &call->udp_sin); @@ -116,5 +117,6 @@ sip_mark_end_time(call, sip_linger_acked); else sip_mark_end_time(call, sip_linger_error); + transition_dead_sip(call); } } diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/call_clear.c --- a/sip-in/call_clear.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/call_clear.c Wed Sep 28 18:37:19 2022 -0800 @@ -26,3 +26,21 @@ { call->sip_clear_time = cur_event_time.tv_sec + linger; } + +void +transition_dead_sip(call) + struct call *call; +{ + if (call->overall_state != OVERALL_STATE_TEARDOWN) + return; + if (call->sip_state != SIP_STATE_ENDED && + call->sip_state != SIP_STATE_MSG_SIZE_ERR) + return; + if (call->mncc_state != MNCC_STATE_NO_EXIST) + return; + if (call->mgw_state != MGW_STATE_NO_EXIST) + return; + if (call->mgw_xact) + return; + call->overall_state = OVERALL_STATE_DEAD_SIP; +} diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/invite.c --- a/sip-in/invite.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/invite.c Wed Sep 28 18:37:19 2022 -0800 @@ -411,7 +411,6 @@ GSM48_CC_CAUSE_INTERWORKING); disconnect_tmgw(call); sip_mark_end_time(call, sip_linger_error); - /* TODO: transition from TEARDOWN to DEAD_SIP */ return; } if (call->use_100rel) { @@ -447,7 +446,6 @@ GSM48_CC_CAUSE_INTERWORKING); disconnect_tmgw(call); sip_mark_end_time(call, sip_linger_error); - /* TODO: transition from TEARDOWN to DEAD_SIP */ return; } sip_tx_packet(&resp, &call->udp_sin); @@ -468,7 +466,7 @@ syslog(LOG_ERR, "INVITE late error response length exceeded"); call->sip_state = SIP_STATE_MSG_SIZE_ERR; sip_mark_end_time(call, sip_linger_error); - /* TODO: transition from TEARDOWN to DEAD_SIP */ + transition_dead_sip(call); return; } out_msg_finish(&resp); diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/mgw_ops.c --- a/sip-in/mgw_ops.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/mgw_ops.c Wed Sep 28 18:37:19 2022 -0800 @@ -144,6 +144,7 @@ handle_crcx_fail(call, msg); return; case OVERALL_STATE_TEARDOWN: + transition_dead_sip(call); return; default: goto bad_state; @@ -223,7 +224,7 @@ exit(1); } call->mgw_state = MGW_STATE_NO_EXIST; - /* TODO: transition from TEARDOWN to DEAD_SIP */ + transition_dead_sip(call); } void diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/mncc_handle.c --- a/sip-in/mncc_handle.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/mncc_handle.c Wed Sep 28 18:37:19 2022 -0800 @@ -118,6 +118,7 @@ cause = &default_cause; disconnect_sip(call, cause); disconnect_tmgw(call); + transition_dead_sip(call); } static void diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/prack.c --- a/sip-in/prack.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/prack.c Wed Sep 28 18:37:19 2022 -0800 @@ -94,7 +94,6 @@ GSM48_CC_CAUSE_INTERWORKING); disconnect_tmgw(call); sip_mark_end_time(call, sip_linger_error); - /* TODO: transition from TEARDOWN to DEAD_SIP */ return; } out_msg_finish(&resp); diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/retrans.c --- a/sip-in/retrans.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/retrans.c Wed Sep 28 18:37:19 2022 -0800 @@ -71,6 +71,7 @@ } else { call->sip_state = SIP_STATE_ENDED; sip_mark_end_time(call, sip_linger_error); + transition_dead_sip(call); } break; case SIP_STATE_BYE_SENT: @@ -81,6 +82,7 @@ } else { call->sip_state = SIP_STATE_ENDED; sip_mark_end_time(call, sip_linger_error); + transition_dead_sip(call); } break; } diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/shutdown.c --- a/sip-in/shutdown.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/shutdown.c Wed Sep 28 18:37:19 2022 -0800 @@ -41,6 +41,7 @@ call->overall_state = OVERALL_STATE_TEARDOWN; disconnect_tmgw(call); disconnect_sip(call, &shutdown_cause); + transition_dead_sip(call); } } } @@ -58,6 +59,7 @@ disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU, GSM48_CC_CAUSE_NETWORK_OOO); disconnect_sip(call, &shutdown_cause); + transition_dead_sip(call); } } } diff -r 9b87894704eb -r c1c94b7fc2e2 sip-in/sip_ack.c --- a/sip-in/sip_ack.c Wed Sep 28 16:32:13 2022 -0800 +++ b/sip-in/sip_ack.c Wed Sep 28 18:37:19 2022 -0800 @@ -55,6 +55,7 @@ case SIP_STATE_INVITE_ERR: call->sip_state = SIP_STATE_ENDED; sip_mark_end_time(call, sip_linger_acked); + transition_dead_sip(call); break; } }