From c7409c2ff4c89905878eafafa07dcb042a634c53 Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Tue, 23 Apr 2019 14:48:38 +0200 Subject: [PATCH] Fix missing endpoint in client status. --- .../Implementations/MqttTcpChannel.Uwp.cs | 32 +++++++++++-------- .../MQTTnet/Implementations/MqttTcpChannel.cs | 3 +- .../Implementations/MqttTcpServerListener.cs | 6 ++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Source/MQTTnet/Implementations/MqttTcpChannel.Uwp.cs b/Source/MQTTnet/Implementations/MqttTcpChannel.Uwp.cs index 509c3e85..1c0f944d 100644 --- a/Source/MQTTnet/Implementations/MqttTcpChannel.Uwp.cs +++ b/Source/MQTTnet/Implementations/MqttTcpChannel.Uwp.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; +using System.Security.Authentication; using System.Threading; using System.Threading.Tasks; using Windows.Networking; @@ -38,22 +39,13 @@ namespace MQTTnet.Implementations CreateStreams(); IsSecureConnection = socket.Information.ProtectionLevel >= SocketProtectionLevel.Tls12; + + Endpoint = _socket.Information.RemoteAddress + ":" + _socket.Information.RemotePort; } public static Func> CustomIgnorableServerCertificateErrorsResolver { get; set; } - public string Endpoint - { - get - { - if (_socket?.Information != null) - { - return _socket.Information.RemoteAddress + ":" + _socket.Information.RemotePort; - } - - return null; - } - } + public string Endpoint { get; private set; } public bool IsSecureConnection { get; } @@ -66,7 +58,7 @@ namespace MQTTnet.Implementations _socket.Control.KeepAlive = true; } - if (!_options.TlsOptions.UseTls) + if (_options.TlsOptions?.UseTls != true) { await _socket.ConnectAsync(new HostName(_options.Server), _options.GetPort().ToString()); } @@ -79,9 +71,21 @@ namespace MQTTnet.Implementations _socket.Control.IgnorableServerCertificateErrors.Add(ignorableChainValidationResult); } - await _socket.ConnectAsync(new HostName(_options.Server), _options.GetPort().ToString(), SocketProtectionLevel.Tls12); + var socketProtectionLevel = SocketProtectionLevel.Tls12; + if (_options.TlsOptions.SslProtocol == SslProtocols.Tls11) + { + socketProtectionLevel = SocketProtectionLevel.Tls11; + } + else if (_options.TlsOptions.SslProtocol == SslProtocols.Tls) + { + socketProtectionLevel = SocketProtectionLevel.Tls10; + } + + await _socket.ConnectAsync(new HostName(_options.Server), _options.GetPort().ToString(), socketProtectionLevel); } + Endpoint = _socket.Information.RemoteAddress + ":" + _socket.Information.RemotePort; + CreateStreams(); } diff --git a/Source/MQTTnet/Implementations/MqttTcpChannel.cs b/Source/MQTTnet/Implementations/MqttTcpChannel.cs index 138d2eb4..cd4e2900 100644 --- a/Source/MQTTnet/Implementations/MqttTcpChannel.cs +++ b/Source/MQTTnet/Implementations/MqttTcpChannel.cs @@ -28,11 +28,12 @@ namespace MQTTnet.Implementations IsSecureConnection = clientOptions.ChannelOptions?.TlsOptions?.UseTls == true; } - public MqttTcpChannel(Stream stream) + public MqttTcpChannel(Stream stream, string endpoint) { _stream = stream ?? throw new ArgumentNullException(nameof(stream)); IsSecureConnection = stream is SslStream; + Endpoint = endpoint; } public string Endpoint { get; private set; } diff --git a/Source/MQTTnet/Implementations/MqttTcpServerListener.cs b/Source/MQTTnet/Implementations/MqttTcpServerListener.cs index 51112e86..cc8246ac 100644 --- a/Source/MQTTnet/Implementations/MqttTcpServerListener.cs +++ b/Source/MQTTnet/Implementations/MqttTcpServerListener.cs @@ -97,11 +97,11 @@ namespace MQTTnet.Implementations private async Task TryHandleClientConnectionAsync(Socket clientSocket) { Stream stream = null; - EndPoint remoteEndPoint = null; + string remoteEndPoint = null; try { - remoteEndPoint = clientSocket.RemoteEndPoint; + remoteEndPoint = clientSocket.RemoteEndPoint.ToString(); _logger.Verbose("Client '{0}' accepted by TCP listener '{1}, {2}'.", remoteEndPoint, @@ -122,7 +122,7 @@ namespace MQTTnet.Implementations var clientHandler = ClientHandler; if (clientHandler != null) { - using (var clientAdapter = new MqttChannelAdapter(new MqttTcpChannel(stream), new MqttPacketFormatterAdapter(), _logger)) + using (var clientAdapter = new MqttChannelAdapter(new MqttTcpChannel(stream, remoteEndPoint), new MqttPacketFormatterAdapter(), _logger)) { await clientHandler(clientAdapter).ConfigureAwait(false); }