diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index 95c510fc8c..45758a0425 100755 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -43,7 +43,8 @@ struct ast_context *ast_context_find(char *name); /* Create a new thread and start the PBX (or whatever) */ int ast_pbx_start(struct ast_channel *c); - +/* Execute the PBX in the current thread */ +int ast_pbx_run(struct ast_channel *c); /* Add an extension to an extension context, this time with an ast_context * */ int ast_add_extension2(struct ast_context *con, @@ -74,6 +75,14 @@ int ast_exec_extension(struct ast_channel *c, char *context, char *exten, int pr /* Longest extension */ int ast_pbx_longest_extension(char *context); +/* Add an include */ +int ast_context_add_include(char *context, char *include); +int ast_context_add_include2(struct ast_context *con, char *include); + +/* Remove an include */ +int ast_context_remove_include(char *context, char *include); +int ast_context_remove_include2(struct ast_context *con, char *include); + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index 1468d83312..9bf224a662 100755 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -37,7 +37,6 @@ int load_module(void) struct ast_variable *v; char *cxt, *ext, *pri, *appl, *data, *tc; struct ast_context *con; - cfg = ast_load(config); if (cfg) { @@ -53,24 +52,29 @@ int load_module(void) if ((con=ast_context_create(cxt))) { v = ast_variable_browse(cfg, cxt); while(v) { - tc = strdup(v->value); - ext = strtok(tc, ","); - if (!ext) - ext=""; - pri = strtok(NULL, ","); - if (!pri) - pri=""; - appl = strtok(NULL, ","); - if (!appl) - appl=""; - data = strtok(NULL, ","); - if (!data) - data=""; - if (ast_add_extension2(con, 0, ext, atoi(pri), appl, strdup(data), free)) { - ast_log(LOG_WARNING, "Unable to register extension\n"); + if (!strcasecmp(v->name, "exten")) { + tc = strdup(v->value); + ext = strtok(tc, ","); + if (!ext) + ext=""; + pri = strtok(NULL, ","); + if (!pri) + pri=""; + appl = strtok(NULL, ","); + if (!appl) + appl=""; + data = strtok(NULL, ","); + if (!data) + data=""; + if (ast_add_extension2(con, 0, ext, atoi(pri), appl, strdup(data), free)) { + ast_log(LOG_WARNING, "Unable to register extension\n"); + } + free(tc); + } else if(!strcasecmp(v->name, "include")) { + if (ast_context_add_include2(con, v->value)) + ast_log(LOG_WARNING, "Unable to include context '%s' in context '%s'\n", v->value, cxt); } v = v->next; - free(tc); } } cxt = ast_category_browse(cfg, cxt); @@ -89,3 +93,8 @@ char *description(void) { return dtext; } + +char *key(void) +{ + return ASTERISK_GPL_KEY; +}