add option to avoid calling members whose channels are 'in use' (issue #6315, plus documentation)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@10163 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Kevin P. Fleming 20 years ago
parent 0a9c957764
commit f0495e8944

@ -326,6 +326,7 @@ struct ast_call_queue {
unsigned int joinempty:2; unsigned int joinempty:2;
unsigned int eventwhencalled:1; unsigned int eventwhencalled:1;
unsigned int leavewhenempty:2; unsigned int leavewhenempty:2;
unsigned int ringinuse:1;
unsigned int reportholdtime:1; unsigned int reportholdtime:1;
unsigned int wrapped:1; unsigned int wrapped:1;
unsigned int timeoutrestart:1; unsigned int timeoutrestart:1;
@ -575,6 +576,7 @@ static void init_queue(struct ast_call_queue *q)
q->announceholdtime = 0; q->announceholdtime = 0;
q->roundingseconds = 0; /* Default - don't announce seconds */ q->roundingseconds = 0; /* Default - don't announce seconds */
q->servicelevel = 0; q->servicelevel = 0;
q->ringinuse = 1;
q->moh[0] = '\0'; q->moh[0] = '\0';
q->announce[0] = '\0'; q->announce[0] = '\0';
q->context[0] = '\0'; q->context[0] = '\0';
@ -626,6 +628,8 @@ static void queue_set_param(struct ast_call_queue *q, const char *param, const c
q->timeout = atoi(val); q->timeout = atoi(val);
if (q->timeout < 0) if (q->timeout < 0)
q->timeout = DEFAULT_TIMEOUT; q->timeout = DEFAULT_TIMEOUT;
} else if (!strcasecmp(param, "ringinuse")) {
q->ringinuse = ast_true(val);
} else if (!strcasecmp(param, "monitor-join")) { } else if (!strcasecmp(param, "monitor-join")) {
q->monjoin = ast_true(val); q->monjoin = ast_true(val);
} else if (!strcasecmp(param, "monitor-format")) { } else if (!strcasecmp(param, "monitor-format")) {
@ -1379,6 +1383,15 @@ static int ring_entry(struct queue_ent *qe, struct callattempt *tmp, int *busies
return 0; return 0;
} }
if (!qe->parent->ringinuse && (tmp->member->status == AST_DEVICE_INUSE)) {
if (option_debug)
ast_log(LOG_DEBUG, "%s in use, can't receive call\n", tmp->interface);
if (qe->chan->cdr)
ast_cdr_busy(qe->chan->cdr);
tmp->stillgoing = 0;
return 0;
}
if (tmp->member->paused) { if (tmp->member->paused) {
if (option_debug) if (option_debug)
ast_log(LOG_DEBUG, "%s paused, can't receive call\n", tmp->interface); ast_log(LOG_DEBUG, "%s paused, can't receive call\n", tmp->interface);

@ -174,6 +174,12 @@ persistentmembers = yes
; ;
; reportholdtime = no ; reportholdtime = no
; ;
; If you want the queue to avoid sending calls to members whose devices are
; known to be 'in use' (via the channel driver supporting that device state)
; uncomment this option. (Note: only the SIP channel driver currently is able
; to report 'in use'.)
;
; ringinuse = no
; ;
; If you wish to have a delay before the member is connected to the caller (or ; If you wish to have a delay before the member is connected to the caller (or
; before the member hears any announcement messages), set this to the number of ; before the member hears any announcement messages), set this to the number of

Loading…
Cancel
Save