]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3634 see if this works
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 25 Oct 2011 13:47:01 +0000 (08:47 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 25 Oct 2011 13:47:01 +0000 (08:47 -0500)
src/include/switch_types.h
src/mod/endpoints/mod_sofia/mod_sofia.c
src/switch_ivr_bridge.c

index d37daa268a8f6a13bd21bf85fda723d9dd5934a3..e86ca9ece4f66078919723e5a0bd1a59e1e1cf23 100644 (file)
@@ -1189,6 +1189,7 @@ typedef enum {
        CF_SIGNAL_DATA,
        CF_SIMPLIFY,
        CF_ZOMBIE_EXEC,
+       CF_INTERCEPT,
        /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */
        /* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */
        CF_FLAG_MAX
index 86e06c08a19b562a5c66ace14137e33a7910d276..a700383330d6594e060d9797262e8ad29eb75c90 100644 (file)
@@ -489,11 +489,12 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session)
                const char *val = NULL;
 
                val = switch_channel_get_variable(tech_pvt->channel, "disable_q850_reason");
-               if (!val || switch_true(val)) {
-                       if (cause > 0 && cause < 128) {
-                               switch_snprintf(reason, sizeof(reason), "Q.850;cause=%d;text=\"%s\"", cause, switch_channel_cause2str(cause));
-                       } else if (cause == SWITCH_CAUSE_PICKED_OFF || cause == SWITCH_CAUSE_LOSE_RACE) {
+
+               if (switch_false(val)) {
+                       if (switch_channel_test_flag(channel, CF_INTERCEPT) || cause == SWITCH_CAUSE_PICKED_OFF || cause == SWITCH_CAUSE_LOSE_RACE) {
                                switch_snprintf(reason, sizeof(reason), "SIP;cause=200;text=\"Call completed elsewhere\"");
+                       } else if (cause > 0 && cause < 128) {
+                               switch_snprintf(reason, sizeof(reason), "Q.850;cause=%d;text=\"%s\"", cause, switch_channel_cause2str(cause));
                        } else {
                                switch_snprintf(reason, sizeof(reason), "%s;cause=%d;text=\"%s\"", tech_pvt->profile->username, cause, switch_channel_cause2str(cause));
                        }
index f5d79bfe1c8956c0421f1999d113fa3318375dac..0a0362d5faac73baf136f6397e69a3f349e9066b 100644 (file)
@@ -1636,6 +1636,7 @@ SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session
 
        if (bchannel) {
                switch_channel_set_state_flag(bchannel, CF_TRANSFER);
+               switch_channel_set_flag(bchannel, CF_INTERCEPT);
                switch_channel_set_state(bchannel, CS_PARK);
        }