mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-19 11:03:07 +08:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25c1da6a21 | ||
|
|
4e3ede42c6 | ||
|
|
918a3c8d8b |
@@ -1,4 +1 @@
|
|||||||
* [Client] Fix _None of the discovered or specified addresses match the socket address family._ (#1997).
|
* [Client] Restored _Server_ and _Port_ behavior of client options (#2005).
|
||||||
* [Client] Remove the obsolete attribute from the _WithConnectionUri_ methods (#1979).
|
|
||||||
|
|
||||||
* All nuget packages are now signed.
|
|
||||||
|
|||||||
+19
-31
@@ -3,7 +3,7 @@ name: CI
|
|||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
VERSION: "4.3.5.${{github.run_number}}"
|
VERSION: "4.3.6.${{github.run_number}}"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -17,7 +17,7 @@ jobs:
|
|||||||
sdk-version: 18362
|
sdk-version: 18362
|
||||||
|
|
||||||
- name: Setup .NET SDK
|
- name: Setup .NET SDK
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v1.9.0
|
||||||
with:
|
with:
|
||||||
dotnet-version: |
|
dotnet-version: |
|
||||||
3.1.x
|
3.1.x
|
||||||
@@ -28,13 +28,27 @@ jobs:
|
|||||||
uses: microsoft/setup-msbuild@v1.1
|
uses: microsoft/setup-msbuild@v1.1
|
||||||
|
|
||||||
- name: Checkout Code
|
- name: Checkout Code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Setup Signing Certificate
|
||||||
|
run: |
|
||||||
|
$secret = '${{ secrets.SNC_BASE64 }}'
|
||||||
|
$decoded = [System.Convert]::FromBase64CharArray($secret, 0, $secret.Length)
|
||||||
|
Set-Content -Path ${{ github.workspace }}\certificate.snk -Value $decoded -AsByteStream
|
||||||
|
|
||||||
- name: Restore nuget packages
|
- name: Restore nuget packages
|
||||||
run: msbuild MQTTnet.sln /t:Restore /p:Configuration="Release" /verbosity:m
|
run: msbuild MQTTnet.sln /t:Restore /p:Configuration="Release" /verbosity:m
|
||||||
|
|
||||||
- name: Build solution
|
- name: Build solution
|
||||||
run: msbuild MQTTnet.sln /t:Build /p:Configuration="Release" /verbosity:m /p:FileVersion=${{ env.VERSION }} /p:AssemblyVersion=${{ env.VERSION }} /p:PackageVersion=${{ env.VERSION }}
|
run: msbuild MQTTnet.sln /t:Build /p:Configuration="Release" /verbosity:m /p:FileVersion=${{ env.VERSION }} /p:AssemblyVersion=${{ env.VERSION }} /p:PackageVersion=${{ env.VERSION }} /p:SignAssembly=true /p:AssemblyOriginatorKeyFile=${{ github.workspace }}\certificate.snk
|
||||||
|
|
||||||
|
- name: Collect nuget Packages
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: nuget Packages
|
||||||
|
path: |
|
||||||
|
**\*.nupkg
|
||||||
|
**\*.snupkg
|
||||||
|
|
||||||
- name: Setup VSTest
|
- name: Setup VSTest
|
||||||
uses: darenm/Setup-VSTest@v1
|
uses: darenm/Setup-VSTest@v1
|
||||||
@@ -45,32 +59,6 @@ jobs:
|
|||||||
- name: ASP.NET Tests
|
- name: ASP.NET Tests
|
||||||
run: vstest.console.exe Source\MQTTnet.AspNetCore.Tests\bin\Release\netcoreapp3.1\MQTTnet.AspNetCore.Tests.dll
|
run: vstest.console.exe Source\MQTTnet.AspNetCore.Tests\bin\Release\netcoreapp3.1\MQTTnet.AspNetCore.Tests.dll
|
||||||
|
|
||||||
- name: Install sign CLI tool
|
|
||||||
run: dotnet tool install --tool-path . sign --version 0.9.0-beta.23127.3
|
|
||||||
|
|
||||||
- name: Sign nugets
|
|
||||||
shell: pwsh
|
|
||||||
run: >
|
|
||||||
./sign code azure-key-vault `
|
|
||||||
"**/*.nupkg" `
|
|
||||||
--base-directory "${{ github.workspace }}/Source" `
|
|
||||||
--publisher-name "MQTTnet" `
|
|
||||||
--description "MQTTnet" `
|
|
||||||
--description-url "https://github.com/dotnet/MQTTnet" `
|
|
||||||
--azure-key-vault-tenant-id "${{ secrets.AZURE_TENANT_ID }}" `
|
|
||||||
--azure-key-vault-client-id "${{ secrets.AZURE_CLIENT_ID }}" `
|
|
||||||
--azure-key-vault-client-secret "${{ secrets.AZURE_CLIENT_SECRET }}" `
|
|
||||||
--azure-key-vault-certificate "${{ secrets.KEY_VAULT_CERTIFICATE_ID }}" `
|
|
||||||
--azure-key-vault-url "${{ secrets.KEY_VAULT_URL }}"
|
|
||||||
|
|
||||||
- name: Upload signed nuget packages
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: signed-nugets
|
|
||||||
path: |
|
|
||||||
${{ github.workspace }}/Source/**/*.nupkg
|
|
||||||
${{ github.workspace }}/Source/**/*.snupkg
|
|
||||||
|
|
||||||
- name: Publish MyGet nugets
|
- name: Publish MyGet nugets
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
run: dotnet nuget push ${{ github.workspace }}/Source/**/*.nupkg -k ${{ secrets.MYGET_API_KEY }} -s https://www.myget.org/F/mqttnet/api/v3/index.json --skip-duplicate
|
run: dotnet nuget push **/*.nupkg -k ${{ secrets.MYGET_API_KEY }} -s https://www.myget.org/F/mqttnet/api/v3/index.json --skip-duplicate
|
||||||
@@ -6,6 +6,7 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@@ -86,7 +87,7 @@ namespace MQTTnet.Tests.Clients.MqttClient
|
|||||||
await client.ConnectAsync(clientOptions);
|
await client.ConnectAsync(clientOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
[ExpectedException(typeof(InvalidOperationException))]
|
[ExpectedException(typeof(InvalidOperationException))]
|
||||||
public async Task Connect_Multiple_Times_Should_Fail()
|
public async Task Connect_Multiple_Times_Should_Fail()
|
||||||
@@ -748,8 +749,8 @@ namespace MQTTnet.Tests.Clients.MqttClient
|
|||||||
{
|
{
|
||||||
if (e.ApplicationMessage.Topic == "request")
|
if (e.ApplicationMessage.Topic == "request")
|
||||||
{
|
{
|
||||||
// Use AtMostOnce here because with QoS 1 or even QoS 2 the process waits for
|
// Use AtMostOnce here because with QoS 1 or even QoS 2 the process waits for
|
||||||
// the ACK etc. The problem is that the SpinUntil below only waits until the
|
// the ACK etc. The problem is that the SpinUntil below only waits until the
|
||||||
// flag is set. It does not wait until the client has sent the ACK
|
// flag is set. It does not wait until the client has sent the ACK
|
||||||
await client2.PublishStringAsync("reply");
|
await client2.PublishStringAsync("reply");
|
||||||
}
|
}
|
||||||
@@ -925,5 +926,54 @@ namespace MQTTnet.Tests.Clients.MqttClient
|
|||||||
Assert.IsFalse(disconnectedFired);
|
Assert.IsFalse(disconnectedFired);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Backward_compatible_TCP_options()
|
||||||
|
{
|
||||||
|
var options = new MqttClientOptionsBuilder().WithTcpServer("host", 3).Build();
|
||||||
|
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(3, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
|
||||||
|
options = new MqttClientOptions
|
||||||
|
{
|
||||||
|
ChannelOptions = new MqttClientTcpOptions
|
||||||
|
{
|
||||||
|
Server = "host",
|
||||||
|
Port = 3
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Assert.AreEqual("host:3", options.ChannelOptions.ToString());
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(3, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
|
||||||
|
options = new MqttClientOptionsBuilder().WithEndPoint(new DnsEndPoint("host", 3)).Build();
|
||||||
|
Assert.AreEqual("Unspecified/host:3", options.ChannelOptions.ToString());
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(3, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
|
||||||
|
options = new MqttClientOptionsBuilder().WithTcpServer("host").Build();
|
||||||
|
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(1883, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
Assert.AreEqual("Unspecified/host:1883", options.ChannelOptions.ToString());
|
||||||
|
|
||||||
|
options = new MqttClientOptionsBuilder().WithTlsOptions(o => o.UseTls()).WithTcpServer("host").Build();
|
||||||
|
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(8883, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
|
||||||
|
options = new MqttClientOptions
|
||||||
|
{
|
||||||
|
ChannelOptions = new MqttClientTcpOptions
|
||||||
|
{
|
||||||
|
Server = "host"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Assert.AreEqual("host", ((MqttClientTcpOptions)options.ChannelOptions).Server);
|
||||||
|
Assert.AreEqual(null, ((MqttClientTcpOptions)options.ChannelOptions).Port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
using MQTTnet.Protocol;
|
||||||
|
|
||||||
namespace MQTTnet.Client
|
namespace MQTTnet.Client
|
||||||
{
|
{
|
||||||
public sealed class MqttClientTcpOptions : IMqttClientChannelOptions
|
public sealed class MqttClientTcpOptions : IMqttClientChannelOptions
|
||||||
{
|
{
|
||||||
|
EndPoint _remoteEndpoint;
|
||||||
public AddressFamily AddressFamily { get; set; } = AddressFamily.Unspecified;
|
public AddressFamily AddressFamily { get; set; } = AddressFamily.Unspecified;
|
||||||
|
|
||||||
public int BufferSize { get; set; } = 8192;
|
public int BufferSize { get; set; } = 8192;
|
||||||
@@ -49,13 +51,56 @@ namespace MQTTnet.Client
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ProtocolType ProtocolType { get; set; } = ProtocolType.Tcp;
|
public ProtocolType ProtocolType { get; set; } = ProtocolType.Tcp;
|
||||||
|
|
||||||
public EndPoint RemoteEndpoint { get; set; }
|
public EndPoint RemoteEndpoint
|
||||||
|
{
|
||||||
|
get => _remoteEndpoint;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_remoteEndpoint = value;
|
||||||
|
|
||||||
|
if (_remoteEndpoint is DnsEndPoint dnsEndPoint)
|
||||||
|
{
|
||||||
|
Server = dnsEndPoint.Host;
|
||||||
|
Port = dnsEndPoint.Port;
|
||||||
|
}
|
||||||
|
else if (_remoteEndpoint is IPEndPoint ipEndPoint)
|
||||||
|
{
|
||||||
|
Server = ipEndPoint.Address.ToString();
|
||||||
|
Port = ipEndPoint.Port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public MqttClientTlsOptions TlsOptions { get; set; } = new MqttClientTlsOptions();
|
public MqttClientTlsOptions TlsOptions { get; set; } = new MqttClientTlsOptions();
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return RemoteEndpoint?.ToString() ?? string.Empty;
|
if (RemoteEndpoint != null)
|
||||||
|
{
|
||||||
|
return RemoteEndpoint.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(Server))
|
||||||
|
{
|
||||||
|
return $"{Server}:{GetPort()}";
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetPort()
|
||||||
|
{
|
||||||
|
if (Port.HasValue)
|
||||||
|
{
|
||||||
|
return Port.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TlsOptions?.UseTls == true)
|
||||||
|
{
|
||||||
|
return MqttPorts.Secure;
|
||||||
|
}
|
||||||
|
|
||||||
|
return MqttPorts.Default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user