summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/confbridge/conf_config_parser.c37
-rw-r--r--configs/confbridge.conf.sample4
2 files changed, 41 insertions, 0 deletions
diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c
index ecb989f7b..560bee4e1 100644
--- a/apps/confbridge/conf_config_parser.c
+++ b/apps/confbridge/conf_config_parser.c
@@ -504,6 +504,7 @@ struct confbridge_cfg {
struct ao2_container *menus;
};
+static int verify_default_profiles(void);
static void *bridge_profile_alloc(const char *category);
static void *bridge_profile_find(struct ao2_container *container, const char *category);
static struct bridge_profile_sounds *bridge_profile_sounds_alloc(void);
@@ -641,6 +642,7 @@ static void *confbridge_cfg_alloc(void);
CONFIG_INFO_STANDARD(cfg_info, cfg_handle, confbridge_cfg_alloc,
.files = ACO_FILES(&confbridge_conf),
+ .pre_apply_config = verify_default_profiles,
);
/*! bridge profile container functions */
@@ -1749,6 +1751,41 @@ static int menu_option_handler(const struct aco_option *opt, struct ast_variable
return 0;
}
+static int verify_default_profiles(void)
+{
+ RAII_VAR(struct user_profile *, user_profile, NULL, ao2_cleanup);
+ RAII_VAR(struct bridge_profile *, bridge_profile, NULL, ao2_cleanup);
+ struct confbridge_cfg *cfg = aco_pending_config(&cfg_info);
+
+ if (!cfg) {
+ return 0;
+ }
+
+ bridge_profile = ao2_find(cfg->bridge_profiles, DEFAULT_BRIDGE_PROFILE, OBJ_KEY);
+ if (!bridge_profile) {
+ bridge_profile = bridge_profile_alloc(DEFAULT_BRIDGE_PROFILE);
+ if (!bridge_profile) {
+ return -1;
+ }
+ ast_log(AST_LOG_NOTICE, "Adding %s profile to app_confbridge\n", DEFAULT_BRIDGE_PROFILE);
+ aco_set_defaults(&bridge_type, DEFAULT_BRIDGE_PROFILE, bridge_profile);
+ ao2_link(cfg->bridge_profiles, bridge_profile);
+ }
+
+ user_profile = ao2_find(cfg->bridge_profiles, DEFAULT_USER_PROFILE, OBJ_KEY);
+ if (!user_profile) {
+ user_profile = user_profile_alloc(DEFAULT_USER_PROFILE);
+ if (!user_profile) {
+ return -1;
+ }
+ ast_log(AST_LOG_NOTICE, "Adding %s profile to app_confbridge\n", DEFAULT_USER_PROFILE);
+ aco_set_defaults(&user_type, DEFAULT_USER_PROFILE, user_profile);
+ ao2_link(cfg->user_profiles, user_profile);
+ }
+
+ return 0;
+}
+
int conf_load_config(int reload)
{
if (!reload) {
diff --git a/configs/confbridge.conf.sample b/configs/confbridge.conf.sample
index 7484b28ae..0a40ea2fc 100644
--- a/configs/confbridge.conf.sample
+++ b/configs/confbridge.conf.sample
@@ -9,6 +9,10 @@
; automatically to all ConfBridge instances invoked without
; a user, or bridge argument. No menu is applied by default.
;
+; Note that while properties of the default_user or default_bridge
+; profile can be overridden, if removed, they will be automatically
+; added and made available to the dialplan upon module load.
+;
; --- ConfBridge User Profile Options ---
[default_user]