From c52913dc87c7d46514a8c13ced2cb14334e63305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Zwierko?= Date: Thu, 22 Mar 2018 09:02:03 +0100 Subject: [PATCH] fix https://github.com/sshnet/SSH.NET/issues/407 + fixed whitespaces --- src/Renci.SshNet/ConnectionInfo.cs | 5 +++++ src/Renci.SshNet/Security/KeyExchange.cs | 9 ++++++++- src/Renci.SshNet/Session.cs | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Renci.SshNet/ConnectionInfo.cs b/src/Renci.SshNet/ConnectionInfo.cs index f9b872d3c..51cb30e9e 100644 --- a/src/Renci.SshNet/ConnectionInfo.cs +++ b/src/Renci.SshNet/ConnectionInfo.cs @@ -180,6 +180,11 @@ public class ConnectionInfo : IConnectionInfoInternal /// public int MaxSessions { get; set; } + /// + /// send client keys right after server version exchange, don't wait for server + /// + public bool EarlyClientInitMessage { get; set; } + /// /// Occurs when authentication banner is sent by the server. /// diff --git a/src/Renci.SshNet/Security/KeyExchange.cs b/src/Renci.SshNet/Security/KeyExchange.cs index 75e3517ac..1d0fa730a 100644 --- a/src/Renci.SshNet/Security/KeyExchange.cs +++ b/src/Renci.SshNet/Security/KeyExchange.cs @@ -71,7 +71,14 @@ public virtual void Start(Session session, KeyExchangeInitMessage message) { Session = session; - SendMessage(session.ClientInitMessage); + if (!Session.ConnectionInfo.EarlyClientInitMessage) + { + SendMessage(session.ClientInitMessage); + } + else + { + DiagnosticAbstraction.Log("KeyExchange: ClientInitMessage already sent, skip"); + } // Determine encryption algorithm var clientEncryptionAlgorithmName = (from b in session.ConnectionInfo.Encryptions.Keys diff --git a/src/Renci.SshNet/Session.cs b/src/Renci.SshNet/Session.cs index 33af76560..c50b7be42 100644 --- a/src/Renci.SshNet/Session.cs +++ b/src/Renci.SshNet/Session.cs @@ -651,6 +651,12 @@ public void Connect() // mark the message listener threads as started _messageListenerCompleted.Reset(); + if (ConnectionInfo.EarlyClientInitMessage) + { + DiagnosticAbstraction.Log("Sending early client init message"); + SendMessage(ClientInitMessage); + } + // Start incoming request listener ThreadAbstraction.ExecuteThread(MessageListener);