Skip to content

Unwind the rtc git pin: rtc + webrtc 0.21.0-rc.2 from crates.io - #169

Merged
lannbot merged 2 commits into
mainfrom
rtc-0.21-rc2
Sep 6, 2026
Merged

Unwind the rtc git pin: rtc + webrtc 0.21.0-rc.2 from crates.io#169
lannbot merged 2 commits into
mainfrom
rtc-0.21-rc2

Conversation

@lannbot

@lannbot lannbot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Closes #120.

Why now

The lann/webrtc@15755c6b pin existed to carry one rtc-sctp fix no release had: an incoming stream reset discarded received-but-undelivered messages (lann/rtc#1, the receive-side loss of #125). Upstream fixed the same bug independently in webrtc-rs/rtc#200 (merged 2026-08-26, in rc.1+) — and by the mechanism RFC 6525 provides for it: the RECONFIG is answered In Progress while the stream still holds readable data, and the reset is re-run once the application drains it (retry_deferred_resets). The fork answered Success and deferred only the local teardown. The srflx source-address check (webrtc-rs/rtc#136) is in the series too, so nothing the pin carried is fork-only any more; lann/rtc#1 needs no upstreaming.

0.21.0-rc.2 (crates.io, 2026-09-04) is upstream master's current state; exact = pins because the two crates release in lockstep and webrtc depends on the exact rtc it shipped with.

What changed in the rc that touches us

  • Deterministic-time series: now: Instant is threaded through RTCPeerConnectionBuilder::build, set_{local,remote}_description, send/send_text; poll_read yields TaggedRTCMessage. The guest peer passes Instant::now() — already its clock.
  • SettingEngine → consuming SettingEngineBuilder: WebrtcCtx's hook type becomes Fn(SettingEngineBuilder) -> SettingEngineBuilder (public API change on wasmtime-webrtc-datachannels); both hook sites follow.
  • Behavioural (no code change needed, all covered by the suite): channel open deferred until DCEP ACK (rtc#171), SCTP stream id assigned only once the DTLS role is known — the RFC 8832 even/odd parity fix (rtc#199), zero-window deadlock at buffer-full tail (rtc#217), inbound channels gated on SCTP readiness (rtc#228), RFC 9260 initial RTO (rtc#226).

Verification

  • just check (fmt, clippy on every target, WIT, 22 tests)
  • just examples::test-webrtc-composed, just examples::test-echo-remote-composed
  • just conformance: 148 loopback + 156 interop results, 0 failing, both committed matrices byte-identical
  • Shadow lab not run locally (binary is x86_64, machine is arm64) — relying on CI's shadow-lab.

Automerge armed.

The lann/webrtc fork rev existed to carry one rtc-sctp fix no release
had: an incoming stream reset discarded received-but-undelivered
messages (lann/rtc#1; the receive-side loss of #125). Upstream fixed the
same bug independently in webrtc-rs/rtc#200 (in rc.1+), by the RFC 6525
mechanism: the RECONFIG is answered "In Progress" while the stream still
holds readable data, and the reset is re-run once the application drains
it. The srflx source-address check (webrtc-rs/rtc#136) is in the series
too, so nothing the pin carried is fork-only any more.

API follow-through for the rc:

- rtc threads a caller-supplied `now: Instant` through construction,
  description setters, and sends, and wraps `poll_read` output in
  `TaggedRTCMessage`; the guest peer passes `Instant::now()`, its clock
  already.
- `SettingEngine` is immutable, built by a consuming
  `SettingEngineBuilder`, so `WebrtcCtx`'s hook becomes
  `Fn(SettingEngineBuilder) -> SettingEngineBuilder`; both hook sites
  (the demo host's loopback opt-in, the conformance driver's loopback /
  mDNS settings) follow.

Exact `=` pins: the two crates release in lockstep and `webrtc` depends
on the exact `rtc` it shipped with.

Verified: just check; examples::test-webrtc-composed;
examples::test-echo-remote-composed; just conformance (148 loopback +
156 interop results, 0 failing, both committed matrices unchanged).

Closes #120.
@lannbot
lannbot enabled auto-merge September 6, 2026 22:46
@lannbot
lannbot merged commit 2f0a8e3 into main Sep 6, 2026
5 checks passed
@lannbot
lannbot deleted the rtc-0.21-rc2 branch September 6, 2026 23:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unwind the rtc git pin once upstream ships a release

2 participants