]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
If a call was not answered, then the billsec was calculated unusually large.
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 20 Dec 2010 17:41:24 +0000 (17:41 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 20 Dec 2010 17:41:24 +0000 (17:41 +0000)
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: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@299130 65c4cc65-6c06-0410-ace0-fbb531ad65f3

cdr/cdr_pgsql.c

index f469bc5206584f6924922021fbdc3a25787e2503..384b7be4d1e40e1bfe4a714c4957d483f43a5126 100644 (file)
@@ -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);
                                }