]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-9526 [mod_conference] add deaf sounds
authorLuis Azedo <luis@2600hz.com>
Sat, 17 Sep 2016 08:47:24 +0000 (08:47 +0000)
committerLuis Azedo <luis@2600hz.com>
Mon, 19 Sep 2016 18:41:45 +0000 (19:41 +0100)
src/mod/applications/mod_conference/conference_api.c
src/mod/applications/mod_conference/conference_loop.c
src/mod/applications/mod_conference/mod_conference.c
src/mod/applications/mod_conference/mod_conference.h

index 6fef270c317d37d1b132fd1e7097da3148b4279f..0d79e563f3604a08b6e28cbfa97ed0cea2a6d2cb 100644 (file)
@@ -563,6 +563,11 @@ switch_status_t conference_api_sub_deaf(conference_member_t *member, switch_stre
                return SWITCH_STATUS_GENERR;
 
        conference_utils_member_clear_flag_locked(member, MFLAG_CAN_HEAR);
+
+       if (!(data) || !strstr((char *) data, "quiet")) {
+               conference_utils_member_set_flag(member, MFLAG_INDICATE_DEAF);
+       }
+
        if (stream != NULL) {
                stream->write_function(stream, "OK deaf %u\n", member->id);
        }
@@ -587,6 +592,11 @@ switch_status_t conference_api_sub_undeaf(conference_member_t *member, switch_st
                return SWITCH_STATUS_GENERR;
 
        conference_utils_member_set_flag_locked(member, MFLAG_CAN_HEAR);
+
+       if (!(data) || !strstr((char *) data, "quiet")) {
+               conference_utils_member_set_flag(member, MFLAG_INDICATE_UNDEAF);
+       }
+
        if (stream != NULL) {
                stream->write_function(stream, "OK undeaf %u\n", member->id);
        }
index 798af886219dbc5f5adac2609d7b619c3ee28805..c6b1a526bc99afb05a56a58fc05b15594bf23cf6 100644 (file)
@@ -1401,6 +1401,20 @@ void conference_loop_output(conference_member_t *member)
                        conference_utils_member_clear_flag(member, MFLAG_INDICATE_UNMUTE);
                }
 
+               if (conference_utils_member_test_flag(member, MFLAG_INDICATE_DEAF)) {
+                       if (!zstr(member->conference->deaf_sound)) {
+                               conference_member_play_file(member, member->conference->deaf_sound, 0, SWITCH_TRUE);
+                       }
+                       conference_utils_member_clear_flag(member, MFLAG_INDICATE_DEAF);
+               }
+
+               if (conference_utils_member_test_flag(member, MFLAG_INDICATE_UNDEAF)) {
+                       if (!zstr(member->conference->undeaf_sound)) {
+                               conference_member_play_file(member, member->conference->undeaf_sound, 0, SWITCH_TRUE);
+                       }
+                       conference_utils_member_clear_flag(member, MFLAG_INDICATE_UNDEAF);
+               }
+
                if (switch_core_session_private_event_count(member->session)) {
                        switch_channel_set_app_flag(channel, CF_APP_TAGGED);
                        switch_ivr_parse_all_events(member->session);
index 9692b931b1ec21b483160b312345ae782437f1c3..b7918dee26b48d570200771b61434836c46e7bed 100644 (file)
@@ -2374,6 +2374,8 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
        char *is_unlocked_sound = NULL;
        char *kicked_sound = NULL;
        char *join_only_sound = NULL;
+       char *deaf_sound = NULL;
+       char *undeaf_sound = NULL;
        char *pin = NULL;
        char *mpin = NULL;
        char *pin_sound = NULL;
@@ -2609,6 +2611,10 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
                                is_locked_sound = val;
                        } else if (!strcasecmp(var, "is-unlocked-sound") && !zstr(val)) {
                                is_unlocked_sound = val;
+                       } else if (!strcasecmp(var, "deaf-sound") && !zstr(val)) {
+                               deaf_sound = val;
+                       } else if (!strcasecmp(var, "undeaf-sound") && !zstr(val)) {
+                               undeaf_sound = val;
                        } else if (!strcasecmp(var, "member-flags") && !zstr(val)) {
                                member_flags = val;
                        } else if (!strcasecmp(var, "conference-flags") && !zstr(val)) {
@@ -3065,6 +3071,14 @@ conference_obj_t *conference_new(char *name, conference_xml_cfg_t cfg, switch_co
                conference->bad_pin_sound = switch_core_strdup(conference->pool, bad_pin_sound);
        }
 
+       if (!zstr(deaf_sound)) {
+               conference->deaf_sound = switch_core_strdup(conference->pool, deaf_sound);
+       }
+
+       if (!zstr(undeaf_sound)) {
+               conference->undeaf_sound = switch_core_strdup(conference->pool, undeaf_sound);
+       }
+
        if (!zstr(pin)) {
                conference->pin = switch_core_strdup(conference->pool, pin);
        }
index c812bc1160d77d59be3ebe72d1aeb69791217336..a5538e206f2224e59faedf3b01d101e2a20a2d96 100644 (file)
@@ -210,6 +210,8 @@ typedef enum {
        MFLAG_SILENT,
        MFLAG_FLIP_VIDEO,
        MFLAG_ROTATE_VIDEO,
+       MFLAG_INDICATE_DEAF,
+       MFLAG_INDICATE_UNDEAF,
        ///////////////////////////
        MFLAG_MAX
 } member_flag_t;
@@ -544,6 +546,8 @@ typedef struct conference_obj {
        char *muted_sound;
        char *mute_detect_sound;
        char *unmuted_sound;
+       char *deaf_sound;
+       char *undeaf_sound;
        char *locked_sound;
        char *is_locked_sound;
        char *is_unlocked_sound;