From 6bf10a6901c14c4c44fb2e89e060e7cc0d2723b0 Mon Sep 17 00:00:00 2001 From: Frank Rolsted Jensen Date: Thu, 28 Oct 2021 11:33:09 +0200 Subject: [PATCH] Support for software flow control --- src/telnet.h | 3 ++- src/ttynvt.c | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/telnet.h b/src/telnet.h index c6a0ae4..213335e 100644 --- a/src/telnet.h +++ b/src/telnet.h @@ -60,11 +60,12 @@ extern void telnet_rfc2217_ctl(tn_ctx_t * tcc, unsigned int val); /*RFC2217 control commands*/ #define TNS_CTL_NOFLOW 1 -#define TNS_CTL_XONOFF 2 +#define TNS_CTL_XONOFF_OUT 2 #define TNS_CTL_CTSRTS 3 #define TNS_CTL_DTR_ON 8 #define TNS_CTL_DTR_OFF 9 #define TNS_CTL_RTS_ON 11 #define TNS_CTL_RTS_OFF 12 +#define TNS_CTL_XONOFF_IN 15 #endif /*TELNET_H */ diff --git a/src/ttynvt.c b/src/ttynvt.c index 3e502cd..ef940a3 100644 --- a/src/ttynvt.c +++ b/src/ttynvt.c @@ -855,6 +855,14 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, tty->master_suspended = (tty->smcr & TIOCM_CTS) ? 0 : 1; telnet_rfc2217_ctl(tty->tn, TNS_CTL_CTSRTS); } + else if (tio->c_iflag & (IXON | IXOFF)) + { + tty->master_suspended = 0; + if (tio->c_iflag & IXON) + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_OUT); + if (tio->c_iflag & IXOFF) + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_IN); + } else { tty->master_suspended = 0;