From be6da9b8ea212d209b75ee0ace09c76a93f384fa Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Tue, 29 Apr 2003 04:21:19 +0000 Subject: Add ENUM lookup support git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@932 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_enumlookup.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100755 apps/app_enumlookup.c (limited to 'apps/app_enumlookup.c') diff --git a/apps/app_enumlookup.c b/apps/app_enumlookup.c new file mode 100755 index 000000000..194279ae3 --- /dev/null +++ b/apps/app_enumlookup.c @@ -0,0 +1,112 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Time of day - Report the time of day + * + * Copyright (C) 1999, Mark Spencer + * + * Mark Spencer + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + + +static char *tdesc = "Date and Time"; + +static char *app = "EnumLookup"; + +static char *synopsis = "Say the date and time"; + +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" ; + +STANDARD_LOCAL_USER; + +LOCAL_USER_DECL; + +static int enumlookup_exec(struct ast_channel *chan, void *data) +{ + int res=0; + char tech[80]; + char dest[80]; + char tmp[256]; + char *c; + struct localuser *u; + if (!data || !strlen(data)) { + ast_log(LOG_WARNING, "EnumLookup requires an argument (extension)\n"); + res = 1; + } + LOCAL_USER_ADD(u); + if (!res) { + res = ast_get_enum(chan, data, dest, sizeof(dest), tech, sizeof(tech)); + printf("ENUM got '%d'\n", res); + } + LOCAL_USER_REMOVE(u); + /* Parse it out */ + if (res > 0) { + if (!strcasecmp(tech, "SIP")) { + c = dest; + if (!strncmp(c, "sip:", 4)) + c += 4; + snprintf(tmp, sizeof(tmp), "SIP/%s", c); + pbx_builtin_setvar_helper(chan, "ENUM", tmp); + } else if (strlen(tech)) { + ast_log(LOG_NOTICE, "Don't know how to handle technology '%s'\n", tech); + res = 0; + } + } + if (!res) { + /* Look for a "busy" place */ + if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + 101, chan->callerid)) + chan->priority += 100; + } else if (res > 0) + res = 0; + return res; +} + +int unload_module(void) +{ + STANDARD_HANGUP_LOCALUSERS; + return ast_unregister_application(app); +} + +int load_module(void) +{ + return ast_register_application(app, enumlookup_exec, synopsis, descrip); +} + +char *description(void) +{ + return tdesc; +} + +int usecount(void) +{ + int res; + STANDARD_USECOUNT(res); + return res; +} + +char *key() +{ + return ASTERISK_GPL_KEY; +} -- cgit v1.2.3