diff options
-rw-r--r-- | networking/telnet.c | 22 | ||||
-rw-r--r-- | networking/telnetd.c | 1 |
2 files changed, 6 insertions, 17 deletions
diff --git a/networking/telnet.c b/networking/telnet.c index e8e51dce4..7081a6a41 100644 --- a/networking/telnet.c +++ b/networking/telnet.c | |||
@@ -186,22 +186,6 @@ static void con_escape(void) | |||
186 | 186 | ||
187 | static void handle_net_output(int len) | 187 | static void handle_net_output(int len) |
188 | { | 188 | { |
189 | /* here we could do smart tricks how to handle 0xFF:s in output | ||
190 | * stream like writing twice every sequence of FF:s (thus doing | ||
191 | * many write()s. But I think interactive telnet application does | ||
192 | * not need to be 100% 8-bit clean, so changing every 0xff:s to | ||
193 | * 0x7f:s | ||
194 | * | ||
195 | * 2002-mar-21, Przemyslaw Czerpak (druzus@polbox.com) | ||
196 | * I don't agree. | ||
197 | * first - I cannot use programs like sz/rz | ||
198 | * second - the 0x0D is sent as one character and if the next | ||
199 | * char is 0x0A then it's eaten by a server side. | ||
200 | * third - why do you have to make 'many write()s'? | ||
201 | * I don't understand. | ||
202 | * So I implemented it. It's really useful for me. I hope that | ||
203 | * other people will find it interesting too. | ||
204 | */ | ||
205 | byte outbuf[2 * DATABUFSIZE]; | 189 | byte outbuf[2 * DATABUFSIZE]; |
206 | byte *p = (byte*)G.buf; | 190 | byte *p = (byte*)G.buf; |
207 | int j = 0; | 191 | int j = 0; |
@@ -216,7 +200,11 @@ static void handle_net_output(int len) | |||
216 | if (c == IAC) | 200 | if (c == IAC) |
217 | outbuf[j++] = c; /* IAC -> IAC IAC */ | 201 | outbuf[j++] = c; /* IAC -> IAC IAC */ |
218 | else if (c == '\r') | 202 | else if (c == '\r') |
219 | outbuf[j++] = '\0'; /* CR -> CR NUL */ | 203 | /* See RFC 1123 3.3.1 Telnet End-of-Line Convention. |
204 | * Using CR LF instead of other allowed possibilities | ||
205 | * like CR NUL - easier to talk to HTTP/SMTP servers. | ||
206 | */ | ||
207 | outbuf[j++] = '\n'; /* CR -> CR LF */ | ||
220 | } | 208 | } |
221 | if (j > 0) | 209 | if (j > 0) |
222 | full_write(netfd, outbuf, j); | 210 | full_write(netfd, outbuf, j); |
diff --git a/networking/telnetd.c b/networking/telnetd.c index 33020f1b4..9e7a84cce 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c | |||
@@ -125,6 +125,7 @@ remove_iacs(struct tsession *ts, int *pnum_totty) | |||
125 | /* We map \r\n ==> \r for pragmatic reasons. | 125 | /* We map \r\n ==> \r for pragmatic reasons. |
126 | * Many client implementations send \r\n when | 126 | * Many client implementations send \r\n when |
127 | * the user hits the CarriageReturn key. | 127 | * the user hits the CarriageReturn key. |
128 | * See RFC 1123 3.3.1 Telnet End-of-Line Convention. | ||
128 | */ | 129 | */ |
129 | if (c == '\r' && ptr < end && (*ptr == '\n' || *ptr == '\0')) | 130 | if (c == '\r' && ptr < end && (*ptr == '\n' || *ptr == '\0')) |
130 | ptr++; | 131 | ptr++; |