Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/aspnetcore.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacalvar <jacalvar@microsoft.com>2022-05-13 18:33:27 +0300
committerjacalvar <jacalvar@microsoft.com>2022-06-14 17:24:20 +0300
commit0fe30c5f44868cfd47513927d552131c616e44da (patch)
tree1a90a37b9de2cd0b95e5362776a19bee925608fd
parent4a8df25d1c93022abaa3f547d065bbc1d6ce3e5e (diff)
[Blazor][SignalR] Proof of concept. Enabling compression in websocketsjaviercn/websockets-compression-signalr
-rw-r--r--src/Components/Samples/BlazorServerApp/Startup.cs2
-rw-r--r--src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs3
-rw-r--r--src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt2
-rw-r--r--src/SignalR/common/Http.Connections/src/WebSocketOptions.cs6
4 files changed, 11 insertions, 2 deletions
diff --git a/src/Components/Samples/BlazorServerApp/Startup.cs b/src/Components/Samples/BlazorServerApp/Startup.cs
index d630a127c2..b4eb99bdc0 100644
--- a/src/Components/Samples/BlazorServerApp/Startup.cs
+++ b/src/Components/Samples/BlazorServerApp/Startup.cs
@@ -44,7 +44,7 @@ public class Startup
app.UseEndpoints(endpoints =>
{
- endpoints.MapBlazorHub();
+ endpoints.MapBlazorHub(options => options.WebSockets.WebSocketAcceptContextFactory = context => new WebSocketAcceptContext { DangerousEnableCompression = true});
endpoints.MapFallbackToPage("/_Host");
});
}
diff --git a/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs b/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs
index 67de725c62..8f5159c66b 100644
--- a/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs
+++ b/src/SignalR/common/Http.Connections/src/Internal/Transports/WebSocketsServerTransport.cs
@@ -47,8 +47,9 @@ internal sealed partial class WebSocketsServerTransport : IHttpTransport
Debug.Assert(context.WebSockets.IsWebSocketRequest, "Not a websocket request");
var subProtocol = _options.SubProtocolSelector?.Invoke(context.WebSockets.WebSocketRequestedProtocols);
+ var acceptContext = _options.WebSocketAcceptContextFactory?.Invoke(context);
- using (var ws = await context.WebSockets.AcceptWebSocketAsync(subProtocol))
+ using (var ws = await (acceptContext != null ? context.WebSockets.AcceptWebSocketAsync(acceptContext) : context.WebSockets.AcceptWebSocketAsync(subProtocol)))
{
Log.SocketOpened(_logger, subProtocol);
diff --git a/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt b/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt
index 7dc5c58110..fde2e9049c 100644
--- a/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt
+++ b/src/SignalR/common/Http.Connections/src/PublicAPI.Unshipped.txt
@@ -1 +1,3 @@
#nullable enable
+Microsoft.AspNetCore.Http.Connections.WebSocketOptions.WebSocketAcceptContextFactory.get -> System.Func<Microsoft.AspNetCore.Http.HttpContext!, Microsoft.AspNetCore.Http.WebSocketAcceptContext!>?
+Microsoft.AspNetCore.Http.Connections.WebSocketOptions.WebSocketAcceptContextFactory.set -> void
diff --git a/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs b/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs
index 139aad4beb..f542815e64 100644
--- a/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs
+++ b/src/SignalR/common/Http.Connections/src/WebSocketOptions.cs
@@ -26,4 +26,10 @@ public class WebSocketOptions
// https://github.com/aspnet/HttpAbstractions/blob/a6bdb9b1ec6ed99978a508e71a7f131be7e4d9fb/src/Microsoft.AspNetCore.Http.Abstractions/WebSocketManager.cs#L23
// Unfortunately, IList<T> does not implement IReadOnlyList<T> :(
public Func<IList<string>, string>? SubProtocolSelector { get; set; }
+
+ /// <summary>
+ /// Gets or sets a delegate that will be called when a new WebSocket is established to configure additional details about the connection
+ /// like the use of compression.
+ /// </summary>
+ public Func<HttpContext, WebSocketAcceptContext>? WebSocketAcceptContextFactory { get; set; }
}