TelnetOutputStream.java appears to have a bug that if we send a IAC to the stream returned by TelnetClient.getOutputStream() we get duplicate IAC commands to the telnet server.
I looked through the code and I think I have found the reason.
Line 82-85 appears to just send two IAC commands.
82 case TelnetCommand.IAC:
83 __client._sendByte(TelnetCommand.IAC);
84 __client._sendByte(TelnetCommand.IAC);
85 break;
Line 91-95 appears to send the original character (which is a IAC) and a IAC thus producing two IACs in the stream.
91 else if (ch == TelnetCommand.IAC)
92 {
93 __client._sendByte(ch);
94 __client._sendByte(TelnetCommand.IAC);
95 }
TelnetOutputStream.java appears to have a bug that if we send a IAC to the stream returned by TelnetClient.getOutputStream() we get duplicate IAC commands to the telnet server.
I looked through the code and I think I have found the reason.
Line 82-85 appears to just send two IAC commands.
82 case TelnetCommand.IAC:
83 __client._sendByte(TelnetCommand.IAC);
84 __client._sendByte(TelnetCommand.IAC);
85 break;
Line 91-95 appears to send the original character (which is a IAC) and a IAC thus producing two IACs in the stream.
91 else if (ch == TelnetCommand.IAC)
92 {
93 __client._sendByte(ch);
94 __client._sendByte(TelnetCommand.IAC);
95 }
50 public void write(int ch) throws IOException
51 {
52
53 synchronized (__client)
54 {
55 ch &= 0xff;
56
57 if (__client._requestedWont(TelnetOption.BINARY))
58 {
59 if (__lastWasCR)
60 {
61 if (__convertCRtoCRLF)this
62 {
63 __client._sendByte('\n');
64 if (ch == '\n')
65 {
66 __lastWasCR = false;
67 return ;
68 }
69 }
70 else if (ch != '\n')
71 __client._sendByte('\0');
72 }
73
74 __lastWasCR = false;
75
76 switch (ch)
77 {
78 case '\r':
79 __client._sendByte('\r');
80 __lastWasCR = true;
81 break;
82 case TelnetCommand.IAC:
83 __client._sendByte(TelnetCommand.IAC);
84 __client._sendByte(TelnetCommand.IAC);
85 break;
86 default:
87 __client._sendByte(ch);
88 break;
89 }
90 }
91 else if (ch == TelnetCommand.IAC)
92 {93 __client._sendByte(ch);94 __client._sendByte(TelnetCommand.IAC);95 } }
96 else
97 __client._sendByte(ch);
98 }
99 }