From 29328ccb5a620414ef130754e4e928f5012fe0aa Mon Sep 17 00:00:00 2001 From: markster Date: Tue, 29 Apr 2003 04:21:19 +0000 Subject: Add ENUM lookup support git-svn-id: http://svn.digium.com/svn/asterisk/trunk@932 f38db490-d61c-443f-a65b-d21fe96a405b --- CHANGES | 1 + Makefile | 4 +- apps/Makefile | 3 +- apps/app_enumlookup.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 3 deletions(-) create mode 100755 apps/app_enumlookup.c diff --git a/CHANGES b/CHANGES index 01212e158..6dc8ca1f3 100755 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,4 @@ + -- Add initial ENUM support -- Add malloc debugging support -- Add preliminary Voicetronix support -- Add iLBC codec diff --git a/Makefile b/Makefile index 1cdfc6a99..6495d9057 100755 --- a/Makefile +++ b/Makefile @@ -104,13 +104,13 @@ SUBDIRS=res channels pbx apps codecs formats agi cdr astman ifeq (${OSARCH},Linux) LIBS=-ldl endif -LIBS+=-lpthread -lncurses -lm #-lnjamd +LIBS+=-lpthread -lncurses -lm -lresolv #-lnjamd OBJS=io.o sched.o logger.o frame.o loader.o config.o channel.o \ translate.o file.o say.o pbx.o cli.o md5.o term.o \ ulaw.o alaw.o callerid.o fskmodem.o image.o app.o \ cdr.o tdd.o acl.o rtp.o manager.o asterisk.o ast_expr.o \ dsp.o chanvars.o indications.o autoservice.o db.o privacy.o \ - astmm.o + astmm.o enum.o CC=gcc INSTALL=install diff --git a/apps/Makefile b/apps/Makefile index ba74bebe6..6e9dafb8f 100755 --- a/apps/Makefile +++ b/apps/Makefile @@ -19,7 +19,8 @@ APPS=app_dial.so app_playback.so app_voicemail.so app_directory.so app_intercom. app_queue.so app_senddtmf.so app_parkandannounce.so app_striplsd.so \ app_setcidname.so app_lookupcidname.so app_substring.so app_macro.so \ app_authenticate.so app_softhangup.so app_lookupblacklist.so \ - app_waitforring.so app_privacy.so app_db.so app_chanisavail.so + app_waitforring.so app_privacy.so app_db.so app_chanisavail.so \ + app_enumlookup.so #APPS+=app_sql_postgres.so #APPS+=app_sql_odbc.so 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