[asterisk-commits] mnicholson: branch 1.6.1 r194062 - in /branches/1.6.1: ./ apps/app_queue.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue May 12 18:01:57 CDT 2009
Author: mnicholson
Date: Tue May 12 18:01:49 2009
New Revision: 194062
URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=194062
Log:
Merged revisions 194057 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r194057 | mnicholson | 2009-05-12 17:32:13 -0500 (Tue, 12 May 2009) | 22 lines
Merged revisions 194028 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r194028 | mnicholson | 2009-05-12 17:15:45 -0500 (Tue, 12 May 2009) | 16 lines
This change modifies app_queue to properly generate CDR records in failure
situations.
This involves setting a proper cdr disposition coresponding to the given
failure condition and ensuring the proper information is stored in the cdr
record.
(closes issue #13691)
Reported by: dferrer
Tested by: mnicholson
(closes issue #13637)
Reported by: atis
Tested by: atis
........
................
Modified:
branches/1.6.1/ (props changed)
branches/1.6.1/apps/app_queue.c
Propchange: branches/1.6.1/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.1/apps/app_queue.c
URL: http://svn.asterisk.org/svn-view/asterisk/branches/1.6.1/apps/app_queue.c?view=diff&rev=194062&r1=194061&r2=194062
==============================================================================
--- branches/1.6.1/apps/app_queue.c (original)
+++ branches/1.6.1/apps/app_queue.c Tue May 12 18:01:49 2009
@@ -2312,6 +2312,21 @@
ast_copy_string(tmp->chan->exten, macroexten, sizeof(tmp->chan->exten));
else
ast_copy_string(tmp->chan->exten, qe->chan->exten, sizeof(tmp->chan->exten));
+ if (ast_cdr_isset_unanswered()) {
+ /* they want to see the unanswered dial attempts! */
+ /* set up the CDR fields on all the CDRs to give sensical information */
+ ast_cdr_setdestchan(tmp->chan->cdr, tmp->chan->name);
+ strcpy(tmp->chan->cdr->clid, qe->chan->cdr->clid);
+ strcpy(tmp->chan->cdr->channel, qe->chan->cdr->channel);
+ strcpy(tmp->chan->cdr->src, qe->chan->cdr->src);
+ strcpy(tmp->chan->cdr->dst, qe->chan->exten);
+ strcpy(tmp->chan->cdr->dcontext, qe->chan->context);
+ strcpy(tmp->chan->cdr->lastapp, qe->chan->cdr->lastapp);
+ strcpy(tmp->chan->cdr->lastdata, qe->chan->cdr->lastdata);
+ tmp->chan->cdr->amaflags = qe->chan->cdr->amaflags;
+ strcpy(tmp->chan->cdr->accountcode, qe->chan->cdr->accountcode);
+ strcpy(tmp->chan->cdr->userfield, qe->chan->cdr->userfield);
+ }
ast_channel_unlock(qe->chan);
/* Place the call, but don't wait on the answer */
@@ -3578,6 +3593,20 @@
}
if (res == -1)
ast_debug(1, "%s: Nobody answered.\n", qe->chan->name);
+ if (ast_cdr_isset_unanswered()) {
+ /* channel contains the name of one of the outgoing channels
+ in its CDR; zero out this CDR to avoid a dual-posting */
+ struct callattempt *o;
+ for (o = outgoing; o; o = o->q_next) {
+ if (!o->chan) {
+ continue;
+ }
+ if (strcmp(o->chan->cdr->dstchannel, qe->chan->cdr->dstchannel) == 0) {
+ ast_set_flag(o->chan->cdr, AST_CDR_FLAG_POST_DISABLED);
+ break;
+ }
+ }
+ }
} else { /* peer is valid */
/* Ah ha! Someone answered within the desired timeframe. Of course after this
we will always return with -1 so that it is hung up properly after the
@@ -3653,6 +3682,7 @@
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, member->membername, "ABANDON", "%d|%d|%ld", qe->pos, qe->opos, (long) time(NULL) - qe->start);
record_abandoned(qe);
+ ast_cdr_noanswer(qe->chan->cdr);
ast_hangup(peer);
ao2_ref(member, -1);
return -1;
@@ -3672,6 +3702,7 @@
ast_queue_log(queuename, qe->chan->uniqueid, member->membername, "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_cdr_failed(qe->chan->cdr);
ast_hangup(peer);
ao2_ref(member, -1);
return -1;
@@ -4872,6 +4903,7 @@
/* Leave if we have exceeded our queuetimeout */
if (qe.expire && (time(NULL) >= qe.expire)) {
record_abandoned(&qe);
+ ast_cdr_noanswer(qe.chan->cdr);
reason = QUEUE_TIMEOUT;
res = 0;
ast_queue_log(args.queuename, chan->uniqueid,"NONE", "EXITWITHTIMEOUT", "%d|%d|%ld",
@@ -4895,6 +4927,7 @@
/* Leave if we have exceeded our queuetimeout */
if (qe.expire && (time(NULL) >= qe.expire)) {
record_abandoned(&qe);
+ ast_cdr_noanswer(qe.chan->cdr);
reason = QUEUE_TIMEOUT;
res = 0;
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
@@ -4917,6 +4950,7 @@
ast_verb(3, "Exiting on time-out cycle\n");
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHTIMEOUT", "%d", qe.pos);
record_abandoned(&qe);
+ ast_cdr_noanswer(qe.chan->cdr);
reason = QUEUE_TIMEOUT;
res = 0;
break;
@@ -4941,6 +4975,7 @@
/* leave the queue if no agents, if enabled */
if (qe.parent->leavewhenempty && (status == QUEUE_NO_MEMBERS)) {
record_abandoned(&qe);
+ ast_cdr_noanswer(qe.chan->cdr);
reason = QUEUE_LEAVEEMPTY;
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITEMPTY", "%d|%d|%ld", qe.pos, qe.opos, (long)(time(NULL) - qe.start));
res = 0;
@@ -4993,6 +5028,7 @@
if (res < 0) {
if (!qe.handled) {
record_abandoned(&qe);
+ ast_cdr_noanswer(qe.chan->cdr);
ast_queue_log(args.queuename, chan->uniqueid, "NONE", "ABANDON",
"%d|%d|%ld", qe.pos, qe.opos,
(long) time(NULL) - qe.start);
More information about the asterisk-commits
mailing list