]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9518 [mod_conference] allow deaf only command in caller-controls
authorLuis Azedo <luis@2600hz.com>
Thu, 15 Sep 2016 14:12:59 +0000 (14:12 +0000)
committerLuis Azedo <luis@2600hz.com>
Thu, 15 Sep 2016 14:12:59 +0000 (14:12 +0000)
src/mod/applications/mod_conference/conference_loop.c
src/mod/applications/mod_conference/mod_conference.h

index 32d452b14f49c3014045afdc0edb2c156fb24ee2..798af886219dbc5f5adac2609d7b619c3ee28805 100644 (file)
@@ -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)
index b5a9bfa1ac34f514b520a610a51a67280a0332a9..c812bc1160d77d59be3ebe72d1aeb69791217336 100644 (file)
@@ -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);