From 0a76ac15c64d085a972a545118f0a0d1ad14efa7 Mon Sep 17 00:00:00 2001 From: SeppPenner Date: Thu, 11 Jun 2020 18:06:24 +0200 Subject: [PATCH 1/3] Added missing disconnect reason codes. --- .../MqttClientDisconnectReason.cs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectReason.cs b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectReason.cs index 3e1bb661..e1ea30d7 100644 --- a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectReason.cs +++ b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectReason.cs @@ -3,6 +3,34 @@ public enum MqttClientDisconnectReason { NormalDisconnection = 0, - + DisconnectWithWillMessage = 4, + UnspecifiedError = 128, + MalformedPacket = 129, + ProtocolError = 130, + ImplementationSpecificError = 131, + NotAuthorized = 135, + ServerBusy = 137, + ServerShuttingDown = 139, + BadAuthenticationMethod = 140, + KeepaliveTimeout = 141, + SessionTakenOver = 142, + TopicFilterInvalid = 143, + TopicNameInvalid = 144, + ReceiveMaximumExceeded = 147, + TopicAliasInvalid = 148, + PacketTooLarge = 149, + MessageRateTooHigh = 150, + QuotaExceeded = 151, + AdministrativeAction = 152, + PayloadFormatInvalid = 153, + RetainNotSupported = 154, + QosNotSupported = 155, + UseAnotherServer = 156, + ServerMoved = 157, + SharedSubscriptionsNotSupported = 158, + ConnectionRateExceeded = 159, + MaximumConnectTime = 160, + SubscriptionIdentifiersNotSupported = 161, + WildcardSubscriptionsNotSupported = 162 } } From df149eb0b321410b80cc34de7e62d33eb4d7ffb8 Mon Sep 17 00:00:00 2001 From: SeppPenner Date: Fri, 12 Jun 2020 20:21:23 +0200 Subject: [PATCH 2/3] Added reason code to MqttClientDisconnectedEventArgs and use it. --- .../Client/Disconnecting/MqttClientDisconnectedEventArgs.cs | 5 ++++- Source/MQTTnet/Client/MqttClient.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs index 7658e157..24b45345 100644 --- a/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs +++ b/Source/MQTTnet/Client/Disconnecting/MqttClientDisconnectedEventArgs.cs @@ -5,11 +5,12 @@ namespace MQTTnet.Client.Disconnecting { public class MqttClientDisconnectedEventArgs : EventArgs { - public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult) + public MqttClientDisconnectedEventArgs(bool clientWasConnected, Exception exception, MqttClientAuthenticateResult authenticateResult, MqttClientDisconnectReason reasonCode) { ClientWasConnected = clientWasConnected; Exception = exception; AuthenticateResult = authenticateResult; + ReasonCode = reasonCode; } public bool ClientWasConnected { get; } @@ -17,5 +18,7 @@ namespace MQTTnet.Client.Disconnecting public Exception Exception { get; } public MqttClientAuthenticateResult AuthenticateResult { get; } + + public MqttClientDisconnectReason ReasonCode { get; set; } = MqttClientDisconnectReason.NormalDisconnection; } } diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index da7d6e66..fc36eff3 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -309,6 +309,7 @@ namespace MQTTnet.Client async Task DisconnectInternalAsync(Task sender, Exception exception, MqttClientAuthenticateResult authenticateResult) { var clientWasConnected = IsConnected; + var reasonCode = MqttClientDisconnectReason.NormalDisconnection; TryInitiateDisconnect(); _isConnected = false; @@ -326,6 +327,7 @@ namespace MQTTnet.Client catch (Exception adapterException) { _logger.Warning(adapterException, "Error while disconnecting from adapter."); + reasonCode = MqttClientDisconnectReason.UnspecifiedError; } try @@ -341,6 +343,7 @@ namespace MQTTnet.Client catch (Exception e) { _logger.Warning(e, "Error while waiting for internal tasks."); + reasonCode = MqttClientDisconnectReason.ImplementationSpecificError; } finally { @@ -354,7 +357,7 @@ namespace MQTTnet.Client { // This handler must be executed in a new thread because otherwise a dead lock may happen // when trying to reconnect in that handler etc. - Task.Run(() => disconnectedHandler.HandleDisconnectedAsync(new MqttClientDisconnectedEventArgs(clientWasConnected, exception, authenticateResult))).Forget(_logger); + Task.Run(() => disconnectedHandler.HandleDisconnectedAsync(new MqttClientDisconnectedEventArgs(clientWasConnected, exception, authenticateResult, reasonCode))).Forget(_logger); } } } From 8f6d48be810cf5dc351f8d4afeed0308c47d867d Mon Sep 17 00:00:00 2001 From: SeppPenner Date: Thu, 18 Jun 2020 10:03:44 +0200 Subject: [PATCH 3/3] Adjusted ImplementationSpecificError to be UnspecifiedError reason code in the MqttClient. --- Source/MQTTnet/Client/MqttClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/MQTTnet/Client/MqttClient.cs b/Source/MQTTnet/Client/MqttClient.cs index fc36eff3..92978267 100644 --- a/Source/MQTTnet/Client/MqttClient.cs +++ b/Source/MQTTnet/Client/MqttClient.cs @@ -343,7 +343,7 @@ namespace MQTTnet.Client catch (Exception e) { _logger.Warning(e, "Error while waiting for internal tasks."); - reasonCode = MqttClientDisconnectReason.ImplementationSpecificError; + reasonCode = MqttClientDisconnectReason.UnspecifiedError; } finally {