Merge ENUM fixes (bug #99)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1335 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2003-08-14 21:33:49 +00:00
parent 0e56b81f4c
commit 28f69488c6
2 changed files with 144 additions and 19 deletions

View File

@@ -35,9 +35,12 @@ static char *synopsis = "Lookup number in ENUM";
static char *descrip =
" EnumLookup(exten): Looks up an extension via ENUM and sets\n"
"the variable 'ENUM'. Returns -1 on hangup, or 0 on completion\n"
"regardless of whether the lookup was successful. If the lookup\n"
"was *not* successful and there exists a priority n + 101, then\n"
"that priority will be taken next.\n" ;
"regardless of whether the lookup was successful. Currently, the\n"
"enumservices SIP and TEL are recognized. A good SIP entry\n"
"will result in normal priority handling, whereas a good TEL entry\n"
"will increase the priority by 51 (if existing)\n"
"If the lookup was *not* successful and there exists a priority n + 101,\n"
"then that priority will be taken next.\n" ;
STANDARD_LOCAL_USER;
@@ -49,7 +52,7 @@ static int enumlookup_exec(struct ast_channel *chan, void *data)
char tech[80];
char dest[80];
char tmp[256];
char *c;
char *c,*t;
struct localuser *u;
if (!data || !strlen(data)) {
ast_log(LOG_WARNING, "EnumLookup requires an argument (extension)\n");
@@ -69,6 +72,30 @@ static int enumlookup_exec(struct ast_channel *chan, void *data)
c += 4;
snprintf(tmp, sizeof(tmp), "SIP/%s", c);
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
} else if (!strcasecmp(tech, "tel")) {
c = dest;
if (!strncmp(c, "tel:", 4))
c += 4;
if (c[0] != '+') {
ast_log(LOG_NOTICE, "tel: uri must start with a \"+\" (got '%s')\n", c);
res = 0;
} else {
/* now copy over the number, skipping all non-digits and stop at ; or NULL */
t = tmp;
while( *c && (*c != ';') && (t - tmp < (sizeof(tmp) - 1))) {
if (isdigit(*c))
*t++ = *c;
c++;
}
*t = 0;
pbx_builtin_setvar_helper(chan, "ENUM", tmp);
ast_log(LOG_NOTICE, "tel: ENUM set to \"%s\"\n", tmp);
if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 51, chan->callerid))
chan->priority += 50;
else
res = 0;
}
} else if (strlen(tech)) {
ast_log(LOG_NOTICE, "Don't know how to handle technology '%s'\n", tech);
res = 0;