mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-23 13:09:00 +00:00
Add autopausebusy and autopauseunavail queue options
Make it possible to autopause on a busy or unavailable response from a device. (closes issue ASTERISK-16112) Reported by: jlpedrosa Patches: autopausebusy.txt by twilson Review: https://reviewboard.asterisk.org/r/1399/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@338187 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
2
CHANGES
2
CHANGES
@@ -227,6 +227,8 @@ Queue changes
|
|||||||
* Added member option ignorebusy this when set and ringinuse is not
|
* Added member option ignorebusy this when set and ringinuse is not
|
||||||
will allow per member control of multiple calls as ringinuse does for
|
will allow per member control of multiple calls as ringinuse does for
|
||||||
the Queue.
|
the Queue.
|
||||||
|
* Added queue options autopausebusy and autopauseunavail for automatically
|
||||||
|
pausing a queue member when their device reports busy or congestion.
|
||||||
|
|
||||||
Applications
|
Applications
|
||||||
------------
|
------------
|
||||||
|
@@ -1158,6 +1158,8 @@ struct call_queue {
|
|||||||
unsigned int realtime:1;
|
unsigned int realtime:1;
|
||||||
unsigned int found:1;
|
unsigned int found:1;
|
||||||
unsigned int relativeperiodicannounce:1;
|
unsigned int relativeperiodicannounce:1;
|
||||||
|
unsigned int autopausebusy:1;
|
||||||
|
unsigned int autopauseunavail:1;
|
||||||
enum empty_conditions joinempty;
|
enum empty_conditions joinempty;
|
||||||
enum empty_conditions leavewhenempty;
|
enum empty_conditions leavewhenempty;
|
||||||
int announcepositionlimit; /*!< How many positions we announce? */
|
int announcepositionlimit; /*!< How many positions we announce? */
|
||||||
@@ -2040,6 +2042,10 @@ static void queue_set_param(struct call_queue *q, const char *param, const char
|
|||||||
q->autopause = autopause2int(val);
|
q->autopause = autopause2int(val);
|
||||||
} else if (!strcasecmp(param, "autopausedelay")) {
|
} else if (!strcasecmp(param, "autopausedelay")) {
|
||||||
q->autopausedelay = atoi(val);
|
q->autopausedelay = atoi(val);
|
||||||
|
} else if (!strcasecmp(param, "autopausebusy")) {
|
||||||
|
q->autopausebusy = ast_true(val);
|
||||||
|
} else if (!strcasecmp(param, "autopauseunavail")) {
|
||||||
|
q->autopauseunavail = ast_true(val);
|
||||||
} else if (!strcasecmp(param, "maxlen")) {
|
} else if (!strcasecmp(param, "maxlen")) {
|
||||||
q->maxlen = atoi(val);
|
q->maxlen = atoi(val);
|
||||||
if (q->maxlen < 0)
|
if (q->maxlen < 0)
|
||||||
@@ -3782,7 +3788,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
|
|||||||
do_hang(o);
|
do_hang(o);
|
||||||
endtime = (long) time(NULL);
|
endtime = (long) time(NULL);
|
||||||
endtime -= starttime;
|
endtime -= starttime;
|
||||||
rna(endtime * 1000, qe, on, membername, 0);
|
rna(endtime * 1000, qe, on, membername, qe->parent->autopausebusy);
|
||||||
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
|
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
|
||||||
if (qe->parent->timeoutrestart)
|
if (qe->parent->timeoutrestart)
|
||||||
*to = orig;
|
*to = orig;
|
||||||
@@ -3800,7 +3806,7 @@ static struct callattempt *wait_for_answer(struct queue_ent *qe, struct callatte
|
|||||||
ast_cdr_busy(in->cdr);
|
ast_cdr_busy(in->cdr);
|
||||||
endtime = (long) time(NULL);
|
endtime = (long) time(NULL);
|
||||||
endtime -= starttime;
|
endtime -= starttime;
|
||||||
rna(endtime * 1000, qe, on, membername, 0);
|
rna(endtime * 1000, qe, on, membername, qe->parent->autopauseunavail);
|
||||||
do_hang(o);
|
do_hang(o);
|
||||||
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
|
if (qe->parent->strategy != QUEUE_STRATEGY_RINGALL) {
|
||||||
if (qe->parent->timeoutrestart)
|
if (qe->parent->timeoutrestart)
|
||||||
|
@@ -210,6 +210,16 @@ monitor-type = MixMonitor
|
|||||||
; last call if a member has not taken a call the delay has no effect.
|
; last call if a member has not taken a call the delay has no effect.
|
||||||
;autopausedelay=60
|
;autopausedelay=60
|
||||||
;
|
;
|
||||||
|
; Autopausebusy controls whether or not a queue member is set as paused
|
||||||
|
; automatically upon the member device reporting busy. The autopausedelay
|
||||||
|
; option applies. Defaults to 'no'.
|
||||||
|
;autopausebusy=no
|
||||||
|
;
|
||||||
|
; Autopauseunavail controls whether or not a queue member is set as paused
|
||||||
|
; automatically upon the member device reporting congestion. The autopausedely
|
||||||
|
; option applies. Defaults to 'no'.
|
||||||
|
;autopauseunavail=no
|
||||||
|
;
|
||||||
; Maximum number of people waiting in the queue (0 for unlimited)
|
; Maximum number of people waiting in the queue (0 for unlimited)
|
||||||
;
|
;
|
||||||
;maxlen = 0
|
;maxlen = 0
|
||||||
|
Reference in New Issue
Block a user