diff --git a/daemon/cdr.c b/daemon/cdr.c index 33989c961..2cb8e6c9e 100644 --- a/daemon/cdr.c +++ b/daemon/cdr.c @@ -42,7 +42,7 @@ void cdr_update_entry(struct call* c) { int cdrlinecnt = 0; AUTO_CLEANUP_INIT(GString *cdr, __g_string_free, g_string_new("")); struct call_media *md; - GList *k, *o; + GList *o; const struct rtp_payload_type *rtp_pt; struct packet_stream *ps=0; @@ -82,11 +82,21 @@ void cdr_update_entry(struct call* c) { cdrlinecnt, ml->tag.s, cdrlinecnt, get_tag_type_text(ml->tagtype)); - for (k = ml->subscriptions.head; k; k = k->next) { - struct call_subscription *cs = k->data; - g_string_append_printf(cdr, - "ml%i_remote_tag=%s, ", - cdrlinecnt, cs->monologue->tag.s); + AUTO_CLEANUP(GQueue mls, g_queue_clear) = G_QUEUE_INIT; /* to avoid duplications */ + for (int i = 0; i < ml->medias->len; i++) + { + struct call_media * media = ml->medias->pdata[i]; + if (!media) + continue; + + for (GList * sub = media->media_subscriptions.head; sub; sub = sub->next) + { + struct media_subscription * ms = sub->data; + if (!g_queue_find(&mls, ms->monologue)) { + g_string_append_printf(cdr, "ml%i_remote_tag=%s, ", cdrlinecnt, ms->monologue->tag.s); + g_queue_push_tail(&mls, ms->monologue); + } + } } }