From 0a21d787c55a10dac0485dc8331b55d706fb1137 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 28 Jul 2026 10:25:33 -0400 Subject: [PATCH] MT#65570 support ICE2 SDP option Change-Id: I27511d9d30173720d484b363a4d8b210e4d15b65 --- daemon/call.c | 2 +- daemon/sdp.c | 14 ++++++++++++-- include/call.h | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 7ed61b620..7561adfaa 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -3231,7 +3231,7 @@ static void media_update_flags(struct call_media *media, struct stream_params *s /* copy parameters advertised by the sender of this message */ bf_copy_same(&media->media_flags, &sp->sp_flags, SHARED_FLAG_RTCP_MUX | SHARED_FLAG_ASYMMETRIC | SHARED_FLAG_UNIDIRECTIONAL | - SHARED_FLAG_ICE | SHARED_FLAG_TRICKLE_ICE | SHARED_FLAG_ICE_LITE_PEER | + SHARED_FLAG_ICE | SHARED_FLAG_ICE2 | SHARED_FLAG_TRICKLE_ICE | SHARED_FLAG_ICE_LITE_PEER | SHARED_FLAG_END_OF_CANDIDATES | SHARED_FLAG_EXTMAP_SHORT | SHARED_FLAG_RTCP_FB | SHARED_FLAG_LEGACY_OSRTP | SHARED_FLAG_LEGACY_OSRTP_REV); } diff --git a/daemon/sdp.c b/daemon/sdp.c index 3da118aa7..48f896ec1 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -1718,6 +1718,8 @@ no_cand: if ((attr = attr_get_by_id_m_s(media, ATTR_ICE_OPTIONS))) { if (str_str(&attr->strs.value, "trickle") >= 0) SP_SET(sp, TRICKLE_ICE); + if (str_str(&attr->strs.value, "ice2") >= 0) + SP_SET(sp, ICE2); } else if (is_trickle_ice_address(&sp->rtp_endpoint)) SP_SET(sp, TRICKLE_ICE); @@ -2970,8 +2972,16 @@ static void print_sdp_media_section(GString *s, struct call_media *media, media->type_id); } - if (MEDIA_ISSET(media, TRICKLE_ICE) && ice_agent) { - append_attr_to_gstring(s, "ice-options", &STR_CONST("trickle"), flags, + if (MEDIA_ISSET2(media, TRICKLE_ICE, ICE2) && ice_agent) { + str opts; + if (!MEDIA_ISSET(media, ICE2)) + opts = STR_CONST("trickle"); + else if (!MEDIA_ISSET(media, TRICKLE_ICE)) + opts = STR_CONST("ice2"); + else + opts = STR_CONST("trickle ice2"); + + append_attr_to_gstring(s, "ice-options", &opts, flags, media->type_id); } if (MEDIA_ISSET(media, ICE)) { diff --git a/include/call.h b/include/call.h index 4c1b51bff..d0f46ae63 100644 --- a/include/call.h +++ b/include/call.h @@ -136,6 +136,7 @@ enum { /* empty range [16 - 29] in-between for non-shared flags */ #define SHARED_FLAG_END_OF_CANDIDATES (1LL << 30) #define SHARED_FLAG_EXTMAP_SHORT (1LL << 39) +#define SHARED_FLAG_ICE2 (1LL << 42) /* struct stream_params */ #define SP_FLAG_IMPLICIT_RTCP SHARED_FLAG_IMPLICIT_RTCP @@ -156,6 +157,7 @@ enum { #define SP_FLAG_LEGACY_OSRTP_REV SHARED_FLAG_LEGACY_OSRTP_REV #define SP_FLAG_END_OF_CANDIDATES SHARED_FLAG_END_OF_CANDIDATES #define SP_FLAG_EXTMAP_SHORT SHARED_FLAG_EXTMAP_SHORT +#define SP_FLAG_ICE2 SHARED_FLAG_ICE2 /* struct packet_stream */ #define PS_FLAG_RTP (1LL << 16) @@ -220,6 +222,7 @@ enum { #define MEDIA_FLAG_EXTMAP_SHORT SHARED_FLAG_EXTMAP_SHORT #define MEDIA_FLAG_BUNDLE_ONLY (1LL << 40) #define MEDIA_FLAG_AUDIO_PLAYER_IMPLICIT (1LL << 41) +#define MEDIA_FLAG_ICE2 SHARED_FLAG_ICE2 /* struct call_monologue */ #define ML_FLAG_REC_FORWARDING (1LL << 16)