private void AcceptClient(TcpClient tcp) { string ip = tcp.Client.RemoteEndPoint.ToString().Split(':')[0]; //check firewall if (Firewall != null && Firewall.Enabled && !Firewall.EntryAuthority(ip)) { tcp.Close(); return; } HttpResponse response = new HttpResponse(); //ssl handshaking if (Options.UseSecureConnection) { SslStream sslStream = new SslStream(tcp.GetStream(), true); response.Stream = sslStream; try { sslStream.AuthenticateAsServer(Certificate, false, true); } catch { tcp.Close(); return; } } else { response.Stream = tcp.GetStream(); } //create request string request_data = ReadRequest(response.Stream); if (request_data == null) { tcp.Close(); return; } RequestReader reader = new RequestReader(); HttpRequest request = reader.Read(request_data); request.IpAddress = ip; request.IsSecureConnection = Options.UseSecureConnection; if (!string.IsNullOrEmpty(request.AcceptEncoding) && request.AcceptEncoding.Contains("gzip")) { response.ApplyGzip = true; } //handle request if (request.IsWebSocket) { ServerSocket client = SocketRequestHandler.HandshakeClient(this, request, tcp); client.Start(); } else { if (RequestHandler == null) { tcp.Close(); return; } RequestHandler.Request(this, request, response); ResponseWriter writer = new ResponseWriter(); writer.Write(response); tcp.Close(); } }