From 90f76f070632e06cbbebf0f5a926214800653977 Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Tue, 24 Sep 2024 10:40:52 +0200 Subject: [PATCH] MT#60476 sdp_create: func to print original attributes Add a function `sdp_out_original_media_attributes()` which prints original attributes into the media, for cases like MT_MESSAGE or ice force relay. Change-Id: Ic5a3c1e4ed4a9ff3235fdf55252eba1e75c8381f --- daemon/sdp.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/daemon/sdp.c b/daemon/sdp.c index 0bfc9db27..98ed9fb41 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -3792,6 +3792,25 @@ static void sdp_out_handle_osrtp2(GString *out, struct call_media *media, sdp_out_add_osrtp_media(out, media, prtp, 0); } +/** + * Adds original attributes into the media. + */ +static void sdp_out_original_media_attributes(GString *out, struct call_media *media, + const endpoint_t *address, struct call_media *source_media, + struct packet_stream *rtp_ps, sdp_ng_flags *flags) +{ + sdp_out_add_media_connection(out, media, rtp_ps, &address->address, flags); + sdp_out_add_bandwidth(out, source_media->monologue, media); + sdp_insert_all_attributes(out, source_media, flags); + if (MEDIA_ISSET(source_media, ICE)) { + struct packet_stream *rtcp_ps = rtp_ps->rtcp_sibling; + /* TODO: is this a better or worse test than used in print_rtcp() ? */ + if (rtcp_ps && (!rtcp_ps->selected_sfd || rtcp_ps->selected_sfd->socket.local.port == 0)) + rtcp_ps = NULL; + insert_candidates(out, rtp_ps, rtcp_ps, flags, source_media); + } +} + /** * TODO: after sdp_replace() is deprecated, move the content of this func * to `print_sdp_media_section()`. @@ -3802,17 +3821,8 @@ void handle_sdp_media_attributes(GString *s, struct call_media *media, packet_stream_list *rtp_ps_link, sdp_ng_flags *flags) { if (source_media) { - // just print out all original values and attributes - sdp_out_add_media_connection(s, media, rtp_ps, &address->address, flags); - sdp_out_add_bandwidth(s, source_media->monologue, media); - sdp_insert_all_attributes(s, source_media, flags); - if (MEDIA_ISSET(source_media, ICE)) { - struct packet_stream *rtcp_ps = rtp_ps->rtcp_sibling; - // XXX is this a better or worse test than used in print_rtcp()? - if (rtcp_ps && (!rtcp_ps->selected_sfd || rtcp_ps->selected_sfd->socket.local.port == 0)) - rtcp_ps = NULL; - insert_candidates(s, rtp_ps, rtcp_ps, flags, source_media); - } + /* just print out all original values and attributes */ + sdp_out_original_media_attributes(s, media, address, source_media, rtp_ps, flags); return; }