f75760b14eec38e3908e2d5060721a2fb5d35ad8
Add the dedicated FILES_ALPN data plane that moves attachment bytes off-gossip via direct QUIC streams. - FileRouter (ProtocolHandler on the persistent router, mirroring AudioRouter): bound to the active session's Shared on join, cleared on leave. On an inbound stream it authenticates the peer via the ALPN handshake, gates on live room membership (reuses audio_sender_admitted, so a former member cannot pull files), reads exactly one 32-byte attachment id (bounded request read), and streams back the matching blob from the session serve store — or an empty body for an unknown id. - Shared gains served_files (id -> bytes), populated by serve_attachment and cleared on leave. - IrohTransport::serve_attachment + fetch_attachment (inherent methods; transport is used concretely). fetch dials the sender on FILES_ALPN (preferring a known full address), writes the id, and reads bounded by the descriptor's declared size, with a 30s connect/read timeout so a stalled sender can't hang the fetch. - Register FILES_ALPN in the router; bind/clear file_router in lock-step with audio_router at every join/leave site. Builds + clippy clean, 349 lib tests pass (plane is runtime I/O, field-tested in stage 5). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Releases
10
Languages
Rust
98.8%
Shell
0.4%
Nix
0.4%
Python
0.2%
Inno Setup
0.2%