aboutsummaryrefslogtreecommitdiffstats
path: root/main/cdr.c
diff options
context:
space:
mode:
authormurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-26 15:57:49 +0000
committermurf <murf@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-26 15:57:49 +0000
commitb0583a6878987436cf1dcbf85d34aa8f3a423ee3 (patch)
tree5f9704b71c74cf16ea793f7706374e97f6f4a491 /main/cdr.c
parent009b7b31cbdcb491c20074841c0c58c541701cdd (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.c8
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) {