Output speed emulation set via the BBS list entry's BPS Rate is not reflected
in the DECSCS status string. A host that queries gets "unlimited" while every
byte is being paced.
Repro (no BBS needed):
printf '\033P$q*r\033\\' | nc -l 2323
Connect to localhost:2323 with the entry's BPS Rate set to 2400.
expected: ESC P 1 $ r ; 4 * r ESC \
actual: ESC P 1 $ r ; 0 * r ESC \
Control: with BPS Rate 0, have the host send CSI ; 4 * r before the query.
The response is then ;4*r, so the query path itself is fine.
doterm() loads the entry rate into its own speed local (term.c,
speed = bbs->bpsrate) and the byte pump gates on that. cterm->decscs_speed
is initialized to 0 (cterm.c) and written only by cterm_handle_decscs()
(cterm_cterm.c), which runs only for a host-sent DECSCS. The DECRQSS handler
(cterm_dec.c) derives its response from decscs_speed alone.
Consequence: a host cannot tell that emulation is active, so it cannot lift the
throttle around a bulk transfer or warn the user.
Anonymous