git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6995 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin P. Fleming
2005-11-07 22:41:58 +00:00
parent 018e8c8395
commit 608f5f7f45
2 changed files with 37 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
2005-11-07 Kevin P. Fleming <kpfleming@digium.com> 2005-11-07 Kevin P. Fleming <kpfleming@digium.com>
* apps/app_txtcidname.c: upgrade to new arg/option API and implement priority jumping control
* Makefile: restore function of 'dont-optimize' * Makefile: restore function of 'dont-optimize'
* config.c (config_text_file_load): don't generate log message when stat() fails * config.c (config_text_file_load): don't generate log message when stat() fails

View File

@@ -40,6 +40,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/module.h" #include "asterisk/module.h"
#include "asterisk/enum.h" #include "asterisk/enum.h"
#include "asterisk/utils.h" #include "asterisk/utils.h"
#include "asterisk/app.h"
STANDARD_LOCAL_USER; STANDARD_LOCAL_USER;
@@ -52,9 +53,14 @@ static char *app = "TXTCIDName";
static char *synopsis = "Lookup caller name from TXT record"; static char *synopsis = "Lookup caller name from TXT record";
static char *descrip = 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" "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) 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]; char dest[80];
struct localuser *u; struct localuser *u;
static int dep_warning = 0; 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); LOCAL_USER_ADD(u);
@@ -73,8 +85,23 @@ static int txtcidname_exec(struct ast_channel *chan, void *data)
} }
if (ast_strlen_zero(data)) { if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension)\n"); ast_log(LOG_WARNING, "TXTCIDName requires an argument (extension[|options])\n");
res = 1; 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) { if (!res) {
@@ -85,13 +112,16 @@ static int txtcidname_exec(struct ast_channel *chan, void *data)
if (res > 0) { if (res > 0) {
if (!ast_strlen_zero(txt)) { if (!ast_strlen_zero(txt)) {
pbx_builtin_setvar_helper(chan, "TXTCIDNAME", txt); pbx_builtin_setvar_helper(chan, "TXTCIDNAME", txt);
pbx_builtin_setvar_helper(chan, "TXTCIDNAMESTATUS", "SUCCESS");
if (option_debug > 1) if (option_debug > 1)
ast_log(LOG_DEBUG, "TXTCIDNAME got '%s'\n", txt); ast_log(LOG_DEBUG, "TXTCIDNAME got '%s'\n", txt);
} }
} }
if (!res) { if (!res) {
/* Look for a "busy" place */ /* 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) } else if (res > 0)
res = 0; res = 0;