aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinclude/asterisk/pbx.h11
-rwxr-xr-xpbx/pbx_config.c43
2 files changed, 36 insertions, 18 deletions
diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h
index 95c510fc8..45758a042 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 1468d8331..9bf224a66 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;
+}