diff --git a/src/mod/applications/mod_conference/conference_loop.c b/src/mod/applications/mod_conference/conference_loop.c index 5d284fab97..25b418c55d 100644 --- a/src/mod/applications/mod_conference/conference_loop.c +++ b/src/mod/applications/mod_conference/conference_loop.c @@ -839,6 +839,13 @@ void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *ob continue; } + if (conference_utils_test_flag(member->conference, CFLAG_BREAKABLE) && + switch_channel_test_flag(channel, CF_BREAK)) { + switch_channel_clear_flag(channel, CF_BREAK); + status = SWITCH_STATUS_BREAK; + break; + } + /* Read a frame. */ status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0); diff --git a/src/mod/applications/mod_conference/conference_utils.c b/src/mod/applications/mod_conference/conference_utils.c index 48716cc269..eb482b9165 100644 --- a/src/mod/applications/mod_conference/conference_utils.c +++ b/src/mod/applications/mod_conference/conference_utils.c @@ -216,6 +216,8 @@ void conference_utils_set_cflags(const char *flags, conference_flag_t *f) f[CFLAG_PERSONAL_CANVAS] = 1; } else if (!strcasecmp(argv[i], "ded-vid-layer-audio-floor")) { f[CFLAG_DED_VID_LAYER_AUDIO_FLOOR] = 1; + } else if (!strcasecmp(argv[i], "breakable")) { + f[CFLAG_BREAKABLE] = 1; } } diff --git a/src/mod/applications/mod_conference/mod_conference.h b/src/mod/applications/mod_conference/mod_conference.h index e551a4d053..f63838ecf6 100644 --- a/src/mod/applications/mod_conference/mod_conference.h +++ b/src/mod/applications/mod_conference/mod_conference.h @@ -255,6 +255,7 @@ typedef enum { CFLAG_VIDEO_MUTE_EXIT_CANVAS, CFLAG_NO_MOH, CFLAG_DED_VID_LAYER_AUDIO_FLOOR, + CFLAG_BREAKABLE, ///////////////////////////////// CFLAG_MAX } conference_flag_t;