Parent
Part of #61.
Canonical specification
Implement PR 1 of docs/plans/circuit-relay-v2-relay-server.md. That document and the resolved decisions in #62–#68 are authoritative. Do not reopen product design or substitute rust-libp2p behavior where the specification declares a minip2p deviation.
What to build
Deliver the complete relay-side wire boundary for a Circuit Relay v2 server. Existing relay clients must retain their public behavior while server-side code can accept inbound HOP streams, initiate outbound STOP streams, make explicit accept/deny decisions, and preserve payload pipelined with either handshake.
Keep this layer limited to one HOP or STOP stream: protobuf messages, protocol identifiers, status encoding, the 8 KiB frame boundary, and per-stream machines belong here. Reservation tables, clocks, admission policy, forwarding policy, and whole-service lifecycle state do not.
Acceptance criteria
Tests and fuzzing
Documentation and compatibility
Completion checks
Blocked by
None — can start immediately.
Parent
Part of #61.
Canonical specification
Implement PR 1 of
docs/plans/circuit-relay-v2-relay-server.md. That document and the resolved decisions in #62–#68 are authoritative. Do not reopen product design or substitute rust-libp2p behavior where the specification declares a minip2p deviation.What to build
Deliver the complete relay-side wire boundary for a Circuit Relay v2 server. Existing relay clients must retain their public behavior while server-side code can accept inbound HOP streams, initiate outbound STOP streams, make explicit accept/deny decisions, and preserve payload pipelined with either handshake.
Keep this layer limited to one HOP or STOP stream: protobuf messages, protocol identifiers, status encoding, the 8 KiB frame boundary, and per-stream machines belong here. Reservation tables, clocks, admission policy, forwarding policy, and whole-service lifecycle state do not.
Acceptance criteria
HopResponderandStopInitiatorsans-I/O machines plus the status helpers required by the canonical specification.Tests and fuzzing
wire_inputsfuzz target feeds arbitrary input to both new server-side machines.just fuzz 30completes successfully and its result is recorded in the PR.Documentation and compatibility
voucherremainsNone.Completion checks
just fmtpasses.just testpasses.just clippypasses with warnings denied.just check-nostdpasses.just fuzz 30passes.Blocked by
None — can start immediately.