]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_confbridge: Default the template option to a compatible default profile. 43/243/6
authorKevin Harwell <kharwell@digium.com>
Thu, 23 Apr 2015 20:11:27 +0000 (15:11 -0500)
committerKevin Harwell <kharwell@digium.com>
Fri, 24 Apr 2015 17:20:37 +0000 (12:20 -0500)
Confbridge dynamic profiles did not have a default profile unless you
explicitly used Set(CONFBRIDGE(bridge,template)=default_bridge). If a
template was not set prior to the bridge being created then some
options were left with no default values set. This patch makes it so
the default templates are set to the default bridge and user profiles.

ASTERISK-24749 #close
Reported by: philippebolduc

Change-Id: I1bd6e94b38701ac2112d842db68de63d46f60e0a

apps/confbridge/conf_config_parser.c

index af5dfcea9d94b5e55424e97f61667942150cef4a..6d6f7ab34c89578bd40af630ba4a337af72ab033 100644 (file)
@@ -941,12 +941,17 @@ static const struct ast_datastore_info confbridge_datastore = {
        .type = "confbridge",
        .destroy = func_confbridge_destroy_cb
 };
+
 int func_confbridge_helper(struct ast_channel *chan, const char *cmd, char *data, const char *value)
 {
        struct ast_datastore *datastore;
        struct func_confbridge_data *b_data;
        char *parse;
        struct ast_variable tmpvar = { 0, };
+       struct ast_variable template = {
+               .name = "template",
+               .file = "CONFBRIDGE"
+       };
        AST_DECLARE_APP_ARGS(args,
                AST_APP_ARG(type);
                AST_APP_ARG(option);
@@ -1019,7 +1024,14 @@ int func_confbridge_helper(struct ast_channel *chan, const char *cmd, char *data
                                ast_datastore_free(datastore);
                        }
                        return 0;
-               } else if (!aco_process_var(&bridge_type, "dialplan", &tmpvar, &b_data->b_profile)) {
+               }
+
+               if (b_data && !b_data->b_usable && strcasecmp(args.option, "template")) {
+                       template.value = DEFAULT_BRIDGE_PROFILE;
+                       aco_process_var(&bridge_type, "dialplan", &template, &b_data->b_profile);
+               }
+
+               if (!aco_process_var(&bridge_type, "dialplan", &tmpvar, &b_data->b_profile)) {
                        b_data->b_usable = 1;
                        return 0;
                }
@@ -1029,7 +1041,14 @@ int func_confbridge_helper(struct ast_channel *chan, const char *cmd, char *data
                        user_profile_destructor(&b_data->u_profile);
                        memset(&b_data->u_profile, 0, sizeof(b_data->u_profile));
                        return 0;
-               } else if (!aco_process_var(&user_type, "dialplan", &tmpvar, &b_data->u_profile)) {
+               }
+
+               if (b_data && !b_data->u_usable && strcasecmp(args.option, "template")) {
+                       template.value = DEFAULT_USER_PROFILE;
+                       aco_process_var(&user_type, "dialplan", &template, &b_data->u_profile);
+               }
+
+               if (!aco_process_var(&user_type, "dialplan", &tmpvar, &b_data->u_profile)) {
                        b_data->u_usable = 1;
                        return 0;
                }
@@ -1045,7 +1064,14 @@ int func_confbridge_helper(struct ast_channel *chan, const char *cmd, char *data
                                ast_datastore_free(datastore);
                        }
                        return 0;
-               } else if (!aco_process_var(&menu_type, "dialplan", &tmpvar, b_data->menu)) {
+               }
+
+               if (b_data && !b_data->m_usable && strcasecmp(args.option, "template")) {
+                       template.value = DEFAULT_MENU_PROFILE;
+                       aco_process_var(&menu_type, "dialplan", &template, &b_data->menu);
+               }
+
+               if (!aco_process_var(&menu_type, "dialplan", &tmpvar, b_data->menu)) {
                        b_data->m_usable = 1;
                        return 0;
                }