TelnetD at SF

net.wimpi.telnetd.io
Class TelnetIO

java.lang.Object
  extended bynet.wimpi.telnetd.io.TelnetIO

public class TelnetIO
extends java.lang.Object

Class that represents the TelnetIO implementation. It contains an inner IACHandler class to handle the telnet protocol level communication.

Although supposed to work full-duplex, we only process the telnet protocol layer communication in case of reading requests from the higher levels. This is the only way to meet the one thread per connection requirement.

The output is done via byte-oriented streams, definately suitable for the telnet protocol. The format of the output is UTF-8 (Unicode), which is a standard and supported by any telnet client, including the ones included in Microsoft OS's.

Notes:

Version:
2.0 (13/03/2005)
Author:
Dieter Wimberger

Field Summary
protected static int AO
          Abort Output
protected static int AUTHENTICATION
           
protected static int AYT
          Are You There
protected static int BRK
          Break
protected static int DM
          Data mark its the data part of a SYNCH which helps to clean up the buffers between Telnet Server <-> Telnet Client.
protected static int DO
          Negotiation: Do option
protected static int DONT
          Negotiation: Dont do option
protected static int EC
          Erase Char
protected static int ECHO
          Telnet Option: ECHO
protected static int EL
          Erase Line
protected static int ENCRYPT
           
protected static int EXT_ASCII
          Unused
protected static int GA
          Go Ahead
Newer Telnets do not make use of this option that allows a specific communication mode.
protected static int IAC
          Interpret As Command
protected static int IP
          Interrupt Process
protected static int IS
          TTYPE subnegotiation: IS
protected static int LINEMODE
          Telnet Option: Linemode

The infamous line mode option.

protected static int LM_EDIT
           
protected static int LM_FORWARDMASK
           
protected static int LM_MODE
           
protected static int LM_MODEACK
           
protected static int LM_SLC
           
protected static int LM_SLC_ABORT
           
protected static int LM_SLC_ACK
           
protected static int LM_SLC_AO
           
protected static int LM_SLC_AYT
           
protected static int LM_SLC_BRK
           
protected static int LM_SLC_CANTCHANGE
           
protected static int LM_SLC_DEFAULT
           
protected static int LM_SLC_EOF
           
protected static int LM_SLC_EOR
           
protected static int LM_SLC_FLUSHIN
           
protected static int LM_SLC_FLUSHOUT
           
protected static int LM_SLC_IP
           
protected static int LM_SLC_LEVELBITS
           
protected static int LM_SLC_NOSUPPORT
           
protected static int LM_SLC_SUSP
           
protected static int LM_SLC_SYNCH
           
protected static int LM_SLC_VALUE
           
protected static int LM_TRAPSIG
           
protected static int LOGOUT
          Telnet Option: Logout
This allows nice goodbye to time-outed or unwanted clients.
protected static int NAWS
          Telnet Option: Negotiate About Window Size
Server request is IAC DO NAWS Client response contains subnegotiation with data (columns, rows).
protected static int NE_ESC
           
protected static int NE_IN_END
           
protected static int NE_IN_ERROR
           
protected static int NE_INFO
           
protected static int NE_USERVAR
           
protected static int NE_VALUE
           
protected static int NE_VAR
           
protected static int NE_VAR_DEFINED
           
protected static int NE_VAR_DEFINED_EMPTY
           
protected static int NE_VAR_NAME_MAXLENGTH
           
protected static int NE_VAR_OK
           
protected static int NE_VAR_UNDEFINED
           
protected static int NE_VAR_VALUE_MAXLENGTH
           
protected static int NEWENV
          Telnet Option: Environment
protected static int NOP
          No operation
protected static int SB
          Marks start of a subnegotiation.
protected static int SE
          Marks end of subnegotiation.
protected static int SEND
          TTYPE subnegotiation: SEND
protected static int SEND_LOC
           
protected static int SUPGA
          Telnet Option: SUPress Go Ahead
This will be negotiated, all new telnet protocol implementations are recommended to do this.
protected static int TTYPE
          Telnet Option: Terminal TYPE
Server request contains subnegotiation SEND Client response contains subnegotiation with data IS,terminal type string
protected static int WILL
          Negotiation: Will do option
protected static int WONT
          Negotiation: Wont do option
 
Constructor Summary
TelnetIO()
          Creates a TelnetIO object for the given connection.
 
Method Summary
 void closeInput()
          Method to close the underlying inputstream to free system resources.
 void closeOutput()
          Method to close the underlying output stream to free system resources.
 void flush()
          Method to flush all buffered output.
 void initIO()
           
 int read()
          Method to read a byte from the InputStream.
 void setConnection(Connection con)
           
 void setEcho(boolean b)
           
 void write(byte b)
          Method to output a byte.
 void write(byte[] sequence)
          Method to write an array of bytes.
 void write(char ch)
          Method to write a char.
 void write(int i)
          Method to output an int.
 void write(int[] sequence)
          Method to output an array of int' s.
 void write(java.lang.String str)
          Method to output a string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

IAC

protected static final int IAC
Interpret As Command

See Also:
Constant Field Values

GA

protected static final int GA
Go Ahead
Newer Telnets do not make use of this option that allows a specific communication mode.

See Also:
Constant Field Values

WILL

protected static final int WILL
Negotiation: Will do option

See Also:
Constant Field Values

WONT

protected static final int WONT
Negotiation: Wont do option

See Also:
Constant Field Values

DO

protected static final int DO
Negotiation: Do option

See Also:
Constant Field Values

DONT

protected static final int DONT
Negotiation: Dont do option

See Also:
Constant Field Values

SB

protected static final int SB
Marks start of a subnegotiation.

See Also:
Constant Field Values

SE

protected static final int SE
Marks end of subnegotiation.

See Also:
Constant Field Values

NOP

protected static final int NOP
No operation

See Also:
Constant Field Values

DM

protected static final int DM
Data mark its the data part of a SYNCH which helps to clean up the buffers between Telnet Server <-> Telnet Client.
It should work like this we send a TCP urgent package and <IAC> <DM> the receiver should get the urgent package (SYNCH) and just discard everything until he receives our <IAC> <DM>.
Remark:
  1. can we send a TCP urgent package?
  2. can we make use of the thing at all?

See Also:
Constant Field Values

BRK

protected static final int BRK
Break

See Also:
Constant Field Values

IP

protected static final int IP
Interrupt Process

See Also:
Constant Field Values

AO

protected static final int AO
Abort Output

See Also:
Constant Field Values

AYT

protected static final int AYT
Are You There

See Also:
Constant Field Values

EC

protected static final int EC
Erase Char

See Also:
Constant Field Values

EL

protected static final int EL
Erase Line

See Also:
Constant Field Values

ECHO

protected static final int ECHO
Telnet Option: ECHO

See Also:
Constant Field Values

SUPGA

protected static final int SUPGA
Telnet Option: SUPress Go Ahead
This will be negotiated, all new telnet protocol implementations are recommended to do this.

See Also:
Constant Field Values

NAWS

protected static final int NAWS
Telnet Option: Negotiate About Window Size

See Also:
Constant Field Values

TTYPE

protected static final int TTYPE
Telnet Option: Terminal TYPE

See Also:
Constant Field Values

IS

protected static final int IS
TTYPE subnegotiation: IS

See Also:
Constant Field Values

SEND

protected static final int SEND
TTYPE subnegotiation: SEND

See Also:
Constant Field Values

LOGOUT

protected static final int LOGOUT
Telnet Option: Logout
This allows nice goodbye to time-outed or unwanted clients.

See Also:
Constant Field Values

LINEMODE

protected static final int LINEMODE
Telnet Option: Linemode

The infamous line mode option.

See Also:
Constant Field Values

LM_MODE

protected static final int LM_MODE
See Also:
Constant Field Values

LM_EDIT

protected static final int LM_EDIT
See Also:
Constant Field Values

LM_TRAPSIG

protected static final int LM_TRAPSIG
See Also:
Constant Field Values

LM_MODEACK

protected static final int LM_MODEACK
See Also:
Constant Field Values

LM_FORWARDMASK

protected static final int LM_FORWARDMASK
See Also:
Constant Field Values

LM_SLC

protected static final int LM_SLC
See Also:
Constant Field Values

LM_SLC_NOSUPPORT

protected static final int LM_SLC_NOSUPPORT
See Also:
Constant Field Values

LM_SLC_DEFAULT

protected static final int LM_SLC_DEFAULT
See Also:
Constant Field Values

LM_SLC_VALUE

protected static final int LM_SLC_VALUE
See Also:
Constant Field Values

LM_SLC_CANTCHANGE

protected static final int LM_SLC_CANTCHANGE
See Also:
Constant Field Values

LM_SLC_LEVELBITS

protected static final int LM_SLC_LEVELBITS
See Also:
Constant Field Values

LM_SLC_ACK

protected static final int LM_SLC_ACK
See Also:
Constant Field Values

LM_SLC_FLUSHIN

protected static final int LM_SLC_FLUSHIN
See Also:
Constant Field Values

LM_SLC_FLUSHOUT

protected static final int LM_SLC_FLUSHOUT
See Also:
Constant Field Values

LM_SLC_SYNCH

protected static final int LM_SLC_SYNCH
See Also:
Constant Field Values

LM_SLC_BRK

protected static final int LM_SLC_BRK
See Also:
Constant Field Values

LM_SLC_IP

protected static final int LM_SLC_IP
See Also:
Constant Field Values

LM_SLC_AO

protected static final int LM_SLC_AO
See Also:
Constant Field Values

LM_SLC_AYT

protected static final int LM_SLC_AYT
See Also:
Constant Field Values

LM_SLC_EOR

protected static final int LM_SLC_EOR
See Also:
Constant Field Values

LM_SLC_ABORT

protected static final int LM_SLC_ABORT
See Also:
Constant Field Values

LM_SLC_EOF

protected static final int LM_SLC_EOF
See Also:
Constant Field Values

LM_SLC_SUSP

protected static final int LM_SLC_SUSP
See Also:
Constant Field Values

NEWENV

protected static final int NEWENV
Telnet Option: Environment

See Also:
Constant Field Values

NE_INFO

protected static final int NE_INFO
See Also:
Constant Field Values

NE_VAR

protected static final int NE_VAR
See Also:
Constant Field Values

NE_VALUE

protected static final int NE_VALUE
See Also:
Constant Field Values

NE_ESC

protected static final int NE_ESC
See Also:
Constant Field Values

NE_USERVAR

protected static final int NE_USERVAR
See Also:
Constant Field Values

NE_VAR_OK

protected static final int NE_VAR_OK
See Also:
Constant Field Values

NE_VAR_DEFINED

protected static final int NE_VAR_DEFINED
See Also:
Constant Field Values

NE_VAR_DEFINED_EMPTY

protected static final int NE_VAR_DEFINED_EMPTY
See Also:
Constant Field Values

NE_VAR_UNDEFINED

protected static final int NE_VAR_UNDEFINED
See Also:
Constant Field Values

NE_IN_ERROR

protected static final int NE_IN_ERROR
See Also:
Constant Field Values

NE_IN_END

protected static final int NE_IN_END
See Also:
Constant Field Values

NE_VAR_NAME_MAXLENGTH

protected static final int NE_VAR_NAME_MAXLENGTH
See Also:
Constant Field Values

NE_VAR_VALUE_MAXLENGTH

protected static final int NE_VAR_VALUE_MAXLENGTH
See Also:
Constant Field Values

EXT_ASCII

protected static final int EXT_ASCII
Unused

See Also:
Constant Field Values

SEND_LOC

protected static final int SEND_LOC
See Also:
Constant Field Values

AUTHENTICATION

protected static final int AUTHENTICATION
See Also:
Constant Field Values

ENCRYPT

protected static final int ENCRYPT
See Also:
Constant Field Values
Constructor Detail

TelnetIO

public TelnetIO()
Creates a TelnetIO object for the given connection.
Input- and OutputStreams are properly set and the primary telnet protocol initialization is carried out by the inner IACHandler class.

Method Detail

initIO

public void initIO()
            throws java.io.IOException
Throws:
java.io.IOException

setConnection

public void setConnection(Connection con)

write

public void write(byte b)
           throws java.io.IOException
Method to output a byte. Ensures that CR(\r) is never send alone,but CRLF(\r\n), which is a rule of the telnet protocol.

Parameters:
b - Byte to be written.
Throws:
java.io.IOException

write

public void write(int i)
           throws java.io.IOException
Method to output an int.

Parameters:
i - Integer to be written.
Throws:
java.io.IOException

write

public void write(byte[] sequence)
           throws java.io.IOException
Method to write an array of bytes.

Parameters:
sequence - byte[] to be written.
Throws:
java.io.IOException

write

public void write(int[] sequence)
           throws java.io.IOException
Method to output an array of int' s.

Parameters:
sequence - int [] to write
Throws:
java.io.IOException

write

public void write(char ch)
           throws java.io.IOException
Method to write a char.

Parameters:
ch - char to be written.
Throws:
java.io.IOException

write

public void write(java.lang.String str)
           throws java.io.IOException
Method to output a string.

Parameters:
str - String to be written.
Throws:
java.io.IOException

flush

public void flush()
           throws java.io.IOException
Method to flush all buffered output.

Throws:
java.io.IOException

closeOutput

public void closeOutput()
Method to close the underlying output stream to free system resources.
Most likely only to be called by the ConnectionManager upon clean up of connections that ended or died.


read

public int read()
         throws java.io.IOException
Method to read a byte from the InputStream. Invokes the IACHandler upon IAC (Byte=255).

Returns:
int read from stream.
Throws:
java.io.IOException

closeInput

public void closeInput()
Method to close the underlying inputstream to free system resources.
Most likely only to be called by the ConnectionManager upon clean up of connections that ended or died.


setEcho

public void setEcho(boolean b)

TelnetD at SF

Copyright 2000-2005 Dieter Wimberger.