Index: apps/app_txtcidname.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_txtcidname.c,v retrieving revision 1.23 diff -u -r1.23 app_txtcidname.c --- apps/app_txtcidname.c 6 Nov 2005 15:09:46 -0000 1.23 +++ apps/app_txtcidname.c 7 Nov 2005 16:36:15 -0000 @@ -40,6 +40,7 @@ #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 *synopsis = "Lookup caller name from TXT record"; static char *descrip = -" TXTCIDName(): Looks up a Caller Name via DNS and sets\n" +" TXTCIDName([|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 zero of 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 @@ 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 @@ } 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 @@ 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;