https://gitlab.synchro.net/main/sbbs/-/commit/e15d0a14b8c4bbca3b9d7781
Modified Files:
src/ssh/TODO.md design-channel-io-api.md
Log Message:
Revise channel I/O design: dssh_chan_ API, RFC 4254 analysis, OpenSSH audit
Major revision of design-channel-io-api.md based on deep-diving the
RFC and reading the OpenSSH source. Key changes:
- Document RFC 4254's underspecification: no ordering, multiplicity,
or lifecycle constraints on channel requests; conventions are the
de facto spec, not the protocol
- Audit OpenSSH server (LARVAL state, initial_window=0, strict request
gating) and client (non-zero window, no LARVAL, trusts server)
- Both sides use initial_window=0 — safer than OpenSSH client behavior
- Rename to dssh_chan_ prefix; zero-copy API uses dssh_chan_zc_
- Channel type (shell/exec/subsystem) as parameter with union, not
separate open functions; NULL params means defaults
- dssh_chan_close() takes int64_t exit_code: negative means no
exit-status, preserving full uint32 wire range (documents OpenSSH's
exit-status truncation bug)
- dssh_chan_shutwr() for half-close (EOF) with unambiguous naming
- Signal, window-change, AND break delivered as stream-position
callbacks during dssh_chan_read() — window-change is SIGWINCH
- Zero-copy send: app writes directly into tx_packet buffer
- Document current allocation costs and path to zero-malloc I/O
Add TODO item 101: eliminate per-packet malloc in channel send path
via scatter write into tx_packet.
Co-Authored-By: Claude Opus 4.6 (1M context) <
noreply@anthropic.com>
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net