summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2014-02-10 16:01:37 +0000
committerKinsey Moore <kmoore@digium.com>2014-02-10 16:01:37 +0000
commit75edef52e031c3909b16216946ba91c27deb10b6 (patch)
tree83df779bd602103674007190949dc6a5af08dbfa /apps
parent67f84590e5f2420d5aa3752b369fd2519278d58f (diff)
ConfBridge: Correct prompt playback target
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
Diffstat (limited to 'apps')
-rw-r--r--apps/app_confbridge.c10
-rw-r--r--apps/confbridge/conf_config_parser.c10
-rw-r--r--apps/confbridge/conf_state_empty.c1
-rw-r--r--apps/confbridge/conf_state_multi_marked.c26
-rw-r--r--apps/confbridge/include/confbridge.h9
5 files changed, 35 insertions, 21 deletions
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index 4f854aa1a..10cfb096f 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -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 */
diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c
index ec5b0e618..0e81e7e8e 100644
--- a/apps/confbridge/conf_config_parser.c
+++ b/apps/confbridge/conf_config_parser.c
@@ -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 */
diff --git a/apps/confbridge/conf_state_empty.c b/apps/confbridge/conf_state_empty.c
index bd1309bfd..285f22abb 100644
--- a/apps/confbridge/conf_state_empty.c
+++ b/apps/confbridge/conf_state_empty.c
@@ -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);
}
diff --git a/apps/confbridge/conf_state_multi_marked.c b/apps/confbridge/conf_state_multi_marked.c
index 42a8e7ea2..9c88848aa 100644
--- a/apps/confbridge/conf_state_multi_marked.c
+++ b/apps/confbridge/conf_state_multi_marked.c
@@ -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);
+ }
}
diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h
index e3e3642ee..ce6253744 100644
--- a/apps/confbridge/include/confbridge.h
+++ b/apps/confbridge/include/confbridge.h
@@ -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