[svn-commits] murf: branch 1.4 r89622 - in /branches/1.4: apps/ configs/ include/asterisk/ ...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Tue Nov 27 00:24:03 CST 2007
Author: murf
Date: Tue Nov 27 00:24:02 2007
New Revision: 89622
URL: http://svn.digium.com/view/asterisk?view=rev&rev=89622
Log:
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.
Modified:
branches/1.4/apps/app_dial.c
branches/1.4/configs/cdr.conf.sample
branches/1.4/include/asterisk/cdr.h
branches/1.4/main/cdr.c
Modified: branches/1.4/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/apps/app_dial.c?view=diff&rev=89622&r1=89621&r2=89622
==============================================================================
--- branches/1.4/apps/app_dial.c (original)
+++ branches/1.4/apps/app_dial.c Tue Nov 27 00:24:02 2007
@@ -57,6 +57,7 @@
#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"
@@ -762,7 +763,26 @@
}
}
-
+ if (peer && !ast_cdr_log_unanswered()) {
+ /* suppress the CDR's that didn't win */
+ struct dial_localuser *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 dial_localuser *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);
+ }
+ }
+ }
+
return peer;
}
Modified: branches/1.4/configs/cdr.conf.sample
URL: http://svn.digium.com/view/asterisk/branches/1.4/configs/cdr.conf.sample?view=diff&rev=89622&r1=89621&r2=89622
==============================================================================
--- branches/1.4/configs/cdr.conf.sample (original)
+++ branches/1.4/configs/cdr.conf.sample Tue Nov 27 00:24:02 2007
@@ -12,6 +12,16 @@
; Define whether or not to use CDR logging. Setting this to "no" will override
; any loading of backend CDR modules. Default is "yes".
;enable=yes
+
+; Define whether or not to log unanswered calls. Setting this to "yes" will
+; report every attempt to ring a phone in dialing attempts, when it was not
+; answered. For example, if you try to dial 3 extensions, and this option is "yes",
+; you will get 3 CDR's, one for each phone that was rung. Default is "no". Some
+; find this information horribly useless. Others find it very valuable. Note, in "yes"
+; mode, you will see one CDR, with one of the call targets on one side, and the originating
+; channel on the other, and then one CDR for each channel attempted. This may seem
+; redundant, but cannot be helped.
+;unanswered = no
; Define the CDR batch mode, where instead of posting the CDR at the end of
; every call, the data will be stored in a buffer to help alleviate load on the
Modified: branches/1.4/include/asterisk/cdr.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk/cdr.h?view=diff&rev=89622&r1=89621&r2=89622
==============================================================================
--- branches/1.4/include/asterisk/cdr.h (original)
+++ branches/1.4/include/asterisk/cdr.h Tue Nov 27 00:24:02 2007
@@ -100,6 +100,7 @@
int ast_cdr_serialize_variables(struct ast_cdr *cdr, char *buf, size_t size, char delim, char sep, int recur);
void ast_cdr_free_vars(struct ast_cdr *cdr, int recur);
int ast_cdr_copy_vars(struct ast_cdr *to_cdr, struct ast_cdr *from_cdr);
+int ast_cdr_log_unanswered(void);
typedef int (*ast_cdrbe)(struct ast_cdr *cdr);
Modified: branches/1.4/main/cdr.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/cdr.c?view=diff&rev=89622&r1=89621&r2=89622
==============================================================================
--- branches/1.4/main/cdr.c (original)
+++ branches/1.4/main/cdr.c Tue Nov 27 00:24:02 2007
@@ -89,6 +89,7 @@
#define BATCH_SAFE_SHUTDOWN_DEFAULT 1
static int enabled; /*! Is the CDR subsystem enabled ? */
+static int unanswered;
static int batchmode;
static int batchsize;
static int batchtime;
@@ -101,6 +102,11 @@
AST_MUTEX_DEFINE_STATIC(cdr_pending_lock);
static ast_cond_t cdr_pending_cond;
+
+int ast_cdr_log_unanswered(void)
+{
+ return unanswered;
+}
/*! Register a CDR driver. Each registered CDR driver generates a CDR
\return 0 on success, -1 on failure
@@ -984,8 +990,6 @@
struct ast_cdr_beitem *i;
for ( ; cdr ; cdr = cdr->next) {
- if (cdr->disposition < AST_CDR_ANSWERED && (ast_strlen_zero(cdr->channel) || ast_strlen_zero(cdr->dstchannel)))
- continue; /* people don't want to see unanswered single-channel events */
chan = S_OR(cdr->channel, "<unknown>");
check_post(cdr);
if (ast_tvzero(cdr->end))
@@ -1247,6 +1251,7 @@
ast_cli(fd, "CDR logging: %s\n", enabled ? "enabled" : "disabled");
ast_cli(fd, "CDR mode: %s\n", batchmode ? "batch" : "simple");
if (enabled) {
+ ast_cli(fd, "CDR output unanswered calls: %s\n", unanswered ? "yes" : "no");
if (batchmode) {
if (batch)
cnt = batch->size;
@@ -1298,6 +1303,7 @@
{
struct ast_config *config;
const char *enabled_value;
+ const char *unanswered_value;
const char *batched_value;
const char *scheduleronly_value;
const char *batchsafeshutdown_value;
@@ -1328,6 +1334,9 @@
if ((config = ast_config_load("cdr.conf"))) {
if ((enabled_value = ast_variable_retrieve(config, "general", "enable"))) {
enabled = ast_true(enabled_value);
+ }
+ if ((unanswered_value = ast_variable_retrieve(config, "general", "unanswered"))) {
+ unanswered = ast_true(unanswered_value);
}
if ((batched_value = ast_variable_retrieve(config, "general", "batch"))) {
batchmode = ast_true(batched_value);
More information about the svn-commits
mailing list