A friendly ping for an old patch.
On Mon, 8 Jul 2019 at 09:37, Martin Lewis <[email protected]> wrote: > > Closes https://bugs.busybox.net/show_bug.cgi?id=11976 > > Adds a new flag in telnet client's command line, which > forces telnet to send IAC's instead of the > traditional special characters (backspace, newline etc..). > > This code is similar to putty's code, and is added > for compatibility with older telnet servers. > > Currently only backspace is supported, > I will add support for other characters soon. > > Signed-off-by: Martin Lewis <[email protected]> > --- > networking/telnet.c | 40 ++++++++++++++++++++++++++++++++++------ > 1 file changed, 34 insertions(+), 6 deletions(-) > > diff --git a/networking/telnet.c b/networking/telnet.c > index fa16287..b6bebdc 100644 > --- a/networking/telnet.c > +++ b/networking/telnet.c > @@ -120,6 +120,7 @@ struct globals { > byte charmode; > byte telflags; > byte do_termios; > + byte keyboard_special_cmds; > #if ENABLE_FEATURE_TELNET_TTYPE > char *ttype; > #endif > @@ -175,6 +176,7 @@ static void con_escape(void) > full_write1_str("\r\nConsole escape. Commands are:\r\n\n" > " l go to line mode\r\n" > " c go to character mode\r\n" > + " k toggle keyboard sends telnet special > commands\r\n" > " z suspend telnet\r\n" > " e exit telnet\r\n"); > > @@ -194,6 +196,9 @@ static void con_escape(void) > goto ret; > } > break; > + case 'k': > + G.keyboard_special_cmds = !G.keyboard_special_cmds; > + break; > case 'z': > cookmode(); > kill(0, SIGTSTP); > @@ -220,15 +225,16 @@ static void handle_net_output(int len) > > while (src < end) { > byte c = *src++; > - if (c == 0x1d) { > + switch (c) { > + case 0x1d: > con_escape(); > return; > - } > - *dst = c; > - if (c == IAC) > + case IAC: > + *dst = c; > *++dst = c; /* IAC -> IAC IAC */ > - else > - if (c == '\r' || c == '\n') { > + break; > + case '\r': > + case '\n': > /* Enter key sends '\r' in raw mode and '\n' in > cooked one. > * > * See RFC 1123 3.3.1 Telnet End-of-Line Convention. > @@ -237,6 +243,28 @@ static void handle_net_output(int len) > */ > *dst = '\r'; /* Enter -> CR LF */ > *++dst = '\n'; > + break; > + > + case 0x08: /* ctrl+h */ > + case 0x7f: /* backspace */ > + if (G.keyboard_special_cmds) { > + *dst = IAC; > + *++dst = EC; > + break; > + } > + /* fall through */ > + > + case 0x03: /* ctrl+c */ > + if (G.keyboard_special_cmds) { > + *dst = IAC; > + *++dst = IP; > + break; > + } > + /* fall through */ > + > + default: > + *dst = c; > + break; > } > dst++; > } > -- > 1.9.1 > _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
