aboutsummaryrefslogtreecommitdiffstats
path: root/pbx
diff options
context:
space:
mode:
authormurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-14 00:16:58 +0000
committermurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2006-10-14 00:16:58 +0000
commit635a40854bd6c4bcd0a2d256b49994edf3a6f3fd (patch)
tree19043a9f8c04557771341c5adf258b910cb610ca /pbx
parentd0a21a7c0b9dcd8dae47fdac957f7de197cb2c7b (diff)
Made a small update to solve bug 8128; The switch-case fallthru goto to a pattern extension needed to resolved the wildcards to an appropriate digit for extension matching to work
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@45134 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx')
-rw-r--r--pbx/pbx_ael.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c
index 0ab588679..f40e114ef 100644
--- a/pbx/pbx_ael.c
+++ b/pbx/pbx_ael.c
@@ -474,6 +474,29 @@ static char *argument_end(char *str)
return NULL;
}
+static void gen_match_to_pattern(const char *pattern, char *result)
+{
+ /* the result will be a string that will be matched by pattern */
+ char *p=(char *)pattern, *t=result;
+ while (*p) {
+ if (*p == 'x' || *p == 'n' || *p == 'z' || *p == 'X' || *p == 'N' || *p == 'Z')
+ *t++ = '9';
+ else if (*p == '[') {
+ char *z = p+1;
+ while (*z != ']')
+ z++;
+ if (*(z+1)== ']')
+ z++;
+ *t++=*(p+1); /* use the first char in the set */
+ p = z;
+ } else {
+ *t++ = *p;
+ }
+ p++;
+ }
+ *t++ = 0; /* cap it off */
+}
+
static int build_step(const char *what, const char *name, const char *filename, int lineno, struct ast_context *con, char *exten, int *pos, char *data, struct fillin **fillout, char **label);
static int __build_step(const char *what, const char *name, const char *filename, int lineno, struct ast_context *con, char *exten, int *pos, char *data, struct fillin **fillout, char **label)
{
@@ -541,9 +564,12 @@ static int __build_step(const char *what, const char *name, const char *filename
if (aeldebug & DEBUG_TOKENS)
ast_verbose("--NEWCASE: '%s'!\n", newcase);
if (curcase) {
+ char zbuf[256];
+
/* Handle fall through */
char tmp[strlen(newcase) + strlen(name) + 40];
- sprintf(tmp, "sw-%d-%s|%d", *pos - 2, newcase, 1);
+ gen_match_to_pattern(newcase,zbuf);
+ sprintf(tmp, "sw-%d-%s|%d", *pos - 2, zbuf, 1);
ast_add_extension2(con, 0, margs, cpos, NULL, NULL, "Goto", strdup(tmp), FREE, registrar);
}
curcase = newcase;