Fix telnet new environment option
authorKevin Lamonte <kevin.lamonte@gmail.com>
Sun, 13 Mar 2016 04:01:58 +0000 (23:01 -0500)
committerKevin Lamonte <kevin.lamonte@gmail.com>
Sun, 13 Mar 2016 04:01:58 +0000 (23:01 -0500)
src/jexer/demos/Demo2.java
src/jexer/net/TelnetInputStream.java
src/jexer/net/TelnetSocket.java

index e21d9444f775adba25dc7bc887ffbae93332a264..81a458d90057f822570f3e9eea750eb013a7f601 100644 (file)
@@ -57,6 +57,9 @@ public class Demo2 {
                 System.out.printf("New connection: %s\n", socket);
                 DemoApplication app = new DemoApplication(socket.getInputStream(),
                     socket.getOutputStream());
+                System.out.printf("   language: %s\n",
+                    ((jexer.net.TelnetInputStream) socket.getInputStream()).
+                        getLanguage());
                 (new Thread(app)).start();
             }
         } catch (Exception e) {
index c594d1a275aff7c91435c2b62fc3a58d522a521e..5541e64804b7384a5c8ba8d5d5e58b3beef026aa 100644 (file)
@@ -727,15 +727,23 @@ public final class TelnetInputStream extends InputStream
      * fails to handle ESC as defined in RFC 1572.
      */
     private void handleNewEnvironment() {
-        Map<StringBuilder, StringBuilder> newEnv =
-                new TreeMap<StringBuilder, StringBuilder>();
+        Map<String, String> newEnv = new TreeMap<String, String>();
 
         EnvState state = EnvState.INIT;
         StringBuilder name = new StringBuilder();
         StringBuilder value = new StringBuilder();
 
-        for (int i = 0; i < subnegBuffer.size(); i++) {
+        /*
+        System.err.printf("handleNewEnvironment() %d bytes\n",
+            subnegBuffer.size());
+         */
+
+        for (int i = 1; i < subnegBuffer.size(); i++) {
             Byte b = subnegBuffer.get(i);
+            /*
+            System.err.printf("   b: %c %d 0x%02x\n", (char)b.byteValue(),
+                b, b);
+             */
 
             switch (state) {
 
@@ -784,14 +792,22 @@ public final class TelnetInputStream extends InputStream
                     // VAR
                     state = EnvState.NAME;
                     if (value.length() > 0) {
-                        newEnv.put(name, value);
+                        /*
+                        System.err.printf("NAME: '%s' VALUE: '%s'\n",
+                            name, value);
+                         */
+                        newEnv.put(name.toString(), value.toString());
                     }
                     name = new StringBuilder();
                 } else if (b == 3) {
                     // USERVAR
                     state = EnvState.NAME;
                     if (value.length() > 0) {
-                        newEnv.put(name, value);
+                        /*
+                        System.err.printf("NAME: '%s' VALUE: '%s'\n",
+                            name, value);
+                         */
+                        newEnv.put(name.toString(), value.toString());
                     }
                     name = new StringBuilder();
                 } else {
@@ -807,18 +823,21 @@ public final class TelnetInputStream extends InputStream
         }
 
         if ((name.length() > 0) && (value.length() > 0)) {
-            newEnv.put(name, value);
+            /*
+            System.err.printf("NAME: '%s' VALUE: '%s'\n", name, value);
+             */
+            newEnv.put(name.toString(), value.toString());
         }
 
-        for (StringBuilder key: newEnv.keySet()) {
+        for (String key: newEnv.keySet()) {
             if (key.equals("LANG")) {
-                language = newEnv.get(key).toString();
+                language = newEnv.get(key);
             }
             if (key.equals("LOGNAME")) {
-                username = newEnv.get(key).toString();
+                username = newEnv.get(key);
             }
             if (key.equals("USER")) {
-                username = newEnv.get(key).toString();
+                username = newEnv.get(key);
             }
         }
     }
@@ -855,6 +874,10 @@ public final class TelnetInputStream extends InputStream
                         get(i).byteValue());
                 }
                 master.terminalType = terminalString.toString();
+                /*
+                System.err.printf("terminal type: '%s'\n",
+                    master.terminalType);
+                 */
             }
             break;
 
@@ -871,6 +894,10 @@ public final class TelnetInputStream extends InputStream
                     speedString.append((char)subnegBuffer.get(i).byteValue());
                 }
                 master.terminalSpeed = speedString.toString();
+                /*
+                System.err.printf("terminal speed: '%s'\n",
+                    master.terminalSpeed);
+                 */
             }
             break;
 
index c537858c267fb36b6b02eb6678cc3cfbf1c184b2..a1a35f72396aa526943d7c9a2f8381247d0214b9 100644 (file)
@@ -114,7 +114,7 @@ public final class TelnetSocket extends Socket {
      * If true, request the New Environment option to obtain the client
      * LOGNAME, USER, and LANG variables.
      */
-    boolean doEnvironment;
+    boolean doEnvironment = true;
 
     /**
      * The terminal type reported by the client.