comparison sip-in/invite.c @ 110:c1c94b7fc2e2

sip-in call clearing: DEAD_SIP transition implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 28 Sep 2022 18:37:19 -0800
parents 9b87894704eb
children bfc97065bf51
comparison
equal deleted inserted replaced
109:9b87894704eb 110:c1c94b7fc2e2
409 call->overall_state = OVERALL_STATE_TEARDOWN; 409 call->overall_state = OVERALL_STATE_TEARDOWN;
410 disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU, 410 disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU,
411 GSM48_CC_CAUSE_INTERWORKING); 411 GSM48_CC_CAUSE_INTERWORKING);
412 disconnect_tmgw(call); 412 disconnect_tmgw(call);
413 sip_mark_end_time(call, sip_linger_error); 413 sip_mark_end_time(call, sip_linger_error);
414 /* TODO: transition from TEARDOWN to DEAD_SIP */
415 return; 414 return;
416 } 415 }
417 if (call->use_100rel) { 416 if (call->use_100rel) {
418 rc = out_msg_add_header(&resp, "Require", "100rel"); 417 rc = out_msg_add_header(&resp, "Require", "100rel");
419 if (rc < 0) 418 if (rc < 0)
445 call->overall_state = OVERALL_STATE_TEARDOWN; 444 call->overall_state = OVERALL_STATE_TEARDOWN;
446 disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU, 445 disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU,
447 GSM48_CC_CAUSE_INTERWORKING); 446 GSM48_CC_CAUSE_INTERWORKING);
448 disconnect_tmgw(call); 447 disconnect_tmgw(call);
449 sip_mark_end_time(call, sip_linger_error); 448 sip_mark_end_time(call, sip_linger_error);
450 /* TODO: transition from TEARDOWN to DEAD_SIP */
451 return; 449 return;
452 } 450 }
453 sip_tx_packet(&resp, &call->udp_sin); 451 sip_tx_packet(&resp, &call->udp_sin);
454 call->sip_state = SIP_STATE_INVITE_200; 452 call->sip_state = SIP_STATE_INVITE_200;
455 call->sip_tx_count = 1; 453 call->sip_tx_count = 1;
466 rc = fill_invite_resp_from_call(&resp, call); 464 rc = fill_invite_resp_from_call(&resp, call);
467 if (rc < 0) { 465 if (rc < 0) {
468 syslog(LOG_ERR, "INVITE late error response length exceeded"); 466 syslog(LOG_ERR, "INVITE late error response length exceeded");
469 call->sip_state = SIP_STATE_MSG_SIZE_ERR; 467 call->sip_state = SIP_STATE_MSG_SIZE_ERR;
470 sip_mark_end_time(call, sip_linger_error); 468 sip_mark_end_time(call, sip_linger_error);
471 /* TODO: transition from TEARDOWN to DEAD_SIP */ 469 transition_dead_sip(call);
472 return; 470 return;
473 } 471 }
474 out_msg_finish(&resp); 472 out_msg_finish(&resp);
475 sip_tx_packet(&resp, &call->udp_sin); 473 sip_tx_packet(&resp, &call->udp_sin);
476 call->sip_state = SIP_STATE_INVITE_ERR; 474 call->sip_state = SIP_STATE_INVITE_ERR;