|
|
|
@ -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';
|
|
|
|
|