diff --git a/README.md b/README.md index 81b63d249..9c5cd3f5c 100644 --- a/README.md +++ b/README.md @@ -787,6 +787,11 @@ Optionally included keys are: as no incoming packets have been received. Useful to create an initial NAT mapping. Not needed when ICE is in use. + - `trickle ICE` + + Useful for `offer` messages when ICE as advertised to also advertise + support for trickle ICE. + * `generate RTCP` Contains a string, either `on` or `off`. If enabled for a call, diff --git a/daemon/call.c b/daemon/call.c index 92335847d..c1f386548 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1401,6 +1401,9 @@ static void __ice_offer(const struct sdp_ng_flags *flags, struct call_media *thi default: break; } + + if (flags->trickle_ice) + MEDIA_SET(this, TRICKLE_ICE); } /* determine roles (even if we don't actually do ICE) */ diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index cd4894790..174d925ba 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -837,6 +837,12 @@ static void call_ng_flags_flags(struct sdp_ng_flags *out, str *s, void *dummy) { case CSH_LOOKUP("generate-rtcp"): out->generate_rtcp = 1; break; + case CSH_LOOKUP("trickle-ICE"): + out->trickle_ice = 1; + break; + case CSH_LOOKUP("trickle-ice"): + out->trickle_ice = 1; + break; case CSH_LOOKUP("loop-protect"): out->loop_protect = 1; break; diff --git a/include/call_interfaces.h b/include/call_interfaces.h index 5dc78a35a..02744ea48 100644 --- a/include/call_interfaces.h +++ b/include/call_interfaces.h @@ -90,6 +90,7 @@ struct sdp_ng_flags { rtcp_mux_demux:1, rtcp_mux_accept:1, rtcp_mux_reject:1, + trickle_ice:1, no_rtcp_attr:1, full_rtcp_attr:1, generate_rtcp:1, diff --git a/t/auto-daemon-tests.pl b/t/auto-daemon-tests.pl index 49f46a63e..b69153f4b 100755 --- a/t/auto-daemon-tests.pl +++ b/t/auto-daemon-tests.pl @@ -10061,6 +10061,36 @@ SDP new_call; +offer('trickle ICE offer', { ICE => 'force', flags => ['trickle ICE'] }, < 'force' }, <