https://gitlab.synchro.net/main/sbbs/-/commit/ac54d2f4d12d779f0349b66b
Modified Files:
src/ssh/deucessh-conn.h ssh-conn.c ssh-internal.h ssh-trans.c ssh-trans.h src/ssh/test/dssh_test_internal.h test_conn.c
Log Message:
Implement ZC core; rewire stream API on top of ZC internals
Factored send_packet_inner into tx_finalize (DSSH_PRIVATE) which
handles padding, MAC, encrypt, send, and counters given a payload
already in tx_packet[9]. send_packet_inner now copies payload then
calls tx_finalize. drain_tx_queue promoted to DSSH_PRIVATE.
ZC core in ssh-conn.c:
- zc_getbuf_inner: acquires tx_mtx, waits for rekey, drains tx_queue,
checks remote_window/remote_max_packet under buf_mtx, returns
pointer into tx_packet data area past the channel header
- zc_send_inner: fills channel header (msg_type, channel_id,
data_type_code, length) at tx_packet[9], calls tx_finalize,
deducts from remote_window, releases tx_mtx
- zc_cancel_inner: releases tx_mtx without sending
Stream write (dssh_chan_write) rewired: calls zc_getbuf_inner, memcpy, zc_send_inner. Eliminates the per-packet malloc that send_data used. DSSH_ERROR_NOMORE (window full) mapped to 0 bytes sent.
Demux RX data path rewired: handle_channel_data/extended_data call
the channel's zc_cb for new-model channels (releasing buf_mtx first,
setting _Thread_local in_zc_rx guard). Stream channels use
stream_zc_cb which copies into ring buffer under buf_mtx.
Public ZC API: dssh_chan_zc_open, dssh_chan_zc_getbuf,
dssh_chan_zc_send, dssh_chan_zc_cancel. All validate ch, check
in_zc_rx guard, delegate to inner functions.
Event callback setters: dssh_chan_set_event_cb,
dssh_session_set_event_cb.
Deleted send_data/send_extended_data (old malloc-based send path).
Co-Authored-By: Claude Opus 4.6 (1M context) <
noreply@anthropic.com>
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net