|
|
|
@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|
|
|
|
#include "asterisk/module.h"
|
|
|
|
|
#include "asterisk/enum.h"
|
|
|
|
|
#include "asterisk/utils.h"
|
|
|
|
|
#include "asterisk/app.h"
|
|
|
|
|
|
|
|
|
|
STANDARD_LOCAL_USER;
|
|
|
|
|
|
|
|
|
@ -52,9 +53,14 @@ static char *app = "TXTCIDName";
|
|
|
|
|
static char *synopsis = "Lookup caller name from TXT record";
|
|
|
|
|
|
|
|
|
|
static char *descrip =
|
|
|
|
|
" TXTCIDName(<CallerIDNumber>): Looks up a Caller Name via DNS and sets\n"
|
|
|
|
|
" TXTCIDName(<CallerIDNumber>[|options]): Looks up a Caller Name via DNS and sets\n"
|
|
|
|
|
"the variable 'TXTCIDNAME'. TXTCIDName will either be blank\n"
|
|
|
|
|
"or return the value found in the TXT record in DNS.\n" ;
|
|
|
|
|
"or return the value found in the TXT record in DNS.\n"
|
|
|
|
|
"The option string may contain the following character:\n"
|
|
|
|
|
"'j' -- jump to n+101 priority if the lookup fails\n"
|
|
|
|
|
"This application sets the following channel variable upon completion:\n"
|
|
|
|
|
" TXTCIDNAMESTATUS The status of the lookup as a text string, one of\n"
|
|
|
|
|
" SUCCESS | FAILED\n";
|
|
|
|
|
|
|
|
|
|
static int txtcidname_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
{
|
|
|
|
@ -64,6 +70,12 @@ static int txtcidname_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
char dest[80];
|
|
|
|
|
struct localuser *u;
|
|
|
|
|
static int dep_warning = 0;
|
|
|
|
|
char *parse = NULL;
|
|
|
|
|
int priority_jump = 0;
|
|
|
|
|
AST_DECLARE_APP_ARGS(args,
|
|
|
|
|
AST_APP_ARG(cidnum);
|
|
|
|
|
AST_APP_ARG(options);
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
LOCAL_USER_ADD(u);
|
|
|
|
|
|
|
|
|
@ -73,8 +85,23 @@ static int txtcidname_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ast_strlen_zero(data)) {
|
|
|
|
|
ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension)\n");
|
|
|
|
|
res = 1;
|
|
|
|
|
ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension[|options])\n");
|
|
|
|
|
LOCAL_USER_REMOVE(u);
|
|
|
|
|
return(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
parse = ast_strdupa(data);
|
|
|
|
|
if (!parse) {
|
|
|
|
|
ast_log(LOG_ERROR, "Out of memory!\n");
|
|
|
|
|
LOCAL_USER_REMOVE(u);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AST_STANDARD_APP_ARGS(args,parse);
|
|
|
|
|
|
|
|
|
|
if (args.options) {
|
|
|
|
|
if (strchr(args.options, 'j'))
|
|
|
|
|
priority_jump = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!res) {
|
|
|
|
@ -85,13 +112,16 @@ static int txtcidname_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
if (res > 0) {
|
|
|
|
|
if (!ast_strlen_zero(txt)) {
|
|
|
|
|
pbx_builtin_setvar_helper(chan, "TXTCIDNAME", txt);
|
|
|
|
|
pbx_builtin_setvar_helper(chan, "TXTCIDNAMESTATUS", "SUCCESS");
|
|
|
|
|
if (option_debug > 1)
|
|
|
|
|
ast_log(LOG_DEBUG, "TXTCIDNAME got '%s'\n", txt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!res) {
|
|
|
|
|
/* Look for a "busy" place */
|
|
|
|
|
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
|
|
|
|
|
if (priority_jump || option_priority_jumping)
|
|
|
|
|
ast_goto_if_exists(chan, chan->context, chan->exten, chan->priority + 101);
|
|
|
|
|
pbx_builtin_setvar_helper(chan, "TXTCIDNAMESTATUS", "FAILED");
|
|
|
|
|
} else if (res > 0)
|
|
|
|
|
res = 0;
|
|
|
|
|
|
|
|
|
|