aboutsummaryrefslogtreecommitdiffstats
path: root/apps/app_enumlookup.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-14 21:33:49 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-08-14 21:33:49 +0000
commita3c14ea5fbb77270a6670f1abdf7b9b771df24b5 (patch)
tree9bd76497e1b524ff0509edb58d4c0703567bd5aa /apps/app_enumlookup.c
parent19a8cdd5b46dcfcd47fdbef03f677d1e4c07d414 (diff)
Merge ENUM fixes (bug #99)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1335 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_enumlookup.c')
-rwxr-xr-xapps/app_enumlookup.c35
1 files changed, 31 insertions, 4 deletions
diff --git a/apps/app_enumlookup.c b/apps/app_enumlookup.c
index 20a7304be..d547f8a7c 100755
--- a/apps/app_enumlookup.c
+++ b/apps/app_enumlookup.c
@@ -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;