mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 17:23:04 +08:00
Merge branch 'master' into feature-userproperties
This commit is contained in:
@@ -22,7 +22,8 @@
|
|||||||
* [Server] Added interceptor for unsubscriptions.
|
* [Server] Added interceptor for unsubscriptions.
|
||||||
* [MQTTnet.Server] Added interceptor for unsubscriptions.
|
* [MQTTnet.Server] Added interceptor for unsubscriptions.
|
||||||
* [MQTTnet.AspNetCore] improved compatibility with AspNetCore 3.1
|
* [MQTTnet.AspNetCore] improved compatibility with AspNetCore 3.1
|
||||||
* [Core] Added MqttApplicationMessage.GetUserProperty<T>() convenience method (thanks to @PMExtra).
|
* [Core] Added MqttApplicationMessage.GetUserProperty() convenience method (thanks to @PMExtra).
|
||||||
|
* [Client] Support WithConnectionUri to configure client (thanks to @PMExtra).
|
||||||
* [Server] Removed exceptions when user properties are set with MQTT protocol version 3.1
|
* [Server] Removed exceptions when user properties are set with MQTT protocol version 3.1
|
||||||
</releaseNotes>
|
</releaseNotes>
|
||||||
<copyright>Copyright Christian Kratky 2016-2020</copyright>
|
<copyright>Copyright Christian Kratky 2016-2020</copyright>
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using MQTTnet.Client.Options;
|
||||||
|
|
||||||
|
namespace MQTTnet.Extensions
|
||||||
|
{
|
||||||
|
public static class MqttClientOptionsBuilderExtension
|
||||||
|
{
|
||||||
|
public static MqttClientOptionsBuilder WithConnectionUri(this MqttClientOptionsBuilder builder, Uri uri)
|
||||||
|
{
|
||||||
|
var port = uri.IsDefaultPort ? null : (int?) uri.Port;
|
||||||
|
switch (uri.Scheme.ToLower())
|
||||||
|
{
|
||||||
|
case "tcp":
|
||||||
|
case "mqtt":
|
||||||
|
builder.WithTcpServer(uri.Host, port);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "mqtts":
|
||||||
|
builder.WithTcpServer(uri.Host, port).WithTls();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "ws":
|
||||||
|
case "wss":
|
||||||
|
builder.WithWebSocketServer(uri.ToString());
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new ArgumentException("Unexpected scheme in uri.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(uri.UserInfo))
|
||||||
|
{
|
||||||
|
var userInfo = uri.UserInfo.Split(':');
|
||||||
|
var username = userInfo[0];
|
||||||
|
var password = userInfo.Length > 1 ? userInfo[1] : "";
|
||||||
|
builder.WithCredentials(username, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MqttClientOptionsBuilder WithConnectionUri(this MqttClientOptionsBuilder builder, string uri)
|
||||||
|
{
|
||||||
|
return WithConnectionUri(builder, new Uri(uri, UriKind.Absolute));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using MQTTnet.Client.Options;
|
||||||
|
using MQTTnet.Extensions;
|
||||||
|
|
||||||
|
namespace MQTTnet.Tests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class MqttClientOptionsBuilder_Tests
|
||||||
|
{
|
||||||
|
[TestMethod]
|
||||||
|
public void WithConnectionUri_Credential_Test()
|
||||||
|
{
|
||||||
|
var options = new MqttClientOptionsBuilder()
|
||||||
|
.WithConnectionUri("mqtt://user:password@127.0.0.1")
|
||||||
|
.Build();
|
||||||
|
Assert.AreEqual("user", options.Credentials.Username);
|
||||||
|
Assert.IsTrue(Encoding.UTF8.GetBytes("password").SequenceEqual(options.Credentials.Password));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user