Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv936/apps

Modified Files:
        app_queue.c 
Log Message:
ensure that abandoned calls are recorded that way (bug #4644)
show 'available' for member channels that are not known to be in some other 
state (bug #4644)


Index: app_queue.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_queue.c,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- app_queue.c 9 Jun 2005 19:34:12 -0000       1.143
+++ app_queue.c 5 Jul 2005 19:22:26 -0000       1.144
@@ -2036,6 +2036,7 @@
                                /* Agent must have hung up */
                                ast_log(LOG_WARNING, "Agent on %s hungup on the 
customer.  They're going to be pissed.\n", peer->name);
                                ast_queue_log(queuename, qe->chan->uniqueid, 
peer->name, "AGENTDUMP", "%s", "");
+                                record_abandoned(qe);
                                if (qe->parent->eventwhencalled) {
                                        manager_event(EVENT_FLAG_AGENT, 
"AgentDump",
                                                      "Queue: %s\r\n"
@@ -2065,6 +2066,7 @@
                if (res < 0) {
                        ast_queue_log(queuename, qe->chan->uniqueid, 
peer->name, "SYSCOMPAT", "%s", "");
                        ast_log(LOG_WARNING, "Had to drop call because I 
couldn't make %s compatible with %s\n", qe->chan->name, peer->name);
+                        record_abandoned(qe);
                        ast_hangup(peer);
                        return -1;
                }
@@ -2776,6 +2778,7 @@
 
                                /* Leave if we have exceeded our queuetimeout */
                                if (qe.expire && (time(NULL) > qe.expire)) {
+                                        record_abandoned(&qe);
                                        reason = QUEUE_TIMEOUT;
                                        res = 0;
                                        break;
@@ -2798,6 +2801,7 @@
                                if (res) {
                                        if (res < 0) {
                                                if (!qe.handled)
+                                                        record_abandoned(&qe);
                                                        
ast_queue_log(queuename, chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld", 
qe.pos, qe.opos, (long)time(NULL) - qe.start);
                                        } else if (res > 0)
                                                ast_queue_log(queuename, 
chan->uniqueid, "NONE", "EXITWITHKEY", "%c|%d", res, qe.pos);
@@ -2808,6 +2812,7 @@
 
                                /* leave the queue if no agents, if enabled */
                                if (qe.parent->leavewhenempty && (stat == 
QUEUE_NO_MEMBERS)) {
+                                        record_abandoned(&qe);
                                        reason = QUEUE_LEAVEEMPTY;
                                        res = 0;
                                        break;
@@ -2815,6 +2820,7 @@
 
                                /* leave the queue if no reachable agents, if 
enabled */
                                if ((qe.parent->leavewhenempty == 
QUEUE_EMPTY_STRICT) && (stat == QUEUE_NO_REACHABLE_MEMBERS)) {
+                                        record_abandoned(&qe);
                                        reason = QUEUE_LEAVEUNAVAIL;
                                        res = 0;
                                        break;
@@ -2822,6 +2828,7 @@
 
                                /* Leave if we have exceeded our queuetimeout */
                                if (qe.expire && (time(NULL) > qe.expire)) {
+                                        record_abandoned(&qe);
                                        reason = QUEUE_TIMEOUT;
                                        res = 0;
                                        break;
@@ -2830,6 +2837,7 @@
                                /* OK, we didn't get anybody; wait for 'retry' 
seconds; may get a digit to exit with */
                                res = wait_a_bit(&qe);
                                if (res < 0) {
+                                        record_abandoned(&qe);
                                        ast_queue_log(queuename, 
chan->uniqueid, "NONE", "ABANDON", "%d|%d|%ld", qe.pos, qe.opos, 
(long)time(NULL) - qe.start);
                                        if (option_verbose > 2) {
                                                ast_verbose(VERBOSE_PREFIX_3 
"User disconnected from queue %s when they almost made it\n", queuename);
@@ -2848,6 +2856,7 @@
                                                res = -1;
                                        }
                                        ast_queue_log(queuename, 
chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
+                                        record_abandoned(&qe);
                                        reason = QUEUE_TIMEOUT;
                                        res = 0;
                                        break;
@@ -3012,7 +3021,7 @@
 {
        switch(status) {
        case AST_DEVICE_UNKNOWN:
-               ast_copy_string(buf, "unknown", buflen);
+               ast_copy_string(buf, "available", buflen);
                break;
        case AST_DEVICE_NOT_INUSE:
                ast_copy_string(buf, "notinuse", buflen);
@@ -3093,8 +3102,7 @@
                                        strncat(max, " (dynamic)", sizeof(max) 
- strlen(max) - 1);
                                if (mem->paused)
                                        strncat(max, " (paused)", sizeof(max) - 
strlen(max) - 1);
-                               if (mem->status)
-                                       snprintf(max + strlen(max), sizeof(max) 
- strlen(max), " (%s)", status2str(mem->status, tmpbuf, sizeof(tmpbuf)));
+                                        snprintf(max + strlen(max), 
sizeof(max) - strlen(max), " (%s)", status2str(mem->status, tmpbuf, 
sizeof(tmpbuf)));
                                if (mem->calls) {
                                        snprintf(calls, sizeof(calls), " has 
taken %d calls (last was %ld secs ago)",
                                                        mem->calls, 
(long)(time(NULL) - mem->lastcall));

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to