Пример #1
0
        private async Task ProcessWebSocketRequest(TcpListenerWebSocketContext context)
        {
            var uri = await context.GetRequestUri().ConfigureAwait(false);

            if (uri == null)
            {
                await context.Close(HttpStatusCode.BadRequest).ConfigureAwait(false);

                return;
            }

            if (_uri.IsAbsoluteUri)
            {
                var actual   = uri.DnsSafeHost;
                var expected = _uri.DnsSafeHost;
                if (Uri.CheckHostName(actual) == UriHostNameType.Dns &&
                    Uri.CheckHostName(expected) == UriHostNameType.Dns &&
                    actual != expected)
                {
                    await context.Close(HttpStatusCode.NotFound).ConfigureAwait(false);

                    return;
                }
            }

            WebSocketServiceHost host;

            if (!_services.InternalTryGetServiceHost(uri.AbsolutePath, out host))
            {
                await context.Close(HttpStatusCode.NotImplemented).ConfigureAwait(false);

                return;
            }

            await host.StartSession(context).ConfigureAwait(false);
        }