Add Transport.isKeyExchangeRequired() to avoid unnecessary KEXINIT #811
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request addresses SSH_MSG_UNIMPLEMENTED errors during key exchange described in issue #810.
Changes include adding
isKeyExchangeRequired()
to theTransport
interface, with an implementation inTransportImpl
that checks the status of Key Exchange completion and processing.Checking
KeyExchanger.isKexDone()
indicates that at least one key exchange has not been completed, and checkingKeyExchanger.isKexOngoing()
indicates that a key exchange is not in progress. CheckingTransport.isKeyExchangeRequired()
inSSHClient.onConnect()
avoids sending an additionalSSH_MSG_KEXINIT
packet when a key exchange is already in progress or completed.Additional changes include adding a started timestamp when setting a thread name in
ThreadNameProvider
. The started timestamp makes it easier to distinguished between threads for multiple connections to the same remote host and port.