dect
/
asterisk
Archived
13
0
Fork 0

Add ENUM lookup support

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@932 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
markster 2003-04-29 04:21:19 +00:00
parent 803353e942
commit 29328ccb5a
4 changed files with 117 additions and 3 deletions

View File

@ -1,3 +1,4 @@
-- Add initial ENUM support
-- Add malloc debugging support
-- Add preliminary Voicetronix support
-- Add iLBC codec

View File

@ -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

View File

@ -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

112
apps/app_enumlookup.c Executable file
View File

@ -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 <markster@linux-support.net>
*
* This program is free software, distributed under the terms of
* the GNU General Public License
*/
#include <asterisk/lock.h>
#include <asterisk/file.h>
#include <asterisk/logger.h>
#include <asterisk/channel.h>
#include <asterisk/pbx.h>
#include <asterisk/module.h>
#include <asterisk/enum.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
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;
}