Skip to content

Commit ad230dd

Browse files
committed
Log exception if BeginAuthenticateAsServer() throws one
1 parent 5112516 commit ad230dd

1 file changed

Lines changed: 40 additions & 29 deletions

File tree

Src/HttpServer.cs

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -441,30 +441,46 @@ private void constructorTryBlock(Socket socket, HttpServer server, bool secure)
441441
server._activeConnectionHandlers.Add(this);
442442

443443
_stream = new NetworkStream(socket, ownsSocket: true);
444-
if (_secure)
444+
if (!_secure)
445+
receiveMoreHeaderData();
446+
else if (_server.PropagateExceptions)
447+
beginAuthenticateAsServer(server);
448+
else
445449
{
446-
var sniReader = new SniReaderStream(_stream);
447-
var sniHost = sniReader.PeekAtSniHost();
448-
var secureStream = new SslStream(sniReader);
449-
_stream = secureStream;
450-
451-
secureStream.BeginAuthenticateAsServer(
452-
// Select the most appropriate certificate
453-
serverCertificate: server.Options.CertificateResolver?.Invoke(sniHost)
454-
?? server.Options.Certificates?.Get(sniHost, null)?.GetCertificate()
455-
?? server.Options.Certificate?.GetCertificate(),
456-
enabledSslProtocols: SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12,
457-
clientCertificateRequired: false,
458-
checkCertificateRevocation: true,
459-
asyncState: null,
460-
asyncCallback: ar =>
461-
{
462-
if (_server.PropagateExceptions)
463-
{
464-
asyncCallbackTryBlock(ar, secureStream);
465-
return;
466-
}
450+
try
451+
{
452+
beginAuthenticateAsServer(server);
453+
}
454+
catch (Exception e)
455+
{
456+
_server.Log.Exception(e);
457+
try { Socket.Close(); } catch { }
458+
}
459+
}
460+
}
467461

462+
private void beginAuthenticateAsServer(HttpServer server)
463+
{
464+
var sniReader = new SniReaderStream(_stream);
465+
var sniHost = sniReader.PeekAtSniHost();
466+
var secureStream = new SslStream(sniReader);
467+
_stream = secureStream;
468+
469+
secureStream.BeginAuthenticateAsServer(
470+
// Select the most appropriate certificate
471+
serverCertificate: server.Options.CertificateResolver?.Invoke(sniHost)
472+
?? server.Options.Certificates?.Get(sniHost, null)?.GetCertificate()
473+
?? server.Options.Certificate?.GetCertificate(),
474+
enabledSslProtocols: SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12,
475+
clientCertificateRequired: false,
476+
checkCertificateRevocation: true,
477+
asyncState: null,
478+
asyncCallback: ar =>
479+
{
480+
if (_server.PropagateExceptions)
481+
asyncCallbackTryBlock(ar, secureStream);
482+
else
483+
{
468484
try
469485
{
470486
asyncCallbackTryBlock(ar, secureStream);
@@ -475,15 +491,10 @@ private void constructorTryBlock(Socket socket, HttpServer server, bool secure)
475491
// unexpected SocketExceptions; some of the code can cause RemotingExceptions when the handler
476492
// runs in another AppDomain; etc.
477493
_server.Log.Exception(e);
478-
479494
try { Socket.Close(); } catch { }
480495
}
481-
});
482-
}
483-
else
484-
{
485-
receiveMoreHeaderData();
486-
}
496+
}
497+
});
487498
}
488499

489500
private void asyncCallbackTryBlock(IAsyncResult ar, SslStream secureStream)

0 commit comments

Comments
 (0)