From 2b10500231188c058a2de02f411f25e0af31288e Mon Sep 17 00:00:00 2001 From: Ken Rice Date: Wed, 18 May 2016 15:20:15 -0500 Subject: [PATCH] FS-9160 #resolve tweak sip_invite_failure_* chan vars for properly reporting last outbound call failure when there are multiple bridge attempts on a single call --- src/mod/endpoints/mod_sofia/mod_sofia.c | 2 ++ src/mod/endpoints/mod_sofia/sofia.c | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index bc20ac2968..8c3f063839 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -501,6 +501,8 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session) switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Sending CANCEL to %s\n", switch_channel_get_name(channel)); if (!tech_pvt->got_bye) { switch_channel_set_variable(channel, "sip_hangup_disposition", "send_cancel"); + switch_channel_set_variable(channel, "sip_invite_failure_status", "487"); + switch_channel_set_variable(channel, "sip_invite_failure_phrase", "CANCEL"); } if (!sofia_test_flag(tech_pvt, TFLAG_BYE)) { nua_cancel(tech_pvt->nh, diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 3d5c8fe018..0312195f0c 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1531,6 +1531,8 @@ static void our_sofia_event_callback(nua_event_t event, if (sip && channel) { switch_channel_set_variable(channel, "sip_hangup_disposition", "recv_cancel"); + switch_channel_set_variable(channel, "sip_invite_failure_status", "487"); + switch_channel_set_variable(channel, "sip_invite_failure_phrase", "CANCEL"); if (sip->sip_reason) { char *reason_header = sip_header_as_string(nh->nh_home, (void *) sip->sip_reason); @@ -6042,7 +6044,6 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status tagi_t tags[]) { char *call_info = NULL; - if (sip && session) { switch_channel_t *channel = switch_core_session_get_channel(session); const char *uuid; @@ -6068,8 +6069,13 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status if (status >= 400) { char status_str[5]; switch_snprintf(status_str, sizeof(status_str), "%d", status); + switch_channel_set_variable(channel, "sip_invite_failure_status", status_str); + switch_channel_set_variable(channel, "sip_invite_failure_phrase", phrase); switch_channel_set_variable_partner(channel, "sip_invite_failure_status", status_str); switch_channel_set_variable_partner(channel, "sip_invite_failure_phrase", phrase); + } else { + switch_channel_set_variable_partner(channel, "sip_invite_failure_status", NULL); + switch_channel_set_variable_partner(channel, "sip_invite_failure_phrase", NULL); } if (status >= 400 && sip->sip_reason && sip->sip_reason->re_protocol && (!strcasecmp(sip->sip_reason->re_protocol, "Q.850")