From: Michael Cargile Date: Wed, 23 Feb 2022 16:29:09 +0000 (-0500) Subject: apps/confbridge: Added hear_own_join_sound option to control who hears sound_join X-Git-Tag: 18.12.0-rc1~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=216a55408ea8c667956b030946d8bc863f1e2cda;p=thirdparty%2Fasterisk.git apps/confbridge: Added hear_own_join_sound option to control who hears sound_join 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 --- diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c index d811d64264..d365075560 100644 --- a/apps/app_confbridge.c +++ b/apps/app_confbridge.c @@ -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); } } diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c index 4f58c18e67..b27adf24ab 100644 --- a/apps/confbridge/conf_config_parser.c +++ b/apps/confbridge/conf_config_parser.c @@ -97,6 +97,9 @@ Silence enter/leave prompts and user intros for this user + + Determines if the user also hears the join sound when they enter a conference + Sets if the number of users should be announced to the user @@ -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 */ diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h index 95a07321fb..f90f18588c 100644 --- a/apps/confbridge/include/confbridge.h +++ b/apps/confbridge/include/confbridge.h @@ -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 { diff --git a/configs/samples/confbridge.conf.sample b/configs/samples/confbridge.conf.sample index eecbb65d64..ed4c72b508 100644 --- a/configs/samples/confbridge.conf.sample +++ b/configs/samples/confbridge.conf.sample @@ -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 index 0000000000..40f23836ff --- /dev/null +++ b/doc/CHANGES-staging/app_confbridge_hear_join.txt @@ -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.