Skip to content

Commit

Permalink
feat: upgrade to MQTTnet 4.3.1.873
Browse files Browse the repository at this point in the history
  • Loading branch information
BEagle1984 committed Sep 28, 2023
1 parent 7eb02e5 commit f2a3821
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 48 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup Label="Package information">
<BaseVersionSuffix>-beta.6</BaseVersionSuffix>
<BaseVersionSuffix>-beta.7</BaseVersionSuffix>
<BaseVersion>4.4.0$(BaseVersionSuffix)</BaseVersion>
<DatabasePackagesRevision>1</DatabasePackagesRevision>
<DatabasePackagesVersionSuffix>$(BaseVersionSuffix)</DatabasePackagesVersionSuffix>
Expand Down
4 changes: 2 additions & 2 deletions docs/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ uid: releases

# Releases

## [4.4.0-beta.6](https://github.com/BEagle1984/silverback/releases/tag/v4.4.0)
## [4.4.0-beta.7](https://github.com/BEagle1984/silverback/releases/tag/v4.4.0)

### What's new

* Allow parallel processing of MQTT messages
* Upgrade to [MQTTnet 4.2.1.781](https://github.com/chkr1011/MQTTnet/releases/tag/v4.2.1.781)
* Upgrade to [MQTTnet 4.3.1.873](https://github.com/chkr1011/MQTTnet/releases/tag/v4.3.1.873)
* Upgrade to [Confluent.Kafka 2.2.0](https://github.com/confluentinc/confluent-kafka-dotnet/releases/tag/v2.2.0)

### Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@

using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using MQTTnet.Client;
using Silverback.Util;

namespace Silverback.Messaging.Configuration.Mqtt.Comparers
{
internal sealed class MqttClientTlsOptionsEqualityComparer : IEqualityComparer<MqttClientTlsOptions>
{
private static readonly CollectionEqualityComparer<X509Certificate> CertificatesComparer = new();

public static MqttClientTlsOptionsEqualityComparer Instance { get; } = new();

public bool Equals(MqttClientTlsOptions? x, MqttClientTlsOptions? y)
Expand All @@ -26,20 +22,31 @@ public bool Equals(MqttClientTlsOptions? x, MqttClientTlsOptions? y)
if (x.GetType() != y.GetType())
return false;

return x.UseTls == y.UseTls &&
x.IgnoreCertificateRevocationErrors == y.IgnoreCertificateRevocationErrors &&
x.IgnoreCertificateChainErrors == y.IgnoreCertificateChainErrors &&
x.AllowUntrustedCertificates == y.AllowUntrustedCertificates &&
CertificatesComparer.Equals(x.Certificates, y.Certificates) &&
x.SslProtocol == y.SslProtocol;
bool result = x.CertificateValidationHandler == y.CertificateValidationHandler &&
x.UseTls == y.UseTls &&
x.IgnoreCertificateRevocationErrors == y.IgnoreCertificateRevocationErrors &&
x.IgnoreCertificateChainErrors == y.IgnoreCertificateChainErrors &&
x.AllowUntrustedCertificates == y.AllowUntrustedCertificates &&
x.RevocationMode == y.RevocationMode &&
x.ClientCertificatesProvider == y.ClientCertificatesProvider &&
x.SslProtocol == y.SslProtocol;

#if NETCOREAPP3_1_OR_GREATER
result = result && x.ApplicationProtocols.SequenceEqual(y.ApplicationProtocols) &&
x.CipherSuitesPolicy == y.CipherSuitesPolicy &&
x.EncryptionPolicy == y.EncryptionPolicy &&
x.AllowRenegotiation == y.AllowRenegotiation;
#endif

return result;
}

public int GetHashCode(MqttClientTlsOptions obj) => HashCode.Combine(
obj.UseTls,
obj.IgnoreCertificateRevocationErrors,
obj.IgnoreCertificateChainErrors,
obj.AllowUntrustedCertificates,
obj.Certificates,
obj.RevocationMode,
(int)obj.SslProtocol);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public interface IMqttClientConfigBuilder
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use ConnectViaTcp or ConnectViaWebsocket.")]
IMqttClientConfigBuilder ConnectTo(Uri uri);

/// <summary>
Expand All @@ -75,6 +76,7 @@ public interface IMqttClientConfigBuilder
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use ConnectViaTcp or ConnectViaWebsocket.")]
IMqttClientConfigBuilder ConnectTo(string uri);

/// <summary>
Expand Down Expand Up @@ -219,6 +221,7 @@ IMqttClientConfigBuilder UseExtendedAuthenticationExchangeHandler<THandler>()
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Configure proxy in ConnectViaWebSocket(...).")]
IMqttClientConfigBuilder UseProxy(
string address,
string? username = null,
Expand All @@ -237,6 +240,7 @@ IMqttClientConfigBuilder UseProxy(
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Configure proxy in ConnectViaWebSocket(...).")]
IMqttClientConfigBuilder UseProxy(Action<MqttClientWebSocketProxyOptions> optionsAction);

/// <summary>
Expand Down Expand Up @@ -363,6 +367,7 @@ IMqttClientConfigBuilder UseProxy(
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use the overload with the new builder or model as parameter.")]
IMqttClientConfigBuilder EnableTls(MqttClientOptionsBuilderTlsParameters parameters);

/// <summary>
Expand All @@ -375,8 +380,33 @@ IMqttClientConfigBuilder UseProxy(
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use the overload with the new builder or model as parameter.")]
IMqttClientConfigBuilder EnableTls(Action<MqttClientOptionsBuilderTlsParameters> parametersAction);

/// <summary>
/// Specifies that TLS has to be used to encrypt the network traffic.
/// </summary>
/// <param name="options">
/// The <see cref="MqttClientTlsOptionsBuilder" />.
/// </param>
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use the overload with the new builder or model as parameter.")]
IMqttClientConfigBuilder EnableTls(MqttClientTlsOptions options);

/// <summary>
/// Specifies that TLS has to be used to encrypt the network traffic.
/// </summary>
/// <param name="optionsAction">
/// An <see cref="Action{T}" /> that takes the <see cref="MqttClientTlsOptionsBuilder" /> and
/// configures it.
/// </param>
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
IMqttClientConfigBuilder EnableTls(Action<MqttClientTlsOptionsBuilder> optionsAction);

/// <summary>
/// Sets the maximum number of topic aliases the server can send in the <i>PUBLISH</i> packet. The
/// default is 0, meaning that no alias can be sent.
Expand Down Expand Up @@ -438,6 +468,7 @@ IMqttClientConfigBuilder UseProxy(
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[SuppressMessage("", "CA1054", Justification = "Uri declared as string in underlying lib")]
[Obsolete("Use the overload with the builder as parameter.")]
IMqttClientConfigBuilder ConnectViaWebSocket(
string uri,
Action<MqttClientOptionsBuilderWebSocketParameters> parametersAction);
Expand All @@ -455,10 +486,24 @@ IMqttClientConfigBuilder ConnectViaWebSocket(
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[SuppressMessage("", "CA1054", Justification = "Uri declared as string in underlying lib")]
[Obsolete("Use the overload with the builder as parameter.")]
IMqttClientConfigBuilder ConnectViaWebSocket(
string uri,
MqttClientOptionsBuilderWebSocketParameters? parameters = null);

/// <summary>
/// Specifies the WebSocket connection settings.
/// </summary>
/// <param name="optionsAction">
/// An <see cref="Action{T}" /> that takes the <see cref="MqttClientWebSocketOptionsBuilder" />
/// and configures it.
/// </param>
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[SuppressMessage("", "CA1054", Justification = "Uri declared as string in underlying lib")]
IMqttClientConfigBuilder ConnectViaWebSocket(Action<MqttClientWebSocketOptionsBuilder> optionsAction);

/// <summary>
/// Specifies the WebSocket connection settings.
/// </summary>
Expand All @@ -469,6 +514,7 @@ IMqttClientConfigBuilder ConnectViaWebSocket(
/// <returns>
/// The <see cref="IMqttClientConfigBuilder" /> so that additional calls can be chained.
/// </returns>
[Obsolete("Use the overload with the builder as parameter.")]
IMqttClientConfigBuilder ConnectViaWebSocket(Action<MqttClientWebSocketOptions> optionsAction);

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,21 +65,23 @@ public MqttClientConfigBuilder(MqttClientConfig baseConfig, IServiceProvider? se
options.BufferSize = tcpOptions.BufferSize;
options.DualMode = tcpOptions.DualMode;
options.NoDelay = tcpOptions.NoDelay;
options.TlsOptions = tcpOptions.TlsOptions;
});

if (tcpOptions.TlsOptions != null)
EnableTls(tcpOptions.TlsOptions);
}
else if (baseConfig.ChannelOptions is MqttClientWebSocketOptions webSocketOptions)
{
ConnectViaWebSocket(
options =>
{
options.Uri = webSocketOptions.Uri;
options.CookieContainer = webSocketOptions.CookieContainer;
options.ProxyOptions = webSocketOptions.ProxyOptions;
options.RequestHeaders = webSocketOptions.RequestHeaders;
options.SubProtocols = webSocketOptions.SubProtocols;
options.TlsOptions = webSocketOptions.TlsOptions;
});
builder => builder
.WithUri(webSocketOptions.Uri)
.WithCookieContainer(webSocketOptions.CookieContainer)
.WithProxyOptions(webSocketOptions.ProxyOptions)
.WithRequestHeaders(webSocketOptions.RequestHeaders)
.WithSubProtocols(webSocketOptions.SubProtocols));

if (webSocketOptions.TlsOptions != null)
EnableTls(webSocketOptions.TlsOptions);
}

if (baseConfig.Credentials != null)
Expand Down Expand Up @@ -161,6 +163,7 @@ public IMqttClientConfigBuilder WithClientId(string value)
}

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectTo(Uri)" />
[Obsolete("Use ConnectViaTcp or ConnectViaWebsocket.")]
public IMqttClientConfigBuilder ConnectTo(Uri uri)
{
Check.NotNull(uri, nameof(uri));
Expand All @@ -171,6 +174,7 @@ public IMqttClientConfigBuilder ConnectTo(Uri uri)

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectTo(string)" />
[SuppressMessage("Usage", "CA2234:Pass system uri objects instead of strings", Justification = "Reviewed")]
[Obsolete("Use ConnectViaTcp or ConnectViaWebsocket.")]
public IMqttClientConfigBuilder ConnectTo(string uri)
{
Check.NotEmpty(uri, nameof(uri));
Expand Down Expand Up @@ -261,6 +265,7 @@ public IMqttClientConfigBuilder UseProtocolVersion(MqttProtocolVersion value)
}

/// <inheritdoc cref="IMqttClientConfigBuilder.UseProxy(string,string?,string?,string?,bool,string[])" />
[Obsolete("Configure proxy in ConnectViaWebSocket(...).")]
public IMqttClientConfigBuilder UseProxy(
string address,
string? username = null,
Expand All @@ -276,6 +281,7 @@ public IMqttClientConfigBuilder UseProxy(
}

/// <inheritdoc cref="IMqttClientConfigBuilder.UseProxy(Action{MqttClientWebSocketProxyOptions})" />
[Obsolete("Configure proxy in ConnectViaWebSocket(...).")]
public IMqttClientConfigBuilder UseProxy(Action<MqttClientWebSocketProxyOptions> optionsAction)
{
Check.NotNull(optionsAction, nameof(optionsAction));
Expand Down Expand Up @@ -362,22 +368,19 @@ public IMqttClientConfigBuilder WithTimeout(TimeSpan timeout)
/// <inheritdoc cref="IMqttClientConfigBuilder.DisableTls" />
public IMqttClientConfigBuilder DisableTls()
{
_builder.WithTls(
parameters =>
{
parameters.UseTls = false;
});
_builder.WithTlsOptions(new MqttClientTlsOptions { UseTls = false });
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.EnableTls()" />
public IMqttClientConfigBuilder EnableTls()
{
_builder.WithTls();
_builder.WithTlsOptions(new MqttClientTlsOptions { UseTls = true });
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.EnableTls(MqttClientOptionsBuilderTlsParameters)" />
[Obsolete("Use the overload with the new builder or model as parameter.")]
public IMqttClientConfigBuilder EnableTls(MqttClientOptionsBuilderTlsParameters parameters)
{
Check.NotNull(parameters, nameof(parameters));
Expand All @@ -387,6 +390,7 @@ public IMqttClientConfigBuilder EnableTls(MqttClientOptionsBuilderTlsParameters
}

/// <inheritdoc cref="IMqttClientConfigBuilder.EnableTls(Action{MqttClientOptionsBuilderTlsParameters})" />
[Obsolete("Use the overload with the new builder or model as parameter.")]
public IMqttClientConfigBuilder EnableTls(Action<MqttClientOptionsBuilderTlsParameters> parametersAction)
{
Check.NotNull(parametersAction, nameof(parametersAction));
Expand All @@ -402,6 +406,24 @@ public IMqttClientConfigBuilder EnableTls(Action<MqttClientOptionsBuilderTlsPara
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.EnableTls(MqttClientTlsOptions)" />
public IMqttClientConfigBuilder EnableTls(MqttClientTlsOptions options)
{
Check.NotNull(options, nameof(options));

_builder.WithTlsOptions(options);
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.EnableTls(Action{MqttClientTlsOptionsBuilder})" />
public IMqttClientConfigBuilder EnableTls(Action<MqttClientTlsOptionsBuilder> optionsAction)
{
Check.NotNull(optionsAction, nameof(optionsAction));

_builder.WithTlsOptions(optionsAction);
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.LimitTopicAlias" />
public IMqttClientConfigBuilder LimitTopicAlias(int topicAliasMaximum)
{
Expand Down Expand Up @@ -436,6 +458,7 @@ public IMqttClientConfigBuilder AddUserProperty(string name, string? value)

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectViaWebSocket(string,Action{MqttClientOptionsBuilderWebSocketParameters})" />
[SuppressMessage("", "CA1054", Justification = "Uri declared as string in underlying lib")]
[Obsolete("Use the overload with the builder as parameter.")]
public IMqttClientConfigBuilder ConnectViaWebSocket(
string uri,
Action<MqttClientOptionsBuilderWebSocketParameters> parametersAction)
Expand All @@ -452,6 +475,7 @@ public IMqttClientConfigBuilder ConnectViaWebSocket(

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectViaWebSocket(string,Action{MqttClientOptionsBuilderWebSocketParameters})" />
[SuppressMessage("", "CA1054", Justification = "Uri declared as string in underlying lib")]
[Obsolete("Use the overload with the builder as parameter.")]
public IMqttClientConfigBuilder ConnectViaWebSocket(
string uri,
MqttClientOptionsBuilderWebSocketParameters? parameters = null)
Expand All @@ -462,7 +486,17 @@ public IMqttClientConfigBuilder ConnectViaWebSocket(
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectViaWebSocket(Action{MqttClientWebSocketOptionsBuilder})" />
public IMqttClientConfigBuilder ConnectViaWebSocket(Action<MqttClientWebSocketOptionsBuilder> optionsAction)
{
Check.NotNull(optionsAction, nameof(optionsAction));

_builder.WithWebSocketServer(optionsAction);
return this;
}

/// <inheritdoc cref="IMqttClientConfigBuilder.ConnectViaWebSocket(Action{MqttClientWebSocketOptions})" />
[Obsolete("Use the overload with the builder as parameter.")]
public IMqttClientConfigBuilder ConnectViaWebSocket(Action<MqttClientWebSocketOptions> optionsAction)
{
Check.NotNull(optionsAction, nameof(optionsAction));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ This package contains an implementation of Silverback.Integration for MQTT.</Des
</PropertyGroup>

<ItemGroup>
<PackageReference Include="MQTTnet" Version="4.2.1.781" />
<PackageReference Include="MQTTnet" Version="4.3.1.873" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading

0 comments on commit f2a3821

Please sign in to comment.