From: Anthony Minessale Date: Thu, 4 Oct 2018 14:24:35 +0000 (-0500) Subject: FS-11438: [freeswitch-core] recvonly channels left that way on blind transfer in... X-Git-Tag: v1.8.6~1^2~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c47752c9401da1f5ba533ac87d5dc2a8ab569988;p=thirdparty%2Ffreeswitch.git FS-11438: [freeswitch-core] recvonly channels left that way on blind transfer in some cases #resolve --- diff --git a/src/include/switch_core_media.h b/src/include/switch_core_media.h index 1c73c2367a..60e9b0f3d2 100644 --- a/src/include/switch_core_media.h +++ b/src/include/switch_core_media.h @@ -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 diff --git a/src/switch_core_media.c b/src/switch_core_media.c index b3209eea54..83c9fc5f6c 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -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; diff --git a/src/switch_ivr.c b/src/switch_ivr.c index 842db04140..30ca46cdb8 100644 --- a/src/switch_ivr.c +++ b/src/switch_ivr.c @@ -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);