From e51a98e4b270002c2bb0bcca4452e74b8ec9c8d2 Mon Sep 17 00:00:00 2001 From: Kim Woelders Date: Tue, 3 Sep 2019 18:36:54 +0200 Subject: [PATCH] Handle CRTSCTS properly --- src/ttynvt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ttynvt.c b/src/ttynvt.c index 532c85d..fce7bfc 100644 --- a/src/ttynvt.c +++ b/src/ttynvt.c @@ -400,7 +400,8 @@ static void _modem_status_cb(void *cctx, int status) if (status & TNS_STATE_CTS) mcr |= TIOCM_CTS; - tty->master_suspended = (mcr & TIOCM_CTS) ? 0 : 1; + if (tty->tio.c_cflag & CRTSCTS) + tty->master_suspended = (mcr & TIOCM_CTS) ? 0 : 1; DBG("%s: tty=%p mcr=%x MS=%d\n", __func__, tty, mcr, tty->master_suspended); @@ -799,9 +800,14 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, if (tio->c_cflag & CRTSCTS) { - tty->cmcr |= TIOCM_RTS; + tty->master_suspended = (tty->smcr & TIOCM_CTS) ? 0 : 1; telnet_rfc2217_ctl(tty->tn, TNS_CTL_CTSRTS); } + else + { + tty->master_suspended = 0; + telnet_rfc2217_ctl(tty->tn, TNS_CTL_NOFLOW); + } if (!(tty->cmcr & TIOCM_DTR) && _tio_baud(tio) != 0) {