Index: apps/app_queue.c =================================================================== RCS file: /usr/cvsroot/asterisk/apps/app_queue.c,v retrieving revision 1.124 diff -u -r1.124 app_queue.c --- apps/app_queue.c 20 Feb 2005 19:02:20 -0000 1.124 +++ apps/app_queue.c 3 Mar 2005 14:06:51 -0000 @@ -196,6 +196,7 @@ #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_EVENTMEMBERSTATUS (1 << 14) /* Generate somewhat spurious queue member status events */ /* We define a custom "local user" structure because we use it not only for keeping track of what is in use but @@ -385,17 +386,19 @@ if (!strcasecmp(sc->dev, cur->interface)) { if (cur->status != sc->state) { cur->status = sc->state; - manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus", - "Queue: %s\r\n" - "Location: %s\r\n" - "Membership: %s\r\n" - "Penalty: %d\r\n" - "CallsTaken: %d\r\n" - "LastCall: %ld\r\n" - "Status: %d\r\n" - "Paused: %d\r\n", - q->name, cur->interface, cur->dynamic ? "dynamic" : "static", - cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused); + if (ast_test_flag(q, QUEUE_FLAG_EVENTMEMBERSTATUS)) { + manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus", + "Queue: %s\r\n" + "Location: %s\r\n" + "Membership: %s\r\n" + "Penalty: %d\r\n" + "CallsTaken: %d\r\n" + "LastCall: %ld\r\n" + "Status: %d\r\n" + "Paused: %d\r\n", + q->name, cur->interface, cur->dynamic ? "dynamic" : "static", + cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused); + } } } cur = cur->next; @@ -712,17 +715,19 @@ while(cur) { if (member == cur) { cur->status = status; - manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus", - "Queue: %s\r\n" - "Location: %s\r\n" - "Membership: %s\r\n" - "Penalty: %d\r\n" - "CallsTaken: %d\r\n" - "LastCall: %ld\r\n" - "Status: %d\r\n" - "Paused: %d\r\n", - q->name, cur->interface, cur->dynamic ? "dynamic" : "static", - cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused); + if (ast_test_flag(q, QUEUE_FLAG_EVENTMEMBERSTATUS)) { + manager_event(EVENT_FLAG_AGENT, "QueueMemberStatus", + "Queue: %s\r\n" + "Location: %s\r\n" + "Membership: %s\r\n" + "Penalty: %d\r\n" + "CallsTaken: %d\r\n" + "LastCall: %ld\r\n" + "Status: %d\r\n" + "Paused: %d\r\n", + q->name, cur->interface, cur->dynamic ? "dynamic" : "static", + cur->penalty, cur->calls, cur->lastcall, cur->status, cur->paused); + } break; } cur = cur->next; @@ -1623,8 +1628,9 @@ "Uniqueid: %s\r\n" "Channel: %s\r\n" "Member: %s\r\n" - "Holdtime: %ld\r\n", - queuename, qe->chan->uniqueid, peer->name, member->interface, (long)time(NULL) - qe->start); + "Holdtime: %ld\r\n" + "Url: %s\r\n", + queuename, qe->chan->uniqueid, peer->name, member->interface, (long)time(NULL) - qe->start, url); } strncpy(oldcontext, qe->chan->context, sizeof(oldcontext) - 1); strncpy(oldexten, qe->chan->exten, sizeof(oldexten) - 1); @@ -2599,6 +2605,8 @@ ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_LEAVEWHENEMPTY); } else if (!strcasecmp(var->name, "eventwhencalled")) { ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_EVENTWHENCALLED); + } else if (!strcasecmp(var->name, "eventmemberstatus")) { + ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_EVENTMEMBERSTATUS); } else if (!strcasecmp(var->name, "reportholdtime")) { ast_set2_flag(q, ast_true(var->value), QUEUE_FLAG_REPORTHOLDTIME); } else if (!strcasecmp(var->name, "memberdelay")) { Index: configs/queues.conf.sample =================================================================== RCS file: /usr/cvsroot/asterisk/configs/queues.conf.sample,v retrieving revision 1.22 diff -u -r1.22 queues.conf.sample --- configs/queues.conf.sample 7 Jan 2005 04:05:22 -0000 1.22 +++ configs/queues.conf.sample 3 Mar 2005 14:06:57 -0000 @@ -130,10 +130,17 @@ ; ; leavewhenempty = yes ; -; Asterisk can generate AgentCalled events when an agent is rung, if this is turned on -; (may generate a LOT of extra manager events) +; If this is set to yes, the following manager events will be generated: +; AgentCalled, AgentDump, AgentConnect, AgentComplete +; (may generate some extra manager events, but probably ones you want) ; ; eventwhencalled = yes +; +; If this is set to yes, the following manager events will be generated: +; QueueMemberStatus +; (may generate a WHOLE LOT of extra manager events) +; +; eventmemberstatus = yes ; ; If you wish to report the caller's hold time to the member before they are connected ; to the caller, set this to yes.