summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorSteve Murphy <murf@digium.com>2007-11-27 06:47:08 +0000
committerSteve Murphy <murf@digium.com>2007-11-27 06:47:08 +0000
commit4d8932a6dcd46ede14bdf4e8bd6ea64910e8dd0f (patch)
treea89e4cbbf7f049372549c2a5b83c4900f1498ea1 /apps
parent180c3fb60e5681bb5e676bd13d15222dd878997a (diff)
Merged revisions 89622 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r89622 | murf | 2007-11-26 23:24:02 -0700 (Mon, 26 Nov 2007) | 1 line closes issue #11379; OK, this is an attempt to make both sides happy. To the cdr.conf file, I added the option 'unanswered', which defaults to 'no'. In this mode, you will see a cdr for a call, whether it was answered or not. The disposition will be NO ANSWER or ANSWERED, as appropriate. The src is as you'd expect, the destination channel will be one of the channels from the Dial() call, usually the last in the list if more than one chan was specified. With unanswered set to 'yes', you will still see this cdr entry in both cases. But in the case where the dial timed out, you will also see a cdr for each line attempted, marked NO ANSWER, with no destination channel name. The new option defaults to 'no', so you don't see the pesky extra cdr's by default, and you will not see the irritating 'not posted' messages. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89623 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_dial.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 714c38a85..a7f5fff6f 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -50,6 +50,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/app.h"
#include "asterisk/causes.h"
#include "asterisk/rtp.h"
+#include "asterisk/cdr.h"
#include "asterisk/manager.h"
#include "asterisk/privacy.h"
#include "asterisk/stringfields.h"
@@ -820,7 +821,26 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in,
}
}
-
+ if (peer && !ast_cdr_log_unanswered()) {
+ /* suppress the CDR's that didn't win */
+ struct chanlist *o;
+ for (o = outgoing; o; o = o->next) {
+ struct ast_channel *c = o->chan;
+ if (c && c != peer && c->cdr) {
+ ast_set_flag(c->cdr, AST_CDR_FLAG_POST_DISABLED);
+ }
+ }
+ } else if (!peer && !ast_cdr_log_unanswered()) {
+ /* suppress the CDR's that didn't win */
+ struct chanlist *o;
+ for (o = outgoing; o; o = o->next) {
+ struct ast_channel *c = o->chan;
+ if (c && c->cdr) {
+ ast_set_flag(c->cdr, AST_CDR_FLAG_POST_DISABLED);
+ }
+ }
+ }
+
#ifdef HAVE_EPOLL
for (epollo = outgoing; epollo; epollo = epollo->next)
ast_poll_channel_del(in, epollo->chan);