Skip to content

feat(server): add HTTP/3 listener - #20

Draft
takeokunn wants to merge 35 commits into
mainfrom
pr10b-http3-listener
Draft

takeokunn wants to merge 35 commits into
mainfrom
pr10b-http3-listener

Conversation

@takeokunn

@takeokunn takeokunn commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add an SBCL HTTP/3 server listener with Retry, strict h3 ALPN negotiation, handshake and request deadlines, resource limits, GOAWAY draining, and QUIC close reasons limited to 256 characters with control characters replaced.
  • Bound active request workers server-wide and limit each connection to four active unidirectional-stream workers. Excess unidirectional streams wait in a FIFO queue. With the default 128-connection limit, unidirectional-stream workers are capped at 512; the transport advertises credit for 16 incoming unidirectional streams for control, QPACK, and GREASE or unknown stream traffic.
  • Account for request-body copies when enforcing the aggregate buffered-body budget.
  • Enforce HTTP/3 control and QPACK stream rules and reject reserved HTTP/2 frame types on request streams.
  • Correct coverage normalization so candidates inside an unexecuted lambda remain uncovered.
  • Add a test-only raw QUIC peer fixture, HTTP/3 listener tests, and API documentation. The fixture's pinned Go 1.26.5 toolchain and known standard-library vulnerabilities are documented in its README.
  • Update the HTTP/3 ASDF dependencies to cl-quic-kit 0.2.7 and cl-http-kit/tls.

Validation

  • paredit inspect check passed for the changed Lisp and ASDF files, and gitleaks dir found no leaks.
  • Local runtime tests were not run because ASDF dependency resolution stalled on this machine. The Nix CI checks for the current head are pending.

@takeokunn
takeokunn force-pushed the pr10b-http3-listener branch 10 times, most recently from 9a51bf6 to ad553a3 Compare October 29, 2026 06:28
@takeokunn
takeokunn force-pushed the pr10b-http3-listener branch 4 times, most recently from 2268db0 to e5a60de Compare October 29, 2026 13:53
@takeokunn
takeokunn force-pushed the pr10b-http3-listener branch from e5a60de to a78adc7 Compare October 29, 2026 14:13
QUIC RESET_STREAM and STOP_SENDING error codes must be integers. Explicit nil previously reached both transport calls, so it now falls back to H3_REQUEST_CANCELLED. Restore coverage normalization to the 2452dff baseline.
The cancel callback tests construct an HTTP/3 client, which requires a QUIC stream engine. Create a QUIC client for the fixture connection before invoking the callback.
Exercise invalid max-active-request-workers configuration and both typed and untyped callback-condition paths in %http-server-report-error.
Call the SETTINGS control-state constructor without keyword overrides and assert its default flag and tracking lists. This covers the default expressions reported missing by the expression coverage gate.

This branch has not been deployed

No deployments
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.

1 participant