diff options
-rwxr-xr-x | ChangeLog | 2 | ||||
-rwxr-xr-x | apps/app_txtcidname.c | 40 |
2 files changed, 37 insertions, 5 deletions
@@ -1,5 +1,7 @@ 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' * config.c (config_text_file_load): don't generate log message when stat() fails diff --git a/apps/app_txtcidname.c b/apps/app_txtcidname.c index dcede42ed..b6e365b54 100755 --- a/apps/app_txtcidname.c +++ b/apps/app_txtcidname.c @@ -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; |