diff options
Diffstat (limited to 'pbx')
-rw-r--r-- | pbx/pbx_config.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index 2d93fd8fe..e2b38c15d 100644 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -1410,6 +1410,7 @@ static int pbx_load_config(const char *config_file) const char *aft; const char *newpm, *ovsw; struct ast_flags config_flags = { 0 }; + char lastextension[256] = ""; cfg = ast_config_load(config_file, config_flags); if (!cfg) return 0; @@ -1451,18 +1452,26 @@ static int pbx_load_config(const char *config_file) continue; for (v = ast_variable_browse(cfg, cxt); v; v = v->next) { - if (!strcasecmp(v->name, "exten")) { - char *tc = ast_strdup(v->value); - if (tc) { + char *tc = NULL; + char realext[256] = ""; + char *stringp, *ext; + if (!strncasecmp(v->name, "same", 4)) { + if ((stringp = tc = ast_strdup(v->value))) { + ast_copy_string(realext, lastextension, sizeof(realext)); + goto copy_last_extension; + } + } else if (!strcasecmp(v->name, "exten")) { + if ((tc = ast_strdup(v->value))) { int ipri = -2; - char realext[256]=""; char *plus, *firstp; char *pri, *appl, *data, *cidmatch; - char *stringp = tc; - char *ext = strsep(&stringp, ","); - if (!ext) - ext=""; + stringp = tc; + if (!(ext = strsep(&stringp, ","))) { + ext = ""; + } pbx_substitute_variables_helper(NULL, ext, realext, sizeof(realext) - 1); + ast_copy_string(lastextension, realext, sizeof(lastextension)); +copy_last_extension: cidmatch = strchr(realext, '/'); if (cidmatch) { *cidmatch++ = '\0'; |