]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
apps/confbridge: Added hear_own_join_sound option to control who hears sound_join
authorMichael Cargile <mikec@vicidial.com>
Wed, 23 Feb 2022 16:29:09 +0000 (11:29 -0500)
committerKevin Harwell <kharwell@digium.com>
Mon, 2 May 2022 20:44:58 +0000 (15:44 -0500)
Added the hear_own_join_sound option to the confbridge user profile to
control who hears the sound_join audio file. When set to 'yes' the user
entering the conference and the participants already in the conference
will hear the sound_join audio file. When set to 'no' the user entering
the conference will not hear the sound_join audio file, but the
participants already in the conference will hear the sound_join audio
file.

ASTERISK-29931
Added by Michael Cargile

Change-Id: I856bd66dc0dfa057323860a6418c1371d249abd2

apps/app_confbridge.c
apps/confbridge/conf_config_parser.c
apps/confbridge/include/confbridge.h
configs/samples/confbridge.conf.sample
doc/CHANGES-staging/app_confbridge_hear_join.txt [new file with mode: 0644]

index d811d64264ebfac5bb03d9c713b576bcef4ab57c..d365075560d8246fb620f51fdf719f57376929ad 100644 (file)
@@ -2725,17 +2725,24 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
                ast_autoservice_stop(chan);
        }
 
-       /* Play the Join sound to both the conference and the user entering. */
        if (!quiet) {
                const char *join_sound = conf_get_sound(CONF_SOUND_JOIN, conference->b_profile.sounds);
 
-               if (strcmp(conference->b_profile.language, ast_channel_language(chan))) {
-                       ast_stream_and_wait(chan, join_sound, "");
+               /* if hear_own_join_sound is enabled play the Join sound to everyone */
+               if (ast_test_flag(&user.u_profile, USER_OPT_HEAR_OWN_JOIN_SOUND) ) {
+                       if (strcmp(conference->b_profile.language, ast_channel_language(chan))) {
+                               ast_stream_and_wait(chan, join_sound, "");
+                               ast_autoservice_start(chan);
+                               play_sound_file(conference, join_sound);
+                               ast_autoservice_stop(chan);
+                       } else {
+                               async_play_sound_file(conference, join_sound, chan);
+                       }
+               /* if hear_own_join_sound is disabled only play the Join sound to just the conference */
+               } else {
                        ast_autoservice_start(chan);
                        play_sound_file(conference, join_sound);
                        ast_autoservice_stop(chan);
-               } else {
-                       async_play_sound_file(conference, join_sound, chan);
                }
        }
 
index 4f58c18e67f83e81ed16137084f02161f689027e..b27adf24ab32a63923461f6155dc3765141ae236 100644 (file)
@@ -97,6 +97,9 @@
                                <configOption name="quiet">
                                        <synopsis>Silence enter/leave prompts and user intros for this user</synopsis>
                                </configOption>
+                               <configOption name="hear_own_join_sound">
+                                       <synopsis>Determines if the user also hears the join sound when they enter a conference</synopsis>
+                               </configOption>
                                <configOption name="announce_user_count">
                                        <synopsis>Sets if the number of users should be announced to the user</synopsis>
                                </configOption>
@@ -1574,6 +1577,9 @@ static char *handle_cli_confbridge_show_user_profile(struct ast_cli_entry *e, in
        ast_cli(a->fd,"Quiet:                   %s\n",
                u_profile.flags & USER_OPT_QUIET ?
                "enabled" : "disabled");
+       ast_cli(a->fd,"Hear Join:               %s\n",
+               u_profile.flags & USER_OPT_HEAR_OWN_JOIN_SOUND ?
+               "enabled" : "disabled");
        ast_cli(a->fd,"Wait Marked:             %s\n",
                u_profile.flags & USER_OPT_WAITMARKED ?
                "enabled" : "disabled");
@@ -2396,6 +2402,7 @@ int conf_load_config(void)
        aco_option_register(&cfg_info, "startmuted", ACO_EXACT, user_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_STARTMUTED);
        aco_option_register(&cfg_info, "music_on_hold_when_empty", ACO_EXACT, user_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_MUSICONHOLD);
        aco_option_register(&cfg_info, "quiet", ACO_EXACT, user_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_QUIET);
+       aco_option_register(&cfg_info, "hear_own_join_sound", ACO_EXACT, user_types, "yes", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_HEAR_OWN_JOIN_SOUND);
        aco_option_register_custom(&cfg_info, "announce_user_count_all", ACO_EXACT, user_types, "no", announce_user_count_all_handler, 0);
        aco_option_register(&cfg_info, "announce_user_count", ACO_EXACT, user_types, "no", OPT_BOOLFLAG_T, 1, FLDSET(struct user_profile, flags), USER_OPT_ANNOUNCEUSERCOUNT);
        /* Negative logic. Defaults to "yes" and evaluates with ast_false(). If !ast_false(), USER_OPT_NOONLYPERSON is cleared */
index 95a07321fb63c0ae5246dd6d4c56aad49dfb33f5..f90f18588c97c4e5c966c30369b43691a85c73f4 100644 (file)
@@ -70,6 +70,7 @@ enum user_profile_flags {
        USER_OPT_ECHO_EVENTS = (1 << 18), /*!< Send events only to the admin(s) */
        USER_OPT_TEXT_MESSAGING = (1 << 19), /*!< Send text messages to the user */
        USER_OPT_ANSWER_CHANNEL = (1 << 20), /*!< Sets if the channel should be answered if currently unanswered */
+       USER_OPT_HEAR_OWN_JOIN_SOUND  = (1 << 21), /*!< Set if the caller should hear the join sound */
 };
 
 enum bridge_profile_flags {
index eecbb65d64eca09ba73601993daec60ee0563824..ed4c72b50848c7e7441f21fea8f3c52143dadb33 100644 (file)
@@ -41,6 +41,12 @@ type=user
                ; There are some prompts, such as the prompt to enter a PIN number,
                ; that must be played regardless of what this option is set to.
                ; Off by default
+;hear_own_join_sound=yes  ; Sets if a user joining the conference should hear the sound_join
+                          ; audio sound when they enter the conference. If set to 'no' the
+                          ; user will not hear the sound_join audio but the other participants
+                          ; in the conference will still hear the audio. If set to 'yes'
+                          ; everyone hears the sound_join audio when this user enters the conference.
+                          ; On by default
 ;announce_user_count=yes  ; Sets if the number of users should be announced to the
                           ; caller.  Off by default.
 ;announce_user_count_all=yes ; Sets if the number of users should be announced to
diff --git a/doc/CHANGES-staging/app_confbridge_hear_join.txt b/doc/CHANGES-staging/app_confbridge_hear_join.txt
new file mode 100644 (file)
index 0000000..40f2383
--- /dev/null
@@ -0,0 +1,8 @@
+Subject: app_confbridge
+
+Added the hear_own_join_sound option to the confbridge user profile to
+control who hears the sound_join audio file. When set to 'yes' the user
+entering the conference and the participants already in the conference
+will hear the sound_join audio file. When set to 'no' the user entering
+the conference will not hear the sound_join audio file, but the
+participants already in the conference will hear the sound_join audio file.