Package org.jline.builtins.telnet
Class TelnetIO
- java.lang.Object
-
- org.jline.builtins.telnet.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:- The underlying output is buffered, to ensure that all bytes written are send, the flush() method has to be called.
- This low-level routines ensure nice multithreading behaviour on I/O. Neither large outputs, nor input sequences excuted by the connection thread can hog the system.
- Version:
- 2.0 (16/07/2006)
- Author:
- Dieter Wimberger
-
-
Field Summary
Fields Modifier and Type Field Description protected static int
AO
Abort Outputprotected static int
AUTHENTICATION
protected static int
AYT
Are You Thereprotected static int
BRK
Breakprotected 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 optionprotected static int
DONT
Negotiation: Dont do optionprotected static int
EC
Erase Charprotected static int
ECHO
Telnet Option: ECHOprotected static int
EL
Erase Lineprotected static int
ENCRYPT
protected static int
EXT_ASCII
Unusedprotected 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 Commandprotected static int
IP
Interrupt Processprotected static int
IS
TTYPE subnegotiation: ISprotected static int
LINEMODE
Telnet Option: Linemodeprotected static int
LM_EDIT
protected static int
LM_FORWARDMASK
protected static int
LM_MODE
protected static int
LM_MODEACK
Following methods implement init/request/answer procedures for telnet protocol level communication.protected static int
LM_SLC
protected static int
LM_SLC_ABORT
The following implement the NVT (network virtual terminal) which offers the concept of a simple "printer".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
The following options are options for which we also support subnegotiation based upon the telnet protocol specification.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
The following are constants for supported options, which can be negotiated based upon the telnet protocol specification.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: Environmentprotected static int
NOP
No operationprotected static int
SB
Marks start of a subnegotiation.protected static int
SE
Marks end of subnegotiation.protected static int
SEND
TTYPE subnegotiation: SENDprotected 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 stringprotected static int
WILL
Negotiation: Will do optionprotected static int
WONT
Negotiation: Wont do option
-
Constructor Summary
Constructors Constructor Description 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 Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.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.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.
-
-
-
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:- can we send a TCP urgent package?
- 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
- Server request is IAC DO NAWS
- Client response contains subnegotiation with data (columns, rows).
- See Also:
- Constant Field Values
-
TTYPE
protected static final int TTYPE
Telnet Option: Terminal TYPE
- Server request contains subnegotiation SEND
- Client response contains subnegotiation with data IS,terminal type string
- 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: LinemodeThe 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
Following methods implement init/request/answer procedures for telnet protocol level communication.- 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
The following implement the NVT (network virtual terminal) which offers the concept of a simple "printer". They are the basical meanings of control possibilities on a standard telnet implementation.- 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
The following are constants for supported options, which can be negotiated based upon the telnet protocol specification.- 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
The following options are options for which we also support subnegotiation based upon the telnet protocol specification.- 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
-
-
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
- if an error occurs
-
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
- if an error occurs
-
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
- if an error occurs
-
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
- if an error occurs
-
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
- if an error occurs
-
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
- if an error occurs
-
flush
public void flush() throws java.io.IOException
Method to flush all buffered output.- Throws:
java.io.IOException
- if an error occurs
-
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
- if an error occurs
-
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)
-
-