diff options
-rwxr-xr-x | pbx/pbx_config.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c index b067e2fe4..7bc449cd6 100755 --- a/pbx/pbx_config.c +++ b/pbx/pbx_config.c @@ -3,9 +3,9 @@ * * Populate and remember extensions from static config file * - * Copyright (C) 1999, Mark Spencer + * Copyright (C) 1999-2004, Digium, Inc. * - * Mark Spencer <markster@linux-support.net> + * Mark Spencer <markster@digium.com> * * This program is free software, distributed under the terms of * the GNU General Public License @@ -1618,6 +1618,7 @@ static int pbx_load_module(void) struct ast_context *con; char *start, *end; char realvalue[256]; + int lastpri = -2; cfg = ast_load(config); if (cfg) { @@ -1658,7 +1659,17 @@ static int pbx_load_module(void) pri=""; if (!strcmp(pri,"hint")) ipri=PRIORITY_HINT; - else { + else if (!strcmp(pri, "next") || !strcmp(pri, "n")) { + if (lastpri > -2) + ipri = lastpri + 1; + else + ast_log(LOG_WARNING, "Can't use 'next' priority on the first entry!\n"); + } else if (!strcmp(pri, "same") || !strcmp(pri, "s")) { + if (lastpri > -2) + ipri = lastpri; + else + ast_log(LOG_WARNING, "Can't use 'same' priority on the first entry!\n"); + } else { if (sscanf(pri, "%i", &ipri) != 1) { ast_log(LOG_WARNING, "Invalid priority '%s' at line %d\n", pri, v->lineno); ipri = 0; @@ -1700,6 +1711,7 @@ static int pbx_load_module(void) while(*appl && (*appl < 33)) appl++; pbx_substitute_variables_helper(NULL, ext, realext, sizeof(realext) - 1); if (ipri) { + lastpri = ipri; if (ast_add_extension2(con, 0, realext, ipri, cidmatch, appl, strdup(data), FREE, registrar)) { ast_log(LOG_WARNING, "Unable to register extension at line %d\n", v->lineno); } |