]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7166 #resolve
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 23 Jan 2015 21:08:00 +0000 (15:08 -0600)
committerMichael Jerris <mike@jerris.com>
Thu, 28 May 2015 17:46:54 +0000 (12:46 -0500)
src/switch_core_media.c
src/switch_core_session.c
src/switch_ivr.c

index 50763bc1ea3555f2187e586443ad46659c12696f..9251f88748494e5a04a8ae702ae5838ee41165cd 100644 (file)
@@ -6127,10 +6127,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_AVPF) ? "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];
@@ -6556,6 +6553,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_AVPF) && 
@@ -6973,7 +6976,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_AVPF) || (mult && switch_false(mult))) {
                        char *bp = buf;
                        int both = (switch_channel_test_flag(session->channel, CF_AVPF) || switch_channel_test_flag(session->channel, CF_DTLS)) ? 0 : 1;
index 29b770a9e891344b77d4aaaa8cace1bf77b5108a..5f0d126157bda25b9352c6563ed319f88f130416 100644 (file)
@@ -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);
 
index 64a00a88276a0b98d3957b20c4f8e960c169578d..3abdb40e81628ddbb1e08096b31a5ef757cc28bd 100644 (file)
@@ -1655,6 +1655,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;