Change the queue timeout priority logic into less ugly
and confusing code pieces. Clarify the logic within queues.conf.sample. (closes issue #12690) Reported by: atis Patches: queue_timeoutpriority.patch uploaded by atis (license 242) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@138694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
16a0e23110
commit
612f8c85b4
|
@ -2314,6 +2314,14 @@ static int ring_one(struct queue_ent *qe, struct callattempt *outgoing, int *bus
|
||||||
ast_debug(1, "Trying '%s' with metric %d\n", best->interface, best->metric);
|
ast_debug(1, "Trying '%s' with metric %d\n", best->interface, best->metric);
|
||||||
ret = ring_entry(qe, best, busies);
|
ret = ring_entry(qe, best, busies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we have timed out, break out */
|
||||||
|
if (qe->expire && (time(NULL) >= qe->expire)) {
|
||||||
|
if (option_debug)
|
||||||
|
ast_log(LOG_DEBUG, "Queue timed out while ringing members.\n");
|
||||||
|
ret = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -3407,10 +3415,22 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qe->expire && (!qe->parent->timeout || (qe->parent->timeoutpriority == TIMEOUT_PRIORITY_APP && (qe->expire - now) <= qe->parent->timeout)))
|
if (qe->parent->timeoutpriority == TIMEOUT_PRIORITY_APP) {
|
||||||
to = (qe->expire - now) * 1000;
|
/* Application arguments have higher timeout priority (behaviour for <=1.6) */
|
||||||
else
|
if (qe->expire && (!qe->parent->timeout || (qe->expire - now) <= qe->parent->timeout))
|
||||||
to = (qe->parent->timeout) ? qe->parent->timeout * 1000 : -1;
|
to = (qe->expire - now) * 1000;
|
||||||
|
else
|
||||||
|
to = (qe->parent->timeout) ? qe->parent->timeout * 1000 : -1;
|
||||||
|
} else {
|
||||||
|
/* Config timeout is higher priority thatn application timeout */
|
||||||
|
if (qe->expire && qe->expire<=now) {
|
||||||
|
to = 0;
|
||||||
|
} else if (qe->parent->timeout) {
|
||||||
|
to = qe->parent->timeout * 1000;
|
||||||
|
} else {
|
||||||
|
to = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
orig = to;
|
orig = to;
|
||||||
++qe->pending;
|
++qe->pending;
|
||||||
ao2_unlock(qe->parent);
|
ao2_unlock(qe->parent);
|
||||||
|
|
|
@ -148,11 +148,19 @@ shared_lastcall=no
|
||||||
; Queue application is more important. In the scenario above, timeoutpriority=app
|
; Queue application is more important. In the scenario above, timeoutpriority=app
|
||||||
; would result in the second member's phone ringing for 1 second.
|
; would result in the second member's phone ringing for 1 second.
|
||||||
;
|
;
|
||||||
; There are a few exceptions to the priority rules. For instance, if the configuration
|
; There are a few exceptions to the priority rules. For instance, if timeoutpriority=appp
|
||||||
; file timeout is set to 0, but the application argument timeout is non-zero, then the
|
; and the configuration file timeout is set to 0, but the application argument timeout is
|
||||||
; timeoutpriority is ignored and the application argument is used as the timeout. Furthermore,
|
; non-zero, then the timeoutpriority is ignored and the application argument is used as
|
||||||
; if no application argument timeout is specified, then the timeoutpriority option is
|
; the timeout. Furthermore, if no application argument timeout is specified, then the
|
||||||
; ignored and the configuration file timeout is always used when calling queue members.
|
; timeoutpriority option is ignored and the configuration file timeout is always used
|
||||||
|
; when calling queue members.
|
||||||
|
;
|
||||||
|
; In timeoutpriority=conf mode however timeout specified in config file will take higher
|
||||||
|
; priority than timeout in application arguments, so if config file has timeout 0, each
|
||||||
|
; queue member will be called indefineately and application timeout will be checked only
|
||||||
|
; after this call attempt. This is useful for having queue members with custom timeouts
|
||||||
|
; specified within Dial application of Local channel, and allows handling NO ANSWER which
|
||||||
|
; would otherwise be interrupted by queue destroying child channel on timeout.
|
||||||
;
|
;
|
||||||
; The default value for timeoutpriority is "app" since this was how previous versions of
|
; The default value for timeoutpriority is "app" since this was how previous versions of
|
||||||
; Asterisk behaved.
|
; Asterisk behaved.
|
||||||
|
|
Loading…
Reference in New Issue