Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 168739) +++ apps/app_queue.c (working copy) @@ -1892,6 +1892,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 */ @@ -2931,6 +2946,20 @@ } if (option_debug && res == -1) ast_log(LOG_DEBUG, "%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