]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ConfBridge: Correct prompt playback target
authorKinsey Moore <kmoore@digium.com>
Mon, 10 Feb 2014 16:01:37 +0000 (16:01 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 10 Feb 2014 16:01:37 +0000 (16:01 +0000)
Currently, when the first marked user enters the conference that
contains waitmarked users, a prompt is played indicating that the user
is being placed into the conference. Unfortunately, this prompt is
played to the marked user and not the waitmarked users which is not
very helpful.

This patch changes that behavior to play a prompt stating
"The conference will now begin" to the entire conference after adding
and unmuting the waitmarked users since the design of confbridge is not
conducive to playing a prompt to a subset of users in a conference in
an asynchronous manner.

(closes issue PQ-1396)
Review: https://reviewboard.asterisk.org/r/3155/
Reported by: Steve Pitts
........

Merged revisions 407857 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 407858 from http://svn.asterisk.org/svn/asterisk/branches/12

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@407859 65c4cc65-6c06-0410-ace0-fbb531ad65f3

UPGRADE.txt
apps/app_confbridge.c
apps/confbridge/conf_config_parser.c
apps/confbridge/conf_state_empty.c
apps/confbridge/conf_state_multi_marked.c
apps/confbridge/include/confbridge.h
configs/confbridge.conf.sample

index 5831c8d992790e061e44a7fddab9ed78525e48ce..9712c49ea94c94227585d298975fa8be145de521 100644 (file)
 === UPGRADE-11.txt  -- Upgrade info for 10 to 11
 === UPGRADE-12.txt  -- Upgrade info for 11 to 12
 ===========================================================
+* The sound_place_into_conference sound used in Confbridge is now deprecated
+  and is no longer functional since it has been broken since its inception
+  and the fix involved using a different method to achieve the same goal. The
+  new method to achieve this functionality is by using sound_begin to play
+  a sound to the conference when waitmarked users are moved into the conference.
 
 From 12 to 13:
 
index 4f854aa1a4433892a31a4140b69cd56b24baee90..10cfb096ff775c8c4502aa514048e6caa60c647f 100644 (file)
@@ -430,6 +430,8 @@ const char *conf_get_sound(enum conf_sounds sound, struct bridge_profile_sounds
                return S_OR(custom_sounds->participantsmuted, "conf-now-muted");
        case CONF_SOUND_PARTICIPANTS_UNMUTED:
                return S_OR(custom_sounds->participantsunmuted, "conf-now-unmuted");
+       case CONF_SOUND_BEGIN:
+               return S_OR(custom_sounds->begin, "confbridge-conf-begin");
        }
 
        return "";
@@ -1097,14 +1099,6 @@ static void conf_moh_suspend(struct confbridge_user *user)
        ao2_unlock(user->conference);
 }
 
-int conf_handle_first_marked_common(struct confbridge_user *user)
-{
-       if (!ast_test_flag(&user->u_profile, USER_OPT_QUIET) && play_prompt_to_user(user, conf_get_sound(CONF_SOUND_PLACE_IN_CONF, user->b_profile.sounds))) {
-               return -1;
-       }
-       return 0;
-}
-
 int conf_handle_inactive_waitmarked(struct confbridge_user *user)
 {
        /* If we have not been quieted play back that they are waiting for the leader */
index ec5b0e61823a2c9fdf2f059ceb671d1071096030..0e81e7e8e85d71e61df8ca9c988af64aa7d88f35 100644 (file)
@@ -874,6 +874,12 @@ static int set_sound(const char *sound_name, const char *sound_file, struct brid
        } else if (!strcasecmp(sound_name, "sound_other_in_party")) {
                ast_string_field_set(sounds, otherinparty, sound_file);
        } else if (!strcasecmp(sound_name, "sound_place_into_conference")) {
+               static int deprecation_warning = 1;
+               if (deprecation_warning) {
+                       ast_log(LOG_WARNING, "sound_place_into_conference is deprecated"
+                               " and unused. Use sound_begin for similar functionality.");
+                       deprecation_warning = 0;
+               }
                ast_string_field_set(sounds, placeintoconf, sound_file);
        } else if (!strcasecmp(sound_name, "sound_wait_for_leader")) {
                ast_string_field_set(sounds, waitforleader, sound_file);
@@ -899,6 +905,8 @@ static int set_sound(const char *sound_name, const char *sound_file, struct brid
                ast_string_field_set(sounds, participantsmuted, sound_file);
        } else if (!strcasecmp(sound_name, "sound_participants_unmuted")) {
                ast_string_field_set(sounds, participantsunmuted, sound_file);
+       } else if (!strcasecmp(sound_name, "sound_begin")) {
+               ast_string_field_set(sounds, begin, sound_file);
        } else {
                return -1;
        }
@@ -1564,6 +1572,7 @@ static char *handle_cli_confbridge_show_bridge_profile(struct ast_cli_entry *e,
        ast_cli(a->fd,"sound_leave:          %s\n", conf_get_sound(CONF_SOUND_LEAVE, b_profile.sounds));
        ast_cli(a->fd,"sound_participants_muted:     %s\n", conf_get_sound(CONF_SOUND_PARTICIPANTS_MUTED, b_profile.sounds));
        ast_cli(a->fd,"sound_participants_unmuted:     %s\n", conf_get_sound(CONF_SOUND_PARTICIPANTS_UNMUTED, b_profile.sounds));
+       ast_cli(a->fd,"sound_begin:          %s\n", conf_get_sound(CONF_SOUND_BEGIN, b_profile.sounds));
        ast_cli(a->fd,"\n");
 
        conf_bridge_profile_destroy(&b_profile);
@@ -1906,6 +1915,7 @@ static int bridge_template_handler(const struct aco_option *opt, struct ast_vari
        ast_string_field_set(sounds, leave, b_profile->sounds->leave);
        ast_string_field_set(sounds, participantsmuted, b_profile->sounds->participantsmuted);
        ast_string_field_set(sounds, participantsunmuted, b_profile->sounds->participantsunmuted);
+       ast_string_field_set(sounds, begin, b_profile->sounds->begin);
 
        ao2_ref(b_profile->sounds, -1); /* sounds struct copied over to it from the template by reference only. */
        ao2_ref(oldsounds, -1);    /* original sounds struct we don't need anymore */
index bd1309bfdc5e704f9dca68f475adc605a6da93c0..285f22abbee75a3631ea2e8719e0c6c12b621b46 100644 (file)
@@ -73,7 +73,6 @@ static void join_marked(struct confbridge_user *user)
 {
        conf_add_user_marked(user->conference, user);
        conf_handle_first_join(user->conference);
-       conf_add_post_join_action(user, conf_handle_first_marked_common);
 
        conf_change_state(user, CONF_STATE_SINGLE_MARKED);
 }
index 42a8e7ea25a0737f64e5bc85166c7c4239f7b22d..9c88848aa50d6202c1d7eaf42a8c7d9ce56d6219 100644 (file)
@@ -171,14 +171,21 @@ static void leave_marked(struct confbridge_user *user)
        }
 }
 
+static int post_join_play_begin(struct confbridge_user *cbu)
+{
+       int res;
+
+       ast_autoservice_start(cbu->chan);
+       res = play_sound_file(cbu->conference,
+               conf_get_sound(CONF_SOUND_BEGIN, cbu->b_profile.sounds));
+       ast_autoservice_stop(cbu->chan);
+       return res;
+}
+
 static void transition_to_marked(struct confbridge_user *user)
 {
        struct confbridge_user *user_iter;
-
-       /* Play the audio file stating they are going to be placed into the conference */
-       if (user->conference->markedusers == 1 && ast_test_flag(&user->u_profile, USER_OPT_MARKEDUSER)) {
-               conf_handle_first_marked_common(user);
-       }
+       int waitmarked_moved = 0;
 
        /* Move all waiting users to active, stopping MOH and unmuting if necessary */
        AST_LIST_TRAVERSE_SAFE_BEGIN(&user->conference->waiting_list, user_iter, list) {
@@ -190,6 +197,15 @@ static void transition_to_marked(struct confbridge_user *user)
                        conf_moh_stop(user_iter);
                }
                conf_update_user_mute(user_iter);
+               waitmarked_moved++;
        }
        AST_LIST_TRAVERSE_SAFE_END;
+
+       /* Play the audio file stating that the conference is beginning */
+       if (user->conference->markedusers == 1
+               && ast_test_flag(&user->u_profile, USER_OPT_MARKEDUSER)
+               && !ast_test_flag(&user->u_profile, USER_OPT_QUIET)
+               && waitmarked_moved) {
+               conf_add_post_join_action(user, post_join_play_begin);
+       }
 }
index e3e3642eed8e7b204186c04c7965990f4dac9bde..ce6253744fe3e42f0ee477eeb5ea605c04443740 100644 (file)
@@ -163,6 +163,7 @@ enum conf_sounds {
        CONF_SOUND_LEAVE,
        CONF_SOUND_PARTICIPANTS_MUTED,
        CONF_SOUND_PARTICIPANTS_UNMUTED,
+       CONF_SOUND_BEGIN,
 };
 
 struct bridge_profile_sounds {
@@ -189,6 +190,7 @@ struct bridge_profile_sounds {
                AST_STRING_FIELD(join);
                AST_STRING_FIELD(participantsmuted);
                AST_STRING_FIELD(participantsunmuted);
+               AST_STRING_FIELD(begin);
        );
 };
 
@@ -418,13 +420,6 @@ void conf_moh_start(struct confbridge_user *user);
  */
 void conf_mute_only_active(struct confbridge_conference *conference);
 
-/*! \brief Callback to execute any time we transition from zero to one marked users
- * \param user The first marked user joining the conference
- * \retval 0 success
- * \retval -1 failure
- */
-int conf_handle_first_marked_common(struct confbridge_user *user);
-
 /*! \brief Callback to execute any time we transition from zero to one active users
  * \param conference The conference bridge with a single active user joined
  * \retval 0 success
index 4f7c6e55228bf99072de130cb31e011afe356684..860f1cb876e69d4cbd306d74d2b3619ea2352ed0 100644 (file)
@@ -232,7 +232,9 @@ type=bridge
                        ; The sounds are stringed together like this.
                        ; "sound_there_are" <number of participants> "sound_other_in_party"
 ;sound_place_into_conference ; The sound played when someone is placed into the conference
-                             ; after waiting for a marked user.
+                             ; after waiting for a marked user. This sound is now deprecated
+                             ; since it was only ever used improperly and correcting that bug
+                             ; made it completely unused.
 ;sound_wait_for_leader  ; The sound played when a user is placed into a conference that
                         ; can not start until a marked user enters.
 ;sound_leader_has_left  ; The sound played when the last marked user leaves the conference.
@@ -242,6 +244,7 @@ type=bridge
 ;sound_locked_now ; The sound played to an admin after toggling the conference to locked mode.
 ;sound_unlocked_now; The sound played to an admin after toggling the conference to unlocked mode.
 ;sound_error_menu ; The sound played when an invalid menu option is entered.
+;sound_begin ; The sound played to the conference when the first marked user enters the conference.
 
 ; --- ConfBridge Menu Options ---
 ; The ConfBridge application also has the ability to