You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Sebb (JIRA)" <ji...@apache.org> on 2011/03/03 03:46:37 UTC
[jira] Commented: (NET-173) Duplicate IAC when sending a IAC using
TelnetClient.getOutputStream()
[ https://issues.apache.org/jira/browse/NET-173?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13001836#comment-13001836 ]
Sebb commented on NET-173:
--------------------------
Note that TelnetClient#sendSubNegotiation(int []) can be used to send an IAC SB n n n IAC SE sequence, but currently there is no way to send other IAC commands.
> Duplicate IAC when sending a IAC using TelnetClient.getOutputStream()
> ---------------------------------------------------------------------
>
> Key: NET-173
> URL: https://issues.apache.org/jira/browse/NET-173
> Project: Commons Net
> Issue Type: Bug
> Affects Versions: 1.4
> Environment: Linux
> Reporter: Scott Burch
> Priority: Blocker
>
> 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 }
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira