From 83dd94193d292084bd29eaa6ab65c859f65a7c59 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 23 Jan 2015 15:12:26 -0600 Subject: [PATCH] FS-7166 #resolve --- src/include/switch_types.h | 1 + src/switch_core_media.c | 12 +++++++----- src/switch_core_session.c | 8 ++++++++ src/switch_ivr.c | 7 +++++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 69602de419..6cd4836846 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1338,6 +1338,7 @@ typedef enum { CF_WINNER, CF_CONTROLLED, CF_PROXY_MODE, + CF_PROXY_OFF, CF_SUSPEND, CF_EVENT_PARSE, CF_GEN_RINGBACK, diff --git a/src/switch_core_media.c b/src/switch_core_media.c index e16b681583..7d6d443fbf 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -5881,10 +5881,7 @@ static void generate_m(switch_core_session_t *session, char *buf, size_t buflen, //port, secure ? "S" : "", switch_channel_test_flag(session->channel, CF_WEBRTC) ? "F" : ""); switch_snprintf(buf + strlen(buf), buflen - strlen(buf), "m=audio %d %s", port, - get_media_profile_name(session, - (secure && switch_channel_direction(session->channel) == SWITCH_CALL_DIRECTION_OUTBOUND) || - a_engine->crypto_type != CRYPTO_INVALID)); - + get_media_profile_name(session, secure || a_engine->crypto_type != CRYPTO_INVALID)); for (i = 0; i < smh->mparams->num_codecs; i++) { const switch_codec_implementation_t *imp = smh->codecs[i]; @@ -6307,6 +6304,12 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess switch_channel_clear_flag(smh->session->channel, CF_DTLS); } + if (switch_channel_test_flag(session->channel, CF_PROXY_OFF) && (tmp = switch_channel_get_variable(smh->session->channel, "uuid_media_secure_media"))) { + switch_channel_set_variable(smh->session->channel, "rtp_secure_media", tmp); + switch_core_session_parse_crypto_prefs(session); + switch_core_session_check_outgoing_crypto(session); + } + if (is_outbound || switch_channel_test_flag(session->channel, CF_RECOVERING) || switch_channel_test_flag(session->channel, CF_3PCC)) { if (!switch_channel_test_flag(session->channel, CF_WEBRTC) && @@ -6724,7 +6727,6 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess mult = switch_channel_get_variable(session->channel, "sdp_m_per_ptime"); - if (switch_channel_test_flag(session->channel, CF_WEBRTC) || (mult && switch_false(mult))) { char *bp = buf; int both = (switch_channel_test_flag(session->channel, CF_WEBRTC) || switch_channel_test_flag(session->channel, CF_DTLS)) ? 0 : 1; diff --git a/src/switch_core_session.c b/src/switch_core_session.c index a3728234e1..4e02b735c7 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -808,6 +808,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit switch_channel_clear_flag(session->channel, CF_EARLY_MEDIA); } + if (message->message_id == SWITCH_MESSAGE_INDICATE_MEDIA) { + switch_channel_set_flag(session->channel, CF_PROXY_OFF); + } + if (message->message_id == SWITCH_MESSAGE_INDICATE_DISPLAY) { char *arg = NULL; @@ -914,6 +918,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_perform_receive_message(swit end: + if (message->message_id == SWITCH_MESSAGE_INDICATE_MEDIA) { + switch_channel_clear_flag(session->channel, CF_PROXY_OFF); + } + switch_core_session_free_message(&message); switch_core_session_rwunlock(session); diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 24f177355a..ad9b6b1139 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -1653,6 +1653,13 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_nomedia(const char *uuid, switch_medi status = SWITCH_STATUS_SUCCESS; channel = switch_core_session_get_channel(session); + if (switch_channel_test_flag(channel, CF_SECURE)) { + switch_core_session_rwunlock(session); + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, + "Cannot bypass %s due to secure connection.\n", switch_channel_get_name(channel)); + return SWITCH_STATUS_FALSE; + } + if (switch_channel_test_flag(channel, CF_MEDIA_TRANS)) { switch_core_session_rwunlock(session); return SWITCH_STATUS_INUSE;