From 48837529a2bde83efa9e02e7000f1cd135f57c11 Mon Sep 17 00:00:00 2001 From: Christian Kratky Date: Sat, 16 May 2020 13:01:41 +0200 Subject: [PATCH] Fix web socket sub protocol negotiation. --- Source/MQTTnet.Server/Web/Startup.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Source/MQTTnet.Server/Web/Startup.cs b/Source/MQTTnet.Server/Web/Startup.cs index 36d872a3..950c236d 100644 --- a/Source/MQTTnet.Server/Web/Startup.cs +++ b/Source/MQTTnet.Server/Web/Startup.cs @@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Net.Http.Headers; using Microsoft.OpenApi.Models; using Microsoft.Scripting.Utils; +using MQTTnet.AspNetCore; using MQTTnet.Server.Configuration; using MQTTnet.Server.Logging; using MQTTnet.Server.Mqtt; @@ -40,6 +41,9 @@ namespace MQTTnet.Server.Web DataSharingService dataSharingService, MqttSettingsModel mqttSettings) { + application.UseDefaultFiles(); + application.UseStaticFiles(); + application.UseHsts(); application.UseRouting(); application.UseCors(x => x @@ -49,9 +53,7 @@ namespace MQTTnet.Server.Web application.UseAuthentication(); application.UseAuthorization(); - - application.UseStaticFiles(); - + application.UseEndpoints(endpoints => { endpoints.MapControllers(); @@ -81,7 +83,6 @@ namespace MQTTnet.Server.Web { services.AddCors(); - services.AddControllers(); services.AddMvc() @@ -197,7 +198,13 @@ namespace MQTTnet.Server.Web { if (context.WebSockets.IsWebSocketRequest) { - using (var webSocket = await context.WebSockets.AcceptWebSocketAsync().ConfigureAwait(false)) + string subProtocol = null; + if (context.Request.Headers.TryGetValue("Sec-WebSocket-Protocol", out var requestedSubProtocolValues)) + { + subProtocol = MqttSubProtocolSelector.SelectSubProtocol(requestedSubProtocolValues); + } + + using (var webSocket = await context.WebSockets.AcceptWebSocketAsync(subProtocol).ConfigureAwait(false)) { await mqttServerService.RunWebSocketConnectionAsync(webSocket, context).ConfigureAwait(false); }