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;
 }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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()));
                });
            });
        }
Exemplo n.º 8
0
        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);
 }
Exemplo n.º 10
0
 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));
        }
Exemplo n.º 13
0
        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;
        }