From 9cff4951838e915c48f1b0d2d1ac70e723ccdd8f 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 | 16 ++++++++++++++++ 2 files changed, 18 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..3cad949 100644 --- a/src/ttynvt.c +++ b/src/ttynvt.c @@ -855,6 +855,22 @@ 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) && (tio->c_iflag & IXOFF)) + { + tty->master_suspended = 0; + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_OUT); + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_IN); + } + else if (tio->c_iflag & IXON) + { + tty->master_suspended = 0; + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_OUT); + } + else if (tio->c_iflag & IXOFF) + { + tty->master_suspended = 0; + telnet_rfc2217_ctl(tty->tn, TNS_CTL_XONOFF_IN); + } else { tty->master_suspended = 0;