[asterisk-commits] murf: branch 1.4 r61658 -
/branches/1.4/main/cdr.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Fri Apr 13 14:17:20 MST 2007
Author: murf
Date: Fri Apr 13 16:17:20 2007
New Revision: 61658
URL: http://svn.digium.com/view/asterisk?view=rev&rev=61658
Log:
This is a fix to the way CDR merge handles the data that results from ForkCDR.
Modified:
branches/1.4/main/cdr.c
Modified: branches/1.4/main/cdr.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/cdr.c?view=diff&rev=61658&r1=61657&r2=61658
==============================================================================
--- branches/1.4/main/cdr.c (original)
+++ branches/1.4/main/cdr.c Fri Apr 13 16:17:20 2007
@@ -507,6 +507,8 @@
void ast_cdr_merge(struct ast_cdr *to, struct ast_cdr *from)
{
+ struct ast_cdr *tcdr;
+
if (!to || !from)
return;
@@ -582,15 +584,15 @@
ast_copy_string(to->dst, from->dst, sizeof(to->dst));
from->dst[0] = 0; /* theft */
}
- if (!to->amaflags && from->amaflags) {
+ if (ast_test_flag(from, AST_CDR_FLAG_LOCKED) || (!to->amaflags && from->amaflags)) {
to->amaflags = from->amaflags;
from->amaflags = 0; /* theft */
}
- if (ast_strlen_zero(to->accountcode) && !ast_strlen_zero(from->accountcode)) {
+ if (ast_test_flag(from, AST_CDR_FLAG_LOCKED) || (ast_strlen_zero(to->accountcode) && !ast_strlen_zero(from->accountcode))) {
ast_copy_string(to->accountcode, from->accountcode, sizeof(to->accountcode));
from->accountcode[0] = 0; /* theft */
}
- if (ast_strlen_zero(to->userfield) && !ast_strlen_zero(from->userfield)) {
+ if (ast_test_flag(from, AST_CDR_FLAG_LOCKED) || (ast_strlen_zero(to->userfield) && !ast_strlen_zero(from->userfield))) {
ast_copy_string(to->userfield, from->userfield, sizeof(to->userfield));
from->userfield[0] = 0; /* theft */
}
@@ -607,6 +609,16 @@
ast_set_flag(to, AST_CDR_FLAG_CHILD);
if (ast_test_flag(from, AST_CDR_FLAG_POST_DISABLED))
ast_set_flag(to, AST_CDR_FLAG_POST_DISABLED);
+
+ /* last, but not least, we need to merge any forked CDRs to the 'to' cdr */
+ while (from->next) {
+ /* just rip 'em off the 'from' and insert them on the 'to' */
+ tcdr = from->next;
+ from->next = tcdr->next;
+ tcdr->next = NULL;
+ /* tcdr is now ripped from the current list; */
+ ast_cdr_append(to, tcdr);
+ }
}
void ast_cdr_start(struct ast_cdr *cdr)
@@ -812,8 +824,9 @@
ast_string_field_set(chan, accountcode, account);
for ( ; cdr ; cdr = cdr->next) {
- if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED))
+ if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) {
ast_copy_string(cdr->accountcode, chan->accountcode, sizeof(cdr->accountcode));
+ }
}
return 0;
}
More information about the asterisk-commits
mailing list