From bd11d221572fabca475b6ceb35d569e5285848c0 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Tue, 7 Nov 2023 14:08:42 +0100 Subject: [PATCH] MT#57719 Move `a=ssrc-group` attribute via `stream_params` Move `a=ssrc-group:` attribute to the `call_media`'s `sdp_attributes` using `stream_params`. Required by the `insert_sdp_attributes()` used in `sdp_create()`. Change-Id: I67025dc83dd8e5e46422b6dc1bc54aa9c838dfea --- daemon/call.c | 1 + daemon/sdp.c | 12 ++++++++++++ t/auto-daemon-tests-websocket.py | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/daemon/call.c b/daemon/call.c index 7f089fe60..4ce0514e8 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2723,6 +2723,7 @@ static void __media_init_from_flags(struct call_media *other_media, struct call_ /* moved as plain text attributes, required later by sdp_create() * ssrc * other (unknown type) + * ssrc-group */ if (media && additional_attributes && additional_attributes->head) { g_queue_clear_full(&media->sdp_attributes, free); diff --git a/daemon/sdp.c b/daemon/sdp.c index b1bc64b88..767ba2f13 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -232,6 +232,7 @@ struct sdp_attribute { ATTR_ICE_PWD, ATTR_CRYPTO, ATTR_SSRC, + ATTR_SSRC_GROUP, ATTR_INACTIVE, ATTR_SENDRECV, ATTR_SENDONLY, @@ -1073,6 +1074,9 @@ static int parse_attribute(struct sdp_attribute *a) { case CSH_LOOKUP("rtcp"): ret = parse_attribute_rtcp(a); break; + case CSH_LOOKUP("ssrc-group"): + a->attr = ATTR_SSRC_GROUP; + break; case CSH_LOOKUP("ssrc"): ret = parse_attribute_ssrc(a); break; @@ -1810,6 +1814,14 @@ int sdp_streams(const GQueue *sessions, GQueue *streams, struct sdp_ng_flags *fl cps->params.session_params.unauthenticated_srtp = attr->crypto.unauthenticated_srtp; } + + /* a=ssrc-group, move it via plain text attributes, required by sdp_create() */ + attr = attr_get_by_id_m_s(media, ATTR_SSRC_GROUP); + if (attr) { + str * ret = str_dup(&attr->line_value); + g_queue_push_tail(&sp->attributes, ret); + } + /* a=ssrc, move them via plain text attributes, required later by sdp_create() */ attrs = attr_list_get_by_id(&media->attributes, ATTR_SSRC); for (GList *ll = attrs ? attrs->head : NULL; ll; ll = ll->next) { diff --git a/t/auto-daemon-tests-websocket.py b/t/auto-daemon-tests-websocket.py index b4af8b8b3..19a0be267 100644 --- a/t/auto-daemon-tests-websocket.py +++ b/t/auto-daemon-tests-websocket.py @@ -1749,6 +1749,7 @@ class TestVideoroom(unittest.TestCase): "a=rtcp-fb:96 ccm fir\r\n" "a=rtcp-fb:96 nack\r\n" "a=rtcp-fb:96 nack pli\r\n" + "a=ssrc-group:FID 3005569364 2001490794\r\n" "a=ssrc:3005569364 cname:NMNDwVd66x2SfiO0\r\n" "a=ssrc:3005569364 msid:hJifdaJwqEqHxSG0pVbs1DrLAwiHqz7fKlqC 6d6ec7a7-e3d7-4c82-b03c-45e017713abd\r\n" "a=ssrc:3005569364 mslabel:hJifdaJwqEqHxSG0pVbs1DrLAwiHqz7fKlqC\r\n" @@ -1759,7 +1760,6 @@ class TestVideoroom(unittest.TestCase): "a=ssrc:2001490794 label:6d6ec7a7-e3d7-4c82-b03c-45e017713abd\r\n" "a=msid:hJifdaJwqEqHxSG0pVbs1DrLAwiHqz7fKlqC 6d6ec7a7-e3d7-4c82-b03c-45e017713abd\r\n" "a=rtcp-rsize\r\n" - "a=ssrc-group:FID 3005569364 2001490794\r\n" "a=sendonly\r\n" "a=rtcp-mux\r\n" "a=setup:actpass\r\n"