]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11438: [freeswitch-core] recvonly channels left that way on blind transfer in...
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 4 Oct 2018 14:24:35 +0000 (09:24 -0500)
committerMike Jerris <mike@signalwire.com>
Thu, 6 Jun 2019 15:05:20 +0000 (11:05 -0400)
src/include/switch_core_media.h
src/switch_core_media.c
src/switch_ivr.c

index 1c73c2367ace23e3c6dce4af289633ead37e6859..60e9b0f3d25727e0390e73adbfc5da22635d9c38 100644 (file)
@@ -381,7 +381,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_print(switch_core_session_t
 SWITCH_DECLARE(switch_status_t) switch_core_session_printf(switch_core_session_t *session, const char *fmt, ...);
 
 SWITCH_DECLARE(switch_msrp_session_t *) switch_core_media_get_msrp_session(switch_core_session_t *session);
-
+SWITCH_DECLARE(void) switch_core_media_set_smode(switch_core_session_t *session, switch_media_type_t type, switch_media_flow_t smode, switch_sdp_type_t sdp_type);
                                                                                                                                                
 SWITCH_END_EXTERN_C
 #endif
index b3209eea548444ff8ca21722dad22215381a312c..83c9fc5f6ca322af43039111a67fd1a0a4cdeb21 100644 (file)
@@ -4662,7 +4662,7 @@ static void check_stream_changes(switch_core_session_t *session, switch_sdp_type
        }
 }
 
-static void switch_core_media_set_smode(switch_core_session_t *session, switch_media_type_t type, switch_media_flow_t smode, switch_sdp_type_t sdp_type)
+SWITCH_DECLARE(void) switch_core_media_set_smode(switch_core_session_t *session, switch_media_type_t type, switch_media_flow_t smode, switch_sdp_type_t sdp_type)
 {
        switch_media_handle_t *smh;
        switch_rtp_engine_t *engine;
index 842db0414025f1b0242aadf5571ee8a9afaefb37..30ca46cdb8bb5e4c797cd178f7bb08282a1aeeea 100644 (file)
@@ -2096,7 +2096,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_
        const char *forwardvar = switch_channel_get_variable(channel, forwardvar_name);
        int forwardval = 70;
        const char *use_dialplan = dialplan, *use_context = context;
-
+       switch_media_flow_t flow;
+       
        if (zstr(forwardvar)) {
                forwardvar_name = SWITCH_MAX_FORWARDS_VARIABLE; /* fall back to max_forwards variable for setting maximum */
                forwardvar = switch_channel_get_variable(channel, forwardvar_name);
@@ -2109,6 +2110,16 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_session_transfer(switch_core_session_
                return SWITCH_STATUS_FALSE;
        }
 
+       if ((flow = switch_core_session_media_flow(session, SWITCH_MEDIA_TYPE_AUDIO)) != SWITCH_MEDIA_FLOW_SENDRECV) {
+               switch_core_session_message_t msg = { 0 };
+
+               msg.message_id = SWITCH_MESSAGE_INDICATE_MEDIA_RENEG;
+               msg.from = __FILE__;
+
+               switch_core_media_set_smode(session, SWITCH_MEDIA_TYPE_AUDIO, SWITCH_MEDIA_FLOW_SENDRECV, SDP_TYPE_REQUEST);
+               switch_core_session_receive_message(session, &msg);
+       }
+       
        max_forwards = switch_core_session_sprintf(session, "%d", forwardval);
        switch_channel_set_variable(channel, forwardvar_name, max_forwards);