public connectionHandler(Socket socket, HttpServer server, bool secure)
{
Socket = socket;
_requestId = Rnd.Next();
_requestStart = DateTime.UtcNow;
_server = server;
_secure = secure;
_server.Log.Info(4, "{0:X8} Incoming connection from {1}".Fmt(_requestId, socket.RemoteEndPoint));
_buffer = new byte[1024];
_bufferDataOffset = 0;
_bufferDataLength = 0;
_headersSoFar = "";
lock (server._activeConnectionHandlers)
server._activeConnectionHandlers.Add(this);
var stream = new NetworkStream(socket, ownsSocket: true);
if (_secure)
{
var secureStream = new SslStream(stream);
_stream = secureStream;
secureStream.BeginAuthenticateAsServer(new X509Certificate2(server.Options.CertificatePath, server.Options.CertificatePassword), false, SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12, true, ar =>
{
try
{
secureStream.EndAuthenticateAsServer(ar);
}
catch (Exception e)
{
Socket.Close();
cleanupIfDone();
if (_server.ResponseExceptionHandler != null)
_server.ResponseExceptionHandler(null, e, null);
return;
}
receiveMoreHeaderData();
}, null);
}
else
{
_stream = stream;
receiveMoreHeaderData();
}
}