diff --git a/Cargo.lock b/Cargo.lock index 750dec27..2d75eac2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2086,16 +2086,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "if-addrs" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b2eeee38fef3aa9b4cc5f1beea8a2444fc00e7377cafae396de3f5c2065e24" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "if-addrs" version = "0.15.0" @@ -2528,13 +2518,13 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "mdns-sd" -version = "0.20.3" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86dbb9f00c8c367f75ed3a775d3eb31d0375a72f58275ef64a1bc53c255a2ce2" +checksum = "ba97b4c886eea3c2823388120d92063c011ac866919ffc4200a0e4b1642a54a5" dependencies = [ "fastrand", "flume", - "if-addrs 0.15.0", + "if-addrs", "log", "mio", "socket-pktinfo", @@ -3582,7 +3572,7 @@ dependencies = [ "criterion", "fec-rs", "hmac", - "if-addrs 0.13.4", + "if-addrs", "libc", "opus", "proptest", @@ -3632,7 +3622,7 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "if-addrs 0.13.4", + "if-addrs", "libc", "libloading 0.9.0", "log", diff --git a/clients/android/native/Cargo.toml b/clients/android/native/Cargo.toml index 74facf00..4c38ef0c 100644 --- a/clients/android/native/Cargo.toml +++ b/clients/android/native/Cargo.toml @@ -25,7 +25,7 @@ log = "0.4" # `NsdManager` system daemon with one tested browse path. Pure Rust (socket2/if-addrs/mio), so it # cross-compiles to the Android targets AND builds on the host (the JNI seam links into # `cargo build --workspace`). Kotlin keeps only the Wi-Fi `MulticastLock` + permission UX. -mdns-sd = "0.20" +mdns-sd = "0.21" # Android-only deps. Gated so `cargo build --workspace` on the Linux/macOS dev boxes + CI still # compiles this crate (as a host cdylib) โ€” the Android-framework glue (logging, AMediaCodec + AAudio diff --git a/clients/probe/Cargo.toml b/clients/probe/Cargo.toml index bd8b7a0e..7f14a802 100644 --- a/clients/probe/Cargo.toml +++ b/clients/probe/Cargo.toml @@ -24,7 +24,7 @@ tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # LAN host discovery (`--discover`): browse the native `_punktfunk._udp` mDNS service the host # advertises (same crate/version the host advertises with). -mdns-sd = "0.20" +mdns-sd = "0.21" # Opus: multistream DECODE of the host's audio plane (the surround validator) + `--mic-test`'s # encoder. libopus is already in the graph via `punktfunk-core`'s quic feature; this exposes the # name directly. Cross-platform (cmake-vendored), so the probe builds + validates everywhere. diff --git a/clients/windows/Cargo.toml b/clients/windows/Cargo.toml index 55bf7f05..762ede90 100644 --- a/clients/windows/Cargo.toml +++ b/clients/windows/Cargo.toml @@ -89,7 +89,7 @@ windows = { git = "https://github.com/microsoft/windows-rs", rev = "acb5a1a74410 # (see the `gamepad` field in app/); the spawned punktfunk-session does the actual forwarding. SDL3 # itself (built from source via the bundled CMake on Windows) is pulled transitively by # pf-client-core with the same `build-from-source,hidapi` features, so it is not a direct dep here. -mdns-sd = "0.20" +mdns-sd = "0.21" async-channel = "2" serde_json = "1" tracing = "0.1" diff --git a/crates/pf-client-core/Cargo.toml b/crates/pf-client-core/Cargo.toml index 9ee6c000..0947df69 100644 --- a/crates/pf-client-core/Cargo.toml +++ b/crates/pf-client-core/Cargo.toml @@ -89,7 +89,7 @@ libc = "0.2" # with libavcodec (`pf-encode`); nothing in this crate does. opus = "0.3" -mdns-sd = "0.20" +mdns-sd = "0.21" # PyroWave decode (the opt-in wired-LAN wavelet codec, design/pyrowave-codec-plan.md # ยง4.5) โ€” pure Vulkan compute on the presenter's shared device, so it builds wherever the diff --git a/crates/punktfunk-core/Cargo.toml b/crates/punktfunk-core/Cargo.toml index 028a5b11..a7484ec3 100644 --- a/crates/punktfunk-core/Cargo.toml +++ b/crates/punktfunk-core/Cargo.toml @@ -55,7 +55,12 @@ zeroize = "1" # Interface enumeration for Wake-on-LAN: computes each NIC's subnet-directed broadcast so a # magic packet reaches the host's L2 segment on multi-homed clients (VPN/docker/multiple LANs), # not just the default route. Tiny, cross-platform (getifaddrs / GetAdaptersAddresses), no cmake. -if-addrs = "0.13" +# `link-local` is named EXPLICITLY, not inherited. mdns-sd declares if-addrs with it, so any build +# containing both (every host and every client) unifies it on regardless โ€” and a crate whose +# enumeration silently changes depending on who else is in the selection is the worst of both. On +# means fe80::/169.254 interfaces are enumerated too, which for WoL is the behaviour we want: a NIC +# is wake-capable whether or not it currently holds a routable address. +if-addrs = { version = "0.15", features = ["link-local"] } # Crypto backend is aws-lc-rs, and rustls/quinn/rcgen must all name it: they each select a # backend independently, so one dissenter pulls a SECOND crypto stack in via feature unification. diff --git a/crates/punktfunk-host/Cargo.toml b/crates/punktfunk-host/Cargo.toml index 9bdf668d..0b06c801 100644 --- a/crates/punktfunk-host/Cargo.toml +++ b/crates/punktfunk-host/Cargo.toml @@ -68,11 +68,14 @@ tracing-log = "0.2" # tracing-log bridge with `ignore_crate("wasapi")`). Already in the tree transitively. log = "0.4" axum = "0.8" -mdns-sd = "0.20" +mdns-sd = "0.21" # Wake-on-LAN: report the host's wake-capable NIC MAC(s) to clients via the mDNS `mac` TXT record. # `mac_address` reads a NIC's hardware address; `if-addrs` maps the routed IP to its interface name. mac_address = "1" -if-addrs = "0.13" +# `link-local` named explicitly for the same reason as in punktfunk-core: mdns-sd (right above) +# turns it on by unification anyway, and `wake_macs` should not enumerate a different set of NICs +# depending on which other crates share the build. +if-addrs = { version = "0.15", features = ["link-local"] } tokio = { version = "1", features = ["full"] } # GameStream-only (behind the `gamestream` feature): the Moonlight RSA-2048 identity generator + # pairing signer (cert.rs, pairing.rs) and the legacy-client-cert leniency verifier (tls.rs).