From 530a569d1ea666679bd18e445e91e0e8eb060a8d Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Tue, 29 Aug 2023 11:19:33 +0200 Subject: [PATCH] MT#57719 cdr: Use media subscriptions in `cdr_update_entry()` Start using the media subscriptions model (based on newly introduced `media_subscription` objects) in scope of `cdr_update_entry()`. Change-Id: I0618a1ee51ec8ea208839da2de46781242287a12 --- daemon/cdr.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) 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); + } + } } }