issue #5647
authorKevin P. Fleming <kpfleming@digium.com>
Mon, 7 Nov 2005 22:41:58 +0000 (22:41 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Mon, 7 Nov 2005 22:41:58 +0000 (22:41 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6995 65c4cc65-6c06-0410-ace0-fbb531ad65f3

ChangeLog
apps/app_txtcidname.c

index e4da7ac..5da16d9 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index dcede42..b6e365b 100755 (executable)
@@ -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;