Patch from Jim McQuillan to pass the terminal type to the remote host.
diff --git a/telnet.c b/telnet.c
index edcc508..207732b 100644
--- a/telnet.c
+++ b/telnet.c
@@ -27,6 +27,8 @@
* initial revision
* Modified 2000/06/13 for inclusion into BusyBox by Erik Andersen
* <andersen@lineo.com>
+ * Modified 2001/05/07 to add ability to pass TTYPE to remote host by Jim McQuillan
+ * <jam@ltsp.org>
*
*/
@@ -136,6 +138,10 @@
/* Some globals */
static int one = 1;
+#ifdef BB_FEATURE_TELNET_TTYPE
+static char *ttype;
+#endif
+
static void doexit(int ev)
{
cookmode();
@@ -321,6 +327,27 @@
}
#endif
+#ifdef BB_FEATURE_TELNET_TTYPE
+static void putiac_subopt(byte c, char *str)
+{
+ int len = strlen(str) + 6; // ( 2 + 1 + 1 + strlen + 2 )
+
+ if (G.iaclen + len > IACBUFSIZE)
+ iacflush();
+
+ putiac(IAC);
+ putiac(SB);
+ putiac(c);
+ putiac(0);
+
+ while(*str)
+ putiac(*str++);
+
+ putiac(IAC);
+ putiac(SE);
+}
+#endif
+
/* void putiacstring (subneg strings) */
/* ******************************* */
@@ -427,12 +454,29 @@
return;
}
+#ifdef BB_FEATURE_TELNET_TTYPE
+static inline void to_ttype()
+{
+ /* Tell server we will (or won't) do TTYPE */
+
+ if(ttype)
+ putiac2(WILL, TELOPT_TTYPE);
+ else
+ putiac2(WONT, TELOPT_TTYPE);
+
+ return;
+}
+#endif
+
static void telopt(byte c)
{
switch (c)
{
case TELOPT_ECHO: to_echo(c); break;
case TELOPT_SGA: to_sga(c); break;
+#ifdef BB_FEATURE_TELNET_TTYPE
+ case TELOPT_TTYPE: to_ttype(c); break;
+#endif
default: to_notsup(c); break;
}
}
@@ -440,7 +484,7 @@
/* ******************************* */
-/* subnegotiation -- ignore all */
+/* subnegotiation -- ignore all (except TTYPE) */
static int subneg(byte c)
{
@@ -449,6 +493,11 @@
case TS_SUB1:
if (c == IAC)
G.telstate = TS_SUB2;
+#ifdef BB_FEATURE_TELNET_TTYPE
+ else
+ if (c == TELOPT_TTYPE)
+ putiac_subopt(TELOPT_TTYPE,ttype);
+#endif
break;
case TS_SUB2:
if (c == SE)
@@ -488,6 +537,9 @@
int maxfd;
#endif
+#ifdef BB_FEATURE_TELNET_TTYPE
+ ttype = getenv("TERM");
+#endif
memset(&G, 0, sizeof G);