]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9160 #resolve tweak sip_invite_failure_* chan vars for properly reporting last...
authorKen Rice <krice@freeswitch.org>
Wed, 18 May 2016 20:20:15 +0000 (15:20 -0500)
committerKen Rice <krice@freeswitch.org>
Wed, 18 May 2016 20:29:59 +0000 (15:29 -0500)
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/sofia.c

index bc20ac2968bc49a55c11b6ce4489d744604553e8..8c3f063839161567d9e9f798292f278b95c4ddfe 100644 (file)
@@ -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,
index 3d5c8fe018dd47eca26e45d7c3ca8a38c3bd75cf..0312195f0c24a0e764090dc623ce937715352569 100644 (file)
@@ -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")