From 6151c4aa7573fc2df6ebfbd6ae10409b5db7e4eb Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 18 Jan 2010 19:36:30 +0000 Subject: [PATCH] refactor git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16392 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/switch_ivr_originate.c | 48 ++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/switch_ivr_originate.c b/src/switch_ivr_originate.c index 06112d1078..3c3abc8ecb 100644 --- a/src/switch_ivr_originate.c +++ b/src/switch_ivr_originate.c @@ -1709,7 +1709,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess oglobals.bridge_early_media = -1; if (session) { - const char *to_var; + const char *to_var, bypass_media = NULL, proxy_media = NULL; caller_channel = switch_core_session_get_channel(session); switch_channel_set_flag(caller_channel, CF_ORIGINATOR); oglobals.session = session; @@ -1719,27 +1719,39 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_originate(switch_core_session_t *sess timelimit_sec = atoi(to_var); } - if (switch_true(switch_channel_get_variable(caller_channel, SWITCH_PROXY_MEDIA_VARIABLE))) { + proxy_media = switch_channel_get_variable(caller_channel, SWITCH_PROXY_MEDIA_VARIABLE); + bypass_media = switch_channel_get_variable(caller_channel, SWITCH_BYPASS_MEDIA_VARIABLE); + + if (switch_true(proxy_media)) { switch_channel_set_flag(caller_channel, CF_PROXY_MEDIA); + } else { + switch_channel_clear_flag(caller_channel, CF_PROXY_MEDIA); + } + + if (switch_true(bypass_media)) { + switch_channel_set_flag(caller_channel, CF_PROXY_MODE); + } else { + switch_channel_clear_flag(caller_channel, CF_PROXY_MODE); } - if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) - || (switch_true(switch_channel_get_variable(caller_channel, SWITCH_BYPASS_MEDIA_VARIABLE)))) { - if (!switch_channel_test_flag(caller_channel, CF_ANSWERED) - && !switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA)) { - switch_channel_set_flag(caller_channel, CF_PROXY_MODE); - } else { - if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE)) { - switch_channel_set_variable(caller_channel, SWITCH_B_SDP_VARIABLE, NULL); - } else { - switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, - "Channel is already up, delaying proxy mode 'till both legs are answered.\n"); - switch_channel_set_variable(caller_channel, "bypass_media_after_bridge", "true"); - switch_channel_set_variable(caller_channel, SWITCH_BYPASS_MEDIA_VARIABLE, NULL); - switch_channel_clear_flag(caller_channel, CF_PROXY_MODE); - } - } + switch_channel_set_variable(caller_channel, SWITCH_B_SDP_VARIABLE, NULL); + + if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE) && switch_channel_media_ready(caller_channel)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, + "Channel is already up, delaying proxy mode 'till both legs are answered.\n"); + switch_channel_set_variable(caller_channel, "bypass_media_after_bridge", "true"); + switch_channel_set_variable(caller_channel, SWITCH_BYPASS_MEDIA_VARIABLE, NULL); + switch_channel_clear_flag(caller_channel, CF_PROXY_MODE); } + + + if (switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA) && switch_channel_media_ready(caller_channel)) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, + "Channel is already up, proxy media cannot be used anymore\n"); + switch_channel_set_variable(caller_channel, SWITCH_PROXY_MEDIA_VARIABLE, NULL); + switch_channel_clear_flag(caller_channel, CF_PROXY_MEDIA); + } + } if (timelimit_sec <= 0) {