diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-08-26 15:57:49 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-08-26 15:57:49 +0000 |
commit | b0583a6878987436cf1dcbf85d34aa8f3a423ee3 (patch) | |
tree | 5f9704b71c74cf16ea793f7706374e97f6f4a491 /main/cdr.c | |
parent | 009b7b31cbdcb491c20074841c0c58c541701cdd (diff) |
(closes issue #13366)
Reported by: erousseau
This was a reasonable enhancement request, which was
easy to implement. Since it's an enhancement, it
could only be applied to trunk.
Basically, for accounting where "initiated" seconds
are billed for, if the microseconds field on the end
time is greater than the microseconds field for the
answer time, add one second to the billsec field.
The implementation was requested by erousseau, and
I've implemented it as requested. I've updated the
CHANGES, the cdr.conf.sample, and the .h files
accordingly, to accept and set a flag for the
corresponding new option. cdr.c adds in the extra
second based on the usec fields if the option is
set. Tested, seems to be working fine.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@140057 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/cdr.c')
-rw-r--r-- | main/cdr.c | 8 |
1 files changed, 7 insertions, 1 deletions
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) { |