]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8118 #resolve [Verto calls do not properly reject video when video is offered...
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 2 Sep 2015 23:07:58 +0000 (18:07 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 2 Sep 2015 23:07:58 +0000 (18:07 -0500)
src/include/switch_types.h
src/switch_core_media.c

index c6090eaa08a5c71cf029a9537b7ae6acc02cd6f4..e248f2507f21c9c710d027c51a9862e66f02ea81 100644 (file)
@@ -1494,6 +1494,7 @@ typedef enum {
        CF_3P_MEDIA_REQUESTED,
        CF_3P_NOMEDIA_REQUESTED,
        CF_3P_NOMEDIA_REQUESTED_BLEG,
+       CF_VIDEO_SDP_RECVD,
        /* 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 e09612a0ec662f9d2f4d30d4df6c69f44906696d..d776e77f4741b9abb8986b1ccc9939b118226dbf 100644 (file)
@@ -4430,9 +4430,10 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
                        m_idx = 0;
                        memset(matches, 0, sizeof(matches[0]) * MAX_MATCHES);
                        memset(near_matches, 0, sizeof(near_matches[0]) * MAX_MATCHES);
-
+                       
                        switch_channel_set_variable(session->channel, "video_possible", "true");
-
+                       switch_channel_set_flag(session->channel, CF_VIDEO_SDP_RECVD);
+                       
                        connection = sdp->sdp_connection;
                        if (m->m_connections) {
                                connection = m->m_connections;
@@ -7722,7 +7723,16 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess
 
        }
 
-       if (switch_channel_test_flag(session->channel, CF_VIDEO_POSSIBLE)) {
+       if (!switch_channel_test_flag(session->channel, CF_VIDEO_POSSIBLE)) {
+               if (switch_channel_test_flag(session->channel, CF_VIDEO_SDP_RECVD)) {
+                       switch_channel_clear_flag(session->channel, CF_VIDEO_SDP_RECVD);
+                       switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "m=video 0 %s 19\n", 
+                                                       get_media_profile_name(session, 
+                                                                                                  (switch_channel_test_flag(session->channel, CF_SECURE) 
+                                                                                                       && switch_channel_direction(session->channel) == SWITCH_CALL_DIRECTION_OUTBOUND) || 
+                                                                                                  a_engine->crypto_type != CRYPTO_INVALID || switch_channel_test_flag(session->channel, CF_DTLS)));
+               }
+       } else {
                if (switch_channel_direction(session->channel) == SWITCH_CALL_DIRECTION_INBOUND) {
                        if (switch_channel_test_flag(smh->session->channel, CF_DTLS)) {
                                v_engine->no_crypto = 1;