fix(web-transport-moq): report a raw QUIC peer's close code - #11
Conversation
A raw QUIC session closes with the application code as is, but the peer decoded ApplicationClosed only through the HTTP/3 code space, so session_error() was None. The session and its streams now share a CloseReason that knows the code space, and close() after the connection already closed keeps that reason instead of recording LocallyClosed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Warning Review limit reachedNext included review available in 3 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (5)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. WalkthroughThe change adds shared Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The identified wrong-code case predates this change, so it does not prevent this PR from merging after normal checks. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The change is confined to how a session reports closure to its callers. The review found no new privilege or cross-session access path, but concurrent close behavior and production use of the reported errors are not fully evidenced. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Merging: CI green, Codex found nothing, no other review feedback. Lands the raw QUIC close-code fix for the 1.3.2 release. (Written by Claude Opus 5.5) |
1.3.2 carries moq-dev/noq#12 (BBR responds to CE in Startup and ProbeUp) and moq-dev/noq#11 (raw QUIC peers report their application close code). Completes the bbr-classic-ecn quest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A raw QUIC session (
Session::raw) closes with the application code as is (conn.close(code, ..)), but the peer decodedApplicationClosedonly through the HTTP/3 code space, sosession_error()returnedNonefor every raw close. A moqmoqt://client sawTransport("connection error: closed by peer: ...")instead of the server's code. Reported in moq-dev/moq#4249.CloseReasonthat knows whether the session is raw. It replaces theArc<OnceLock<SessionError>>and the three copies of its lookup.ApplicationClosedcode that fits in au32decodes toWebTransportError::Closed, fromclosed(),close_reason(), accept, open, datagrams, and stream reads/writes.close()after the connection already closed now records that reason, so a laterclosed()keeps the peer's code rather thanLocallyClosed. HTTP/3 sessions keep their existing behavior.Public API: none. Wire: none.
Upstream: none,
web-transport-moqis fork-only.Test:
tests/raw_close.rsfails before the change (session_error()isNone) and passes after.Not changed here: raw sessions still map stream reset/stop codes through the HTTP/3 space on both ends, which round-trips between two
web-transport-moqpeers but not with other raw QUIC stacks.(Written by Opus 5.5)
🤖 Generated with Claude Code