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