aboutsummaryrefslogtreecommitdiffstats
path: root/cdr/cdr_pgsql.c
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-12-20 17:41:24 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-12-20 17:41:24 +0000
commit5036a2534d4e969d1294f408124e91453a4b7621 (patch)
tree7156d6759987b85b9b2ed988eacbebb09fd60caa /cdr/cdr_pgsql.c
parentf122434fa0c326a79a4ca104e5102200963ec7a8 (diff)
If a call was not answered, then the billsec was calculated unusually large.
Also, due to a copy and paste error, a request for the answer field would have given the start value, instead. (closes issue #18460) Reported by: joscas Patches: 20101215__issue18460.diff.txt uploaded by tilghman (license 14) Tested by: joscas git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@299130 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'cdr/cdr_pgsql.c')
-rw-r--r--cdr/cdr_pgsql.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index f469bc520..384b7be4d 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -193,7 +193,7 @@ static int pgsql_log(struct ast_cdr *cdr)
} else {
/* char, hopefully */
LENGTHEN_BUF2(31);
- ast_localtime(&cdr->start, &tm, NULL);
+ ast_localtime(&cdr->answer, &tm, NULL);
ast_strftime(buf, sizeof(buf), DATE_FORMAT, &tm);
ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", buf);
}
@@ -218,12 +218,12 @@ static int pgsql_log(struct ast_cdr *cdr)
LENGTHEN_BUF2(13);
ast_str_append(&sql2, 0, "%s%s", first ? "" : ",", value);
} else if (strncmp(cur->type, "float", 5) == 0) {
- struct timeval *when = cur->name[0] == 'd' ? &cdr->start : &cdr->answer;
+ struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer;
LENGTHEN_BUF2(31);
ast_str_append(&sql2, 0, "%s%f", first ? "" : ",", (double)cdr->end.tv_sec - when->tv_sec + cdr->end.tv_usec / 1000000.0 - when->tv_usec / 1000000.0);
} else {
/* Char field, probably */
- struct timeval *when = cur->name[0] == 'd' ? &cdr->start : &cdr->answer;
+ struct timeval *when = cur->name[0] == 'd' ? &cdr->start : ast_tvzero(cdr->answer) ? &cdr->end : &cdr->answer;
LENGTHEN_BUF2(31);
ast_str_append(&sql2, 0, "%s'%f'", first ? "" : ",", (double)cdr->end.tv_sec - when->tv_sec + cdr->end.tv_usec / 1000000.0 - when->tv_usec / 1000000.0);
}