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
certified/11.2
Terry Wilson 14 years ago
parent 89205c35e8
commit 0ab04b53b5

@ -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

Loading…
Cancel
Save