From 6930991c59916d0be40ab5e5a294a133b5b257e7 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 12 Aug 2025 11:53:14 -0400 Subject: [PATCH] MT#63317 split out update of address family Change-Id: Id737b766e68e9f2bcc83a4a4db84f48e1d41d689 --- daemon/call.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 130c0b778..d7118f44f 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -2930,6 +2930,10 @@ static void media_copy_type(struct call_media *dst, struct call_media *src) { __attribute__((nonnull(1, 2))) static void media_update_flags(struct call_media *media, struct stream_params *sp) { + /* deduct address family from stream parameters received */ + if (!media->desired_family || !MEDIA_ISSET(media, ICE)) + media->desired_family = sp->rtp_endpoint.address.family; + if (!sp->rtp_endpoint.port) return; @@ -2941,6 +2945,19 @@ static void media_update_flags(struct call_media *media, struct stream_params *s SHARED_FLAG_RTCP_FB | SHARED_FLAG_LEGACY_OSRTP | SHARED_FLAG_LEGACY_OSRTP_REV); } +__attribute__((nonnull(1, 2, 3))) +static void media_set_address_family(struct call_media *media, struct call_media *src, + struct sdp_ng_flags *flags) +{ + /* for outgoing SDP, use "direction"/DF or default to what was offered */ + if (!media->desired_family || !MEDIA_ISSET(media, ICE)) { + if (!media->desired_family) + media->desired_family = src->desired_family; + if (flags->address_family) + media->desired_family = flags->address_family; + } +} + __attribute__((nonnull(1, 2, 3))) static void media_update_crypto(struct call_media *media, struct stream_params *sp, sdp_ng_flags *flags) { if (!sp->rtp_endpoint.port) @@ -3018,17 +3035,6 @@ static void __media_init_from_flags(struct call_media *other_media, struct call_ MEDIA_SET(other_media, PTIME_OVERRIDE); } - /* deduct address family from stream parameters received */ - if (!other_media->desired_family || !MEDIA_ISSET(other_media, ICE)) - other_media->desired_family = sp->rtp_endpoint.address.family; - /* for outgoing SDP, use "direction"/DF or default to what was offered */ - if (media && (!media->desired_family || !MEDIA_ISSET(media, ICE))) { - if (!media->desired_family) - media->desired_family = other_media->desired_family; - if (flags->address_family) - media->desired_family = flags->address_family; - } - if (flags->opmode == OP_OFFER) { ilog(LOG_DEBUG, "setting other slot to %u, setting slot to %u", flags->media_rec_slot_offer, flags->media_rec_slot_answer); other_media->media_rec_slot = flags->media_rec_slot_offer; @@ -3230,6 +3236,7 @@ int monologue_offer_answer(struct call_monologue *monologues[2], sdp_streams_q * media_update_attrs(sender_media, sp); media_update_format(sender_media, sp); media_copy_format(receiver_media, sender_media); + media_set_address_family(receiver_media, sender_media, flags); __media_init_from_flags(sender_media, receiver_media, sp, flags); codecs_offer_answer(receiver_media, sender_media, sp, flags); @@ -3734,6 +3741,7 @@ static int monologue_subscribe_request1(struct call_monologue *src_ml, struct ca media_update_flags(dst_media, sp); media_update_crypto(dst_media, sp, flags); media_copy_format(dst_media, src_media); + media_set_address_family(dst_media, src_media, flags); __media_init_from_flags(src_media, dst_media, sp, flags); codec_store_populate(&dst_media->codecs, &src_media->codecs,