From 03e87faac125dca0acd5a15fdb3d7cd6a084e8f9 Mon Sep 17 00:00:00 2001 From: Luis Azedo <luis@2600hz.com> Date: Thu, 15 Sep 2016 14:12:59 +0000 Subject: [PATCH] FS-9518 [mod_conference] allow deaf only command in caller-controls --- .../mod_conference/conference_loop.c | 37 ++++++++++++++++++- .../mod_conference/mod_conference.h | 3 ++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/mod/applications/mod_conference/conference_loop.c b/src/mod/applications/mod_conference/conference_loop.c index 32d452b14f..798af88621 100644 --- a/src/mod/applications/mod_conference/conference_loop.c +++ b/src/mod/applications/mod_conference/conference_loop.c @@ -67,7 +67,10 @@ struct _mapping control_mappings[] = { {"execute_application", conference_loop_exec_app}, {"floor", conference_loop_floor_toggle}, {"vid-floor", conference_loop_vid_floor_toggle}, - {"vid-floor-force", conference_loop_vid_floor_force} + {"vid-floor-force", conference_loop_vid_floor_force}, + {"deaf", conference_loop_deaf_toggle}, + {"deaf on", conference_loop_deaf_on}, + {"deaf off", conference_loop_deaf_off} }; int conference_loop_mapping_len() @@ -228,6 +231,38 @@ void conference_loop_lock_toggle(conference_member_t *member, caller_control_act } +void conference_loop_deaf_toggle(conference_member_t *member, caller_control_action_t *action) +{ + if (member == NULL) + return; + + if (conference_utils_member_test_flag(member, MFLAG_CAN_HEAR)) { + conference_api_sub_deaf(member, NULL, NULL); + } else { + conference_api_sub_undeaf(member, NULL, NULL); + } +} + +void conference_loop_deaf_on(conference_member_t *member, caller_control_action_t *action) +{ + if (member == NULL) + return; + + if (conference_utils_member_test_flag(member, MFLAG_CAN_HEAR)) { + conference_api_sub_deaf(member, NULL, NULL); + } +} + +void conference_loop_deaf_off(conference_member_t *member, caller_control_action_t *action) +{ + if (member == NULL) + return; + + if (!conference_utils_member_test_flag(member, MFLAG_CAN_HEAR)) { + conference_api_sub_undeaf(member, NULL, NULL); + } +} + void conference_loop_deafmute_toggle(conference_member_t *member, caller_control_action_t *action) { if (member == NULL) diff --git a/src/mod/applications/mod_conference/mod_conference.h b/src/mod/applications/mod_conference/mod_conference.h index b5a9bfa1ac..c812bc1160 100644 --- a/src/mod/applications/mod_conference/mod_conference.h +++ b/src/mod/applications/mod_conference/mod_conference.h @@ -1151,6 +1151,9 @@ void conference_loop_mute_off(conference_member_t *member, caller_control_action void conference_loop_event(conference_member_t *member, caller_control_action_t *action); void conference_loop_transfer(conference_member_t *member, caller_control_action_t *action); void conference_loop_exec_app(conference_member_t *member, caller_control_action_t *action); +void conference_loop_deaf_toggle(conference_member_t *member, caller_control_action_t *action); +void conference_loop_deaf_on(conference_member_t *member, caller_control_action_t *action); +void conference_loop_deaf_off(conference_member_t *member, caller_control_action_t *action);