All pastes #36409 Raw Edit

Something

public text v1 · immutable
#36409 ·published 2006-01-10 22:53 UTC
rendered paste body
Index: pbx.c
===================================================================
--- pbx.c       (revision 7950)
+++ pbx.c       (working copy)
@@ -2361,6 +2361,8 @@
                ast_log(LOG_WARNING, "Don't know what to do with '%s'\n", c->name);
 out:
        if ((res != AST_PBX_KEEPALIVE) && ast_exists_extension(c, c->context, "h", 1, c->cid.cid_num)) {
+               if (c->cdr)
+                       ast_cdr_end(c->cdr);
                c->exten[0] = 'h';
                c->exten[1] = '\0';
                c->priority = 1;
Index: cdr.c
===================================================================
--- cdr.c       (revision 7950)
+++ cdr.c       (working copy)
@@ -637,7 +637,7 @@
 {
        char *chan;

-       while (cdr) {
+       for (; cdr; cdr = cdr->next) {
                chan = !ast_strlen_zero(cdr->channel) ? cdr->channel : "<unknown>";
                if (ast_test_flag(cdr, AST_CDR_FLAG_POSTED))
                        ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
@@ -645,7 +645,11 @@
                        ast_log(LOG_WARNING, "CDR on channel '%s' has not started\n", chan);
                if (ast_tvzero(cdr->end))
                        cdr->end = ast_tvnow();
-               cdr = cdr->next;
+               cdr->duration = cdr->end.tv_sec - cdr->start.tv_sec + (cdr->end.tv_usec - cdr->start.tv_usec) / 1000000;
+               if (!ast_tvzero(cdr->answer))
+                       cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec + (cdr->end.tv_usec - cdr->answer.tv_usec) / 1000000;
+               else
+                       cdr->billsec = 0;
        }
 }

@@ -784,7 +788,7 @@
        char *chan;
        struct ast_cdr_beitem *i;

-       while (cdr) {
+       for (; cdr; cdr = cdr->next) {
                chan = !ast_strlen_zero(cdr->channel) ? cdr->channel : "<unknown>";
                if (ast_test_flag(cdr, AST_CDR_FLAG_POSTED))
                        ast_log(LOG_WARNING, "CDR on channel '%s' already posted\n", chan);
@@ -792,18 +796,12 @@
                        ast_log(LOG_WARNING, "CDR on channel '%s' lacks end\n", chan);
                if (ast_tvzero(cdr->start))
                        ast_log(LOG_WARNING, "CDR on channel '%s' lacks start\n", chan);
-               cdr->duration = cdr->end.tv_sec - cdr->start.tv_sec + (cdr->end.tv_usec - cdr->start.tv_usec) / 1000000;
-               if (!ast_tvzero(cdr->answer))
-                       cdr->billsec = cdr->end.tv_sec - cdr->answer.tv_sec + (cdr->end.tv_usec - cdr->answer.tv_usec) / 1000000;
-               else
-                       cdr->billsec = 0;
                ast_set_flag(cdr, AST_CDR_FLAG_POSTED);
                AST_LIST_LOCK(&be_list);
                AST_LIST_TRAVERSE(&be_list, i, list) {
                        i->be(cdr);
                }
                AST_LIST_UNLOCK(&be_list);
-               cdr = cdr->next;
        }
 }