public WebSocketRfc6455(Stream clientStream, WebSocketListenerOptions options, IPEndPoint local, IPEndPoint remote, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, IReadOnlyList<IWebSocketMessageExtensionContext> extensions) :base(httpRequest, httpResponse) { if (clientStream == null) throw new ArgumentNullException("clientStream"); if (options == null) throw new ArgumentNullException("options"); if (local == null) throw new ArgumentNullException("local"); if (remote == null) throw new ArgumentNullException("remote"); if (extensions == null) throw new ArgumentNullException("extensions"); if (httpRequest == null) throw new ArgumentNullException("httpRequest"); _remoteEndpoint = remote; _localEndpoint = local; Connection = new WebSocketConnectionRfc6455(clientStream, options); _extensions = extensions; }
public override WebSocket CreateWebSocket(Stream stream, WebSocketListenerOptions options, IPEndPoint localEndpoint, IPEndPoint remoteEndpoint, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, List<IWebSocketMessageExtensionContext> negotiatedExtensions) { var webSocket = new WebSocketRfc6455(stream, options, localEndpoint, remoteEndpoint, httpRequest, httpResponse, negotiatedExtensions); if (OnPingReceived != null) webSocket.OnPingReceived = OnPingReceived; return webSocket; }
private async Task <bool> CheckHttpHeaders(WebSocketHttpRequest request, WebSocketHttpResponse response) { await Task.Run(() => { if (authorization.Length > 0) { var authHeader = request.Headers["Authorization"]; if (authHeader == null || authHeader != authorization) { response.Status = HttpStatusCode.Unauthorized; Log("Rejected Authorization header: " + authHeader, LogLevels.Debug); } } for (int i = authorizationHandlers.Count - 1; i >= 0; i--) { try { if (!(bool)authorizationHandlers[i](request.RemoteEndPoint.ToString(), request.Headers.ToString())) { response.Status = HttpStatusCode.Unauthorized; } } catch (Exception e) { Log("An error occurred while calling an authentication handler: " + e.Message, LogLevels.Debug); authorizationHandlers.RemoveAt(i); } } }); return(true); }
public VtortolaWebSocketHttpResponse(WebSocketHttpResponse httpResponse) { WebSocketExtensions = httpResponse.WebSocketExtensions.Select(x => x.Name).ToArray(); Cookies = httpResponse.Cookies; Status = httpResponse.Status; mWebSocketProtocol = httpResponse.WebSocketProtocol; }
public WebSocketRfc6455(Stream clientStream, WebSocketListenerOptions options, IPEndPoint local, IPEndPoint remote, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, IReadOnlyList<IWebSocketMessageExtensionContext> extensions) :base(httpRequest, httpResponse) { Guard.ParameterCannotBeNull(clientStream, "clientStream"); Guard.ParameterCannotBeNull(options, "options"); Guard.ParameterCannotBeNull(local, "local"); Guard.ParameterCannotBeNull(remote, "remote"); Guard.ParameterCannotBeNull(extensions, "extensions"); Guard.ParameterCannotBeNull(httpRequest, "httpRequest"); _remoteEndpoint = remote; _localEndpoint = local; Connection = new WebSocketConnectionRfc6455(clientStream, options); _extensions = extensions; }
private async Task <bool> CheckHttpHeaders(WebSocketHttpRequest request, WebSocketHttpResponse response) { await Task.Run(() => { if (authorization.Length > 0) { var authHeader = request.Headers["Authorization"]; if (authHeader == null || authHeader != authorization) { response.Status = HttpStatusCode.Unauthorized; Log("Rejected Authorization header: " + authHeader, LogLevels.Debug); } } }); return(true); }
private void HttpNegotiation(WebSocketHttpRequest request, WebSocketHttpResponse response) { Guid connectionId = Guid.Empty; if (request.RequestUri == null || request.RequestUri.OriginalString.Length < 1 || !Guid.TryParse(request.RequestUri.OriginalString.Substring(1), out connectionId)) { connectionId = _sysInfo.Guid(); _log.Info("Connection Id created: {0}", connectionId); } else { _log.Info("Connection Id from url: {0}", connectionId); } request.Items.Add(ConnectionIdKey, connectionId); Guid userId; if (request.Cookies[ConnectionManager.UserSessionCookieName] == null) { userId = _sysInfo.Guid(); _log.Info("User ID created: {0}", userId); } else { userId = Guid.Parse(request.Cookies[ConnectionManager.UserSessionCookieName].Value); _log.Info("User ID found in cookie: {0}", userId); } Queue.PublishRequest(new ConnectionConnectRequest(connectionId, userId), ctx => { ctx.HandleFault(f => { response.Status = HttpStatusCode.InternalServerError; }); ctx.HandleTimeout(TimeSpan.FromSeconds(5), () => { response.Status = HttpStatusCode.RequestTimeout; }); ctx.Handle <ConnectionConnectResponse>(res => { response.Cookies.Add(new Cookie(ConnectionManager.UserSessionCookieName, res.UserId.ToString())); }); }); }
public WebSocketRfc6455(Stream clientStream, WebSocketListenerOptions options, IPEndPoint local, IPEndPoint remote, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, IReadOnlyList <IWebSocketMessageExtensionContext> extensions) : base(httpRequest, httpResponse) { if (clientStream == null) { throw new ArgumentNullException("clientStream"); } if (options == null) { throw new ArgumentNullException("options"); } if (local == null) { throw new ArgumentNullException("local"); } if (remote == null) { throw new ArgumentNullException("remote"); } if (extensions == null) { throw new ArgumentNullException("extensions"); } if (httpRequest == null) { throw new ArgumentNullException("httpRequest"); } _remoteEndpoint = remote; _localEndpoint = local; Connection = new WebSocketConnectionRfc6455(clientStream, options); _extensions = extensions; }
public override WebSocket CreateWebSocket(Stream stream, WebSocketListenerOptions options, IPEndPoint localEndpoint, IPEndPoint remoteEndpoint, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, List<IWebSocketMessageExtensionContext> negotiatedExtensions) { return new WebSocketRfc6455(stream, options, localEndpoint, remoteEndpoint, httpRequest, httpResponse, negotiatedExtensions); }
public override WebSocket CreateWebSocket(Stream stream, WebSocketListenerOptions options, IPEndPoint localEndpoint, IPEndPoint remoteEndpoint, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, List <IWebSocketMessageExtensionContext> negotiatedExtensions) { return(new WebSocketRfc6455(stream, options, localEndpoint, remoteEndpoint, httpRequest, httpResponse, negotiatedExtensions)); }
public WebSocketRfc6455([NotNull] NetworkConnection networkConnection, [NotNull] WebSocketListenerOptions options, [NotNull] WebSocketHttpRequest httpRequest, [NotNull] WebSocketHttpResponse httpResponse, [NotNull] IReadOnlyList <IWebSocketMessageExtensionContext> extensions) : base(httpRequest, httpResponse) { if (networkConnection == null) { throw new ArgumentNullException(nameof(networkConnection)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (httpRequest == null) { throw new ArgumentNullException(nameof(httpRequest)); } if (httpResponse == null) { throw new ArgumentNullException(nameof(httpResponse)); } if (extensions == null) { throw new ArgumentNullException(nameof(extensions)); } this.log = options.Logger; this.RemoteEndpoint = httpRequest.RemoteEndPoint; this.LocalEndpoint = httpRequest.LocalEndPoint; this.Connection = new WebSocketConnectionRfc6455(networkConnection, httpRequest.Direction == HttpRequestDirection.Outgoing, options); this.extensions = extensions; this.SubProtocol = httpResponse.Headers.Contains(ResponseHeader.WebSocketProtocol) ? httpResponse.Headers[ResponseHeader.WebSocketProtocol] : default(string); }
public override WebSocket CreateWebSocket(NetworkConnection networkConnection, WebSocketListenerOptions options, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, List <IWebSocketMessageExtensionContext> negotiatedExtensions) { if (networkConnection == null) { throw new ArgumentNullException(nameof(networkConnection)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (httpRequest == null) { throw new ArgumentNullException(nameof(httpRequest)); } if (httpResponse == null) { throw new ArgumentNullException(nameof(httpResponse)); } if (negotiatedExtensions == null) { throw new ArgumentNullException(nameof(negotiatedExtensions)); } return(new WebSocketRfc6455(networkConnection, options, httpRequest, httpResponse, negotiatedExtensions)); }
public WebSocketRfc6455(Stream clientStream, WebSocketListenerOptions options, IPEndPoint local, IPEndPoint remote, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, IReadOnlyList <IWebSocketMessageExtensionContext> extensions) : base(httpRequest, httpResponse) { Guard.ParameterCannotBeNull(clientStream, "clientStream"); Guard.ParameterCannotBeNull(options, "options"); Guard.ParameterCannotBeNull(local, "local"); Guard.ParameterCannotBeNull(remote, "remote"); Guard.ParameterCannotBeNull(extensions, "extensions"); Guard.ParameterCannotBeNull(httpRequest, "httpRequest"); _remoteEndpoint = remote; _localEndpoint = local; Connection = new WebSocketConnectionRfc6455(clientStream, options); _extensions = extensions; _subprotocol = httpResponse.WebSocketProtocol; }
public WebSocketRfc6455(Stream clientStream, WebSocketListenerOptions options, IPEndPoint local, IPEndPoint remote, WebSocketHttpRequest httpRequest, WebSocketHttpResponse httpResponse, IEnumerable <IWebSocketMessageExtensionContext> extensions) : base(httpRequest, httpResponse) { Guard.ParameterCannotBeNull(clientStream, nameof(clientStream)); Guard.ParameterCannotBeNull(options, nameof(options)); Guard.ParameterCannotBeNull(local, nameof(local)); Guard.ParameterCannotBeNull(remote, nameof(remote)); Guard.ParameterCannotBeNull(extensions, nameof(extensions)); Guard.ParameterCannotBeNull(httpRequest, nameof(httpRequest)); _remoteEndpoint = remote; _localEndpoint = local; _connection = new WebSocketConnectionRfc6455(clientStream, options); _extensions = extensions; _subprotocol = httpResponse.WebSocketProtocol; }