aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-08 15:48:30 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-03-08 15:48:30 -0400
commitccb2dda358a54810d940c0c7ddceb255a82ae947 (patch)
tree0a6a673390bb8f3e88fbe7f69e408f31c99d18ec /MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
parent55c47e50fc261849c277cb65654d91a8c5a8e308 (diff)
connect to socket with access token
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs')
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs51
1 files changed, 41 insertions, 10 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
index 0c5c9e9bf..a223cf68d 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Net;
+using System.Collections.Specialized;
+using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Logging;
using MediaBrowser.Server.Implementations.Logging;
using ServiceStack;
@@ -18,9 +19,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
private readonly ILogger _logger;
private readonly Action<string> _endpointListener;
- private readonly string _certificatePath ;
+ private readonly string _certificatePath;
- public WebSocketSharpListener(ILogger logger, Action<string> endpointListener,
+ public WebSocketSharpListener(ILogger logger, Action<string> endpointListener,
string certificatePath)
{
_logger = logger;
@@ -32,7 +33,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
public Func<IHttpRequest, Uri, Task> RequestHandler { get; set; }
- public Action<WebSocketConnectEventArgs> WebSocketHandler { get; set; }
+ public Action<WebSocketConnectingEventArgs> WebSocketConnecting { get; set; }
+
+ public Action<WebSocketConnectEventArgs> WebSocketConnected { get; set; }
public void Start(IEnumerable<string> urlPrefixes)
{
@@ -115,15 +118,43 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
{
try
{
- var webSocketContext = ctx.AcceptWebSocket(null);
+ var endpoint = ctx.Request.RemoteEndPoint.ToString();
+ var url = ctx.Request.RawUrl;
+ var queryString = new NameValueCollection(ctx.Request.QueryString);
+
+ var connectingArgs = new WebSocketConnectingEventArgs
+ {
+ Url = url,
+ QueryString = queryString,
+ Endpoint = endpoint
+ };
+
+ if (WebSocketConnecting != null)
+ {
+ WebSocketConnecting(connectingArgs);
+ }
- if (WebSocketHandler != null)
+ if (connectingArgs.AllowConnection)
{
- WebSocketHandler(new WebSocketConnectEventArgs
+ _logger.Debug("Web socket connection allowed");
+
+ var webSocketContext = ctx.AcceptWebSocket(null);
+
+ if (WebSocketConnected != null)
{
- WebSocket = new SharpWebSocket(webSocketContext.WebSocket, _logger),
- Endpoint = ctx.Request.RemoteEndPoint.ToString()
- });
+ WebSocketConnected(new WebSocketConnectEventArgs
+ {
+ Url = url,
+ QueryString = queryString,
+ WebSocket = new SharpWebSocket(webSocketContext.WebSocket, _logger),
+ Endpoint = endpoint
+ });
+ }
+ }
+ else
+ {
+ _logger.Warn("Web socket connection not allowed");
+ ctx.Response.Close();
}
}
catch (Exception ex)