From 5e7ca81f4318c05a99cbb8fc0090745b25ab34f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 18:22:42 +0000 Subject: [PATCH 1/2] chore(deps): bump the cargo group across 1 directory with 4 updates Updates the requirements on [tokio-tungstenite](https://github.com/snapview/tokio-tungstenite), [uniffi](https://github.com/mozilla/uniffi-rs), [boring](https://github.com/cloudflare/boring) and [tokio-quiche](https://github.com/cloudflare/quiche) to permit the latest version. Updates `tokio-tungstenite` to 0.30.0 - [Changelog](https://github.com/snapview/tokio-tungstenite/blob/master/CHANGELOG.md) - [Commits](https://github.com/snapview/tokio-tungstenite/compare/v0.29.0...v0.30.0) Updates `uniffi` to 0.32.1 - [Changelog](https://github.com/mozilla/uniffi-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/mozilla/uniffi-rs/compare/v0.31.0...v0.32.1) Updates `boring` to 4.22.0 - [Release notes](https://github.com/cloudflare/boring/releases) - [Changelog](https://github.com/cloudflare/boring/blob/master/RELEASE_NOTES) - [Commits](https://github.com/cloudflare/boring/compare/v4.0.0...v4.22.0) Updates `tokio-quiche` to 0.20.0 - [Release notes](https://github.com/cloudflare/quiche/releases) - [Commits](https://github.com/cloudflare/quiche/compare/tokio-quiche-0.19.0...tokio-quiche-0.20.0) --- updated-dependencies: - dependency-name: tokio-tungstenite dependency-version: 0.30.0 dependency-type: direct:production dependency-group: cargo - dependency-name: uniffi dependency-version: 0.32.1 dependency-type: direct:production dependency-group: cargo - dependency-name: boring dependency-version: 4.22.0 dependency-type: direct:production dependency-group: cargo - dependency-name: tokio-quiche dependency-version: 0.20.0 dependency-type: direct:production dependency-group: cargo ... Signed-off-by: dependabot[bot] --- rs/qmux/Cargo.toml | 2 +- rs/web-transport-ffi/Cargo.toml | 4 ++-- rs/web-transport-quiche/Cargo.toml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rs/qmux/Cargo.toml b/rs/qmux/Cargo.toml index 6384b8e7..e56e6487 100644 --- a/rs/qmux/Cargo.toml +++ b/rs/qmux/Cargo.toml @@ -33,7 +33,7 @@ tokio = { version = "1.27", features = ["sync", "time", "macros", "rt"] } tokio-rustls = { version = "0.26", optional = true } # Optional: WebSocket -tokio-tungstenite = { version = "0.29", optional = true } +tokio-tungstenite = { version = "0.30", optional = true } tracing = "0.1" web-transport-proto = { workspace = true } web-transport-trait = { workspace = true } diff --git a/rs/web-transport-ffi/Cargo.toml b/rs/web-transport-ffi/Cargo.toml index b26b03f0..00eee766 100644 --- a/rs/web-transport-ffi/Cargo.toml +++ b/rs/web-transport-ffi/Cargo.toml @@ -32,12 +32,12 @@ rustls-native-certs = "0.8" thiserror = "2" tokio = { version = "1", features = ["rt-multi-thread", "sync", "time", "macros"] } tokio-util = "0.7" -uniffi = { version = "0.31", features = ["cli"] } +uniffi = { version = "0.32", features = ["cli"] } url = "2" web-transport-quinn = { workspace = true } [build-dependencies] -uniffi = { version = "0.31", features = ["build"] } +uniffi = { version = "0.32", features = ["build"] } [dev-dependencies] rcgen = "0.14" diff --git a/rs/web-transport-quiche/Cargo.toml b/rs/web-transport-quiche/Cargo.toml index 43802ebc..4ad25eb2 100644 --- a/rs/web-transport-quiche/Cargo.toml +++ b/rs/web-transport-quiche/Cargo.toml @@ -21,7 +21,7 @@ all-features = true keylog = ["tokio-quiche/capture_keylogs"] [dependencies] -boring = "4" +boring = "5" bytes = "1" flume = "0.12" futures = "0.3" @@ -38,7 +38,7 @@ tokio = { version = "1", default-features = false, features = [ "time", ] } -tokio-quiche = "0.19" +tokio-quiche = "0.20" tracing = "0.1" url = "2" web-transport-proto = { workspace = true } From c2e4013115a5f238bb4d1f0fcab479d57b50719c Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sat, 26 Sep 2026 18:19:06 -0700 Subject: [PATCH 2/2] fix(web-transport-quiche): port to tokio-quiche 0.20 tokio-quiche 0.20 removed ApplicationOverQuic::buffer; the IO worker now owns its 64 KiB egress buffer (pooled per runtime thread), so the send path keeps the same packet buffer size without the driver supplying one. The driver's buffer was otherwise only scratch space for dgram_recv. Take the owned datagram via dgram_recv_buf instead and hand it to Bytes without copying, dropping the per-connection 64 KiB allocation. Co-Authored-By: Claude Opus 5.5 --- rs/web-transport-quiche/src/ez/driver.rs | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/rs/web-transport-quiche/src/ez/driver.rs b/rs/web-transport-quiche/src/ez/driver.rs index f823756a..3a63b6de 100644 --- a/rs/web-transport-quiche/src/ez/driver.rs +++ b/rs/web-transport-quiche/src/ez/driver.rs @@ -12,7 +12,6 @@ use std::{ use kio::{Waiter, WaiterList}; use tokio_quiche::{ - buf_factory::BufFactory, quic::{HandshakeInfo, QuicheConnection}, quiche, }; @@ -434,8 +433,6 @@ pub(super) struct Driver { send: HashMap>, recv: HashMap>, - buf: Vec, - // Datagrams. Only the outbound half is a channel now; inbound datagrams and // accepted streams are queued in `DriverState` so they can be polled. dgram_out: flume::Receiver, @@ -457,7 +454,6 @@ impl Driver { state, send: HashMap::new(), recv: HashMap::new(), - buf: vec![0u8; BufFactory::MAX_BUF_SIZE], dgram_out, dgram_max, keep_alive: keep_alive.map(KeepAlive::new), @@ -886,10 +882,6 @@ impl tokio_quiche::ApplicationOverQuic for Driver { true } - fn buffer(&mut self) -> &mut [u8] { - &mut self.buf - } - async fn wait_for_data( &mut self, qconn: &mut QuicheConnection, @@ -911,9 +903,10 @@ impl tokio_quiche::ApplicationOverQuic for Driver { // The channel is bounded — if the application can't keep up we drop // the new datagram (consistent with the unreliable contract). loop { - match qconn.dgram_recv(&mut self.buf) { - Ok(len) => { - let buf = Bytes::copy_from_slice(&self.buf[..len]); + match qconn.dgram_recv_buf() { + Ok(dgram) => { + let (data, start) = dgram.into_parts(); + let buf = Bytes::from(data).slice(start..); let mut waiters = self.state.lock().push_dgram_in(buf); waiters.wake();