public final class TransportImpl extends java.lang.Object implements Transport
Transport
implementation.Constructor and Description |
---|
TransportImpl(Config config) |
TransportImpl(Config config,
SSHClient sshClient)
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
void |
addAlgorithmsVerifier(AlgorithmsVerifier verifier)
Adds the specified verifier.
|
void |
addHostKeyVerifier(HostKeyVerifier hkv)
Adds the specified verifier.
|
void |
die(java.lang.Exception ex)
Kill the transport in an exceptional way.
|
void |
disconnect()
Send a disconnection packet with reason as
DisconnectReason.BY_APPLICATION , and closes this transport. |
void |
disconnect(DisconnectReason reason)
Send a disconnect packet with the given
reason , and closes this transport. |
void |
disconnect(DisconnectReason reason,
java.lang.String message)
Send a disconnect packet with the given
reason and message , and closes this
transport. |
void |
doKex()
Do key exchange and algorithm negotiation.
|
java.lang.String |
getClientVersion() |
Config |
getConfig() |
DisconnectListener |
getDisconnectListener() |
int |
getHeartbeatInterval()
Deprecated.
|
java.lang.String |
getRemoteHost() |
int |
getRemotePort() |
java.lang.String |
getServerVersion()
Returns the version string as sent by the SSH server for identification purposes, e.g.
|
Service |
getService() |
byte[] |
getSessionID() |
int |
getTimeoutMs() |
void |
handle(Message msg,
SSHPacket buf)
This is where all incoming packets are handled.
|
void |
init(java.lang.String remoteHost,
int remotePort,
java.io.InputStream in,
java.io.OutputStream out)
Sets the host information and the streams to be used by this transport.
|
boolean |
isAuthenticated() |
boolean |
isKexDone() |
boolean |
isRunning() |
void |
join()
Joins the thread calling this method to the transport's death.
|
void |
join(int timeout,
java.util.concurrent.TimeUnit unit)
Joins the thread calling this method to the transport's death.
|
void |
reqService(Service service)
Request a SSH service represented by a
Service instance. |
long |
sendUnimplemented()
Sends SSH_MSG_UNIMPLEMENTED in response to the last packet received.
|
void |
setAuthenticated()
Informs this transport that authentication has been completed.
|
void |
setDisconnectListener(DisconnectListener listener)
Specify a
listener that will be notified upon disconnection. |
void |
setHeartbeatInterval(int interval)
Deprecated.
|
void |
setService(Service service)
Sets the currently active
Service . |
void |
setTimeoutMs(int timeoutMs)
Set a timeout for methods that may block.
|
long |
write(SSHPacket payload)
Write a packet over this transport.
|
public TransportImpl(Config config)
public void init(java.lang.String remoteHost, int remotePort, java.io.InputStream in, java.io.OutputStream out) throws TransportException
Transport
TransportException
is thrown in case of SSH protocol version incompatibility.init
in interface Transport
remoteHost
- server's hostnameremotePort
- server's portin
- input stream for the connectionout
- output stream for the connectionTransportException
- if there is an error during exchange of identification informationpublic void addHostKeyVerifier(HostKeyVerifier hkv)
Transport
addHostKeyVerifier
in interface Transport
hkv
- the host key verifierpublic void addAlgorithmsVerifier(AlgorithmsVerifier verifier)
Transport
addAlgorithmsVerifier
in interface Transport
verifier
- The verifier to call with negotiated algorithmspublic void doKex() throws TransportException
Transport
doKex
in interface Transport
TransportException
- if there was an error during key exchangepublic boolean isKexDone()
public int getTimeoutMs()
getTimeoutMs
in interface Transport
public void setTimeoutMs(int timeoutMs)
Transport
setTimeoutMs
in interface Transport
timeoutMs
- the timeout in milliseconds@Deprecated public int getHeartbeatInterval()
getHeartbeatInterval
in interface Transport
@Deprecated public void setHeartbeatInterval(int interval)
setHeartbeatInterval
in interface Transport
interval
- the interval in seconds, 0
means no hearbeatpublic java.lang.String getRemoteHost()
getRemoteHost
in interface Transport
public int getRemotePort()
getRemotePort
in interface Transport
public java.lang.String getClientVersion()
getClientVersion
in interface Transport
public Config getConfig()
public java.lang.String getServerVersion()
Transport
Transport.init(java.lang.String, int, java.io.InputStream, java.io.OutputStream)
, it will be null
.getServerVersion
in interface Transport
null
)public byte[] getSessionID()
getSessionID
in interface Transport
public Service getService()
getService
in interface Transport
Service
instance.public void setService(Service service)
Transport
Service
. Handling of non-transport-layer packets is delegated
to that service.
For this method to be successful, at least one service request via Transport.reqService(net.schmizz.sshj.Service)
must have been successful
(not necessarily for the service being set).setService
in interface Transport
service
- (null-ok) the Service
public void reqService(Service service) throws TransportException
Transport
Service
instance. A separate call to Transport.setService(net.schmizz.sshj.Service)
is not
needed.reqService
in interface Transport
service
- the SSH service to be requestedTransportException
- if the request failed for any reasonpublic void setAuthenticated()
Transport
setAuthenticated
in interface Transport
public boolean isAuthenticated()
isAuthenticated
in interface Transport
public long sendUnimplemented() throws TransportException
Transport
sendUnimplemented
in interface Transport
TransportException
- if an error occured sending the packetpublic void join() throws TransportException
Transport
join
in interface Transport
TransportException
- if the transport dies of an exceptionpublic void join(int timeout, java.util.concurrent.TimeUnit unit) throws TransportException
Transport
join
in interface Transport
TransportException
- if the transport dies of an exceptionpublic boolean isRunning()
isRunning
in interface Transport
Transport.init(java.lang.String, int, java.io.InputStream, java.io.OutputStream)
and
has not been disconnected.public void disconnect()
Transport
DisconnectReason.BY_APPLICATION
, and closes this transport.disconnect
in interface Transport
public void disconnect(DisconnectReason reason)
Transport
reason
, and closes this transport.disconnect
in interface Transport
reason
- reason for disconnectingpublic void disconnect(DisconnectReason reason, java.lang.String message)
Transport
reason
and message
, and closes this
transport.disconnect
in interface Transport
reason
- the reason code for this disconnectmessage
- the text messagepublic void setDisconnectListener(DisconnectListener listener)
Transport
listener
that will be notified upon disconnection.setDisconnectListener
in interface Transport
public DisconnectListener getDisconnectListener()
getDisconnectListener
in interface Transport
public long write(SSHPacket payload) throws TransportException
Transport
payload
SSHPacket
should have 5 bytes free at the beginning to avoid a performance penalty
associated with making space for header bytes (packet length, padding length).write
in interface Transport
payload
- the SSHPacket
containing data to sendTransportException
- if an error occurred sending the packetpublic void handle(Message msg, SSHPacket buf) throws SSHException
SSHPacketHandler.handle(net.schmizz.sshj.common.Message, net.schmizz.sshj.common.SSHPacket)
.
Even among the transport layer specific packets, key exchange packets are delegated to KeyExchanger.handle(net.schmizz.sshj.common.Message, net.schmizz.sshj.common.SSHPacket)
.
This method is called in the context of the reader
thread via Decoder.received(byte[], int)
when a full
packet has been decoded.handle
in interface SSHPacketHandler
msg
- the message identiferbuf
- buffer containg rest of the packetSSHException
- if an error occurs during handling (unrecoverable)