BBS:      TELESC.NET.BR
Assunto:  src/syncterm/ssh.c ssh.h term.c wren_bind_conn.c
De:       Deuc¨
Data:     Mon, 4 May 2026 09:29:21 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/833782b7cf66d42afe3c3b66
Modified Files:
	src/syncterm/ssh.c ssh.h term.c wren_bind_conn.c
Log Message:
SyncTERM: keep Wren and inline transfers from fighting each other

Two interacting changes that came out of asking "what happens to the
SFTP queue if the user starts a zmodem download mid-transfer":

SO_SNDBUF mode-switching:
  Connect-time SO_SNDBUF is now 1 MiB (consistent baseline across
  platforms  Windows in particular defaults small).  ssh.c gains
  ssh_set_sftp_buffer_mode(bool) which drops the cap to 64 KiB while
  CTerm.sftpActive is set and restores 1 MiB when the queue idles.
  Inline transfers (zmodem/ymodem-G) get full BDP headroom (~1.6 Gbps
  at 5 ms RTT); SFTP-active periods stay capped so a saturating
  upload can't queue more than one keystroke-budget's worth of data
  ahead of an interactive keystroke.  fn_CTerm_sftpActive_set
  short-circuits same-value sets so a tight queue run that stays
  active across back-to-back jobs doesn't flap the kernel buffer.

Wren pump during inline transfers:
  doterm() can't drive wren_result_drain / timers / hook dispatch
  while the zmodem or xmodem inner loop has captured it, which
  stalls the SFTP queue and blocks Hook.every / Timer.trigger
  callbacks for the duration.  Add inline_transfer_pump_wren_ 
  drains the result queue, sweeps pending timers, dispatches
  Hook.every  gated to ~50 ms so per-byte callers are cheap.
  Called from zmodem_check_abort, xmodem_check_abort, and
  recv_bytes (so a download blocked on conn_recv_upto still pumps).

  The two check_abort functions also reshape key handling: drop
  the 1-second xp_fast_timer64 gate to 50 ms via xp_timer, and
  route every key through wren_host_dispatch_key BEFORE the
  ESC/CTRL+C/CTRL+X transfer-cancel paths.  Mouse events go to
  wren_host_dispatch_mouse, no local handling.  Wren-first means a
  Wren App layered over the transfer screen (e.g. SftpApp) gets
  ESC to dismiss the modal instead of cancelling the transfer; if
  no hook claims the key, transfer-cancel still fires.

Co-Authored-By: Claude Opus 4.7 (1M context) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]