[
https://issues.apache.org/jira/browse/NET-89?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12668881#action_12668881
]
Martin Oberhuber commented on NET-89:
-------------------------------------
Can we schedule this for fixing in 1.5 and 2.1 by adding following API:
{code:title=TelnetClient.java|borderStyle=solid}
/**
* Enables or disables automatic conversion of input and output streams
* to or from NetASCII standard format (CRLF).
* By default, automatic conversion is ON. It should be disabled when direct
* (binary) access to the data streams is needed. The setting can only
* be made or changed before the TelnetClient is connected.
*
* @param b <code>false</code> to disable automatic conversion of streams to
NetASCII format.
*/
public void setNetASCIIConversion(boolean b);
{code}
> [net] TelnetClient broken for binary transmissions + solution
> -------------------------------------------------------------
>
> Key: NET-89
> URL: https://issues.apache.org/jira/browse/NET-89
> Project: Commons Net
> Issue Type: Bug
> Environment: Operating System: All
> Platform: All
> Reporter: Colin Surprenant
>
> TelnetClient does not handle correctly binary transmissions in two places:
> First in TelnetClient#_connectAction_() the telnet input and output streams
> are
> wrapped in the NetASCII streams to handle net vs platform line separator
> conversion which breaks the binary data. My quick solution was to simply
> remove
> those two wrapping streams. A more general solution might be to provide access
> to the unfilterer stream with methods like getUnfilteredInputStream and
> getUnfilteredOutputStream or to dynamically stop the NetASCII stream from
> 'corrupting' the stream when a TelnetOption.BINARY option is negotiated.
> Also, in TelnetInoutStream#__read() there is a bug in the __receiveState
> handling for the _STATE_IAC state. When a second consecutive IAC (0x255) is
> received to encode the single 0x255 character, read does not return 0x255 but
> instead move on to reading the next char in the stream.
> The current code reads:
> case _STATE_IAC:
> switch (ch)
> {
> case TelnetCommand.WILL:
> __receiveState = _STATE_WILL;
> continue;
> case TelnetCommand.WONT:
> __receiveState = _STATE_WONT;
> continue;
> case TelnetCommand.DO:
> __receiveState = _STATE_DO;
> continue;
> case TelnetCommand.DONT:
> __receiveState = _STATE_DONT;
> continue;
> /* TERMINAL-TYPE option (start)*/
> case TelnetCommand.SB:
> __suboption_count = 0;
> __receiveState = _STATE_SB;
> continue;
> /* TERMINAL-TYPE option (end)*/
> case TelnetCommand.IAC:
> __receiveState = _STATE_DATA;
> break;
> default:
> break;
> }
> __receiveState = _STATE_DATA;
> continue;
> case _STATE_WILL:
> but it should be:
> case _STATE_IAC:
> switch (ch)
> {
> case TelnetCommand.WILL:
> __receiveState = _STATE_WILL;
> continue;
> case TelnetCommand.WONT:
> __receiveState = _STATE_WONT;
> continue;
> case TelnetCommand.DO:
> __receiveState = _STATE_DO;
> continue;
> case TelnetCommand.DONT:
> __receiveState = _STATE_DONT;
> continue;
> /* TERMINAL-TYPE option (start)*/
> case TelnetCommand.SB:
> __suboption_count = 0;
> __receiveState = _STATE_SB;
> continue;
> /* TERMINAL-TYPE option (end)*/
> case TelnetCommand.IAC:
> __receiveState = _STATE_DATA;
> break; // exit to enclosing switch to return from read
> default:
> __receiveState = _STATE_DATA;
> continue; // move on the next char
> }
> break; // exit and return from read
> case _STATE_WILL:
> I'll provide patches for this.
> Colin.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.