add a global option to disable priority jumping in applications (when they get update...
authorKevin P. Fleming <kpfleming@digium.com>
Tue, 26 Jul 2005 16:29:56 +0000 (16:29 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Tue, 26 Jul 2005 16:29:56 +0000 (16:29 +0000)
change app_dial to use 'j' to _ENABLE_ priority jumping if it has been globally disabled

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@6224 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c
asterisk.c
configs/extensions.conf.sample
include/asterisk/options.h
pbx/pbx_config.c

index b07f999..f56f089 100755 (executable)
@@ -120,7 +120,7 @@ static char *descrip =
 "             * LIMIT_WARNING_FILE        File to play as warning if 'y' is defined.\n"
 "                        'timeleft' is a special sound macro to auto-say the time \n"
 "                        left and is the default.\n"
-"       'j' -- Do not jump to n+101 if all of the channels were busy.\n\n"
+"       'j' -- Jump to n+101 if all of the channels were busy.\n\n"
 "  In addition to transferring the call, a call may be parked and then picked\n"
 "up by another user.\n"
 "  The optional URL will be sent to the called party if the channel supports it.\n"
@@ -271,7 +271,7 @@ static void senddialevent(struct ast_channel *src, struct ast_channel *dst)
                           dst->uniqueid);
 }
 
-static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localuser *outgoing, int *to, struct ast_flags *peerflags, int *sentringing, char *status, size_t statussize, int busystart, int nochanstart, int congestionstart, int nojump, int *result)
+static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localuser *outgoing, int *to, struct ast_flags *peerflags, int *sentringing, char *status, size_t statussize, int busystart, int nochanstart, int congestionstart, int priority_jump, int *result)
 {
        struct localuser *o;
        int found;
@@ -326,9 +326,8 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu
                                        strcpy(status, "CONGESTION");
                                else if (numnochan)
                                        strcpy(status, "CHANUNAVAIL");
-                               /* See if there is a special busy message */
-                               if (!nojump && ast_exists_extension(in, in->context, in->exten, in->priority + 101, in->cid.cid_num)) 
-                                       in->priority+=100;
+                               if (option_priority_jumping || priority_jump)
+                                       ast_goto_if_exists(in, in->context, in->exten, in->priority + 101);
                        } else {
                                if (option_verbose > 2)
                                        ast_verbose( VERBOSE_PREFIX_2 "No one is available to answer at this time (%d:%d/%d/%d)\n", numlines, numbusy, numcongestion, numnochan);
@@ -670,7 +669,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
        time_t start_time, answer_time, end_time;
        struct ast_app *app = NULL;
        char *dblgoto = NULL;
-       int nojump = 0;
+       int priority_jump = 0;
 
        if (!data) {
                ast_log(LOG_WARNING, "Dial requires an argument (technology1/number1&technology2/number2...|optional timeout|options)\n");
@@ -925,7 +924,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
                } else if (strchr(transfer, 'C')) {
                        resetcdr = 1;
                } else if (strchr(transfer, 'j')) {
-                       nojump = 1;
+                       priority_jump = 1;
                }
                if (strchr(transfer, 'n')) {
                        no_save_intros = 1;
@@ -1238,7 +1237,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
                strcpy(status, "CHANUNAVAIL");
 
        time(&start_time);
-       peer = wait_for_answer(chan, outgoing, &to, peerflags, &sentringing, status, sizeof(status), numbusy, numnochan, numcongestion, nojump, &result);
+       peer = wait_for_answer(chan, outgoing, &to, peerflags, &sentringing, status, sizeof(status), numbusy, numnochan, numcongestion, priority_jump, &result);
        
        if (!peer) {
                if (result) {
index 478446e..aaad989 100755 (executable)
@@ -100,6 +100,7 @@ int option_reconnect = 0;
 int option_transcode_slin = 1;
 int option_maxcalls = 0;
 int option_dontwarn = 0;
+int option_priority_jumping = 1;
 int fully_booted = 0;
 char record_cache_dir[AST_CACHE_DIR_LEN] = AST_TMP_DIR;
 char debug_filename[AST_FILENAME_MAX] = "";
index af7bee6..d106b5b 100755 (executable)
@@ -44,6 +44,14 @@ autofallthrough=yes
 ;
 clearglobalvars=no
 ;
+; If priorityjumping is set to 'yes', then applications that support
+; 'jumping' to a different priority based on the result of their operations
+; will do so (this is backwards compatible behavior with pre-1.2 releases
+; of Asterisk). Individual applications can also be requested to do this
+; by passing a 'j' option in their arguments.
+;
+priorityjumping=no
+;
 ; You can include other config files, use the #include command (without the ';')
 ; Note that this is different from the "include" command that includes contexts within 
 ; other contexts. The #include command works in all asterisk configuration files.
index 083b0c4..6e28636 100755 (executable)
@@ -35,6 +35,7 @@ extern int option_timestamp;
 extern int option_transcode_slin;
 extern int option_maxcalls;
 extern int option_dontwarn;
+extern int option_priority_jumping;
 extern char defaultlanguage[];
 extern time_t ast_startuptime;
 extern time_t ast_lastreloadtime;
index 69b66d5..f15715b 100755 (executable)
@@ -1633,15 +1633,15 @@ static int pbx_load_module(void)
        if (cfg) {
                /* Use existing config to populate the PBX table */
                static_config = ast_true(ast_variable_retrieve(cfg, "general",
-                       "static"));
+                                                              "static"));
                write_protect_config = ast_true(ast_variable_retrieve(cfg, "general",
-                       "writeprotect"));
-               
+                                                                     "writeprotect"));
                autofallthrough_config = ast_true(ast_variable_retrieve(cfg, "general",
-                       "autofallthrough"));
-
+                                                                       "autofallthrough"));
                clearglobalvars_config = ast_true(ast_variable_retrieve(cfg, "general", 
-                       "clearglobalvars"));
+                                                                       "clearglobalvars"));
+               option_priority_jumping = ast_true(ast_variable_retrieve(cfg, "general",
+                                                                        "priorityjumping"));
 
                v = ast_variable_browse(cfg, "globals");
                while(v) {