diff options
author | Russell Bryant <russell@russellbryant.com> | 2004-09-28 03:32:21 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2004-09-28 03:32:21 +0000 |
commit | 66bf105bbccb77b3d97f7bc0a7ef8566fde8ff97 (patch) | |
tree | 218cbd6ff8c65458c8df017037044617eee707bd /apps | |
parent | 1700f24dd32d560c2d1fe3a8827473d18fbb04c8 (diff) |
add ability to purge callers from queue if no agents are logged in
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rwxr-xr-x | apps/app_queue.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 542ede246..aa54749b5 100755 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -226,6 +226,7 @@ struct ast_call_queue { int wrapped; /* Round Robin - wrapped around? */ int joinempty; /* Do we care if the queue has no members? */ int eventwhencalled; /* Generate an event when the agent is called (before pickup) */ + int leavewhenempty; /* If all agents leave the queue, remove callers from the queue */ struct member *members; /* Member channels to be tried */ struct queue_ent *head; /* Start of the actual queue */ @@ -912,6 +913,12 @@ static int wait_our_turn(struct queue_ent *qe, int ringing) break; } + /* leave the queue if no agents, if enabled */ + if (!(qe->parent->members) && qe->parent->leavewhenempty) { + leave_queue(qe); + break; + } + /* Make a position announcement, if enabled */ if (qe->parent->announcefrequency && !ringing) say_position(qe); @@ -1626,7 +1633,7 @@ check_turns: /* This is the wait loop for the head caller*/ /* To exit, they may get their call answered; */ /* they may dial a digit from the queue context; */ - /* or, they may may timeout. */ + /* or, they may timeout. */ /* Leave if we have exceeded our queuetimeout */ if (qe.queuetimeout && ( (time(NULL) - qe.start) >= qe.queuetimeout) ) { @@ -1634,6 +1641,12 @@ check_turns: break; } + /* leave the queue if no agents, if enabled */ + if (!((qe.parent)->members) && (qe.parent)->leavewhenempty) { + leave_queue(&qe); + break; + } + /* Make a position announcement, if enabled */ if (qe.parent->announcefrequency && !ringing) say_position(&qe); @@ -1872,6 +1885,8 @@ static void reload_queues(void) } } else if (!strcasecmp(var->name, "joinempty")) { q->joinempty = ast_true(var->value); + } else if (!strcasecmp(var->name, "leavewhenempty")) { + q->leavewhenempty = ast_true(var->value); } else if (!strcasecmp(var->name, "eventwhencalled")) { q->eventwhencalled = ast_true(var->value); } else { |