If duration or billsec are not yet calculated, calculate them on demand.
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 6 Dec 2007 23:27:46 +0000 (23:27 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 6 Dec 2007 23:27:46 +0000 (23:27 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@91617 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/cdr.c

index 7030770..028e0eb 100644 (file)
@@ -249,9 +249,9 @@ void ast_cdr_getvar(struct ast_cdr *cdr, const char *name, char **ret, char *wor
        else if (!strcasecmp(name, "end"))
                cdr_get_tv(cdr->end, raw ? NULL : fmt, workspace, workspacelen);
        else if (!strcasecmp(name, "duration"))
-               snprintf(workspace, workspacelen, "%ld", cdr->duration);
+               snprintf(workspace, workspacelen, "%ld", cdr->duration ? cdr->duration : (long)ast_tvdiff_ms(ast_tvnow(), cdr->start) / 1000);
        else if (!strcasecmp(name, "billsec"))
-               snprintf(workspace, workspacelen, "%ld", cdr->billsec);
+               snprintf(workspace, workspacelen, "%ld", cdr->billsec || cdr->answer.tv_sec == 0 ? cdr->billsec : (long)ast_tvdiff_ms(ast_tvnow(), cdr->answer) / 1000);
        else if (!strcasecmp(name, "disposition")) {
                if (raw) {
                        snprintf(workspace, workspacelen, "%ld", cdr->disposition);