internal TcpListenerWebSocketContext(
            TcpClient tcpClient, string protocol, bool secure, ServerSslAuthConfiguration certificateConfig, Logger logger)
        {
            _tcpClient = tcpClient;
            _secure    = secure;

            var netStream = tcpClient.GetStream();

            if (secure)
            {
                var sslStream = new SslStream(netStream, false);
                sslStream.AuthenticateAsServer(certificateConfig.ServerCertificate,
                                               certificateConfig.ClientCertificateRequired, certificateConfig.EnabledSslProtocols,
                                               certificateConfig.CheckCertificateRevocation);
                _stream = sslStream;
            }
            else
            {
                _stream = netStream;
            }

            _request = HttpRequest.Read(_stream, 90000);
            _uri     = HttpUtility.CreateRequestUrl(
                _request.RequestUri, _request.Headers["Host"], _request.IsWebSocketRequest, secure);

            _websocket = new WebSocket(this, protocol, logger);
        }
    internal TcpListenerWebSocketContext (
      TcpClient tcpClient, string protocol, bool secure, ServerSslAuthConfiguration certificateConfig, Logger logger)
    {
      _tcpClient = tcpClient;
      _secure = secure;

      var netStream = tcpClient.GetStream ();
      if (secure) {
        var sslStream = new SslStream (netStream, false);
        sslStream.AuthenticateAsServer(certificateConfig.ServerCertificate,
            certificateConfig.ClientCertificateRequired, certificateConfig.EnabledSslProtocols,
            certificateConfig.CheckCertificateRevocation);
        _stream = sslStream;
      }
      else {
        _stream = netStream;
      }

      _request = HttpRequest.Read (_stream, 90000);
      _uri = HttpUtility.CreateRequestUrl (
        _request.RequestUri, _request.Headers["Host"], _request.IsWebSocketRequest, secure);

      _websocket = new WebSocket (this, protocol, logger);
    }