diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0a817b1..5b79bb7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,10 +49,10 @@ jobs: # bind/advertised address split + port range). If a legitimate # change is needed, update the pinned blob hashes below in the same # PR — loud and reviewable by design. - - name: Seam gate — loop_driver + rtc_session byte-identical to slice-3 + - name: Seam gate — loop_driver frozen (slice-3) + rtc_session pinned (slice-5) run: | EXPECTED_LOOP_DRIVER='744bf314edf7f4925c8bb3bd0f5176dbc88f8113' - EXPECTED_RTC_SESSION='76bbcf8c85be0041abda1bcc3390b299fcef3d6f' + EXPECTED_RTC_SESSION='f47d63b9a2883d37066a93c9daa0e2cf8816bec4' GOT_LOOP_DRIVER=$(git hash-object crates/rutster-media/src/loop_driver.rs) GOT_RTC_SESSION=$(git hash-object crates/rutster-media/src/rtc_session.rs) if [ "$GOT_LOOP_DRIVER" != "$EXPECTED_LOOP_DRIVER" ]; then diff --git a/crates/rutster-media/src/rtc_session.rs b/crates/rutster-media/src/rtc_session.rs index 76bbcf8..f47d63b 100644 --- a/crates/rutster-media/src/rtc_session.rs +++ b/crates/rutster-media/src/rtc_session.rs @@ -130,8 +130,8 @@ pub struct RtcSession { pub(crate) pipe: Box, /// Local UDP socket str0m sends `Transmit` packets out on and /// receives `Input::Receive` packets from. Bound to an ephemeral - /// port at construction; the local candidate passed to str0m at - /// offer-accept time uses this address. + /// port at construction. The SDP candidate passed to the peer uses + /// the separate `advertised_addr` field, not this socket's address. pub(crate) socket: std::net::UdpSocket, /// Local socket address — cached because `local_addr()` is a syscall. pub(crate) local_addr: SocketAddr, diff --git a/crates/rutster/src/media_thread.rs b/crates/rutster/src/media_thread.rs index a50adcd..4fc7ec8 100644 --- a/crates/rutster/src/media_thread.rs +++ b/crates/rutster/src/media_thread.rs @@ -64,8 +64,8 @@ impl Default for MediaThreadOpts { #[derive(Debug)] pub enum MediaCmd { /// Construct a fresh RtcSession, store it under a new ChannelId, reply. - /// The thread constructs RtcSession::new() (keeps all RtcSession - /// construction on the thread that owns it). + /// The thread constructs RtcSession::new_with_config(&opts.media_cfg) + /// (keeps all RtcSession construction on the thread that owns it). Register { tap_url: url::Url, reply: oneshot::Sender>,