Properly differentiate between caller and agent hangups (bug #3578)
authorMark Spencer <markster@digium.com>
Sun, 13 Feb 2005 16:53:29 +0000 (16:53 +0000)
committerMark Spencer <markster@digium.com>
Sun, 13 Feb 2005 16:53:29 +0000 (16:53 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5018 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_queue.c

index a12cf68..d758484 100755 (executable)
@@ -1557,7 +1557,7 @@ static int try_calling(struct queue_ent *qe, char *ooptions, char *announceoverr
                                }
                        }
                        res2 |= ast_autoservice_stop(qe->chan);
-                       if (res2) {
+                       if (peer->_softhangup) {
                                /* 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", "");
@@ -1570,6 +1570,13 @@ static int try_calling(struct queue_ent *qe, char *ooptions, char *announceoverr
                                                queuename, qe->chan->uniqueid, peer->name, member->interface);
                                }
                                ast_hangup(peer);
+                               goto out;
+                       } else if (res2) {
+                               /* Caller must have hung up just before being connected*/
+                               ast_log(LOG_NOTICE, "Caller was about to talk to agent on %s but the caller hungup.\n", peer->name);
+                               ast_queue_log(queuename, qe->chan->uniqueid, peer->name, "ABANDON", "%d|%d|%ld", qe->pos, qe->opos, (long)time(NULL) - qe->start);
+                               record_abandoned(qe);
+                               ast_hangup(peer);
                                return -1;
                        }
                }