From babe9551604632aff2b41dc38d73b1d975c73600 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 25 Oct 2011 08:47:01 -0500 Subject: [PATCH] FS-3634 see if this works --- src/include/switch_types.h | 1 + src/mod/endpoints/mod_sofia/mod_sofia.c | 9 +++++---- src/switch_ivr_bridge.c | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index d37daa268a..e86ca9ece4 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -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 diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 86e06c08a1..a700383330 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -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)); } diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c index f5d79bfe1c..0a0362d5fa 100644 --- a/src/switch_ivr_bridge.c +++ b/src/switch_ivr_bridge.c @@ -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); }