aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
diff options
context:
space:
mode:
authorClaus Vium <clausvium@gmail.com>2019-02-27 23:22:55 +0100
committerClaus Vium <clausvium@gmail.com>2019-02-27 23:22:55 +0100
commitfb1de5a9213f7da98ed15a6975201d6bca3537d4 (patch)
tree74ca93c5b068e148cfa67ad013d9db650b2ebb0d /Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
parent71ed8409446774c395b339728e2436c3b30536d8 (diff)
Remove more cruft and add the beginnings of a socket middleware
Diffstat (limited to 'Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs')
-rw-r--r--Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs65
1 files changed, 22 insertions, 43 deletions
diff --git a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
index 9422673f5..5ddd31647 100644
--- a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
+++ b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
@@ -33,8 +33,6 @@ using Microsoft.Extensions.Logging;
public Func<Exception, IRequest, bool, bool, Task> ErrorHandler { get; set; }
public Func<IHttpRequest, string, string, string, CancellationToken, Task> RequestHandler { get; set; }
- public Action<WebSocketConnectingEventArgs> WebSocketConnecting { get; set; }
-
public Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
private static void LogRequest(ILogger logger, HttpRequest request)
@@ -52,60 +50,41 @@ using Microsoft.Extensions.Logging;
var endpoint = ctx.Connection.RemoteIpAddress.ToString();
var url = ctx.Request.GetDisplayUrl();
- var connectingArgs = new WebSocketConnectingEventArgs
+ var webSocketContext = await ctx.WebSockets.AcceptWebSocketAsync(null).ConfigureAwait(false);
+ var socket = new SharpWebSocket(webSocketContext, _logger);
+
+ WebSocketConnected(new WebSocketConnectEventArgs
{
Url = url,
QueryString = ctx.Request.Query,
+ WebSocket = socket,
Endpoint = endpoint
- };
+ });
- WebSocketConnecting?.Invoke(connectingArgs);
+ WebSocketReceiveResult result;
+ var message = new List<byte>();
- if (connectingArgs.AllowConnection)
+ do
{
- _logger.LogDebug("Web socket connection allowed");
+ var buffer = WebSocket.CreateServerBuffer(4096);
+ result = await webSocketContext.ReceiveAsync(buffer, _disposeCancellationToken);
+ message.AddRange(buffer.Array.Take(result.Count));
- var webSocketContext = await ctx.WebSockets.AcceptWebSocketAsync(null).ConfigureAwait(false);
- var socket = new SharpWebSocket(webSocketContext, _logger);
-
- WebSocketConnected(new WebSocketConnectEventArgs
+ if (result.EndOfMessage)
{
- Url = url,
- QueryString = ctx.Request.Query,
- WebSocket = socket,
- Endpoint = endpoint
- });
-
- WebSocketReceiveResult result;
- var message = new List<byte>();
-
- do
- {
- var buffer = WebSocket.CreateServerBuffer(4096);
- result = await webSocketContext.ReceiveAsync(buffer, _disposeCancellationToken);
- message.AddRange(buffer.Array.Take(result.Count));
-
- if (result.EndOfMessage)
- {
- socket.OnReceiveBytes(message.ToArray());
- message.Clear();
- }
- } while (socket.State == WebSocketState.Open && result.MessageType != WebSocketMessageType.Close);
-
-
- if (webSocketContext.State == WebSocketState.Open)
- {
- await webSocketContext.CloseAsync(result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
- result.CloseStatusDescription, _disposeCancellationToken);
+ socket.OnReceiveBytes(message.ToArray());
+ message.Clear();
}
+ } while (socket.State == WebSocketState.Open && result.MessageType != WebSocketMessageType.Close);
- socket.Dispose();
- }
- else
+
+ if (webSocketContext.State == WebSocketState.Open)
{
- _logger.LogWarning("Web socket connection not allowed");
- ctx.Response.StatusCode = 401;
+ await webSocketContext.CloseAsync(result.CloseStatus ?? WebSocketCloseStatus.NormalClosure,
+ result.CloseStatusDescription, _disposeCancellationToken);
}
+
+ socket.Dispose();
}
catch (Exception ex)
{