diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c index 47d8d0eb15..937c03d847 100644 --- a/apps/app_confbridge.c +++ b/apps/app_confbridge.c @@ -739,9 +739,8 @@ static int announce_user_count(struct conference_bridge *conference_bridge, stru /*! * \brief Play back an audio file to a channel * - * \param conference_bridge Conference bridge they are in - * \param chan Channel to play audio prompt to - * \param file Prompt to play + * \param cbu User to play audio prompt to + * \param filename Prompt to play * * \return Returns 0 on success, -1 if the user hung up * \note Generally this should be called when the conference is unlocked to avoid blocking @@ -1207,6 +1206,15 @@ static struct conference_bridge *join_conference_bridge(const char *name, struct ao2_unlock(conference_bridge); + /* If an announcement is to be played play it */ + if (!ast_strlen_zero(conference_bridge_user->u_profile.announcement)) { + if (play_prompt_to_user(conference_bridge_user, + conference_bridge_user->u_profile.announcement)) { + leave_conference(conference_bridge_user); + return NULL; + } + } + /* Announce number of users if need be */ if (ast_test_flag(&conference_bridge_user->u_profile, USER_OPT_ANNOUNCEUSERCOUNT)) { if (announce_user_count(conference_bridge, conference_bridge_user)) { @@ -1526,7 +1534,6 @@ static int confbridge_exec(struct ast_channel *chan, const char *data) if (args.argc > 2 && !ast_strlen_zero(args.u_profile_name)) { u_profile_name = args.u_profile_name; } - if (!conf_find_user_profile(chan, u_profile_name, &conference_bridge_user.u_profile)) { ast_log(LOG_WARNING, "Conference user profile %s does not exist\n", u_profile_name); res = -1; diff --git a/apps/app_page.c b/apps/app_page.c index 95069d7d61..8e7d1d2bda 100644 --- a/apps/app_page.c +++ b/apps/app_page.c @@ -141,6 +141,70 @@ struct page_options { struct ast_flags flags; }; +/*! + * \internal + * \brief Setup the page bridge profile. + * + * \param chan Setup bridge profile on this channel. + * \param options Options to setup bridge profile. + * + * \return Nothing + */ +static void setup_profile_bridge(struct ast_channel *chan, struct page_options *options) +{ + /* Use default_bridge as a starting point */ + ast_func_write(chan, "CONFBRIDGE(bridge,template)", ""); + if (ast_test_flag(&options->flags, PAGE_RECORD)) { + ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes"); + } +} + +/*! + * \internal + * \brief Setup the paged user profile. + * + * \param chan Setup user profile on this channel. + * \param options Options to setup paged user profile. + * + * \return Nothing + */ +static void setup_profile_paged(struct ast_channel *chan, struct page_options *options) +{ + /* Use default_user as a starting point */ + ast_func_write(chan, "CONFBRIDGE(user,template)", ""); + ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes"); + ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes"); + if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) { + ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes"); + } + if (ast_test_flag(&options->flags, PAGE_ANNOUNCE) + && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) { + ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]); + } +} + +/*! + * \internal + * \brief Setup the caller user profile. + * + * \param chan Setup user profile on this channel. + * \param options Options to setup caller user profile. + * + * \return Nothing + */ +static void setup_profile_caller(struct ast_channel *chan, struct page_options *options) +{ + /* Use default_user as a starting point if not already setup. */ + ast_func_write(chan, "CONFBRIDGE(user,template)", ""); + ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes"); + ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes"); + if (!ast_test_flag(&options->flags, PAGE_NOCALLERANNOUNCE) + && ast_test_flag(&options->flags, PAGE_ANNOUNCE) + && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) { + ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]); + } +} + static void page_state_callback(struct ast_dial *dial) { struct ast_channel *chan; @@ -152,22 +216,8 @@ static void page_state_callback(struct ast_dial *dial) return; } - ast_func_write(chan, "CONFBRIDGE(bridge,template)", "default_bridge"); - - if (ast_test_flag(&options->flags, PAGE_RECORD)) { - ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes"); - } - - ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes"); - ast_func_write(chan, "CONFBRIDGE(user,end_marked)", "yes"); - - if (!ast_test_flag(&options->flags, PAGE_DUPLEX)) { - ast_func_write(chan, "CONFBRIDGE(user,startmuted)", "yes"); - } - - if (ast_test_flag(&options->flags, PAGE_ANNOUNCE) && !ast_strlen_zero(options->opts[OPT_ARG_ANNOUNCE])) { - ast_func_write(chan, "CONFBRIDGE(user,announcement)", options->opts[OPT_ARG_ANNOUNCE]); - } + setup_profile_bridge(chan, options); + setup_profile_paged(chan, options); } static int page_exec(struct ast_channel *chan, const char *data) @@ -302,17 +352,10 @@ static int page_exec(struct ast_channel *chan, const char *data) } if (!res) { - ast_func_write(chan, "CONFBRIDGE(bridge,template)", "default_bridge"); - - if (ast_test_flag(&options.flags, PAGE_RECORD)) { - ast_func_write(chan, "CONFBRIDGE(bridge,record_conference)", "yes"); - } - - ast_func_write(chan, "CONFBRIDGE(user,quiet)", "yes"); - ast_func_write(chan, "CONFBRIDGE(user,marked)", "yes"); + setup_profile_bridge(chan, &options); + setup_profile_caller(chan, &options); snprintf(confbridgeopts, sizeof(confbridgeopts), "%u", confid); - pbx_exec(chan, app, confbridgeopts); }