From 4d100bc2e8879186a56da53620bc33f40989f707 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 24 Jan 2015 02:47:17 -0600 Subject: [PATCH] FS-7509: stop media on verto detach --- src/include/switch_core_media.h | 1 + src/mod/endpoints/mod_verto/mod_verto.c | 2 +- src/switch_core_media.c | 30 +++++++++++++++++++++++++ src/switch_rtp.c | 13 +++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/include/switch_core_media.h b/src/include/switch_core_media.h index 014f3d0c51..d213bb3b3d 100644 --- a/src/include/switch_core_media.h +++ b/src/include/switch_core_media.h @@ -319,6 +319,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_lock_unlock(switch_core_s #define switch_core_media_read_lock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_TRUE) #define switch_core_media_read_unlock(_s, _t) switch_core_media_read_lock_unlock(_s, _t, SWITCH_FALSE) +SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session); SWITCH_END_EXTERN_C #endif diff --git a/src/mod/endpoints/mod_verto/mod_verto.c b/src/mod/endpoints/mod_verto/mod_verto.c index a808014b20..ae6d9adaf3 100644 --- a/src/mod/endpoints/mod_verto/mod_verto.c +++ b/src/mod/endpoints/mod_verto/mod_verto.c @@ -1210,7 +1210,7 @@ static void detach_calls(jsock_t *jsock) switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); continue; } - + switch_core_session_stop_media(tech_pvt->session); tech_pvt->detach_time = switch_epoch_time_now(NULL); globals.detached++; attach_wake(); diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 53bee92881..031b663b1d 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -8995,6 +8995,36 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_codec_chosen(switch_core_sessi return SWITCH_STATUS_FALSE; } +SWITCH_DECLARE(void) switch_core_session_stop_media(switch_core_session_t *session) +{ + switch_rtp_engine_t *a_engine, *v_engine; + switch_media_handle_t *smh; + + switch_assert(session); + + if (!(smh = session->media_handle)) { + return; + } + + a_engine = &smh->engines[SWITCH_MEDIA_TYPE_AUDIO]; + v_engine = &smh->engines[SWITCH_MEDIA_TYPE_VIDEO]; + + if (a_engine->rtp_session) { + switch_rtp_del_dtls(a_engine->rtp_session, DTLS_TYPE_RTP|DTLS_TYPE_RTCP); + switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE); + switch_rtp_set_flag(a_engine->rtp_session, SWITCH_RTP_FLAG_MUTE); + } + + if (v_engine->rtp_session) { + switch_rtp_del_dtls(v_engine->rtp_session, DTLS_TYPE_RTP|DTLS_TYPE_RTCP); + switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_PAUSE); + switch_rtp_set_flag(v_engine->rtp_session, SWITCH_RTP_FLAG_MUTE); + } + + +} + + //? SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_t *session, switch_core_session_t *o_session) diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 771a6bed46..de540ae07f 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -2974,6 +2974,14 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_del_dtls(switch_rtp_t *rtp_session, d stfu_n_reset(rtp_session->jb); } + if (rtp_session->vb) { + switch_vb_reset(rtp_session->vb); + } + + if (rtp_session->vbw) { + switch_vb_reset(rtp_session->vbw); + } + } if ((type & DTLS_TYPE_RTCP) && rtp_session->rtcp_dtls) { @@ -3941,6 +3949,11 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_activate_ice(switch_rtp_t *rtp_sessio if (proto == IPR_RTP) { ice = &rtp_session->ice; + + rtp_session->flags[SWITCH_RTP_FLAG_PAUSE] = 0; + rtp_session->flags[SWITCH_RTP_FLAG_MUTE] = 0; + + switch_core_session_video_reinit(rtp_session->session); if (ice->ready) { if (rtp_session->vb) {