mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 16:58:35 +00:00
FS-11206: [mod_conference] rework behaviors of conference hold to still toggle states while on hold
This commit is contained in:
parent
f82e4a5944
commit
5dd445180c
@ -315,15 +315,10 @@ switch_status_t conference_api_sub_mute(conference_member_t *member, switch_stre
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR mute %u\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_SPEAK);
|
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_SPEAK);
|
||||||
conference_utils_member_clear_flag_locked(member, MFLAG_TALKING);
|
conference_utils_member_clear_flag_locked(member, MFLAG_TALKING);
|
||||||
|
|
||||||
if (member->session && !conference_utils_member_test_flag(member, MFLAG_MUTE_DETECT)) {
|
if (member->session && !conference_utils_member_test_flag(member, MFLAG_MUTE_DETECT) && !conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
||||||
switch_core_media_hard_mute(member->session, SWITCH_TRUE);
|
switch_core_media_hard_mute(member->session, SWITCH_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,11 +455,6 @@ switch_status_t conference_api_sub_tmute(conference_member_t *member, switch_str
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR mute %u\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
|
if (conference_utils_member_test_flag(member, MFLAG_CAN_SPEAK)) {
|
||||||
return conference_api_sub_mute(member, stream, data);
|
return conference_api_sub_mute(member, stream, data);
|
||||||
}
|
}
|
||||||
@ -480,11 +470,6 @@ switch_status_t conference_api_sub_unmute(conference_member_t *member, switch_st
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR unmute %u\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
conference_utils_member_set_flag_locked(member, MFLAG_CAN_SPEAK);
|
conference_utils_member_set_flag_locked(member, MFLAG_CAN_SPEAK);
|
||||||
|
|
||||||
if (member->session && !conference_utils_member_test_flag(member, MFLAG_MUTE_DETECT)) {
|
if (member->session && !conference_utils_member_test_flag(member, MFLAG_MUTE_DETECT)) {
|
||||||
@ -672,27 +657,18 @@ switch_status_t conference_api_sub_vblind(conference_member_t *member, switch_st
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_core_session_write_blank_video(member->session, 50);
|
|
||||||
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_SEE);
|
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_SEE);
|
||||||
conference_video_reset_video_bitrate_counters(member);
|
|
||||||
|
if (!conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
||||||
|
switch_core_session_write_blank_video(member->session, 50);
|
||||||
|
conference_video_reset_video_bitrate_counters(member);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(data) || !strstr((char *) data, "quiet")) {
|
if (!(data) || !strstr((char *) data, "quiet")) {
|
||||||
conference_utils_member_set_flag(member, MFLAG_INDICATE_BLIND);
|
conference_utils_member_set_flag(member, MFLAG_INDICATE_BLIND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stream != NULL) {
|
if (stream) stream->write_function(stream, "+OK vblind %u\n", member->id);
|
||||||
stream->write_function(stream, "+OK vblind %u\n", member->id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (test_eflag(member->conference, EFLAG_BLIND_MEMBER) &&
|
if (test_eflag(member->conference, EFLAG_BLIND_MEMBER) &&
|
||||||
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
||||||
@ -713,11 +689,6 @@ switch_status_t conference_api_sub_tvblind(conference_member_t *member, switch_s
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_CAN_SEE)) {
|
if (conference_utils_member_test_flag(member, MFLAG_CAN_SEE)) {
|
||||||
return conference_api_sub_vblind(member, stream, data);
|
return conference_api_sub_vblind(member, stream, data);
|
||||||
}
|
}
|
||||||
@ -733,20 +704,12 @@ switch_status_t conference_api_sub_unvblind(conference_member_t *member, switch_
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
conference_utils_member_set_flag_locked(member, MFLAG_CAN_SEE);
|
conference_utils_member_set_flag_locked(member, MFLAG_CAN_SEE);
|
||||||
conference_video_reset_video_bitrate_counters(member);
|
|
||||||
|
|
||||||
switch_channel_set_flag(member->channel, CF_VIDEO_REFRESH_REQ);
|
if (!conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
||||||
|
conference_video_reset_video_bitrate_counters(member);
|
||||||
|
switch_channel_set_flag(member->channel, CF_VIDEO_REFRESH_REQ);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(data) || !strstr((char *) data, "quiet")) {
|
if (!(data) || !strstr((char *) data, "quiet")) {
|
||||||
conference_utils_member_set_flag(member, MFLAG_INDICATE_UNBLIND);
|
conference_utils_member_set_flag(member, MFLAG_INDICATE_UNBLIND);
|
||||||
@ -776,11 +739,6 @@ switch_status_t conference_api_sub_deaf(conference_member_t *member, switch_stre
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_HEAR);
|
conference_utils_member_clear_flag_locked(member, MFLAG_CAN_HEAR);
|
||||||
|
|
||||||
if (!(data) || !strstr((char *) data, "quiet")) {
|
if (!(data) || !strstr((char *) data, "quiet")) {
|
||||||
@ -823,11 +781,6 @@ switch_status_t conference_api_sub_undeaf(conference_member_t *member, switch_st
|
|||||||
if (member == NULL)
|
if (member == NULL)
|
||||||
return SWITCH_STATUS_GENERR;
|
return SWITCH_STATUS_GENERR;
|
||||||
|
|
||||||
if (conference_utils_member_test_flag(member, MFLAG_HOLD)) {
|
|
||||||
if (stream) stream->write_function(stream, "-ERR member %u is on hold\n", member->id);
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
conference_utils_member_set_flag_locked(member, MFLAG_CAN_HEAR);
|
conference_utils_member_set_flag_locked(member, MFLAG_CAN_HEAR);
|
||||||
|
|
||||||
if (!(data) || !strstr((char *) data, "quiet")) {
|
if (!(data) || !strstr((char *) data, "quiet")) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user