diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-04 00:59:58 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-03-04 00:59:58 +0000 |
commit | 484d9d791ff178d551df19b08b81d98352356ae6 (patch) | |
tree | 4f76d49a48aecde81a718f82aa675a9c3c090a14 | |
parent | 19a58256e4171d64970a439cc8c873b7b2f76f4f (diff) |
Add timeoutrestart option (bug #3656)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5135 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | apps/app_queue.c | 18 | ||||
-rwxr-xr-x | configs/queues.conf.sample | 6 |
2 files changed, 21 insertions, 3 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index e3f2026dc..60c5b2a0e 100755 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -196,6 +196,7 @@ static int use_weight = 0; #define QUEUE_FLAG_LEAVEWHENEMPTY (1 << 11) /* If all agents leave the queue, remove callers from the queue */ #define QUEUE_FLAG_REPORTHOLDTIME (1 << 12) /* Should we report caller hold time to answering member? */ #define QUEUE_FLAG_WRAPPED (1 << 13) /* Round Robin - wrapped around? */ +#define QUEUE_FLAG_TIMEOUTRESTART (1 << 14) /* Restart timer when member call */ /* We define a custom "local user" structure because we use it not only for keeping track of what is in use but @@ -1165,8 +1166,11 @@ static struct localuser *wait_for_answer(struct queue_ent *qe, struct localuser ast_cdr_busy(in->cdr); ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } numbusies++; break; case AST_CONTROL_CONGESTION: @@ -1177,8 +1181,11 @@ static struct localuser *wait_for_answer(struct queue_ent *qe, struct localuser ast_cdr_busy(in->cdr); ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } numbusies++; break; case AST_CONTROL_RINGING: @@ -1203,8 +1210,11 @@ static struct localuser *wait_for_answer(struct queue_ent *qe, struct localuser o->stillgoing = 0; ast_hangup(o->chan); o->chan = NULL; - if (qe->parent->strategy) + if (qe->parent->strategy) { + if (ast_test_flag(qe->parent, QUEUE_FLAG_TIMEOUTRESTART)) + *to = orig; ring_one(qe, outgoing, &numbusies); + } } } o = o->next; @@ -2598,6 +2608,8 @@ static void reload_queues(void) q->weight = atoi(var->value); if (q->weight) use_weight++; + } else if (!strcasecmp(var->name, "timeoutrestart")) { + ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_TIMEOUTRESTART); } else { ast_log(LOG_WARNING, "Unknown keyword in queue '%s': %s at line %d of queue.conf\n", cat, var->name, var->lineno); } diff --git a/configs/queues.conf.sample b/configs/queues.conf.sample index 0f0f37e58..0c3447ffa 100755 --- a/configs/queues.conf.sample +++ b/configs/queues.conf.sample @@ -146,6 +146,12 @@ persistentmembers = yes ; ; memberdelay = 0 ; +; If timeoutrestart is set to yes, then the timeout for an agent to answer is +; reset if a BUSY or CONGESTION is received. This can be useful if agents +; are able to cancel a call with reject or similar. +; +; timeoutrestart = no +; ; Each member of this call queue is listed on a separate line in ; the form technology/dialstring. "member" means a normal member of a ; queue. An optional penalty may be specified after a comma, such that |