diff options
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | configs/cdr.conf.sample | 9 | ||||
-rw-r--r-- | include/asterisk/options.h | 2 | ||||
-rw-r--r-- | main/cdr.c | 8 |
4 files changed, 23 insertions, 1 deletions
@@ -209,6 +209,11 @@ Miscellaneous operator. This is most helpful when working with long SQL queries in func_odbc.conf, as the queries no longer need to be specified on a single line. + * CDR config file, cdr.conf, has an added option, "initiatedseconds", + which will add a second to the billsec when the ending + time is set, if the number in the microseconds field of the end time is + greater than the number of microseconds in the answer time. This allows + users to count the 'initiated' seconds in their billing records. ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 1.4.X to Asterisk 1.6.0 ------------- diff --git a/configs/cdr.conf.sample b/configs/cdr.conf.sample index 693b28092..195f88f32 100644 --- a/configs/cdr.conf.sample +++ b/configs/cdr.conf.sample @@ -65,6 +65,15 @@ ; retrieved inside of of this extension. ;endbeforehexten=no +; Normally, the 'billsec' field logged to the backends (text files or databases) +; is simply the end time (hangup time) minus the answer time in seconds. Internally, +; asterisk stores the time in terms of microseconds and seconds. By setting +; initiatedseconds to 'yes', you can force asterisk to report any seconds +; that were initiated (a sort of round up method). Technically, this is +; when the microsecond part of the end time is greater than the microsecond +; part of the answer time, then the billsec time is incremented one second. +;initiatedseconds=no + ; ; ; CHOOSING A CDR "BACKEND" (what kind of output to generate) diff --git a/include/asterisk/options.h b/include/asterisk/options.h index 19fb3ab59..35f42fb25 100644 --- a/include/asterisk/options.h +++ b/include/asterisk/options.h @@ -84,6 +84,8 @@ enum ast_option_flags { AST_OPT_FLAG_VERBOSE_FILE = (1 << 24), /*! Terminal colors should be adjusted for a light-colored background */ AST_OPT_FLAG_LIGHT_BACKGROUND = (1 << 25), + /*! Count Initiated seconds in CDR's */ + AST_OPT_FLAG_INITIATED_SECONDS = (1 << 26), }; /*! These are the options that set by default when Asterisk starts */ diff --git a/main/cdr.c b/main/cdr.c index 6bf60b8a7..111c3daf0 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -874,8 +874,11 @@ void ast_cdr_end(struct ast_cdr *cdr) ast_log(LOG_WARNING, "CDR on channel '%s' has no answer time but is 'ANSWERED'\n", S_OR(cdr->channel, "<unknown>")); cdr->disposition = AST_CDR_FAILED; } - } else + } else { cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec; + if (ast_test_flag(&ast_options, AST_OPT_FLAG_INITIATED_SECONDS)) + cdr->billsec += cdr->end.tv_usec > cdr->answer.tv_usec ? 1 : 0; + } } } @@ -1386,6 +1389,7 @@ static int do_reload(int reload) const char *size_value; const char *time_value; const char *end_before_h_value; + const char *initiatedseconds_value; int cfg_size; int cfg_time; int was_enabled; @@ -1444,6 +1448,8 @@ static int do_reload(int reload) } if ((end_before_h_value = ast_variable_retrieve(config, "general", "endbeforehexten"))) ast_set2_flag(&ast_options, ast_true(end_before_h_value), AST_OPT_FLAG_END_CDR_BEFORE_H_EXTEN); + if ((initiatedseconds_value = ast_variable_retrieve(config, "general", "initiatedseconds"))) + ast_set2_flag(&ast_options, ast_true(initiatedseconds_value), AST_OPT_FLAG_INITIATED_SECONDS); } if (enabled && !batchmode) { |