From 07e729693a1eb5293d9569175766e327a77f78b0 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 20 Mar 2017 16:52:08 -0700 Subject: [PATCH 01/20] Create Libuv and Core projects - All existing code stays in the Core package for now --- KestrelHttpServer.sln | 34 +++++++++++++++++-- .../Adapter/ConnectionAdapterContext.cs | 0 .../Adapter/IAdaptedConnection.cs | 0 .../Adapter/IConnectionAdapter.cs | 0 .../Adapter/Internal/AdaptedPipeline.cs | 0 .../Adapter/Internal/LoggingStream.cs | 0 .../Adapter/Internal/RawStream.cs | 0 .../Adapter/Internal/StreamSocketOutput.cs | 0 ...istenOptionsConnectionLoggingExtensions.cs | 0 .../Adapter/LoggingConnectionAdapter.cs | 0 .../BadHttpRequestException.cs | 0 .../Internal/Http/ChunkWriter.cs | 0 .../Internal/Http/Connection.cs | 0 .../Internal/Http/ConnectionContext.cs | 0 .../Internal/Http/ConnectionManager.cs | 0 .../Internal/Http/ConnectionOptions.cs | 0 .../Internal/Http/DateHeaderValueManager.cs | 0 .../Internal/Http/Frame.FeatureCollection.cs | 0 .../Internal/Http/Frame.Generated.cs | 0 .../Internal/Http/Frame.cs | 0 .../Internal/Http/FrameDuplexStream.cs | 0 .../Internal/Http/FrameHeaders.Generated.cs | 0 .../Internal/Http/FrameHeaders.cs | 0 .../Internal/Http/FrameOfT.cs | 0 .../Internal/Http/FrameRequestHeaders.cs | 0 .../Internal/Http/FrameRequestStream.cs | 0 .../Internal/Http/FrameResponseHeaders.cs | 0 .../Internal/Http/FrameResponseStream.cs | 0 .../Internal/Http/FrameStreamState.cs | 0 .../Internal/Http/HttpMethod.cs | 0 .../Internal/Http/HttpScheme.cs | 0 .../Internal/Http/HttpVersion.cs | 0 .../Internal/Http/IAsyncDisposable.cs | 0 .../Internal/Http/IBufferSizeControl.cs | 0 .../Internal/Http/IConnectionControl.cs | 0 .../Internal/Http/IFrameControl.cs | 0 .../Internal/Http/IHttpHeadersHandler.cs | 0 .../Internal/Http/IHttpParser.cs | 0 .../Internal/Http/IHttpRequestLineHandler.cs | 0 .../Internal/Http/ISocketOutput.cs | 0 .../Internal/Http/KestrelHttpParser.cs | 0 .../Internal/Http/Listener.cs | 0 .../Internal/Http/ListenerContext.cs | 0 .../Internal/Http/ListenerPrimary.cs | 0 .../Internal/Http/ListenerSecondary.cs | 0 .../Internal/Http/MessageBody.cs | 0 .../Internal/Http/PathNormalizer.cs | 0 .../Internal/Http/PipelineExtensions.cs | 0 .../Internal/Http/ProduceEndType.cs | 0 .../Internal/Http/ReasonPhrases.cs | 0 .../Internal/Http/RequestProcessingStatus.cs | 0 .../Internal/Http/RequestRejectionReason.cs | 0 .../Internal/Http/SocketOutput.cs | 0 .../Internal/Http/TimeoutAction.cs | 0 .../Internal/Http/TransferCoding.cs | 0 .../Internal/Infrastructure/AsciiUtilities.cs | 0 .../CancellationTokenExtensions.cs | 0 .../Internal/Infrastructure/Constants.cs | 0 .../Internal/Infrastructure/Disposable.cs | 0 .../Infrastructure/DisposableAction.cs | 0 .../Internal/Infrastructure/HttpUtilities.cs | 0 .../Internal/Infrastructure/IKestrelTrace.cs | 0 .../Internal/Infrastructure/ISystemClock.cs | 0 .../Internal/Infrastructure/IThreadPool.cs | 0 .../Infrastructure/InlineLoggingThreadPool.cs | 0 .../Infrastructure/KestrelEventSource.cs | 0 .../Internal/Infrastructure/KestrelThread.cs | 0 .../Internal/Infrastructure/KestrelTrace.cs | 0 .../Internal/Infrastructure/LibuvAwaitable.cs | 0 .../Infrastructure/LoggingThreadPool.cs | 0 .../Internal/Infrastructure/Streams.cs | 0 .../Internal/Infrastructure/SystemClock.cs | 0 .../Internal/Infrastructure/UriUtilities.cs | 0 .../Internal/Infrastructure/WriteReqPool.cs | 0 .../Internal/InternalKestrelServerOptions.cs | 0 .../Internal/KestrelEngine.cs | 0 .../Internal/KestrelServerOptionsSetup.cs | 0 .../Internal/Networking/Libuv.cs | 0 .../Internal/Networking/PlatformApis.cs | 0 .../Internal/Networking/SockAddr.cs | 0 .../Internal/Networking/UvAsyncHandle.cs | 0 .../Internal/Networking/UvConnectRequest.cs | 0 .../Internal/Networking/UvException.cs | 0 .../Internal/Networking/UvHandle.cs | 0 .../Internal/Networking/UvLoopHandle.cs | 0 .../Internal/Networking/UvMemory.cs | 0 .../Internal/Networking/UvPipeHandle.cs | 0 .../Internal/Networking/UvRequest.cs | 0 .../Internal/Networking/UvShutdownReq.cs | 0 .../Internal/Networking/UvStreamHandle.cs | 0 .../Internal/Networking/UvTcpHandle.cs | 0 .../Internal/Networking/UvTimerHandle.cs | 0 .../Internal/Networking/UvWriteReq.cs | 0 .../Internal/ServiceContext.cs | 0 .../KestrelServer.cs | 0 .../KestrelServerLimits.cs | 0 .../KestrelServerOptions.cs | 0 .../ListenOptions.cs | 0 .../ListenType.cs | 0 ...soft.AspNetCore.Server.Kestrel.Core.csproj | 31 +++++++++++++++++ .../Properties/AssemblyInfo.cs | 0 .../ServerAddress.cs | 0 .../KesterlServerOptionsSystemdExtensions.cs | 0 .../WebHostBuilderKestrelExtensions.cs | 0 .../baseline.net45.json | 0 .../baseline.netcore.json | 0 .../exceptions.net45.json | 0 .../exceptions.netcore.json | 0 ...oft.AspNetCore.Server.Kestrel.Https.csproj | 2 +- .../Class1.cs | 8 +++++ ...oft.AspNetCore.Server.Kestrel.Libuv.csproj | 21 ++++++++++++ .../Class1.cs | 8 +++++ ...Microsoft.AspNetCore.Server.Kestrel.csproj | 17 ++-------- .../GeneratedCodeTests.cs | 4 +-- tools/CodeGenerator/CodeGenerator.csproj | 4 +-- 115 files changed, 107 insertions(+), 22 deletions(-) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/ConnectionAdapterContext.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/IAdaptedConnection.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/IConnectionAdapter.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/Internal/AdaptedPipeline.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/Internal/LoggingStream.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/Internal/RawStream.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/Internal/StreamSocketOutput.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/ListenOptionsConnectionLoggingExtensions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Adapter/LoggingConnectionAdapter.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/BadHttpRequestException.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ChunkWriter.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/Connection.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ConnectionContext.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ConnectionManager.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ConnectionOptions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/DateHeaderValueManager.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/Frame.FeatureCollection.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/Frame.Generated.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/Frame.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameDuplexStream.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameHeaders.Generated.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameHeaders.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameOfT.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameRequestHeaders.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameRequestStream.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameResponseHeaders.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameResponseStream.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/FrameStreamState.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/HttpMethod.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/HttpScheme.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/HttpVersion.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IAsyncDisposable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IBufferSizeControl.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IConnectionControl.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IFrameControl.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IHttpHeadersHandler.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IHttpParser.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/IHttpRequestLineHandler.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ISocketOutput.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/KestrelHttpParser.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/Listener.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ListenerContext.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ListenerPrimary.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ListenerSecondary.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/MessageBody.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/PathNormalizer.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/PipelineExtensions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ProduceEndType.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/ReasonPhrases.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/RequestProcessingStatus.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/RequestRejectionReason.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/SocketOutput.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/TimeoutAction.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Http/TransferCoding.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/AsciiUtilities.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/CancellationTokenExtensions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/Constants.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/Disposable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/DisposableAction.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/HttpUtilities.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/IKestrelTrace.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/ISystemClock.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/IThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/InlineLoggingThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/KestrelEventSource.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/KestrelThread.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/KestrelTrace.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/LibuvAwaitable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/LoggingThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/Streams.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/SystemClock.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/UriUtilities.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/WriteReqPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/InternalKestrelServerOptions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/KestrelEngine.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/KestrelServerOptionsSetup.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/Libuv.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/PlatformApis.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/SockAddr.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvAsyncHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvConnectRequest.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvException.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvLoopHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvMemory.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvPipeHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvRequest.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvShutdownReq.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvStreamHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvTcpHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvTimerHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Networking/UvWriteReq.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/ServiceContext.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/KestrelServer.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/KestrelServerLimits.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/KestrelServerOptions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/ListenOptions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/ListenType.cs (100%) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Properties/AssemblyInfo.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/ServerAddress.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/Systemd/KesterlServerOptionsSystemdExtensions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/WebHostBuilderKestrelExtensions.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/baseline.net45.json (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/baseline.netcore.json (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/exceptions.net45.json (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel => Microsoft.AspNetCore.Server.Kestrel.Core}/exceptions.netcore.json (100%) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs diff --git a/KestrelHttpServer.sln b/KestrelHttpServer.sln index 1df13131e..3db498fe1 100644 --- a/KestrelHttpServer.sln +++ b/KestrelHttpServer.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.4 +VisualStudioVersion = 15.0.26228.9 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7972A5D6-3385-4127-9277-428506DD44FF}" ProjectSection(SolutionItems) = preProject @@ -40,7 +40,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{0EF2AC test\shared\TestServiceContext.cs = test\shared\TestServiceContext.cs EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "src\Microsoft.AspNetCore.Server.Kestrel\Microsoft.AspNetCore.Server.Kestrel.csproj", "{F510611A-3BEE-4B88-A613-5F4A74ED82A1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Core", "src\Microsoft.AspNetCore.Server.Kestrel.Core\Microsoft.AspNetCore.Server.Kestrel.Core.csproj", "{F510611A-3BEE-4B88-A613-5F4A74ED82A1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.KestrelTests", "test\Microsoft.AspNetCore.Server.KestrelTests\Microsoft.AspNetCore.Server.KestrelTests.csproj", "{37F3BFB2-6454-49E5-9D7F-581BF755CCFE}" EndProject @@ -61,6 +61,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestResources", "TestResour test\shared\TestResources\testCert.pfx = test\shared\TestResources\testCert.pfx EndProjectSection EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Libuv", "src\Microsoft.AspNetCore.Server.Kestrel.Libuv\Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj", "{A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "src\Microsoft.AspNetCore.Server.Kestrel\Microsoft.AspNetCore.Server.Kestrel.csproj", "{56139957-5C29-4E7D-89BD-7D20598B4EAF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -167,6 +171,30 @@ Global {EBFE9719-A44B-4978-A71F-D5C254E7F35A}.Release|x64.Build.0 = Release|Any CPU {EBFE9719-A44B-4978-A71F-D5C254E7F35A}.Release|x86.ActiveCfg = Release|Any CPU {EBFE9719-A44B-4978-A71F-D5C254E7F35A}.Release|x86.Build.0 = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|x64.ActiveCfg = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|x64.Build.0 = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|x86.ActiveCfg = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Debug|x86.Build.0 = Debug|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|Any CPU.Build.0 = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|x64.ActiveCfg = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|x64.Build.0 = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|x86.ActiveCfg = Release|Any CPU + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}.Release|x86.Build.0 = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|x64.ActiveCfg = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|x64.Build.0 = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|x86.ActiveCfg = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Debug|x86.Build.0 = Debug|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|Any CPU.Build.0 = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|x64.ActiveCfg = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|x64.Build.0 = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|x86.ActiveCfg = Release|Any CPU + {56139957-5C29-4E7D-89BD-7D20598B4EAF}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -182,5 +210,7 @@ Global {9559A5F1-080C-4909-B6CF-7E4B3DC55748} = {D3273454-EA07-41D2-BF0B-FCC3675C2483} {EBFE9719-A44B-4978-A71F-D5C254E7F35A} = {D3273454-EA07-41D2-BF0B-FCC3675C2483} {2822C132-BFFB-4D53-AC5B-E7E47DD81A6E} = {0EF2ACDF-012F-4472-A13A-4272419E2903} + {A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4} = {2D5D5227-4DBD-499A-96B1-76A36B03B750} + {56139957-5C29-4E7D-89BD-7D20598B4EAF} = {2D5D5227-4DBD-499A-96B1-76A36B03B750} EndGlobalSection EndGlobal diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/ConnectionAdapterContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/ConnectionAdapterContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/ConnectionAdapterContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/ConnectionAdapterContext.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/IAdaptedConnection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IAdaptedConnection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/IAdaptedConnection.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IAdaptedConnection.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/IConnectionAdapter.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/IConnectionAdapter.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/AdaptedPipeline.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/AdaptedPipeline.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/LoggingStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/LoggingStream.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/LoggingStream.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/RawStream.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/StreamSocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/Internal/StreamSocketOutput.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/ListenOptionsConnectionLoggingExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/ListenOptionsConnectionLoggingExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/ListenOptionsConnectionLoggingExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/ListenOptionsConnectionLoggingExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Adapter/LoggingConnectionAdapter.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/LoggingConnectionAdapter.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Adapter/LoggingConnectionAdapter.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/LoggingConnectionAdapter.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/BadHttpRequestException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/BadHttpRequestException.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/BadHttpRequestException.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/BadHttpRequestException.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ChunkWriter.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ChunkWriter.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Connection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Connection.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Connection.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionContext.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionManager.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionManager.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ConnectionOptions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionOptions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/DateHeaderValueManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/DateHeaderValueManager.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.FeatureCollection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.FeatureCollection.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.Generated.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.Generated.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.Generated.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.Generated.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameDuplexStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameDuplexStream.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameDuplexStream.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.Generated.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameHeaders.Generated.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.Generated.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameHeaders.Generated.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameHeaders.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameHeaders.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameOfT.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameOfT.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestHeaders.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestHeaders.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestHeaders.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestHeaders.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameRequestStream.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseHeaders.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseHeaders.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameResponseStream.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameStreamState.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameStreamState.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameStreamState.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameStreamState.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpMethod.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpMethod.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpMethod.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpMethod.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpScheme.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpScheme.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpScheme.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpScheme.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpVersion.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpVersion.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/HttpVersion.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/HttpVersion.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IAsyncDisposable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IAsyncDisposable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IAsyncDisposable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IAsyncDisposable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IBufferSizeControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IBufferSizeControl.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IConnectionControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IConnectionControl.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IConnectionControl.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IConnectionControl.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IFrameControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IFrameControl.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IFrameControl.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IFrameControl.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpHeadersHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpHeadersHandler.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpHeadersHandler.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpHeadersHandler.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpParser.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpParser.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpParser.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpParser.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpRequestLineHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpRequestLineHandler.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/IHttpRequestLineHandler.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IHttpRequestLineHandler.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ISocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ISocketOutput.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/KestrelHttpParser.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/KestrelHttpParser.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Listener.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Listener.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Listener.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Listener.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerContext.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerPrimary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerPrimary.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerPrimary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerPrimary.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerSecondary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerSecondary.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ListenerSecondary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerSecondary.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/MessageBody.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/MessageBody.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/PathNormalizer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/PathNormalizer.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/PathNormalizer.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/PathNormalizer.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/PipelineExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/PipelineExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/PipelineExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/PipelineExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ProduceEndType.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ProduceEndType.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ProduceEndType.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ProduceEndType.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ReasonPhrases.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ReasonPhrases.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/ReasonPhrases.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ReasonPhrases.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/RequestProcessingStatus.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/RequestProcessingStatus.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/RequestProcessingStatus.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/RequestProcessingStatus.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/RequestRejectionReason.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/RequestRejectionReason.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/RequestRejectionReason.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/RequestRejectionReason.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutput.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/SocketOutput.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutput.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/TimeoutAction.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/TimeoutAction.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/TimeoutAction.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/TimeoutAction.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/TransferCoding.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/TransferCoding.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/TransferCoding.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/TransferCoding.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/AsciiUtilities.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/AsciiUtilities.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/AsciiUtilities.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/AsciiUtilities.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/CancellationTokenExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/CancellationTokenExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/CancellationTokenExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/CancellationTokenExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Constants.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Constants.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Disposable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Disposable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Disposable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Disposable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/DisposableAction.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/DisposableAction.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/DisposableAction.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/DisposableAction.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/HttpUtilities.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/HttpUtilities.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/HttpUtilities.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/HttpUtilities.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/IKestrelTrace.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IKestrelTrace.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/IKestrelTrace.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IKestrelTrace.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/ISystemClock.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/ISystemClock.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/ISystemClock.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/ISystemClock.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/IThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/IThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/InlineLoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/InlineLoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelEventSource.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelEventSource.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelThread.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelThread.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelThread.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelTrace.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelTrace.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/KestrelTrace.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelTrace.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/LibuvAwaitable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LibuvAwaitable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/LibuvAwaitable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LibuvAwaitable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/LoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/LoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Streams.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Streams.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/Streams.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Streams.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/SystemClock.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/SystemClock.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/SystemClock.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/SystemClock.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/UriUtilities.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/UriUtilities.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/UriUtilities.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/UriUtilities.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/WriteReqPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/WriteReqPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Infrastructure/WriteReqPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/WriteReqPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/InternalKestrelServerOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/InternalKestrelServerOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/InternalKestrelServerOptions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/InternalKestrelServerOptions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/KestrelEngine.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/KestrelServerOptionsSetup.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelServerOptionsSetup.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/KestrelServerOptionsSetup.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelServerOptionsSetup.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/Libuv.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/Libuv.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/Libuv.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/Libuv.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/PlatformApis.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/PlatformApis.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/PlatformApis.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/PlatformApis.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/SockAddr.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/SockAddr.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/SockAddr.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/SockAddr.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvAsyncHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvAsyncHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvAsyncHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvAsyncHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvConnectRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvConnectRequest.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvConnectRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvConnectRequest.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvException.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvException.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvException.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvLoopHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvLoopHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvLoopHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvLoopHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvMemory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvMemory.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvMemory.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvMemory.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvPipeHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvPipeHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvPipeHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvPipeHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvRequest.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvRequest.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvShutdownReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvShutdownReq.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvShutdownReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvShutdownReq.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvStreamHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvStreamHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvStreamHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvStreamHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvTcpHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTcpHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvTcpHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTcpHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvTimerHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTimerHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvTimerHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTimerHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvWriteReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvWriteReq.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/Networking/UvWriteReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvWriteReq.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Internal/ServiceContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Internal/ServiceContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/KestrelServer.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/KestrelServerLimits.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerLimits.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/KestrelServerLimits.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerLimits.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/KestrelServerOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/KestrelServerOptions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/ListenOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/ListenOptions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/ListenType.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenType.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/ListenType.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenType.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj new file mode 100644 index 000000000..9902669e3 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj @@ -0,0 +1,31 @@ + + + + + + Core components of ASP.NET Core Kestrel cross-platform web server. + net451;netstandard1.3 + true + aspnetcore;kestrel + true + CS1591;$(NoWarn) + + + + + + + + + + + + + + + + + + + + diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Properties/AssemblyInfo.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Properties/AssemblyInfo.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/ServerAddress.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ServerAddress.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/ServerAddress.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/ServerAddress.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Systemd/KesterlServerOptionsSystemdExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Systemd/KesterlServerOptionsSystemdExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/Systemd/KesterlServerOptionsSystemdExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Systemd/KesterlServerOptionsSystemdExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/WebHostBuilderKestrelExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/WebHostBuilderKestrelExtensions.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/WebHostBuilderKestrelExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/WebHostBuilderKestrelExtensions.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/baseline.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/baseline.net45.json rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/baseline.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/baseline.netcore.json rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/exceptions.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/exceptions.net45.json rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/exceptions.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel/exceptions.netcore.json rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj index 2e425cd7e..4a024bc17 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs new file mode 100644 index 000000000..9473b492e --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +{ + public class Class1 + { + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj new file mode 100644 index 000000000..1b1264eb4 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj @@ -0,0 +1,21 @@ + + + + + + Libuv transport for the ASP.NET Core Kestrel cross-platform web server. + net451;netstandard1.3 + true + aspnetcore;kestrel + CS1591;$(NoWarn) + + + + + + + + + + + diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs new file mode 100644 index 000000000..61030ae8a --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace Microsoft.AspNetCore.Server.Kestrel +{ + public class Class1 + { + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj index 796b8296c..8df1496ce 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj @@ -7,25 +7,12 @@ netstandard1.3;net46 true aspnetcore;kestrel - true CS1591;$(NoWarn) - - - - - - - - - - - - - - + + diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs index 3fa3d8902..b295ee52d 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/GeneratedCodeTests.cs @@ -13,8 +13,8 @@ public class GeneratedCodeTests [Fact] public void GeneratedCodeIsUpToDate() { - const string frameHeadersGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/FrameHeaders.Generated.cs"; - const string frameGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel/Internal/Http/Frame.Generated.cs"; + const string frameHeadersGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameHeaders.Generated.cs"; + const string frameGeneratedPath = "../../../../../src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.Generated.cs"; var testFrameHeadersGeneratedPath = Path.GetTempFileName(); var testFrameGeneratedPath = Path.GetTempFileName(); diff --git a/tools/CodeGenerator/CodeGenerator.csproj b/tools/CodeGenerator/CodeGenerator.csproj index ac3179023..5f3f1c720 100644 --- a/tools/CodeGenerator/CodeGenerator.csproj +++ b/tools/CodeGenerator/CodeGenerator.csproj @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ - $(MSBuildThisFileDirectory)..\..\src\Microsoft.AspNetCore.Server.Kestrel\Internal\Http + $(MSBuildThisFileDirectory)..\..\src\Microsoft.AspNetCore.Server.Kestrel.Core\Internal\Http FrameHeaders.Generated.cs Frame.Generated.cs From b953daa378c925a1237b0ec3f33bb63db1bad001 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 20 Mar 2017 16:57:57 -0700 Subject: [PATCH 02/20] Add transport interfaces --- .../Transport/IConnectionContext.cs | 14 ++++++++++++++ .../Transport/IConnectionHandler.cs | 12 ++++++++++++ .../Transport/IConnectionInformation.cs | 9 +++++++++ .../Transport/ITransport.cs | 15 +++++++++++++++ .../Transport/ITransportFactory.cs | 10 ++++++++++ 5 files changed, 60 insertions(+) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransport.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransportFactory.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs new file mode 100644 index 000000000..a245388b9 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs @@ -0,0 +1,14 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO.Pipelines; + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport +{ + public interface IConnectionContext + { + string ConnectionId { get; } + IPipeWriter Input { get; } + IPipeReader Output { get; } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs new file mode 100644 index 000000000..e93e894ec --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs @@ -0,0 +1,12 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO.Pipelines; + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport +{ + public interface IConnectionHandler + { + IConnectionContext OnConnection(IConnectionInformation connectionInfo, PipeOptions inputOptions, PipeOptions outputOptions); + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs new file mode 100644 index 000000000..8c1ce9ad3 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs @@ -0,0 +1,9 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport +{ + public interface IConnectionInformation + { + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransport.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransport.cs new file mode 100644 index 000000000..7aeea940f --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransport.cs @@ -0,0 +1,15 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Threading.Tasks; + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport +{ + public interface ITransport + { + // Can only be called once per ITransport + Task BindAsync(); + Task UnbindAsync(); + Task StopAsync(); + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransportFactory.cs new file mode 100644 index 000000000..74eef3d3d --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/ITransportFactory.cs @@ -0,0 +1,10 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport +{ + public interface ITransportFactory + { + ITransport Create(ListenOptions listenOptions, IConnectionHandler handler); + } +} From cd39ec448fba1311ef25ff335cc595e148d7967c Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 22 Mar 2017 19:16:10 -0700 Subject: [PATCH 03/20] WIP --- samples/SampleApp/SampleApp.csproj | 2 + .../Internal/ConnectionHandler.cs | 183 +++++++++++ .../Internal/Http/DateHeaderValueManager.cs | 4 +- .../Internal/Http/Frame.cs | 45 +-- .../Internal/Http/FrameContext.cs | 21 ++ .../Internal/Http/FrameOfT.cs | 33 +- .../Internal/Http/MessageBody.cs | 10 +- ...ocketOutput.cs => SocketOutputProducer.cs} | 162 ++-------- .../Internal/Infrastructure/Constants.cs | 41 --- .../Infrastructure/KestrelEventSource.cs | 130 ++++---- .../Internal/KestrelEngine.cs | 130 -------- .../Internal/ServiceContext.cs | 7 - .../KestrelServer.cs | 303 ++++++++++-------- .../KestrelServerOptions.cs | 2 +- .../ListenOptions.cs | 2 +- .../Transport/IConnectionContext.cs | 9 + .../Transport/IConnectionInformation.cs | 8 + .../Class1.cs | 8 - .../Internal/Http/Connection.cs | 262 +++++++-------- .../Internal/Http/ConnectionContext.cs | 11 +- .../Internal/Http/ConnectionManager.cs | 0 .../Internal/Http/IAsyncDisposable.cs | 0 .../Internal/Http/Listener.cs | 6 +- .../Internal/Http/ListenerContext.cs | 26 +- .../Internal/Http/ListenerPrimary.cs | 5 +- .../Internal/Http/ListenerSecondary.cs | 9 +- .../Internal/Http/SocketOutputConsumer.cs | 151 +++++++++ .../Internal/Infrastructure/Constants.cs | 50 +++ .../Internal/Infrastructure/IThreadPool.cs | 0 .../Infrastructure/InlineLoggingThreadPool.cs | 0 .../Internal/Infrastructure/KestrelThread.cs | 10 +- .../Internal/Infrastructure/LibuvAwaitable.cs | 0 .../Infrastructure/LoggingThreadPool.cs | 0 .../Internal/Infrastructure/WriteReqPool.cs | 0 .../Internal/LibuvTransportContext.cs | 22 ++ .../Internal/Networking/Libuv.cs | 8 +- .../Internal/Networking/PlatformApis.cs | 0 .../Internal/Networking/SockAddr.cs | 0 .../Internal/Networking/UvAsyncHandle.cs | 6 +- .../Internal/Networking/UvConnectRequest.cs | 4 +- .../Internal/Networking/UvException.cs | 0 .../Internal/Networking/UvHandle.cs | 4 +- .../Internal/Networking/UvLoopHandle.cs | 2 +- .../Internal/Networking/UvMemory.cs | 6 +- .../Internal/Networking/UvPipeHandle.cs | 2 +- .../Internal/Networking/UvRequest.cs | 0 .../Internal/Networking/UvShutdownReq.cs | 4 +- .../Internal/Networking/UvStreamHandle.cs | 16 +- .../Internal/Networking/UvTcpHandle.cs | 2 +- .../Internal/Networking/UvTimerHandle.cs | 4 +- .../Internal/Networking/UvWriteReq.cs | 18 +- .../KestrelEngine.cs | 137 ++++++++ .../LibuvTransportFactory.cs | 75 +++++ .../LibuvTransportLimits.cs | 68 ++++ .../LibuvTransportOptions.cs | 71 ++++ ...oft.AspNetCore.Server.Kestrel.Libuv.csproj | 2 + .../WebHostBuilderLibuvExtensions.cs | 50 +++ .../Class1.cs | 8 - .../WebHostBuilderKestrelExtensions.cs | 2 + 59 files changed, 1333 insertions(+), 808 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs rename src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/{SocketOutput.cs => SocketOutputProducer.cs} (51%) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/Connection.cs (55%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/ConnectionContext.cs (75%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/ConnectionManager.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/IAsyncDisposable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/Listener.cs (96%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/ListenerContext.cs (69%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/ListenerPrimary.cs (97%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Http/ListenerSecondary.cs (95%) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/IThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/InlineLoggingThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/KestrelThread.cs (97%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/LibuvAwaitable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/LoggingThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Infrastructure/WriteReqPool.cs (100%) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/Libuv.cs (99%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/PlatformApis.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/SockAddr.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvAsyncHandle.cs (88%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvConnectRequest.cs (90%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvException.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvHandle.cs (93%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvLoopHandle.cs (96%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvMemory.cs (93%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvPipeHandle.cs (90%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvRequest.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvShutdownReq.cs (88%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvStreamHandle.cs (86%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvTcpHandle.cs (95%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvTimerHandle.cs (90%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel.Libuv}/Internal/Networking/UvWriteReq.cs (91%) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs rename src/{Microsoft.AspNetCore.Server.Kestrel.Core => Microsoft.AspNetCore.Server.Kestrel}/WebHostBuilderKestrelExtensions.cs (98%) diff --git a/samples/SampleApp/SampleApp.csproj b/samples/SampleApp/SampleApp.csproj index 1c71f51d3..8aa2355a1 100644 --- a/samples/SampleApp/SampleApp.csproj +++ b/samples/SampleApp/SampleApp.csproj @@ -12,6 +12,8 @@ + + diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs new file mode 100644 index 000000000..6d52ea947 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -0,0 +1,183 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO.Pipelines; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting.Server; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Transport; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal +{ + public class ConnectionHandler : IConnectionHandler, IDisposable + { + // Base32 encoding - in ascii sort order for easy text based sorting + private static readonly string _encode32Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; + + // Seed the _lastConnectionId for this application instance with + // the number of 100-nanosecond intervals that have elapsed since 12:00:00 midnight, January 1, 0001 + // for a roughly increasing _requestId over restarts + private static long _lastConnectionId = DateTime.UtcNow.Ticks; + + private readonly ServiceContext _serviceContext; + private readonly IHttpApplication _application; + private readonly PipeFactory _pipeFactory; + + public ConnectionHandler(ServiceContext serviceContext, IHttpApplication application) + { + _serviceContext = serviceContext; + _application = application; + _pipeFactory = new PipeFactory(); + } + + public IConnectionContext OnConnection(IConnectionInformation connectionInfo, PipeOptions inputOptions, PipeOptions outputOptions) + { + var inputPipe = _pipeFactory.Create(inputOptions); + var outputPipe = _pipeFactory.Create(outputOptions); + + var connectionId = GenerateConnectionId(Interlocked.Increment(ref _lastConnectionId)); + + var frameContext = new FrameContext + { + ConnectionId = connectionId, + ConnectionInformation = connectionInfo, + ServiceContext = _serviceContext, + Input = inputPipe.Reader, + Output = outputPipe.Writer + }; + + var frame = new Frame(_application, frameContext); + frame.Start(); + + return new ConnectionContext(frame) + { + ConnectionId = connectionId, + Input = inputPipe.Writer, + Output = outputPipe.Reader, + }; + } + + //private void StartFrame() + //{ + // if (_connectionAdapters.Count == 0) + // { + // _frame.Start(); + // } + // else + // { + // // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). + // // Otherwise, it will close the connection. + // var ignore = ApplyConnectionAdaptersAsync(); + // } + //} + + //private async Task ApplyConnectionAdaptersAsync(ConnectionContext connectionContext, FrameContext frameContext) + //{ + // try + // { + // var rawStream = new RawStream(Input.Reader, Output); + // var adapterContext = new ConnectionAdapterContext(rawStream); + // var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; + + // for (var i = 0; i < _connectionAdapters.Count; i++) + // { + // var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); + // adaptedConnections[i] = adaptedConnection; + // adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); + // } + + // if (adapterContext.ConnectionStream != rawStream) + // { + // _filteredStream = adapterContext.ConnectionStream; + // _adaptedPipeline = new AdaptedPipeline( + // adapterContext.ConnectionStream, + // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions), + // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions)); + + // _frame.Input = _adaptedPipeline.Input; + // _frame.Output = _adaptedPipeline.Output; + + // // Don't attempt to read input if connection has already closed. + // // This can happen if a client opens a connection and immediately closes it. + // _readInputTask = _socketClosedTcs.Task.Status == TaskStatus.WaitingForActivation + // ? _adaptedPipeline.StartAsync() + // : TaskCache.CompletedTask; + // } + + // _frame.AdaptedConnections = adaptedConnections; + // _frame.Start(); + // } + // catch (Exception ex) + // { + // Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); + // Input.Reader.Complete(); + // ConnectionControl.End(ProduceEndType.SocketDisconnect); + // } + //} + + public void Dispose() + { + _pipeFactory.Dispose(); + } + + private static unsafe string GenerateConnectionId(long id) + { + // The following routine is ~310% faster than calling long.ToString() on x64 + // and ~600% faster than calling long.ToString() on x86 in tight loops of 1 million+ iterations + // See: https://github.com/aspnet/Hosting/pull/385 + + // stackalloc to allocate array on stack rather than heap + char* charBuffer = stackalloc char[13]; + + charBuffer[0] = _encode32Chars[(int)(id >> 60) & 31]; + charBuffer[1] = _encode32Chars[(int)(id >> 55) & 31]; + charBuffer[2] = _encode32Chars[(int)(id >> 50) & 31]; + charBuffer[3] = _encode32Chars[(int)(id >> 45) & 31]; + charBuffer[4] = _encode32Chars[(int)(id >> 40) & 31]; + charBuffer[5] = _encode32Chars[(int)(id >> 35) & 31]; + charBuffer[6] = _encode32Chars[(int)(id >> 30) & 31]; + charBuffer[7] = _encode32Chars[(int)(id >> 25) & 31]; + charBuffer[8] = _encode32Chars[(int)(id >> 20) & 31]; + charBuffer[9] = _encode32Chars[(int)(id >> 15) & 31]; + charBuffer[10] = _encode32Chars[(int)(id >> 10) & 31]; + charBuffer[11] = _encode32Chars[(int)(id >> 5) & 31]; + charBuffer[12] = _encode32Chars[(int)id & 31]; + + // string ctor overload that takes char* + return new string(charBuffer, 0, 13); + } + + private class ConnectionContext : IConnectionContext + { + private readonly Frame _frame; + + public ConnectionContext(Frame frame) + { + _frame = frame; + } + + public string ConnectionId { get; set; } + public IPipeWriter Input { get; set; } + public IPipeReader Output { get; set; } + + public Task StopAsync() + { + return _frame.StopAsync(); + } + + public void Abort(Exception ex) + { + _frame.Abort(ex); + } + + public void SetBadRequestState(RequestRejectionReason reason) + { + _frame.SetBadRequestState(reason); + } + + public Task FrameStartedTask => _frame.FrameStartedTask; + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs index cb36c22d3..57f68967a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/DateHeaderValueManager.cs @@ -6,7 +6,6 @@ using System.Threading; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.Net.Http.Headers; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { @@ -159,7 +158,8 @@ private void TimerLoop(object state) } // No requests since the last timer tick, we need to check if we're beyond the idle threshold - if ((now.Ticks - PlatformApis.VolatileRead(ref _lastRequestSeenTicks)) >= _timeWithoutRequestsUntilIdle.Ticks) + // TODO: Use PlatformApis.VolatileRead equivalent again + if ((now.Ticks - Interlocked.Read(ref _lastRequestSeenTicks)) >= _timeWithoutRequestsUntilIdle.Ticks) { // No requests since idle threshold so stop the timer if it's still running StopTimer(); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index bdaae0f44..b3ad17433 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Adapter; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Primitives; @@ -77,37 +78,39 @@ public abstract partial class Frame : IFrameControl, IHttpRequestLineHandler, IH protected long _responseBytesWritten; + private readonly FrameContext _frameContext; private readonly IHttpParser _parser; - public Frame(ConnectionContext context) + public Frame(FrameContext frameContext) { - ConnectionContext = context; - Input = context.Input; - Output = context.Output; + _frameContext = frameContext; + Output = new SocketOutputProducer(frameContext.Output, this, ConnectionId, Log); - ServerOptions = context.ListenerContext.ServiceContext.ServerOptions; + ServerOptions = ServiceContext.ServerOptions; - _parser = context.ListenerContext.ServiceContext.HttpParserFactory(this); + _parser = ServiceContext.HttpParserFactory(this); FrameControl = this; _keepAliveMilliseconds = (long)ServerOptions.Limits.KeepAliveTimeout.TotalMilliseconds; _requestHeadersTimeoutMilliseconds = (long)ServerOptions.Limits.RequestHeadersTimeout.TotalMilliseconds; } - public ConnectionContext ConnectionContext { get; } - public IPipe Input { get; set; } + public ServiceContext ServiceContext => _frameContext.ServiceContext; + public IConnectionInformation ConnectionInformation => _frameContext.ConnectionInformation; + + public IPipeReader Input => _frameContext.Input; public ISocketOutput Output { get; set; } public IEnumerable AdaptedConnections { get; set; } - protected IConnectionControl ConnectionControl => ConnectionContext.ConnectionControl; - protected IKestrelTrace Log => ConnectionContext.ListenerContext.ServiceContext.Log; + protected IConnectionControl ConnectionControl => ConnectionInformation.ConnectionControl; + protected IKestrelTrace Log => ServiceContext.Log; - private DateHeaderValueManager DateHeaderValueManager => ConnectionContext.ListenerContext.ServiceContext.DateHeaderValueManager; + private DateHeaderValueManager DateHeaderValueManager => ServiceContext.DateHeaderValueManager; // Hold direct reference to ServerOptions since this is used very often in the request processing path private KestrelServerOptions ServerOptions { get; } - private IPEndPoint LocalEndPoint => ConnectionContext.LocalEndPoint; - private IPEndPoint RemoteEndPoint => ConnectionContext.RemoteEndPoint; - protected string ConnectionId => ConnectionContext.ConnectionId; + private IPEndPoint LocalEndPoint => ConnectionInformation.LocalEndPoint; + private IPEndPoint RemoteEndPoint => ConnectionInformation.RemoteEndPoint; + protected string ConnectionId => _frameContext.ConnectionId; public string ConnectionIdFeature { get; set; } public IPAddress RemoteIpAddress { get; set; } @@ -404,7 +407,7 @@ public void Start() public Task StopAsync() { _requestProcessingStopping = true; - Input.Reader.CancelPendingRead(); + Input.CancelPendingRead(); return _requestProcessingTask ?? TaskCache.CompletedTask; } @@ -423,7 +426,7 @@ public void Abort(Exception error = null) try { - ConnectionControl.End(ProduceEndType.SocketDisconnect); + End(ProduceEndType.SocketDisconnect); } catch (Exception ex) { @@ -856,7 +859,7 @@ private Task WriteSuffix() if (_keepAlive) { - ConnectionControl.End(ProduceEndType.ConnectionKeepAlive); + End(ProduceEndType.ConnectionKeepAlive); } if (HttpMethods.IsHead(Method) && _responseBytesWritten > 0) @@ -876,7 +879,7 @@ private async Task WriteAutoChunkSuffixAwaited() if (_keepAlive) { - ConnectionControl.End(ProduceEndType.ConnectionKeepAlive); + End(ProduceEndType.ConnectionKeepAlive); } } @@ -1201,6 +1204,12 @@ protected void ReportApplicationError(Exception ex) Log.ApplicationError(ConnectionId, ex); } + protected void End(ProduceEndType endType) + { + ConnectionControl.End(endType); + _frameContext.Output.Complete(); + } + public void OnStartLine(HttpMethod method, HttpVersion version, Span target, Span path, Span query, Span customMethod, bool pathEncoded) { Debug.Assert(target.Length != 0, "Request target must be non-zero length"); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs new file mode 100644 index 000000000..3f727ad60 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs @@ -0,0 +1,21 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.IO.Pipelines; +using Microsoft.AspNetCore.Server.Kestrel.Adapter; +using Microsoft.AspNetCore.Server.Kestrel.Transport; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http +{ + public class FrameContext + { + public string ConnectionId { get; set; } + public IConnectionInformation ConnectionInformation { get; set; } + public IEnumerable AdaptedConnections { get; set; } + public ServiceContext ServiceContext { get; set; } + + public IPipeReader Input { get; set; } + public IPipeWriter Output { get; set; } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs index 8b710aab1..831165de6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs @@ -2,12 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting.Server; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -16,8 +13,8 @@ public class Frame : Frame { private readonly IHttpApplication _application; - public Frame(IHttpApplication application, ConnectionContext context) - : base(context) + public Frame(IHttpApplication application, FrameContext frameContext) + : base(frameContext) { _application = application; } @@ -40,7 +37,7 @@ public override async Task RequestProcessingAsync() while (!_requestProcessingStopping) { - var result = await Input.Reader.ReadAsync(); + var result = await Input.ReadAsync(); var examined = result.Buffer.End; var consumed = result.Buffer.End; @@ -58,7 +55,7 @@ public override async Task RequestProcessingAsync() } finally { - Input.Reader.Advance(consumed, examined); + Input.Advance(consumed, examined); } if (_requestProcessingStatus == RequestProcessingStatus.AppStarted) @@ -190,15 +187,15 @@ public override async Task RequestProcessingAsync() // SetBadRequestState logs the error. SetBadRequestState(ex); } - catch (IOException ex) when (ex.InnerException is UvException) - { - // Don't log ECONNRESET errors made between requests. Browsers like IE will reset connections regularly. - if (_requestProcessingStatus != RequestProcessingStatus.RequestPending || - ((UvException)ex.InnerException).StatusCode != Constants.ECONNRESET) - { - Log.RequestProcessingError(ConnectionId, ex); - } - } + //catch (IOException ex) when (ex.InnerException is UvException) + //{ + // // Don't log ECONNRESET errors made between requests. Browsers like IE will reset connections regularly. + // if (_requestProcessingStatus != RequestProcessingStatus.RequestPending || + // ((UvException)ex.InnerException).StatusCode != Constants.ECONNRESET) + // { + // Log.RequestProcessingError(ConnectionId, ex); + // } + //} catch (Exception ex) { Log.LogWarning(0, ex, "Connection processing ended abnormally"); @@ -207,12 +204,12 @@ public override async Task RequestProcessingAsync() { try { - Input.Reader.Complete(); + Input.Complete(); // If _requestAborted is set, the connection has already been closed. if (Volatile.Read(ref _requestAborted) == 0) { await TryProduceInvalidRequestResponse(); - ConnectionControl.End(ProduceEndType.SocketShutdown); + End(ProduceEndType.SocketShutdown); } } catch (Exception ex) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs index 8a817b82b..03130d762 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/MessageBody.cs @@ -215,9 +215,9 @@ private void TryProduceContinue() private void ConsumedBytes(int count) { - var scan = _context.Input.Reader.ReadAsync().GetResult().Buffer; + var scan = _context.Input.ReadAsync().GetResult().Buffer; var consumed = scan.Move(scan.Start, count); - _context.Input.Reader.Advance(consumed, consumed); + _context.Input.Advance(consumed, consumed); OnConsumedBytes(count); } @@ -304,7 +304,7 @@ public ForRemainingData(bool upgrade, Frame context) protected override ValueTask> PeekAsync(CancellationToken cancellationToken) { - return _context.Input.Reader.PeekAsync(); + return _context.Input.PeekAsync(); } } @@ -351,7 +351,7 @@ protected override ValueTask> PeekAsync(CancellationToken can return new ValueTask>(); } - var task = _context.Input.Reader.PeekAsync(); + var task = _context.Input.PeekAsync(); if (task.IsCompleted) { @@ -423,7 +423,7 @@ public ForChunkedEncoding(bool keepAlive, FrameRequestHeaders headers, Frame con : base(context) { RequestKeepAlive = keepAlive; - _input = _context.Input.Reader; + _input = _context.Input; _requestHeaders = headers; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs similarity index 51% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutput.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs index 6f8148932..1e8161998 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs @@ -6,18 +6,14 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { - public class SocketOutput : ISocketOutput + public class SocketOutputProducer : ISocketOutput { private static readonly ArraySegment _emptyData = new ArraySegment(new byte[0]); - private readonly KestrelThread _thread; - private readonly UvStreamHandle _socket; - private readonly Connection _connection; private readonly string _connectionId; private readonly IKestrelTrace _log; @@ -26,10 +22,13 @@ public class SocketOutput : ISocketOutput private bool _cancelled = false; private bool _completed = false; - private Exception _lastWriteError; - private readonly WriteReqPool _writeReqPool; - private readonly IPipe _pipe; - private Task _writingTask; + // TODO: Set this when the socket is closed + private bool _isSocketClosed = false; + + // TODO: Set _lastWriteError + //private Exception _lastWriteError; + private readonly IPipeWriter _pipe; + private readonly Frame _frame; // https://github.com/dotnet/corefxlab/issues/1334 // Pipelines don't support multiple awaiters on flush @@ -38,24 +37,12 @@ public class SocketOutput : ISocketOutput private readonly object _flushLock = new object(); private readonly Action _onFlushCallback; - public SocketOutput( - IPipe pipe, - KestrelThread thread, - UvStreamHandle socket, - Connection connection, - string connectionId, - IKestrelTrace log) + public SocketOutputProducer(IPipeWriter pipe, Frame frame, string connectionId, IKestrelTrace log) { _pipe = pipe; - // We need to have empty pipe at this moment so callback - // get's scheduled - _writingTask = StartWrites(); - _thread = thread; - _socket = socket; - _connection = connection; + _frame = frame; _connectionId = connectionId; _log = log; - _writeReqPool = thread.WriteReqPool; _onFlushCallback = OnFlush; } @@ -68,9 +55,9 @@ public Task WriteAsync( lock (_contextLock) { - if (_socket.IsClosed) + if (_isSocketClosed) { - _log.ConnectionDisconnectedWrite(_connectionId, buffer.Count, _lastWriteError); + _log.ConnectionDisconnectedWrite(_connectionId, buffer.Count, null/*_lastWriteError*/); return TaskCache.CompletedTask; } @@ -80,10 +67,10 @@ public Task WriteAsync( return TaskCache.CompletedTask; } - writableBuffer = _pipe.Writer.Alloc(); - if (buffer.Count > 0) { + writableBuffer = _pipe.Alloc(); + if (chunk) { ChunkWriter.WriteBeginChunkBytes(ref writableBuffer, buffer.Count); @@ -95,31 +82,14 @@ public Task WriteAsync( { ChunkWriter.WriteEndChunkBytes(ref writableBuffer); } - } - writableBuffer.Commit(); + writableBuffer.Commit(); + } } return FlushAsync(writableBuffer); } - public void End(ProduceEndType endType) - { - if (endType == ProduceEndType.SocketShutdown) - { - // Graceful shutdown - _pipe.Reader.CancelPendingRead(); - } - - lock (_contextLock) - { - _completed = true; - } - - // We're done writing - _pipe.Writer.Complete(); - } - private Task FlushAsync(WritableBuffer writableBuffer) { var awaitable = writableBuffer.FlushAsync(); @@ -164,7 +134,7 @@ Task ISocketOutput.WriteAsync(ArraySegment buffer, bool chunk, Cancellatio { if (cancellationToken.IsCancellationRequested) { - _connection.AbortAsync(); + _frame.Abort(); _cancelled = true; return Task.FromCanceled(cancellationToken); } @@ -195,106 +165,10 @@ public void Write(Action callback, T state) return; } - var buffer = _pipe.Writer.Alloc(); + var buffer = _pipe.Alloc(); callback(buffer, state); buffer.Commit(); } } - - public async Task StartWrites() - { - while (true) - { - var result = await _pipe.Reader.ReadAsync(); - var buffer = result.Buffer; - - try - { - if (!buffer.IsEmpty) - { - var writeReq = _writeReqPool.Allocate(); - var writeResult = await writeReq.WriteAsync(_socket, buffer); - _writeReqPool.Return(writeReq); - - // REVIEW: Locking here, do we need to take the context lock? - OnWriteCompleted(writeResult.Status, writeResult.Error); - } - - if (result.IsCancelled) - { - // Send a FIN - await ShutdownAsync(); - } - - if (buffer.IsEmpty && result.IsCompleted) - { - break; - } - } - finally - { - _pipe.Reader.Advance(result.Buffer.End); - } - } - - // We're done reading - _pipe.Reader.Complete(); - - _socket.Dispose(); - _connection.OnSocketClosed(); - _log.ConnectionStop(_connectionId); - } - - private void OnWriteCompleted(int writeStatus, Exception writeError) - { - // Called inside _contextLock - var status = writeStatus; - var error = writeError; - - if (error != null) - { - // Abort the connection for any failed write - // Queued on threadpool so get it in as first op. - _connection.AbortAsync(); - _cancelled = true; - _lastWriteError = error; - } - - if (error == null) - { - _log.ConnectionWriteCallback(_connectionId, status); - } - else - { - // Log connection resets at a lower (Debug) level. - if (status == Constants.ECONNRESET) - { - _log.ConnectionReset(_connectionId); - } - else - { - _log.ConnectionError(_connectionId, error); - } - } - } - - private Task ShutdownAsync() - { - var tcs = new TaskCompletionSource(); - _log.ConnectionWriteFin(_connectionId); - - var shutdownReq = new UvShutdownReq(_log); - shutdownReq.Init(_thread.Loop); - shutdownReq.Shutdown(_socket, (req, status, state) => - { - req.Dispose(); - _log.ConnectionWroteFin(_connectionId, status); - - tcs.TrySetResult(null); - }, - this); - - return tcs.Task; - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs index 0b7a9eaaa..8d823c9e7 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs @@ -1,21 +1,14 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Net; using System.Runtime.InteropServices; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure { internal static class Constants { - public const int ListenBacklog = 128; - public const int MaxExceptionDetailSize = 128; - public const int EOF = -4095; - public static readonly int? ECONNRESET = GetECONNRESET(); - public static readonly int? EADDRINUSE = GetEADDRINUSE(); - /// /// The IPEndPoint Kestrel will bind to if nothing else is specified. /// @@ -37,39 +30,5 @@ internal static class Constants public const string SocketDescriptorPrefix = "sockfd:"; public const string ServerName = "Kestrel"; - - private static int? GetECONNRESET() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return -4077; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - return -104; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - return -54; - } - return null; - } - - private static int? GetEADDRINUSE() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return -4091; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - return -98; - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - return -48; - } - return null; - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs index 552b65ff3..5aa5ce263 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs @@ -1,73 +1,73 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +//// Copyright (c) .NET Foundation. All rights reserved. +//// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Diagnostics.Tracing; -using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +//using System.Diagnostics.Tracing; +//using System.Runtime.CompilerServices; +//using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure -{ - [EventSource(Name = "Microsoft-AspNetCore-Server-Kestrel")] - public sealed class KestrelEventSource : EventSource - { - public static readonly KestrelEventSource Log = new KestrelEventSource(); +//namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure +//{ +// [EventSource(Name = "Microsoft-AspNetCore-Server-Kestrel")] +// public sealed class KestrelEventSource : EventSource +// { +// public static readonly KestrelEventSource Log = new KestrelEventSource(); - private KestrelEventSource() - { - } +// private KestrelEventSource() +// { +// } - // NOTE - // - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They - // enable creating 'activities'. - // For more information, take a look at the following blog post: - // https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/ - // - A stop event's event id must be next one after its start event. - // - Avoid renaming methods or parameters marked with EventAttribute. EventSource uses these to form the event object. +// // NOTE +// // - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They +// // enable creating 'activities'. +// // For more information, take a look at the following blog post: +// // https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/ +// // - A stop event's event id must be next one after its start event. +// // - Avoid renaming methods or parameters marked with EventAttribute. EventSource uses these to form the event object. - [NonEvent] - public void ConnectionStart(Connection connection) - { - // avoid allocating strings unless this event source is enabled - if (IsEnabled()) - { - ConnectionStart( - connection.ConnectionId, - connection.ListenerContext.ListenOptions.Scheme, - connection.LocalEndPoint.ToString(), - connection.RemoteEndPoint.ToString()); - } - } +// [NonEvent] +// public void ConnectionStart(Connection connection) +// { +// // avoid allocating strings unless this event source is enabled +// if (IsEnabled()) +// { +// ConnectionStart( +// connection.ConnectionId, +// connection.ListenerContext.ListenOptions.Scheme, +// connection.LocalEndPoint.ToString(), +// connection.RemoteEndPoint.ToString()); +// } +// } - [MethodImpl(MethodImplOptions.NoInlining)] - [Event(1, Level = EventLevel.Verbose)] - private void ConnectionStart(string connectionId, - string scheme, - string localEndPoint, - string remoteEndPoint) - { - WriteEvent( - 1, - connectionId, - scheme, - localEndPoint, - remoteEndPoint - ); - } +// [MethodImpl(MethodImplOptions.NoInlining)] +// [Event(1, Level = EventLevel.Verbose)] +// private void ConnectionStart(string connectionId, +// string scheme, +// string localEndPoint, +// string remoteEndPoint) +// { +// WriteEvent( +// 1, +// connectionId, +// scheme, +// localEndPoint, +// remoteEndPoint +// ); +// } - [NonEvent] - public void ConnectionStop(Connection connection) - { - if (IsEnabled()) - { - ConnectionStop(connection.ConnectionId); - } - } +// [NonEvent] +// public void ConnectionStop(Connection connection) +// { +// if (IsEnabled()) +// { +// ConnectionStop(connection.ConnectionId); +// } +// } - [MethodImpl(MethodImplOptions.NoInlining)] - [Event(2, Level = EventLevel.Verbose)] - private void ConnectionStop(string connectionId) - { - WriteEvent(2, connectionId); - } - } -} +// [MethodImpl(MethodImplOptions.NoInlining)] +// [Event(2, Level = EventLevel.Verbose)] +// private void ConnectionStop(string connectionId) +// { +// WriteEvent(2, connectionId); +// } +// } +//} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs deleted file mode 100644 index 6f21130f6..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/KestrelEngine.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.Extensions.Logging; - -namespace Microsoft.AspNetCore.Server.Kestrel.Internal -{ - public class KestrelEngine : IDisposable - { - public KestrelEngine(ServiceContext context) - : this(new Libuv(), context) - { } - - // For testing - internal KestrelEngine(Libuv uv, ServiceContext context) - { - Libuv = uv; - ServiceContext = context; - Threads = new List(); - } - - public Libuv Libuv { get; private set; } - public ServiceContext ServiceContext { get; set; } - public List Threads { get; private set; } - - public IApplicationLifetime AppLifetime => ServiceContext.AppLifetime; - public IKestrelTrace Log => ServiceContext.Log; - public IThreadPool ThreadPool => ServiceContext.ThreadPool; - public KestrelServerOptions ServerOptions => ServiceContext.ServerOptions; - - public void Start(int count) - { - for (var index = 0; index < count; index++) - { - Threads.Add(new KestrelThread(this)); - } - - foreach (var thread in Threads) - { - thread.StartAsync().Wait(); - } - } - - public void Dispose() - { - try - { - Task.WaitAll(Threads.Select(thread => thread.StopAsync(TimeSpan.FromSeconds(2.5))).ToArray()); - } - catch (AggregateException aggEx) - { - // An uncaught exception was likely thrown from the libuv event loop. - // The original error that crashed one loop may have caused secondary errors in others. - // Make sure that the stack trace of the original error is logged. - foreach (var ex in aggEx.InnerExceptions) - { - Log.LogCritical("Failed to gracefully close Kestrel.", ex); - } - - throw; - } - - Threads.Clear(); -#if DEBUG - GC.Collect(); - GC.WaitForPendingFinalizers(); - GC.Collect(); -#endif - } - - public IDisposable CreateServer(ListenOptions listenOptions) - { - var listeners = new List(); - - try - { - if (Threads.Count == 1) - { - var listener = new Listener(ServiceContext); - listeners.Add(listener); - listener.StartAsync(listenOptions, Threads[0]).Wait(); - } - else - { - var pipeName = (Libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); - var pipeMessage = Guid.NewGuid().ToByteArray(); - - var listenerPrimary = new ListenerPrimary(ServiceContext); - listeners.Add(listenerPrimary); - listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, Threads[0]).Wait(); - - foreach (var thread in Threads.Skip(1)) - { - var listenerSecondary = new ListenerSecondary(ServiceContext); - listeners.Add(listenerSecondary); - listenerSecondary.StartAsync(pipeName, pipeMessage, listenOptions, thread).Wait(); - } - } - - return new Disposable(() => - { - DisposeListeners(listeners); - }); - } - catch - { - DisposeListeners(listeners); - throw; - } - } - - private void DisposeListeners(List listeners) - { - var disposeTasks = listeners.Select(listener => listener.DisposeAsync()).ToArray(); - - if (!Task.WaitAll(disposeTasks, TimeSpan.FromSeconds(2.5))) - { - Log.LogError(0, null, "Disposing listeners failed"); - } - } - } -} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs index 6233378f4..4b39fc6bc 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; @@ -10,16 +9,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal { public class ServiceContext { - public IApplicationLifetime AppLifetime { get; set; } - public IKestrelTrace Log { get; set; } - public IThreadPool ThreadPool { get; set; } - public Func HttpParserFactory { get; set; } - public Func FrameFactory { get; set; } - public DateHeaderValueManager DateHeaderValueManager { get; set; } public KestrelServerOptions ServerOptions { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index 04ece0d46..e65a6d560 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Net; using System.Reflection; +using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Server; @@ -15,7 +16,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -23,21 +24,30 @@ namespace Microsoft.AspNetCore.Server.Kestrel { public class KestrelServer : IServer { - private Stack _disposables; - private readonly IApplicationLifetime _applicationLifetime; + //private Stack _disposables; + private readonly List _transports = new List(); + private readonly ILogger _logger; private readonly IServerAddressesFeature _serverAddresses; + private readonly ITransportFactory _transportFactory; + + private bool _isRunning; + private IDisposable _connectionHandlerDisposable; + private DateHeaderValueManager _dateHeaderValueManager; - public KestrelServer(IOptions options, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory) + public KestrelServer( + IOptions options, + ITransportFactory transportFactory, + ILoggerFactory loggerFactory) { if (options == null) { throw new ArgumentNullException(nameof(options)); } - if (applicationLifetime == null) + if (transportFactory == null) { - throw new ArgumentNullException(nameof(applicationLifetime)); + throw new ArgumentNullException(nameof(transportFactory)); } if (loggerFactory == null) @@ -47,7 +57,7 @@ public KestrelServer(IOptions options, IApplicationLifetim Options = options.Value ?? new KestrelServerOptions(); InternalOptions = new InternalKestrelServerOptions(); - _applicationLifetime = applicationLifetime; + _transportFactory = transportFactory; _logger = loggerFactory.CreateLogger(typeof(KestrelServer).GetTypeInfo().Namespace); Features = new FeatureCollection(); _serverAddresses = new ServerAddressesFeature(); @@ -72,63 +82,52 @@ public void Start(IHttpApplication application) ValidateOptions(); - if (_disposables != null) + if (_isRunning) { // The server has already started and/or has not been cleaned up yet throw new InvalidOperationException("Server has already started."); } - _disposables = new Stack(); + _isRunning = true; - var dateHeaderValueManager = new DateHeaderValueManager(); + _dateHeaderValueManager = new DateHeaderValueManager(); var trace = new KestrelTrace(_logger); - IThreadPool threadPool; - if (InternalOptions.ThreadPoolDispatching) - { - threadPool = new LoggingThreadPool(trace); - } - else - { - threadPool = new InlineLoggingThreadPool(trace); - } - - var engine = new KestrelEngine(new ServiceContext + var serviceContext = new ServiceContext { - FrameFactory = context => - { - return new Frame(application, context); - }, - AppLifetime = _applicationLifetime, Log = trace, - HttpParserFactory = frame => new KestrelHttpParser(frame.ConnectionContext.ListenerContext.ServiceContext.Log), - ThreadPool = threadPool, - DateHeaderValueManager = dateHeaderValueManager, + HttpParserFactory = frame => new KestrelHttpParser(frame.ServiceContext.Log), + DateHeaderValueManager = _dateHeaderValueManager, ServerOptions = Options - }); + }; - _disposables.Push(engine); - _disposables.Push(dateHeaderValueManager); + var connectionHandler = new ConnectionHandler(serviceContext, application); + _connectionHandlerDisposable = connectionHandler; - var threadCount = Options.ThreadCount; + //var engine = new KestrelEngine(); - if (threadCount <= 0) - { - throw new ArgumentOutOfRangeException(nameof(threadCount), - threadCount, - "ThreadCount must be positive."); - } + //_disposables.Push(engine); + //_disposables.Push(dateHeaderValueManager); - if (!Constants.ECONNRESET.HasValue) - { - _logger.LogWarning("Unable to determine ECONNRESET value on this platform."); - } + //var threadCount = Options.ThreadCount; - if (!Constants.EADDRINUSE.HasValue) - { - _logger.LogWarning("Unable to determine EADDRINUSE value on this platform."); - } + //if (threadCount <= 0) + //{ + // throw new ArgumentOutOfRangeException(nameof(threadCount), + // threadCount, + // "ThreadCount must be positive."); + //} - engine.Start(threadCount); + //if (!Constants.ECONNRESET.HasValue) + //{ + // _logger.LogWarning("Unable to determine ECONNRESET value on this platform."); + //} + + //if (!Constants.EADDRINUSE.HasValue) + //{ + // _logger.LogWarning("Unable to determine EADDRINUSE value on this platform."); + //} + + //engine.Start(threadCount); var listenOptions = Options.ListenOptions; var hasListenOptions = listenOptions.Any(); @@ -137,7 +136,7 @@ public void Start(IHttpApplication application) if (hasListenOptions && hasServerAddresses) { var joined = string.Join(", ", _serverAddresses.Addresses); - _logger.LogWarning($"Overriding address(es) '{joined}'. Binding to endpoints defined in {nameof(WebHostBuilderKestrelExtensions.UseKestrel)}() instead."); + _logger.LogWarning($"Overriding address(es) '{joined}'. Binding to endpoints defined in UseKestrel() instead."); _serverAddresses.Addresses.Clear(); } @@ -145,14 +144,15 @@ public void Start(IHttpApplication application) { _logger.LogDebug($"No listening endpoints were configured. Binding to {Constants.DefaultServerAddress} by default."); - // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. - StartLocalhost(engine, ServerAddress.FromUrl(Constants.DefaultServerAddress)); + //// "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. + //StartLocalhost(engine, ServerAddress.FromUrl(Constants.DefaultServerAddress)); - // If StartLocalhost doesn't throw, there is at least one listener. - // The port cannot change for "localhost". - _serverAddresses.Addresses.Add(Constants.DefaultServerAddress); + //// If StartLocalhost doesn't throw, there is at least one listener. + //// The port cannot change for "localhost". + //_serverAddresses.Addresses.Add(Constants.DefaultServerAddress); - return; + //return; + listenOptions.Add(new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000))); } else if (!hasListenOptions) { @@ -180,12 +180,16 @@ public void Start(IHttpApplication application) { if (string.Equals(parsedAddress.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { - // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. - StartLocalhost(engine, parsedAddress); + //// "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. + //StartLocalhost(engine, parsedAddress); - // If StartLocalhost doesn't throw, there is at least one listener. - // The port cannot change for "localhost". - _serverAddresses.Addresses.Add(parsedAddress.ToString()); + //// If StartLocalhost doesn't throw, there is at least one listener. + //// The port cannot change for "localhost". + //_serverAddresses.Addresses.Add(parsedAddress.ToString()); + listenOptions.Add(new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) + { + Scheme = parsedAddress.Scheme, + }); } else { @@ -201,23 +205,33 @@ public void Start(IHttpApplication application) foreach (var endPoint in listenOptions) { - try - { - _disposables.Push(engine.CreateServer(endPoint)); - } - catch (AggregateException ex) - { - if ((ex.InnerException as UvException)?.StatusCode == Constants.EADDRINUSE) - { - throw new IOException($"Failed to bind to address {endPoint}: address already in use.", ex); - } - - throw; - } + _transports.Add(_transportFactory.Create(endPoint, connectionHandler)); + + //try + //{ + // _disposables.Push(engine.CreateServer(endPoint)); + //} + //catch (AggregateException ex) + //{ + // if ((ex.InnerException as UvException)?.StatusCode == Constants.EADDRINUSE) + // { + // throw new IOException($"Failed to bind to address {endPoint}: address already in use.", ex); + // } + + // throw; + //} // If requested port was "0", replace with assigned dynamic port. _serverAddresses.Addresses.Add(endPoint.ToString()); } + + var tasks = new Task[_transports.Count]; + for (int i = 0; i < _transports.Count; i++) + { + tasks[i] = _transports[i].BindAsync(); + } + + Task.WaitAll(tasks); } catch (Exception ex) { @@ -229,14 +243,25 @@ public void Start(IHttpApplication application) public void Dispose() { - if (_disposables != null) + var tasks = new Task[_transports.Count]; + for (int i = 0; i < _transports.Count; i++) { - while (_disposables.Count > 0) - { - _disposables.Pop().Dispose(); - } - _disposables = null; + tasks[i] = _transports[i].UnbindAsync(); } + + // REVIEW: Is it OK to rely on transports to timeout? + Task.WaitAll(tasks); + + _connectionHandlerDisposable.Dispose(); + + // TODO: Do transport-agnostic connection management/shutdown. + for (int i = 0; i < _transports.Count; i++) + { + tasks[i] = _transports[i].StopAsync(); + } + Task.WaitAll(tasks); + + _dateHeaderValueManager.Dispose(); } private void ValidateOptions() @@ -256,66 +281,66 @@ private void ValidateOptions() } } - private void StartLocalhost(KestrelEngine engine, ServerAddress parsedAddress) - { - if (parsedAddress.Port == 0) - { - throw new InvalidOperationException("Dynamic port binding is not supported when binding to localhost. You must either bind to 127.0.0.1:0 or [::1]:0, or both."); - } - - var exceptions = new List(); - - try - { - var ipv4ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) - { - Scheme = parsedAddress.Scheme, - }; - - _disposables.Push(engine.CreateServer(ipv4ListenOptions)); - } - catch (AggregateException ex) when (ex.InnerException is UvException) - { - var uvEx = (UvException)ex.InnerException; - if (uvEx.StatusCode == Constants.EADDRINUSE) - { - throw new IOException($"Failed to bind to address {parsedAddress} on the IPv4 loopback interface: port already in use.", ex); - } - else - { - _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv4 loopback interface: ({uvEx.Message})"); - exceptions.Add(uvEx); - } - } - - try - { - var ipv6ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.IPv6Loopback, parsedAddress.Port)) - { - Scheme = parsedAddress.Scheme, - }; - - _disposables.Push(engine.CreateServer(ipv6ListenOptions)); - } - catch (AggregateException ex) when (ex.InnerException is UvException) - { - var uvEx = (UvException)ex.InnerException; - if (uvEx.StatusCode == Constants.EADDRINUSE) - { - throw new IOException($"Failed to bind to address {parsedAddress} on the IPv6 loopback interface: port already in use.", ex); - } - else - { - _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv6 loopback interface: ({uvEx.Message})"); - exceptions.Add(uvEx); - } - } - - if (exceptions.Count == 2) - { - throw new IOException($"Failed to bind to address {parsedAddress}.", new AggregateException(exceptions)); - } - } + //private void StartLocalhost(KestrelEngine engine, ServerAddress parsedAddress) + //{ + // if (parsedAddress.Port == 0) + // { + // throw new InvalidOperationException("Dynamic port binding is not supported when binding to localhost. You must either bind to 127.0.0.1:0 or [::1]:0, or both."); + // } + + // var exceptions = new List(); + + // try + // { + // var ipv4ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) + // { + // Scheme = parsedAddress.Scheme, + // }; + + // _disposables.Push(engine.CreateServer(ipv4ListenOptions)); + // } + // catch (AggregateException ex) when (ex.InnerException is UvException) + // { + // var uvEx = (UvException)ex.InnerException; + // if (uvEx.StatusCode == Constants.EADDRINUSE) + // { + // throw new IOException($"Failed to bind to address {parsedAddress} on the IPv4 loopback interface: port already in use.", ex); + // } + // else + // { + // _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv4 loopback interface: ({uvEx.Message})"); + // exceptions.Add(uvEx); + // } + // } + + // try + // { + // var ipv6ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.IPv6Loopback, parsedAddress.Port)) + // { + // Scheme = parsedAddress.Scheme, + // }; + + // _disposables.Push(engine.CreateServer(ipv6ListenOptions)); + // } + // catch (AggregateException ex) when (ex.InnerException is UvException) + // { + // var uvEx = (UvException)ex.InnerException; + // if (uvEx.StatusCode == Constants.EADDRINUSE) + // { + // throw new IOException($"Failed to bind to address {parsedAddress} on the IPv6 loopback interface: port already in use.", ex); + // } + // else + // { + // _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv6 loopback interface: ({uvEx.Message})"); + // exceptions.Add(uvEx); + // } + // } + + // if (exceptions.Count == 2) + // { + // throw new IOException($"Failed to bind to address {parsedAddress}.", new AggregateException(exceptions)); + // } + //} /// /// Returns an for the given host an port. diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs index c458d1e5f..b44ac2d38 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs @@ -30,7 +30,7 @@ public class KestrelServerOptions /// /// Enables the Listen options callback to resolve and use services registered by the application during startup. - /// Typically initialized by . + /// Typically initialized by UseKestrel()"/>. /// public IServiceProvider ApplicationServices { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs index 45ebe7917..7124a5360 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs @@ -42,7 +42,7 @@ internal ListenOptions(ulong fileHandle) /// The to bind to. /// Only set if the is . /// - public IPEndPoint IPEndPoint { get; internal set; } + public IPEndPoint IPEndPoint { get; set; } /// /// The absolute path to a Unix domain socket to bind to. diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs index a245388b9..4f027d9b4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs @@ -1,7 +1,10 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.IO.Pipelines; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; namespace Microsoft.AspNetCore.Server.Kestrel.Transport { @@ -10,5 +13,11 @@ public interface IConnectionContext string ConnectionId { get; } IPipeWriter Input { get; } IPipeReader Output { get; } + + // TODO: Remove these (Use Pipes instead?) + Task StopAsync(); + void Abort(Exception ex); + void SetBadRequestState(RequestRejectionReason reason); + Task FrameStartedTask { get; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs index 8c1ce9ad3..0b53f9eb5 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs @@ -1,9 +1,17 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Net; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; + namespace Microsoft.AspNetCore.Server.Kestrel.Transport { public interface IConnectionInformation { + IPEndPoint RemoteEndPoint { get; } + IPEndPoint LocalEndPoint { get; } + + // TODO: Remove this (Use Pipes instead?) + IConnectionControl ConnectionControl { get; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs deleted file mode 100644 index 9473b492e..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Class1.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Microsoft.AspNetCore.Server.Kestrel.Libuv -{ - public class Class1 - { - } -} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs similarity index 55% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Connection.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs index dfa0810dc..52a12d1a9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs @@ -6,12 +6,14 @@ using System.Diagnostics; using System.IO; using System.IO.Pipelines; +using System.Net; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Adapter; using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; @@ -21,26 +23,18 @@ public class Connection : ConnectionContext, IConnectionControl { private const int MinAllocBufferSize = 2048; - // Base32 encoding - in ascii sort order for easy text based sorting - private static readonly string _encode32Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; - private static readonly Action _readCallback = (handle, status, state) => ReadCallback(handle, status, state); - - private static readonly Func _allocCallback = + + private static readonly Func _allocCallback = (handle, suggestedsize, state) => AllocCallback(handle, suggestedsize, state); - // Seed the _lastConnectionId for this application instance with - // the number of 100-nanosecond intervals that have elapsed since 12:00:00 midnight, January 1, 0001 - // for a roughly increasing _requestId over restarts - private static long _lastConnectionId = DateTime.UtcNow.Ticks; - private readonly UvStreamHandle _socket; - private readonly Frame _frame; - private readonly List _connectionAdapters; - private AdaptedPipeline _adaptedPipeline; - private Stream _filteredStream; - private Task _readInputTask; + private IConnectionContext _connectionContext; + //private readonly List _connectionAdapters; + //private AdaptedPipeline _adaptedPipeline; + //private Stream _filteredStream; + //private Task _readInputTask; private TaskCompletionSource _socketClosedTcs = new TaskCompletionSource(); @@ -52,25 +46,16 @@ public class Connection : ConnectionContext, IConnectionControl public Connection(ListenerContext context, UvStreamHandle socket) : base(context) { _socket = socket; - _connectionAdapters = context.ListenOptions.ConnectionAdapters; + //_connectionAdapters = context.ListenOptions.ConnectionAdapters; socket.Connection = this; ConnectionControl = this; - ConnectionId = GenerateConnectionId(Interlocked.Increment(ref _lastConnectionId)); - - Input = Thread.PipelineFactory.Create(ListenerContext.LibuvInputPipeOptions); - var outputPipe = Thread.PipelineFactory.Create(ListenerContext.LibuvOutputPipeOptions); - Output = new SocketOutput(outputPipe, Thread, _socket, this, ConnectionId, Log); - var tcpHandle = _socket as UvTcpHandle; if (tcpHandle != null) { RemoteEndPoint = tcpHandle.GetPeerIPEndPoint(); LocalEndPoint = tcpHandle.GetSockIPEndPoint(); } - - _frame = FrameFactory(this); - _lastTimestamp = Thread.Loop.Now(); } // Internal for testing @@ -78,25 +63,36 @@ internal Connection() { } - public KestrelServerOptions ServerOptions => ListenerContext.ServiceContext.ServerOptions; - private Func FrameFactory => ListenerContext.ServiceContext.FrameFactory; - private IKestrelTrace Log => ListenerContext.ServiceContext.Log; - private IThreadPool ThreadPool => ListenerContext.ServiceContext.ThreadPool; + public string ConnectionId { get; set; } + public IPipeWriter Input { get; set; } + public SocketOutputConsumer Output { get; set; } + + private IKestrelTrace Log => ListenerContext.TransportContext.Log; + private IThreadPool ThreadPool => ListenerContext.TransportContext.ThreadPool; + private IConnectionHandler ConnectionHandler => ListenerContext.TransportContext.ConnectionHandler; private KestrelThread Thread => ListenerContext.Thread; public void Start() { Log.ConnectionStart(ConnectionId); - KestrelEventSource.Log.ConnectionStart(this); - - // Start socket prior to applying the ConnectionAdapter - _socket.ReadStart(_allocCallback, _readCallback, this); + //KestrelEventSource.Log.ConnectionStart(this); // Dispatch to a thread pool so if the first read completes synchronously // we won't be on IO thread try { - ThreadPool.UnsafeRun(state => ((Connection)state).StartFrame(), this); + // TODO: Dispatch OnConnection (and then dispatch back for ReadStart?) + //ThreadPool.UnsafeRun(state => ((Connection)state).StartFrame(), this); + _connectionContext = ConnectionHandler.OnConnection(this, ListenerContext.LibuvInputPipeOptions, ListenerContext.LibuvOutputPipeOptions); + + ConnectionId = _connectionContext.ConnectionId; + + Input = _connectionContext.Input; + Output = new SocketOutputConsumer(_connectionContext.Output, Thread, _socket, this, ConnectionId, Log); + + // Start socket prior to applying the ConnectionAdapter + _socket.ReadStart(_allocCallback, _readCallback, this); + _lastTimestamp = Thread.Loop.Now(); } catch (Exception e) { @@ -105,23 +101,23 @@ public void Start() } } - private void StartFrame() - { - if (_connectionAdapters.Count == 0) - { - _frame.Start(); - } - else - { - // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). - // Otherwise, it will close the connection. - var ignore = ApplyConnectionAdaptersAsync(); - } - } + //private void StartFrame() + //{ + // if (_connectionAdapters.Count == 0) + // { + // _frame.Start(); + // } + // else + // { + // // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). + // // Otherwise, it will close the connection. + // var ignore = ApplyConnectionAdaptersAsync(); + // } + //} public Task StopAsync() { - return Task.WhenAll(_frame.StopAsync(), _socketClosedTcs.Task); + return Task.WhenAll(_connectionContext.StopAsync(), _socketClosedTcs.Task); } public virtual Task AbortAsync(Exception error = null) @@ -130,7 +126,7 @@ public virtual Task AbortAsync(Exception error = null) // called from a libuv thread. ThreadPool.Run(() => { - _frame.Abort(error); + _connectionContext.Abort(error); }); return _socketClosedTcs.Task; @@ -139,25 +135,25 @@ public virtual Task AbortAsync(Exception error = null) // Called on Libuv thread public virtual void OnSocketClosed() { - KestrelEventSource.Log.ConnectionStop(this); - - _frame.FrameStartedTask.ContinueWith((task, state) => - { - var connection = (Connection)state; - - if (connection._adaptedPipeline != null) - { - Task.WhenAll(connection._readInputTask, connection._frame.StopAsync()).ContinueWith((task2, state2) => - { - var connection2 = (Connection)state2; - connection2._filteredStream.Dispose(); - connection2._adaptedPipeline.Dispose(); - Input.Reader.Complete(); - }, connection); - } - }, this); - - Input.Writer.Complete(new TaskCanceledException("The request was aborted")); + //KestrelEventSource.Log.ConnectionStop(this); + + //_connectionContext.FrameStartedTask.ContinueWith((task, state) => + //{ + // var connection = (Connection)state; + + // if (connection._adaptedPipeline != null) + // { + // Task.WhenAll(connection._readInputTask, connection._connectionContext.StopAsync()).ContinueWith((task2, state2) => + // { + // var connection2 = (Connection)state2; + // connection2._filteredStream.Dispose(); + // connection2._adaptedPipeline.Dispose(); + // Input.Reader.Complete(); + // }, connection); + // } + //}, this); + + Input.Complete(new TaskCanceledException("The request was aborted")); _socketClosedTcs.TrySetResult(null); } @@ -170,7 +166,7 @@ public void Tick(long timestamp) if (_timeoutAction == TimeoutAction.SendTimeoutResponse) { - _frame.SetBadRequestState(RequestRejectionReason.RequestTimeout); + _connectionContext.SetBadRequestState(RequestRejectionReason.RequestTimeout); } StopAsync(); @@ -179,59 +175,59 @@ public void Tick(long timestamp) Interlocked.Exchange(ref _lastTimestamp, timestamp); } - private async Task ApplyConnectionAdaptersAsync() - { - try - { - var rawStream = new RawStream(Input.Reader, Output); - var adapterContext = new ConnectionAdapterContext(rawStream); - var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; - - for (var i = 0; i < _connectionAdapters.Count; i++) - { - var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); - adaptedConnections[i] = adaptedConnection; - adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); - } - - if (adapterContext.ConnectionStream != rawStream) - { - _filteredStream = adapterContext.ConnectionStream; - _adaptedPipeline = new AdaptedPipeline( - adapterContext.ConnectionStream, - Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions), - Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions)); - - _frame.Input = _adaptedPipeline.Input; - _frame.Output = _adaptedPipeline.Output; - - // Don't attempt to read input if connection has already closed. - // This can happen if a client opens a connection and immediately closes it. - _readInputTask = _socketClosedTcs.Task.Status == TaskStatus.WaitingForActivation - ? _adaptedPipeline.StartAsync() - : TaskCache.CompletedTask; - } - - _frame.AdaptedConnections = adaptedConnections; - _frame.Start(); - } - catch (Exception ex) - { - Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); - Input.Reader.Complete(); - ConnectionControl.End(ProduceEndType.SocketDisconnect); - } - } - - private static Libuv.uv_buf_t AllocCallback(UvStreamHandle handle, int suggestedSize, object state) + //private async Task ApplyConnectionAdaptersAsync() + //{ + // try + // { + // var rawStream = new RawStream(Input.Reader, Output); + // var adapterContext = new ConnectionAdapterContext(rawStream); + // var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; + + // for (var i = 0; i < _connectionAdapters.Count; i++) + // { + // var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); + // adaptedConnections[i] = adaptedConnection; + // adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); + // } + + // if (adapterContext.ConnectionStream != rawStream) + // { + // _filteredStream = adapterContext.ConnectionStream; + // _adaptedPipeline = new AdaptedPipeline( + // adapterContext.ConnectionStream, + // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions), + // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions)); + + // _frame.Input = _adaptedPipeline.Input; + // _frame.Output = _adaptedPipeline.Output; + + // // Don't attempt to read input if connection has already closed. + // // This can happen if a client opens a connection and immediately closes it. + // _readInputTask = _socketClosedTcs.Task.Status == TaskStatus.WaitingForActivation + // ? _adaptedPipeline.StartAsync() + // : TaskCache.CompletedTask; + // } + + // _frame.AdaptedConnections = adaptedConnections; + // _frame.Start(); + // } + // catch (Exception ex) + // { + // Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); + // Input.Reader.Complete(); + // ConnectionControl.End(ProduceEndType.SocketDisconnect); + // } + //} + + private static LibuvFunctions.uv_buf_t AllocCallback(UvStreamHandle handle, int suggestedSize, object state) { return ((Connection)state).OnAlloc(handle, suggestedSize); } - private unsafe Libuv.uv_buf_t OnAlloc(UvStreamHandle handle, int suggestedSize) + private unsafe LibuvFunctions.uv_buf_t OnAlloc(UvStreamHandle handle, int suggestedSize) { Debug.Assert(_currentWritableBuffer == null); - var currentWritableBuffer = Input.Writer.Alloc(MinAllocBufferSize); + var currentWritableBuffer = Input.Alloc(MinAllocBufferSize); _currentWritableBuffer = currentWritableBuffer; void* dataPtr; var tryGetPointer = currentWritableBuffer.Buffer.TryGetPointer(out dataPtr); @@ -311,7 +307,7 @@ private async void OnRead(UvStreamHandle handle, int status) if (!normalRead) { - Input.Writer.Complete(error); + Input.Complete(error); var ignore = AbortAsync(error); } } @@ -357,7 +353,7 @@ private void OnResumePosted() // ReadStart() can throw a UvException in some cases (e.g. socket is no longer connected). // This should be treated the same as OnRead() seeing a "normalDone" condition. Log.ConnectionReadFin(ConnectionId); - Input.Writer.Complete(); + Input.Complete(); } } } @@ -370,9 +366,10 @@ void IConnectionControl.End(ProduceEndType endType) Log.ConnectionKeepAlive(ConnectionId); break; case ProduceEndType.SocketShutdown: + Output.Shutdown(); + goto case ProduceEndType.SocketDisconnect; case ProduceEndType.SocketDisconnect: Log.ConnectionDisconnect(ConnectionId); - ((SocketOutput)Output).End(endType); break; } } @@ -401,32 +398,5 @@ private void AssignTimeout(long milliseconds, TimeoutAction timeoutAction) // Add KestrelThread.HeartbeatMilliseconds extra milliseconds since this can be called right before the next heartbeat. Interlocked.Exchange(ref _timeoutTimestamp, _lastTimestamp + milliseconds + KestrelThread.HeartbeatMilliseconds); } - - private static unsafe string GenerateConnectionId(long id) - { - // The following routine is ~310% faster than calling long.ToString() on x64 - // and ~600% faster than calling long.ToString() on x86 in tight loops of 1 million+ iterations - // See: https://github.com/aspnet/Hosting/pull/385 - - // stackalloc to allocate array on stack rather than heap - char* charBuffer = stackalloc char[13]; - - charBuffer[0] = _encode32Chars[(int)(id >> 60) & 31]; - charBuffer[1] = _encode32Chars[(int)(id >> 55) & 31]; - charBuffer[2] = _encode32Chars[(int)(id >> 50) & 31]; - charBuffer[3] = _encode32Chars[(int)(id >> 45) & 31]; - charBuffer[4] = _encode32Chars[(int)(id >> 40) & 31]; - charBuffer[5] = _encode32Chars[(int)(id >> 35) & 31]; - charBuffer[6] = _encode32Chars[(int)(id >> 30) & 31]; - charBuffer[7] = _encode32Chars[(int)(id >> 25) & 31]; - charBuffer[8] = _encode32Chars[(int)(id >> 20) & 31]; - charBuffer[9] = _encode32Chars[(int)(id >> 15) & 31]; - charBuffer[10] = _encode32Chars[(int)(id >> 10) & 31]; - charBuffer[11] = _encode32Chars[(int)(id >> 5) & 31]; - charBuffer[12] = _encode32Chars[(int)id & 31]; - - // string ctor overload that takes char* - return new string(charBuffer, 0, 13); - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs similarity index 75% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs index 267f34dda..723f5df10 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs @@ -1,14 +1,13 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Net; using System.IO.Pipelines; -using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { - public class ConnectionContext + public class ConnectionContext : IConnectionInformation { public ConnectionContext() { @@ -21,16 +20,10 @@ public ConnectionContext(ListenerContext context) public ListenerContext ListenerContext { get; set; } - public IPipe Input { get; set; } - - public ISocketOutput Output { get; set; } - public IConnectionControl ConnectionControl { get; set; } public IPEndPoint RemoteEndPoint { get; set; } public IPEndPoint LocalEndPoint { get; set; } - - public string ConnectionId { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionManager.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IAsyncDisposable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/IAsyncDisposable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IAsyncDisposable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/IAsyncDisposable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Listener.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs similarity index 96% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Listener.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs index a8624d176..3e97e2e2c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Listener.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -16,14 +17,13 @@ public class Listener : ListenerContext, IAsyncDisposable { private bool _closed; - public Listener(ServiceContext serviceContext) - : base(serviceContext) + public Listener(LibuvTransportContext transportContext) : base(transportContext) { } protected UvStreamHandle ListenSocket { get; private set; } - public IKestrelTrace Log => ServiceContext.Log; + public IKestrelTrace Log => TransportContext.Log; public Task StartAsync( ListenOptions listenOptions, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs similarity index 69% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs index 4a94842ac..95ca480c6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs @@ -4,17 +4,19 @@ using System; using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { public class ListenerContext { - public ListenerContext(ServiceContext serviceContext) + public ListenerContext(LibuvTransportContext transportContext) { - ServiceContext = serviceContext; + TransportContext = transportContext; } - public ServiceContext ServiceContext { get; set; } + public LibuvTransportContext TransportContext { get; set; } public ListenOptions ListenOptions { get; set; } @@ -29,12 +31,12 @@ protected UvStreamHandle CreateAcceptSocket() { case ListenType.IPEndPoint: case ListenType.FileHandle: - var tcpHandle = new UvTcpHandle(ServiceContext.Log); + var tcpHandle = new UvTcpHandle(TransportContext.Log); tcpHandle.Init(Thread.Loop, Thread.QueueCloseHandle); tcpHandle.NoDelay(ListenOptions.NoDelay); return tcpHandle; case ListenType.SocketPath: - var pipeHandle = new UvPipeHandle(ServiceContext.Log); + var pipeHandle = new UvPipeHandle(TransportContext.Log); pipeHandle.Init(Thread.Loop, Thread.QueueCloseHandle); return pipeHandle; default: @@ -44,16 +46,16 @@ protected UvStreamHandle CreateAcceptSocket() public PipeOptions LibuvInputPipeOptions => new PipeOptions { - ReaderScheduler = ServiceContext.ThreadPool, + ReaderScheduler = TransportContext.ThreadPool, WriterScheduler = Thread, - MaximumSizeHigh = ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0, - MaximumSizeLow = ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 + MaximumSizeHigh = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0, + MaximumSizeLow = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0 }; public PipeOptions LibuvOutputPipeOptions => new PipeOptions { ReaderScheduler = Thread, - WriterScheduler = ServiceContext.ThreadPool, + WriterScheduler = TransportContext.ThreadPool, MaximumSizeHigh = GetOutputResponseBufferSize(), MaximumSizeLow = GetOutputResponseBufferSize() }; @@ -62,13 +64,13 @@ protected UvStreamHandle CreateAcceptSocket() { ReaderScheduler = InlineScheduler.Default, WriterScheduler = InlineScheduler.Default, - MaximumSizeHigh = ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0, - MaximumSizeLow = ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 + MaximumSizeHigh = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0, + MaximumSizeLow = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0 }; private long GetOutputResponseBufferSize() { - var bufferSize = ServiceContext.ServerOptions.Limits.MaxResponseBufferSize; + var bufferSize = TransportContext.Options.Limits.MaxResponseBufferSize; if (bufferSize == 0) { // 0 = no buffering so we need to configure the pipe so the the writer waits on the reader directly diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerPrimary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs similarity index 97% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerPrimary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs index ebf626763..d4ba1e5b8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerPrimary.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -29,7 +30,7 @@ public class ListenerPrimary : Listener // but it has no other functional significance private readonly ArraySegment> _dummyMessage = new ArraySegment>(new[] { new ArraySegment(new byte[] { 1, 2, 3, 4 }) }); - public ListenerPrimary(ServiceContext serviceContext) : base(serviceContext) + public ListenerPrimary(LibuvTransportContext transportContext) : base(transportContext) { } @@ -205,7 +206,7 @@ public PipeReadContext(ListenerPrimary listener) _bufPtr = _bufHandle.AddrOfPinnedObject(); } - public Libuv.uv_buf_t AllocCallback(UvStreamHandle dispatchPipe, int suggestedSize) + public LibuvFunctions.uv_buf_t AllocCallback(UvStreamHandle dispatchPipe, int suggestedSize) { return dispatchPipe.Libuv.buf_init(_bufPtr + _bytesRead, _bufferLength - _bytesRead); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerSecondary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs similarity index 95% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerSecondary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs index c2486055f..9523cb571 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ListenerSecondary.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -20,17 +21,17 @@ public class ListenerSecondary : ListenerContext, IAsyncDisposable private string _pipeName; private byte[] _pipeMessage; private IntPtr _ptr; - private Libuv.uv_buf_t _buf; + private LibuvFunctions.uv_buf_t _buf; private bool _closed; - public ListenerSecondary(ServiceContext serviceContext) : base(serviceContext) + public ListenerSecondary(LibuvTransportContext transportContext) : base(transportContext) { _ptr = Marshal.AllocHGlobal(4); } UvPipeHandle DispatchPipe { get; set; } - public IKestrelTrace Log => ServiceContext.Log; + public IKestrelTrace Log => TransportContext.Log; public Task StartAsync( string pipeName, @@ -101,7 +102,7 @@ private async void ConnectedCallback(UvConnectRequest connect, int status, Excep (handle, status2, state) => ((ListenerSecondary)state).ReadStartCallback(handle, status2), this); - writeReq.Init(Thread.Loop); + writeReq.Init(Thread.Loop); var result = await writeReq.WriteAsync( DispatchPipe, new ArraySegment>(new [] { new ArraySegment(_pipeMessage) })); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs new file mode 100644 index 000000000..db5c80ec4 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs @@ -0,0 +1,151 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO.Pipelines; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http +{ + public class SocketOutputConsumer + { + private static readonly ArraySegment _emptyData = new ArraySegment(new byte[0]); + + private readonly KestrelThread _thread; + private readonly UvStreamHandle _socket; + private readonly Connection _connection; + private readonly string _connectionId; + private readonly IKestrelTrace _log; + + private readonly WriteReqPool _writeReqPool; + private readonly IPipeReader _pipe; + + // https://github.com/dotnet/corefxlab/issues/1334 + // Pipelines don't support multiple awaiters on flush + // this is temporary until it does + + public SocketOutputConsumer( + IPipeReader pipe, + KestrelThread thread, + UvStreamHandle socket, + Connection connection, + string connectionId, + IKestrelTrace log) + { + _pipe = pipe; + // We need to have empty pipe at this moment so callback + // get's scheduled + _thread = thread; + _socket = socket; + _connection = connection; + _connectionId = connectionId; + _log = log; + _writeReqPool = thread.WriteReqPool; + + // REVIEW: This was ignored before but stored in a field. + var ignore = StartWrites(); + } + + public async Task StartWrites() + { + while (true) + { + var result = await _pipe.ReadAsync(); + var buffer = result.Buffer; + + try + { + if (!buffer.IsEmpty) + { + var writeReq = _writeReqPool.Allocate(); + var writeResult = await writeReq.WriteAsync(_socket, buffer); + _writeReqPool.Return(writeReq); + + // REVIEW: Locking here, do we need to take the context lock? + OnWriteCompleted(writeResult.Status, writeResult.Error); + } + + if (result.IsCancelled) + { + // Send a FIN + await ShutdownAsync(); + } + + if (buffer.IsEmpty && result.IsCompleted) + { + break; + } + } + finally + { + _pipe.Advance(result.Buffer.End); + } + } + + // We're done reading + _pipe.Complete(); + + _socket.Dispose(); + _connection.OnSocketClosed(); + _log.ConnectionStop(_connectionId); + } + + private void OnWriteCompleted(int writeStatus, Exception writeError) + { + // Called inside _contextLock + var status = writeStatus; + var error = writeError; + + if (error != null) + { + // Abort the connection for any failed write + // Queued on threadpool so get it in as first op. + _connection.AbortAsync(); + } + + if (error == null) + { + _log.ConnectionWriteCallback(_connectionId, status); + } + else + { + // Log connection resets at a lower (Debug) level. + if (status == Constants.ECONNRESET) + { + _log.ConnectionReset(_connectionId); + } + else + { + _log.ConnectionError(_connectionId, error); + } + } + } + + private Task ShutdownAsync() + { + var tcs = new TaskCompletionSource(); + _log.ConnectionWriteFin(_connectionId); + + var shutdownReq = new UvShutdownReq(_log); + shutdownReq.Init(_thread.Loop); + shutdownReq.Shutdown(_socket, (req, status, state) => + { + req.Dispose(); + _log.ConnectionWroteFin(_connectionId, status); + + tcs.TrySetResult(null); + }, + this); + + return tcs.Task; + } + + public void Shutdown() + { + // Graceful shutdown. + _pipe.CancelPendingRead(); + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs new file mode 100644 index 000000000..10836774a --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs @@ -0,0 +1,50 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Runtime.InteropServices; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure +{ + internal static class Constants + { + public const int ListenBacklog = 128; + + public const int EOF = -4095; + public static readonly int? ECONNRESET = GetECONNRESET(); + public static readonly int? EADDRINUSE = GetEADDRINUSE(); + + private static int? GetECONNRESET() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return -4077; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return -104; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return -54; + } + return null; + } + + private static int? GetEADDRINUSE() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + return -4091; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return -98; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + return -48; + } + return null; + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/IThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/IThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/InlineLoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/InlineLoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs similarity index 97% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelThread.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs index 1c42ccd05..7d7849dca 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelThread.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs @@ -23,7 +23,7 @@ public class KestrelThread : IScheduler { public const long HeartbeatMilliseconds = 1000; - private static readonly Libuv.uv_walk_cb _heartbeatWalkCallback = (ptr, arg) => + private static readonly LibuvFunctions.uv_walk_cb _heartbeatWalkCallback = (ptr, arg) => { var streamHandle = UvMemory.FromIntPtr(ptr) as UvStreamHandle; var thisHandle = GCHandle.FromIntPtr(arg); @@ -63,7 +63,7 @@ public KestrelThread(KestrelEngine engine) _appLifetime = engine.AppLifetime; _log = engine.Log; _threadPool = engine.ThreadPool; - _shutdownTimeout = engine.ServerOptions.ShutdownTimeout; + _shutdownTimeout = engine.TransportOptions.ShutdownTimeout; _loop = new UvLoopHandle(_log); _post = new UvAsyncHandle(_log); _thread = new Thread(ThreadStart); @@ -77,7 +77,6 @@ public KestrelThread(KestrelEngine engine) QueueCloseHandle = PostCloseHandle; QueueCloseAsyncHandle = EnqueueCloseHandle; Memory = new MemoryPool(); - PipelineFactory = new PipeFactory(); WriteReqPool = new WriteReqPool(this, _log); ConnectionManager = new ConnectionManager(this, _threadPool); } @@ -92,8 +91,6 @@ internal KestrelThread(KestrelEngine engine, int maxLoops) public MemoryPool Memory { get; } - public PipeFactory PipelineFactory { get; } - public ConnectionManager ConnectionManager { get; } public WriteReqPool WriteReqPool { get; } @@ -194,7 +191,6 @@ private async Task DisposeConnectionsAsync() finally { Memory.Dispose(); - PipelineFactory.Dispose(); } } @@ -267,7 +263,7 @@ public void Walk(Action callback) Walk((ptr, arg) => callback(ptr), IntPtr.Zero); } - private void Walk(Libuv.uv_walk_cb callback, IntPtr arg) + private void Walk(LibuvFunctions.uv_walk_cb callback, IntPtr arg) { _engine.Libuv.walk( _loop, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LibuvAwaitable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LibuvAwaitable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LibuvAwaitable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LibuvAwaitable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/WriteReqPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/WriteReqPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/WriteReqPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/WriteReqPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs new file mode 100644 index 000000000..eeceb4101 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs @@ -0,0 +1,22 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Transport; + +namespace Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal +{ + public class LibuvTransportContext + { + public LibuvTransportOptions Options { get; set; } + + public IApplicationLifetime AppLifetime { get; set; } + + public IKestrelTrace Log { get; set; } + + public IThreadPool ThreadPool { get; set; } + + public IConnectionHandler ConnectionHandler { get; set; } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/Libuv.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs similarity index 99% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/Libuv.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs index 21ed915e9..c688e9bfa 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/Libuv.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs @@ -7,9 +7,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking { - public class Libuv + public class LibuvFunctions { - public Libuv() + public LibuvFunctions() { IsWindows = PlatformApis.IsWindows; @@ -60,7 +60,7 @@ public Libuv() } // Second ctor that doesn't set any fields only to be used by MockLibuv - internal Libuv(bool onlyForTesting) + internal LibuvFunctions(bool onlyForTesting) { } @@ -305,7 +305,7 @@ unsafe public void write(UvRequest req, UvStreamHandle handle, uv_buf_t* bufs, i unsafe protected delegate int uv_write2_func(UvRequest req, UvStreamHandle handle, uv_buf_t* bufs, int nbufs, UvStreamHandle sendHandle, uv_write_cb cb); protected uv_write2_func _uv_write2; - unsafe public void write2(UvRequest req, UvStreamHandle handle, Libuv.uv_buf_t* bufs, int nbufs, UvStreamHandle sendHandle, uv_write_cb cb) + unsafe public void write2(UvRequest req, UvStreamHandle handle, uv_buf_t* bufs, int nbufs, UvStreamHandle sendHandle, uv_write_cb cb) { req.Validate(); handle.Validate(); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/PlatformApis.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/PlatformApis.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/PlatformApis.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/PlatformApis.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/SockAddr.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/SockAddr.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/SockAddr.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/SockAddr.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvAsyncHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvAsyncHandle.cs similarity index 88% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvAsyncHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvAsyncHandle.cs index da0ae7c3d..d1260b93c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvAsyncHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvAsyncHandle.cs @@ -10,9 +10,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking { public class UvAsyncHandle : UvHandle { - private static readonly Libuv.uv_close_cb _destroyMemory = (handle) => DestroyMemory(handle); + private static readonly LibuvFunctions.uv_close_cb _destroyMemory = (handle) => DestroyMemory(handle); - private static readonly Libuv.uv_async_cb _uv_async_cb = (handle) => AsyncCb(handle); + private static readonly LibuvFunctions.uv_async_cb _uv_async_cb = (handle) => AsyncCb(handle); private Action _callback; private Action, IntPtr> _queueCloseHandle; @@ -25,7 +25,7 @@ public void Init(UvLoopHandle loop, Action callback, Action, IntP CreateMemory( loop.Libuv, loop.ThreadId, - loop.Libuv.handle_size(Libuv.HandleType.ASYNC)); + loop.Libuv.handle_size(LibuvFunctions.HandleType.ASYNC)); _callback = callback; _queueCloseHandle = queueCloseHandle; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvConnectRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvConnectRequest.cs similarity index 90% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvConnectRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvConnectRequest.cs index 85df07621..86f031261 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvConnectRequest.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvConnectRequest.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking /// public class UvConnectRequest : UvRequest { - private readonly static Libuv.uv_connect_cb _uv_connect_cb = (req, status) => UvConnectCb(req, status); + private readonly static LibuvFunctions.uv_connect_cb _uv_connect_cb = (req, status) => UvConnectCb(req, status); private Action _callback; private object _state; @@ -23,7 +23,7 @@ public UvConnectRequest(IKestrelTrace logger) : base (logger) public void Init(UvLoopHandle loop) { - var requestSize = loop.Libuv.req_size(Libuv.RequestType.CONNECT); + var requestSize = loop.Libuv.req_size(LibuvFunctions.RequestType.CONNECT); CreateMemory( loop.Libuv, loop.ThreadId, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvException.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvException.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvException.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvHandle.cs similarity index 93% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvHandle.cs index 0203ac610..a5ce314bd 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvHandle.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking { public abstract class UvHandle : UvMemory { - private static readonly Libuv.uv_close_cb _destroyMemory = (handle) => DestroyMemory(handle); + private static readonly LibuvFunctions.uv_close_cb _destroyMemory = (handle) => DestroyMemory(handle); private Action, IntPtr> _queueCloseHandle; protected UvHandle(IKestrelTrace logger) : base (logger) @@ -18,7 +18,7 @@ protected UvHandle(IKestrelTrace logger) : base (logger) } protected void CreateHandle( - Libuv uv, + LibuvFunctions uv, int threadId, int size, Action, IntPtr> queueCloseHandle) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvLoopHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvLoopHandle.cs similarity index 96% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvLoopHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvLoopHandle.cs index cbb654ccd..b825c4eb7 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvLoopHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvLoopHandle.cs @@ -13,7 +13,7 @@ public UvLoopHandle(IKestrelTrace logger) : base(logger) { } - public void Init(Libuv uv) + public void Init(LibuvFunctions uv) { CreateMemory( uv, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvMemory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs similarity index 93% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvMemory.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs index 5b490ada9..571702c78 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvMemory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking /// public abstract class UvMemory : SafeHandle { - protected Libuv _uv; + protected LibuvFunctions _uv; protected int _threadId; protected readonly IKestrelTrace _log; @@ -23,7 +23,7 @@ protected UvMemory(IKestrelTrace logger) : base(IntPtr.Zero, true) _log = logger; } - public Libuv Libuv { get { return _uv; } } + public LibuvFunctions Libuv { get { return _uv; } } public override bool IsInvalid { @@ -45,7 +45,7 @@ private set } } - unsafe protected void CreateMemory(Libuv uv, int threadId, int size) + unsafe protected void CreateMemory(LibuvFunctions uv, int threadId, int size) { _uv = uv; ThreadId = threadId; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvPipeHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvPipeHandle.cs similarity index 90% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvPipeHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvPipeHandle.cs index ef2d2d9be..b4f479d7c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvPipeHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvPipeHandle.cs @@ -17,7 +17,7 @@ public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHan CreateHandle( loop.Libuv, loop.ThreadId, - loop.Libuv.handle_size(Libuv.HandleType.NAMED_PIPE), queueCloseHandle); + loop.Libuv.handle_size(LibuvFunctions.HandleType.NAMED_PIPE), queueCloseHandle); _uv.pipe_init(loop, this, ipc); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvRequest.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvRequest.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvShutdownReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvShutdownReq.cs similarity index 88% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvShutdownReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvShutdownReq.cs index f69937e5b..fb0106402 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvShutdownReq.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvShutdownReq.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking /// public class UvShutdownReq : UvRequest { - private readonly static Libuv.uv_shutdown_cb _uv_shutdown_cb = UvShutdownCb; + private readonly static LibuvFunctions.uv_shutdown_cb _uv_shutdown_cb = UvShutdownCb; private Action _callback; private object _state; @@ -25,7 +25,7 @@ public void Init(UvLoopHandle loop) CreateMemory( loop.Libuv, loop.ThreadId, - loop.Libuv.req_size(Libuv.RequestType.SHUTDOWN)); + loop.Libuv.req_size(LibuvFunctions.RequestType.SHUTDOWN)); } public void Shutdown(UvStreamHandle handle, Action callback, object state) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvStreamHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvStreamHandle.cs similarity index 86% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvStreamHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvStreamHandle.cs index 698a693c6..9b9af056c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvStreamHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvStreamHandle.cs @@ -11,16 +11,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking { public abstract class UvStreamHandle : UvHandle { - private readonly static Libuv.uv_connection_cb _uv_connection_cb = (handle, status) => UvConnectionCb(handle, status); + private readonly static LibuvFunctions.uv_connection_cb _uv_connection_cb = (handle, status) => UvConnectionCb(handle, status); // Ref and out lamda params must be explicitly typed - private readonly static Libuv.uv_alloc_cb _uv_alloc_cb = (IntPtr handle, int suggested_size, out Libuv.uv_buf_t buf) => UvAllocCb(handle, suggested_size, out buf); - private readonly static Libuv.uv_read_cb _uv_read_cb = (IntPtr handle, int status, ref Libuv.uv_buf_t buf) => UvReadCb(handle, status, ref buf); + private readonly static LibuvFunctions.uv_alloc_cb _uv_alloc_cb = (IntPtr handle, int suggested_size, out LibuvFunctions.uv_buf_t buf) => UvAllocCb(handle, suggested_size, out buf); + private readonly static LibuvFunctions.uv_read_cb _uv_read_cb = (IntPtr handle, int status, ref LibuvFunctions.uv_buf_t buf) => UvReadCb(handle, status, ref buf); private Action _listenCallback; private object _listenState; private GCHandle _listenVitality; - private Func _allocCallback; + private Func _allocCallback; private Action _readCallback; private object _readState; private GCHandle _readVitality; @@ -75,7 +75,7 @@ public void Accept(UvStreamHandle handle) } public void ReadStart( - Func allocCallback, + Func allocCallback, Action readCallback, object state) { @@ -118,7 +118,7 @@ public void ReadStop() _uv.read_stop(this); } - public int TryWrite(Libuv.uv_buf_t buf) + public int TryWrite(LibuvFunctions.uv_buf_t buf) { return _uv.try_write(this, new[] { buf }, 1); } @@ -141,7 +141,7 @@ private static void UvConnectionCb(IntPtr handle, int status) } } - private static void UvAllocCb(IntPtr handle, int suggested_size, out Libuv.uv_buf_t buf) + private static void UvAllocCb(IntPtr handle, int suggested_size, out LibuvFunctions.uv_buf_t buf) { var stream = FromIntPtr(handle); try @@ -156,7 +156,7 @@ private static void UvAllocCb(IntPtr handle, int suggested_size, out Libuv.uv_bu } } - private static void UvReadCb(IntPtr handle, int status, ref Libuv.uv_buf_t buf) + private static void UvReadCb(IntPtr handle, int status, ref LibuvFunctions.uv_buf_t buf) { var stream = FromIntPtr(handle); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTcpHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTcpHandle.cs similarity index 95% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTcpHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTcpHandle.cs index 402f2f37c..d791a6d70 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTcpHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTcpHandle.cs @@ -20,7 +20,7 @@ public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHan CreateHandle( loop.Libuv, loop.ThreadId, - loop.Libuv.handle_size(Libuv.HandleType.TCP), queueCloseHandle); + loop.Libuv.handle_size(LibuvFunctions.HandleType.TCP), queueCloseHandle); _uv.tcp_init(loop, this); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTimerHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTimerHandle.cs similarity index 90% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTimerHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTimerHandle.cs index efed9ab59..62501c6c9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvTimerHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTimerHandle.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking { public class UvTimerHandle : UvHandle { - private readonly static Libuv.uv_timer_cb _uv_timer_cb = UvTimerCb; + private readonly static LibuvFunctions.uv_timer_cb _uv_timer_cb = UvTimerCb; private Action _callback; @@ -22,7 +22,7 @@ public void Init(UvLoopHandle loop, Action, IntPtr> queueCloseHan CreateHandle( loop.Libuv, loop.ThreadId, - loop.Libuv.handle_size(Libuv.HandleType.TIMER), + loop.Libuv.handle_size(LibuvFunctions.HandleType.TIMER), queueCloseHandle); _uv.timer_init(loop, this); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvWriteReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvWriteReq.cs similarity index 91% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvWriteReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvWriteReq.cs index 673c92bd9..5462d2a2d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Networking/UvWriteReq.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvWriteReq.cs @@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Networking /// public class UvWriteReq : UvRequest { - private static readonly Libuv.uv_write_cb _uv_write_cb = (IntPtr ptr, int status) => UvWriteCb(ptr, status); + private static readonly LibuvFunctions.uv_write_cb _uv_write_cb = (IntPtr ptr, int status) => UvWriteCb(ptr, status); private IntPtr _bufs; @@ -34,8 +34,8 @@ public UvWriteReq(IKestrelTrace logger) : base(logger) public void Init(UvLoopHandle loop) { - var requestSize = loop.Libuv.req_size(Libuv.RequestType.WRITE); - var bufferSize = Marshal.SizeOf() * BUFFER_COUNT; + var requestSize = loop.Libuv.req_size(LibuvFunctions.RequestType.WRITE); + var bufferSize = Marshal.SizeOf() * BUFFER_COUNT; CreateMemory( loop.Libuv, loop.ThreadId, @@ -79,14 +79,14 @@ private unsafe void Write( } } - var pBuffers = (Libuv.uv_buf_t*)_bufs; + var pBuffers = (LibuvFunctions.uv_buf_t*)_bufs; if (nBuffers > BUFFER_COUNT) { // create and pin buffer array when it's larger than the pre-allocated one - var bufArray = new Libuv.uv_buf_t[nBuffers]; + var bufArray = new LibuvFunctions.uv_buf_t[nBuffers]; var gcHandle = GCHandle.Alloc(bufArray, GCHandleType.Pinned); _pins.Add(gcHandle); - pBuffers = (Libuv.uv_buf_t*)gcHandle.AddrOfPinnedObject(); + pBuffers = (LibuvFunctions.uv_buf_t*)gcHandle.AddrOfPinnedObject(); } if (nBuffers == 1) @@ -161,15 +161,15 @@ private unsafe void WriteArraySegmentInternal( // add GCHandle to keeps this SafeHandle alive while request processing _pins.Add(GCHandle.Alloc(this, GCHandleType.Normal)); - var pBuffers = (Libuv.uv_buf_t*)_bufs; + var pBuffers = (LibuvFunctions.uv_buf_t*)_bufs; var nBuffers = bufs.Count; if (nBuffers > BUFFER_COUNT) { // create and pin buffer array when it's larger than the pre-allocated one - var bufArray = new Libuv.uv_buf_t[nBuffers]; + var bufArray = new LibuvFunctions.uv_buf_t[nBuffers]; var gcHandle = GCHandle.Alloc(bufArray, GCHandleType.Pinned); _pins.Add(gcHandle); - pBuffers = (Libuv.uv_buf_t*)gcHandle.AddrOfPinnedObject(); + pBuffers = (LibuvFunctions.uv_buf_t*)gcHandle.AddrOfPinnedObject(); } for (var index = 0; index < nBuffers; index++) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs new file mode 100644 index 000000000..96887f048 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -0,0 +1,137 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.Extensions.Logging; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal +{ + public class KestrelEngine : ITransport + { + private readonly ListenOptions _listenOptions; + + private readonly List _listeners = new List(); + + public KestrelEngine(LibuvTransportContext context, ListenOptions listenOptions) + : this(new LibuvFunctions(), context, listenOptions) + { } + + // For testing + internal KestrelEngine(LibuvFunctions uv, LibuvTransportContext context, ListenOptions listenOptions) + { + Libuv = uv; + TransportContext = context; + + _listenOptions = listenOptions; + } + + public LibuvFunctions Libuv { get; } + public LibuvTransportContext TransportContext { get; } + public List Threads { get; } = new List(); + + public IApplicationLifetime AppLifetime => TransportContext.AppLifetime; + public IKestrelTrace Log => TransportContext.Log; + public IThreadPool ThreadPool => TransportContext.ThreadPool; + public LibuvTransportOptions TransportOptions => TransportContext.Options; + + public async Task StopAsync() + { + try + { + await Task.WhenAll(Threads.Select(thread => thread.StopAsync(TimeSpan.FromSeconds(2.5))).ToArray()); + } + catch (AggregateException aggEx) + { + // An uncaught exception was likely thrown from the libuv event loop. + // The original error that crashed one loop may have caused secondary errors in others. + // Make sure that the stack trace of the original error is logged. + foreach (var ex in aggEx.InnerExceptions) + { + Log.LogCritical("Failed to gracefully close Kestrel.", ex); + } + + throw; + } + + Threads.Clear(); +#if DEBUG + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.Collect(); +#endif + } + + public async Task BindAsync() + { + // TODO: Move thread management to LibuvTransportFactory + // TODO: Split connection management from thread management + for (var index = 0; index < TransportOptions.ThreadCount; index++) + { + Threads.Add(new KestrelThread(this)); + } + + foreach (var thread in Threads) + { + thread.StartAsync().Wait(); + } + + try + { + if (TransportOptions.ThreadCount == 1) + { + var listener = new Listener(TransportContext); + _listeners.Add(listener); + await listener.StartAsync(_listenOptions, Threads[0]); + } + else + { + var pipeName = (Libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); + var pipeMessage = Guid.NewGuid().ToByteArray(); + + var listenerPrimary = new ListenerPrimary(TransportContext); + _listeners.Add(listenerPrimary); + await listenerPrimary.StartAsync(pipeName, pipeMessage, _listenOptions, Threads[0]); + + foreach (var thread in Threads.Skip(1)) + { + var listenerSecondary = new ListenerSecondary(TransportContext); + _listeners.Add(listenerSecondary); + await listenerSecondary.StartAsync(pipeName, pipeMessage, _listenOptions, thread); + } + } + } + catch + { + await UnbindAsync(); + throw; + } + } + + public async Task UnbindAsync() + { + var disposeTasks = _listeners.Select(listener => listener.DisposeAsync()).ToArray(); + + if (!await WaitAsync(Task.WhenAll(disposeTasks), TimeSpan.FromSeconds(2.5))) + { + Log.LogError(0, null, "Disposing listeners failed"); + } + + _listeners.Clear(); + } + + private static async Task WaitAsync(Task task, TimeSpan timeout) + { + return await Task.WhenAny(task, Task.Delay(timeout)).ConfigureAwait(false) == task; + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs new file mode 100644 index 000000000..f1a432185 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs @@ -0,0 +1,75 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Server.Kestrel.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; + +namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +{ + public class LibuvTransportFactory : ITransportFactory + { + private readonly LibuvTransportContext _baseTransportContext; + + public LibuvTransportFactory( + IOptions options, + IApplicationLifetime applicationLifetime, + ILoggerFactory loggerFactory) + { + if (options == null) + { + throw new ArgumentNullException(nameof(options)); + } + if (applicationLifetime == null) + { + throw new ArgumentNullException(nameof(applicationLifetime)); + } + if (loggerFactory == null) + { + throw new ArgumentNullException(nameof(loggerFactory)); + } + + // REVIEW: Should we change the logger namespace for transport logs? + var logger = loggerFactory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel"); + // TODO: Add LibuvTrace + var trace = new KestrelTrace(logger); + + IThreadPool threadPool; + if (options.Value.ThreadPoolDispatching) + { + threadPool = new LoggingThreadPool(trace); + } + else + { + threadPool = new InlineLoggingThreadPool(trace); + } + + _baseTransportContext = new LibuvTransportContext + { + Options = options.Value, + AppLifetime = applicationLifetime, + Log = trace, + ThreadPool = threadPool + }; + } + + public ITransport Create(ListenOptions listenOptions, IConnectionHandler handler) + { + var transportContext = new LibuvTransportContext + { + Options = _baseTransportContext.Options, + AppLifetime = _baseTransportContext.AppLifetime, + Log = _baseTransportContext.Log, + ThreadPool = _baseTransportContext.ThreadPool, + ConnectionHandler = handler + }; + + return new KestrelEngine(transportContext, listenOptions); + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs new file mode 100644 index 000000000..34c6722ea --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs @@ -0,0 +1,68 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +{ + // REVIEW: Do we really want to configure these limits at the transport level? + public class LibuvTransportLimits + { + // Matches the non-configurable default response buffer size for Kestrel in 1.0.0 + private long? _maxResponseBufferSize = 64 * 1024; + + // Matches the default client_max_body_size in nginx. Also large enough that most requests + // should be under the limit. + private long? _maxRequestBufferSize = 1024 * 1024; + + /// + /// Gets or sets the maximum size of the response buffer before write + /// calls begin to block or return tasks that don't complete until the + /// buffer size drops below the configured limit. + /// + /// + /// When set to null, the size of the response buffer is unlimited. + /// When set to zero, all write calls will block or return tasks that + /// don't complete until the entire response buffer is flushed. + /// Defaults to 65,536 bytes (64 KB). + /// + public long? MaxResponseBufferSize + { + get + { + return _maxResponseBufferSize; + } + set + { + if (value.HasValue && value.Value < 0) + { + throw new ArgumentOutOfRangeException(nameof(value), "Value must be null or a non-negative integer."); + } + _maxResponseBufferSize = value; + } + } + + /// + /// Gets or sets the maximum size of the request buffer. + /// + /// + /// When set to null, the size of the request buffer is unlimited. + /// Defaults to 1,048,576 bytes (1 MB). + /// + public long? MaxRequestBufferSize + { + get + { + return _maxRequestBufferSize; + } + set + { + if (value.HasValue && value.Value <= 0) + { + throw new ArgumentOutOfRangeException(nameof(value), "Value must be null or a positive integer."); + } + _maxRequestBufferSize = value; + } + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs new file mode 100644 index 000000000..e66edb3bc --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs @@ -0,0 +1,71 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +{ + /// + /// Provides programmatic configuration of Libuv transport features. + /// + public class LibuvTransportOptions + { + /// + /// The number of libuv I/O threads used to process requests. + /// + /// + /// Defaults to half of rounded down and clamped between 1 and 16. + /// + public int ThreadCount { get; set; } = ProcessorThreadCount; + + /// + /// + /// + /// + /// Defaults to true. + /// + public bool ThreadPoolDispatching { get; set; } = true; + + // TODO: Move all shutdown timeout logic back into core project. + /// + /// The amount of time after the server begins shutting down before connections will be forcefully closed. + /// Kestrel will wait for the duration of the timeout for any ongoing request processing to complete before + /// terminating the connection. No new connections or requests will be accepted during this time. + /// + /// + /// Defaults to 5 seconds. + /// + public TimeSpan ShutdownTimeout { get; set; } = TimeSpan.FromSeconds(5); + + /// + /// Provides access to request and response buffer size limits. + /// + public LibuvTransportLimits Limits { get; } = new LibuvTransportLimits(); + + private static int ProcessorThreadCount + { + get + { + // Actual core count would be a better number + // rather than logical cores which includes hyper-threaded cores. + // Divide by 2 for hyper-threading, and good defaults (still need threads to do webserving). + var threadCount = Environment.ProcessorCount >> 1; + + if (threadCount < 1) + { + // Ensure shifted value is at least one + return 1; + } + + if (threadCount > 16) + { + // Receive Side Scaling RSS Processor count currently maxes out at 16 + // would be better to check the NIC's current hardware queues; but xplat... + return 16; + } + + return threadCount; + } + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj index 1b1264eb4..8cb9d0e45 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj @@ -7,11 +7,13 @@ net451;netstandard1.3 true aspnetcore;kestrel + true CS1591;$(NoWarn) + diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs new file mode 100644 index 000000000..1173077a2 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs @@ -0,0 +1,50 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.Extensions.DependencyInjection; + +namespace Microsoft.AspNetCore.Hosting +{ + public static class WebHostBuilderLibuvExtensions + { + /// + /// Specify Libuv as the transport to be used by Kestrel. + /// + /// + /// The Microsoft.AspNetCore.Hosting.IWebHostBuilder to configure. + /// + /// + /// The Microsoft.AspNetCore.Hosting.IWebHostBuilder. + /// + public static IWebHostBuilder UseLibuv(this IWebHostBuilder hostBuilder) + { + return hostBuilder.ConfigureServices(services => + { + services.AddSingleton(); + }); + } + + /// + /// Specify Libuv as the transport to be used by Kestrel. + /// + /// + /// The Microsoft.AspNetCore.Hosting.IWebHostBuilder to configure. + /// + /// + /// A callback to configure Libuv options. + /// + /// + /// The Microsoft.AspNetCore.Hosting.IWebHostBuilder. + /// + public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder, Action options) + { + return hostBuilder.UseLibuv().ConfigureServices(services => + { + services.Configure(options); + }); + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs b/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs deleted file mode 100644 index 61030ae8a..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Class1.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Microsoft.AspNetCore.Server.Kestrel -{ - public class Class1 - { - } -} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/WebHostBuilderKestrelExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel/WebHostBuilderKestrelExtensions.cs similarity index 98% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/WebHostBuilderKestrelExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel/WebHostBuilderKestrelExtensions.cs index 8d26d2dea..a40b2ec8a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/WebHostBuilderKestrelExtensions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel/WebHostBuilderKestrelExtensions.cs @@ -23,6 +23,8 @@ public static class WebHostBuilderKestrelExtensions /// public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder) { + hostBuilder.UseLibuv(); + return hostBuilder.ConfigureServices(services => { services.AddTransient, KestrelServerOptionsSetup>(); From d66b3f28d9a29b753622f4ae8940a71f8c5bae49 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 23 Mar 2017 16:27:44 -0700 Subject: [PATCH 04/20] WIP 2 --- .../Adapter/Internal/AdaptedPipeline.cs | 18 +- .../Adapter/Internal/StreamSocketOutput.cs | 2 +- .../Internal/ConnectionHandler.cs | 151 ++++++----------- .../Internal/ConnectionLifetime.cs | 154 ++++++++++++++++++ .../Internal/ConnectionLifetimeContext.cs | 23 +++ .../Internal/Http/Frame.cs | 30 ++-- .../Internal/Http/FrameContext.cs | 7 +- .../Internal/Http/ISocketOutput.cs | 2 +- .../Internal/Http/SocketOutputProducer.cs | 19 ++- .../Internal/Infrastructure/IThreadPool.cs | 0 .../Infrastructure/InlineLoggingThreadPool.cs | 0 .../Infrastructure/LoggingThreadPool.cs | 0 .../Internal/ServiceContext.cs | 2 + .../KestrelServer.cs | 11 ++ .../Transport/IConnectionContext.cs | 1 - .../Transport/IConnectionHandler.cs | 2 +- .../Transport/IConnectionInformation.cs | 2 + .../Internal/Http/Connection.cs | 102 +----------- .../Internal/Http/ConnectionContext.cs | 2 + .../Internal/Http/ListenerContext.cs | 37 ----- .../KestrelEngine.cs | 2 +- .../LibuvTransportLimits.cs | 68 -------- .../LibuvTransportOptions.cs | 5 - 23 files changed, 279 insertions(+), 361 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/IThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/InlineLoggingThreadPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Core}/Internal/Infrastructure/LoggingThreadPool.cs (100%) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs index 488d902d9..44ced49a1 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs @@ -36,25 +36,13 @@ public void Dispose() Input.Writer.Complete(); } - public async Task StartAsync() + public async Task RunAsync() { var inputTask = ReadInputAsync(); var outputTask = _output.WriteOutputAsync(); - var result = await Task.WhenAny(inputTask, outputTask); - - if (result == inputTask) - { - // Close output - _output.Dispose(); - } - else - { - // Close input - Input.Writer.Complete(); - } - - await Task.WhenAll(inputTask, outputTask); + await inputTask; + await outputTask; } private async Task ReadInputAsync() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs index 34ef6ae31..11da4bc24 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/StreamSocketOutput.cs @@ -16,7 +16,7 @@ public class StreamSocketOutput : ISocketOutput private readonly Stream _outputStream; private readonly IPipe _pipe; - private object _sync = new object(); + private readonly object _sync = new object(); private bool _completed; public StreamSocketOutput(Stream outputStream, IPipe pipe) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index 6d52ea947..5d34c8dda 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -4,7 +4,6 @@ using System; using System.IO.Pipelines; using System.Threading; -using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Transport; @@ -32,10 +31,10 @@ public ConnectionHandler(ServiceContext serviceContext, IHttpApplication(_application, frameContext); - frame.Start(); - - return new ConnectionContext(frame) + var connection = new ConnectionLifetime(new ConnectionLifetimeContext { ConnectionId = connectionId, - Input = inputPipe.Writer, - Output = outputPipe.Reader, - }; + ServiceContext = _serviceContext, + PipeFactory = _pipeFactory, + ConnectionAdapters = connectionInfo.ListenOptions.ConnectionAdapters, + Frame = new Frame(_application, frameContext), + Input = inputPipe, + Output = outputPipe + }); + + // Since data cannot be added to the inputPipe by the transport until OnConnection returns, + // Frame.RequestProcessingAsync is guaranteed to unblock the transport thread before calling + // application code. + connection.StartRequestProcessing(); + + return connection; } - //private void StartFrame() - //{ - // if (_connectionAdapters.Count == 0) - // { - // _frame.Start(); - // } - // else - // { - // // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). - // // Otherwise, it will close the connection. - // var ignore = ApplyConnectionAdaptersAsync(); - // } - //} - - //private async Task ApplyConnectionAdaptersAsync(ConnectionContext connectionContext, FrameContext frameContext) - //{ - // try - // { - // var rawStream = new RawStream(Input.Reader, Output); - // var adapterContext = new ConnectionAdapterContext(rawStream); - // var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; - - // for (var i = 0; i < _connectionAdapters.Count; i++) - // { - // var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); - // adaptedConnections[i] = adaptedConnection; - // adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); - // } - - // if (adapterContext.ConnectionStream != rawStream) - // { - // _filteredStream = adapterContext.ConnectionStream; - // _adaptedPipeline = new AdaptedPipeline( - // adapterContext.ConnectionStream, - // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions), - // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions)); - - // _frame.Input = _adaptedPipeline.Input; - // _frame.Output = _adaptedPipeline.Output; - - // // Don't attempt to read input if connection has already closed. - // // This can happen if a client opens a connection and immediately closes it. - // _readInputTask = _socketClosedTcs.Task.Status == TaskStatus.WaitingForActivation - // ? _adaptedPipeline.StartAsync() - // : TaskCache.CompletedTask; - // } - - // _frame.AdaptedConnections = adaptedConnections; - // _frame.Start(); - // } - // catch (Exception ex) - // { - // Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); - // Input.Reader.Complete(); - // ConnectionControl.End(ProduceEndType.SocketDisconnect); - // } - //} - public void Dispose() { _pipeFactory.Dispose(); } + private PipeOptions GetInputPipeOptions(IScheduler scheduler) => new PipeOptions + { + ReaderScheduler = _serviceContext.ThreadPool, + WriterScheduler = scheduler, + MaximumSizeHigh = _serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0, + MaximumSizeLow = _serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 + }; + + private PipeOptions GetOutputPipeOptions(IScheduler scheduler) => new PipeOptions + { + ReaderScheduler = scheduler, + WriterScheduler = _serviceContext.ThreadPool, + MaximumSizeHigh = GetOutputResponseBufferSize(), + MaximumSizeLow = GetOutputResponseBufferSize() + }; + + private long GetOutputResponseBufferSize() + { + var bufferSize = _serviceContext.ServerOptions.Limits.MaxResponseBufferSize; + if (bufferSize == 0) + { + // 0 = no buffering so we need to configure the pipe so the the writer waits on the reader directly + return 1; + } + + // null means that we have no back pressure + return bufferSize ?? 0; + } + private static unsafe string GenerateConnectionId(long id) { // The following routine is ~310% faster than calling long.ToString() on x64 @@ -148,36 +124,5 @@ private static unsafe string GenerateConnectionId(long id) // string ctor overload that takes char* return new string(charBuffer, 0, 13); } - - private class ConnectionContext : IConnectionContext - { - private readonly Frame _frame; - - public ConnectionContext(Frame frame) - { - _frame = frame; - } - - public string ConnectionId { get; set; } - public IPipeWriter Input { get; set; } - public IPipeReader Output { get; set; } - - public Task StopAsync() - { - return _frame.StopAsync(); - } - - public void Abort(Exception ex) - { - _frame.Abort(ex); - } - - public void SetBadRequestState(RequestRejectionReason reason) - { - _frame.SetBadRequestState(reason); - } - - public Task FrameStartedTask => _frame.FrameStartedTask; - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs new file mode 100644 index 000000000..e57a5ed67 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs @@ -0,0 +1,154 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Pipelines; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.Kestrel.Adapter; +using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.Extensions.Internal; +using Microsoft.Extensions.Logging; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal +{ + public class ConnectionLifetime : IConnectionContext + { + private readonly ConnectionLifetimeContext _context; + private readonly Frame _frame; + private readonly List _connectionAdapters; + private readonly TaskCompletionSource _frameStartedTcs = new TaskCompletionSource(); + + private AdaptedPipeline _adaptedPipeline; + private Stream _filteredStream; + private Task _adaptedPipelineTask = TaskCache.CompletedTask; + + public ConnectionLifetime(ConnectionLifetimeContext context) + { + _context = context; + _frame = context.Frame; + _connectionAdapters = context.ConnectionAdapters; + } + + public string ConnectionId => _context.ConnectionId; + public IPipeWriter Input => _context.Input.Writer; + public IPipeReader Output => _context.Output.Reader; + + private PipeFactory PipeFactory => _context.PipeFactory; + private PipeOptions AdaptedPipeOptions => new PipeOptions + { + ReaderScheduler = InlineScheduler.Default, + WriterScheduler = InlineScheduler.Default, + MaximumSizeHigh = _context.ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0, + MaximumSizeLow = _context.ServiceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 + }; + + private IKestrelTrace Log => _context.ServiceContext.Log; + + public void StartRequestProcessing() + { + _frame.Input = _context.Input.Reader; + _frame.Output = new SocketOutputProducer(_context.Output.Writer, this, ConnectionId, Log); + + if (_connectionAdapters.Count == 0) + { + _frame.Start(); + _frameStartedTcs.SetResult(null); + } + else + { + // Ensure that IConnectionAdapter.OnConnectionAsync does not run on the transport thread. + _context.ServiceContext.ThreadPool.UnsafeRun(state => + { + // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). + // Otherwise, it will close the connection. + var ignore = ((ConnectionLifetime)state).ApplyConnectionAdaptersAsync(); + }, this); + } + } + + public async Task StopAsync() + { + await _frameStartedTcs.Task; + await _frame.StopAsync(); + await _adaptedPipelineTask; + } + + public void Abort(Exception ex) + { + _frame.Abort(ex); + } + + public void SetBadRequestState(RequestRejectionReason reason) + { + _frame.SetBadRequestState(reason); + } + + private async Task ApplyConnectionAdaptersAsync() + { + try + { + var rawSocketOutput = _frame.Output; + var rawStream = new RawStream(_frame.Input, rawSocketOutput); + var adapterContext = new ConnectionAdapterContext(rawStream); + var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; + + for (var i = 0; i < _connectionAdapters.Count; i++) + { + var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); + adaptedConnections[i] = adaptedConnection; + adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); + } + + if (adapterContext.ConnectionStream != rawStream) + { + _filteredStream = adapterContext.ConnectionStream; + _adaptedPipeline = new AdaptedPipeline( + adapterContext.ConnectionStream, + PipeFactory.Create(AdaptedPipeOptions), + PipeFactory.Create(AdaptedPipeOptions)); + + _frame.Input = _adaptedPipeline.Input.Reader; + _frame.Output = _adaptedPipeline.Output; + + _adaptedPipelineTask = RunAdaptedPipeline(); + } + + _frame.AdaptedConnections = adaptedConnections; + _frame.Start(); + _frameStartedTcs.SetResult(null); + } + catch (Exception ex) + { + Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); + _context.Output.Writer.Complete(); + _context.Input.Reader.Complete(); + + _adaptedPipeline?.Dispose(); + _filteredStream?.Dispose(); + } + } + + private async Task RunAdaptedPipeline() + { + try + { + await _adaptedPipeline.RunAsync(); + } + catch (Exception ex) + { + // adaptedPipeline.RunAsync() shouldn't throw. + Log.LogError(0, ex, $"{nameof(ConnectionLifetime)}.{nameof(ApplyConnectionAdaptersAsync)}"); + } + finally + { + _adaptedPipeline.Dispose(); + _filteredStream.Dispose(); + } + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs new file mode 100644 index 000000000..e554b7357 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs @@ -0,0 +1,23 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.IO.Pipelines; +using Microsoft.AspNetCore.Server.Kestrel.Adapter; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal +{ + public class ConnectionLifetimeContext + { + public string ConnectionId { get; set; } + public ServiceContext ServiceContext { get; set; } + public PipeFactory PipeFactory { get; set; } + public List ConnectionAdapters { get; set; } + public Frame Frame { get; set; } + + + public IPipe Input { get; set; } + public IPipe Output { get; set; } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index b3ad17433..db03e4eac 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -53,7 +53,6 @@ public abstract partial class Frame : IFrameControl, IHttpRequestLineHandler, IH protected Stack, object>> _onStarting; protected Stack, object>> _onCompleted; - private TaskCompletionSource _frameStartedTcs = new TaskCompletionSource(); private Task _requestProcessingTask; protected volatile bool _requestProcessingStopping; // volatile, see: https://msdn.microsoft.com/en-us/library/x13ttww7.aspx protected int _requestAborted; @@ -84,7 +83,6 @@ public abstract partial class Frame : IFrameControl, IHttpRequestLineHandler, IH public Frame(FrameContext frameContext) { _frameContext = frameContext; - Output = new SocketOutputProducer(frameContext.Output, this, ConnectionId, Log); ServerOptions = ServiceContext.ServerOptions; @@ -98,7 +96,7 @@ public Frame(FrameContext frameContext) public ServiceContext ServiceContext => _frameContext.ServiceContext; public IConnectionInformation ConnectionInformation => _frameContext.ConnectionInformation; - public IPipeReader Input => _frameContext.Input; + public IPipeReader Input { get; set; } public ISocketOutput Output { get; set; } public IEnumerable AdaptedConnections { get; set; } @@ -221,8 +219,6 @@ public string ReasonPhrase public Stream DuplexStream { get; set; } - public Task FrameStartedTask => _frameStartedTcs.Task; - public CancellationToken RequestAborted { get @@ -395,7 +391,6 @@ public void Start() { Reset(); _requestProcessingTask = RequestProcessingAsync(); - _frameStartedTcs.SetResult(null); } /// @@ -433,18 +428,19 @@ public void Abort(Exception error = null) Log.LogError(0, ex, "Abort"); } - try - { - RequestAbortedSource.Cancel(); - } - catch (Exception ex) - { - Log.LogError(0, ex, "Abort"); - } + // Potentially calling user code. ThreadPool will catch and log any errors. + ServiceContext.ThreadPool.Run(() => RequestAbortedSource.Cancel()); + _abortedCts = null; } } + protected void End(ProduceEndType endType) + { + ConnectionControl.End(endType); + Output.Dispose(); + } + /// /// Primary loop which consumes socket input, parses it for protocol framing, and invokes the /// application delegate for as long as the socket is intended to remain open. @@ -1204,12 +1200,6 @@ protected void ReportApplicationError(Exception ex) Log.ApplicationError(ConnectionId, ex); } - protected void End(ProduceEndType endType) - { - ConnectionControl.End(endType); - _frameContext.Output.Complete(); - } - public void OnStartLine(HttpMethod method, HttpVersion version, Span target, Span path, Span query, Span customMethod, bool pathEncoded) { Debug.Assert(target.Length != 0, "Request target must be non-zero length"); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs index 3f727ad60..34aac3dab 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; -using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Adapter; using Microsoft.AspNetCore.Server.Kestrel.Transport; @@ -11,11 +10,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http public class FrameContext { public string ConnectionId { get; set; } - public IConnectionInformation ConnectionInformation { get; set; } - public IEnumerable AdaptedConnections { get; set; } public ServiceContext ServiceContext { get; set; } - - public IPipeReader Input { get; set; } - public IPipeWriter Output { get; set; } + public IConnectionInformation ConnectionInformation { get; set; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs index 7298b4216..26287ae9b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http /// /// Operations performed for buffered socket output /// - public interface ISocketOutput + public interface ISocketOutput : IDisposable { void Write(ArraySegment buffer, bool chunk = false); Task WriteAsync(ArraySegment buffer, bool chunk = false, CancellationToken cancellationToken = default(CancellationToken)); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs index 1e8161998..fe41862d6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs @@ -28,7 +28,7 @@ public class SocketOutputProducer : ISocketOutput // TODO: Set _lastWriteError //private Exception _lastWriteError; private readonly IPipeWriter _pipe; - private readonly Frame _frame; + private readonly ConnectionLifetime _connection; // https://github.com/dotnet/corefxlab/issues/1334 // Pipelines don't support multiple awaiters on flush @@ -37,10 +37,10 @@ public class SocketOutputProducer : ISocketOutput private readonly object _flushLock = new object(); private readonly Action _onFlushCallback; - public SocketOutputProducer(IPipeWriter pipe, Frame frame, string connectionId, IKestrelTrace log) + public SocketOutputProducer(IPipeWriter pipe, ConnectionLifetime connection, string connectionId, IKestrelTrace log) { _pipe = pipe; - _frame = frame; + _connection = connection; _connectionId = connectionId; _log = log; _onFlushCallback = OnFlush; @@ -134,7 +134,7 @@ Task ISocketOutput.WriteAsync(ArraySegment buffer, bool chunk, Cancellatio { if (cancellationToken.IsCancellationRequested) { - _frame.Abort(); + _connection.Abort(ex: null); _cancelled = true; return Task.FromCanceled(cancellationToken); } @@ -156,7 +156,7 @@ Task ISocketOutput.FlushAsync(CancellationToken cancellationToken) return WriteAsync(_emptyData, cancellationToken); } - public void Write(Action callback, T state) + void ISocketOutput.Write(Action callback, T state) { lock (_contextLock) { @@ -170,5 +170,14 @@ public void Write(Action callback, T state) buffer.Commit(); } } + + public void Dispose() + { + lock (_contextLock) + { + _isSocketClosed = false; + _pipe.Complete(); + } + } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/IThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/IThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/IThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/InlineLoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/InlineLoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/InlineLoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LoggingThreadPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LoggingThreadPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/LoggingThreadPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs index 4b39fc6bc..3c3750c6c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ServiceContext.cs @@ -11,6 +11,8 @@ public class ServiceContext { public IKestrelTrace Log { get; set; } + public IThreadPool ThreadPool { get; set; } + public Func HttpParserFactory { get; set; } public DateHeaderValueManager DateHeaderValueManager { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index e65a6d560..2f2aa2a85 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -92,10 +92,21 @@ public void Start(IHttpApplication application) _dateHeaderValueManager = new DateHeaderValueManager(); var trace = new KestrelTrace(_logger); + IThreadPool threadPool; + if (InternalOptions.ThreadPoolDispatching) + { + threadPool = new LoggingThreadPool(trace); + } + else + { + threadPool = new InlineLoggingThreadPool(trace); + } + var serviceContext = new ServiceContext { Log = trace, HttpParserFactory = frame => new KestrelHttpParser(frame.ServiceContext.Log), + ThreadPool = threadPool, DateHeaderValueManager = _dateHeaderValueManager, ServerOptions = Options }; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs index 4f027d9b4..e26ae4c01 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs @@ -18,6 +18,5 @@ public interface IConnectionContext Task StopAsync(); void Abort(Exception ex); void SetBadRequestState(RequestRejectionReason reason); - Task FrameStartedTask { get; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs index e93e894ec..5249b8f32 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs @@ -7,6 +7,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport { public interface IConnectionHandler { - IConnectionContext OnConnection(IConnectionInformation connectionInfo, PipeOptions inputOptions, PipeOptions outputOptions); + IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler); } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs index 0b53f9eb5..37b97856a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs @@ -8,6 +8,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport { public interface IConnectionInformation { + ListenOptions ListenOptions { get; } + IPEndPoint RemoteEndPoint { get; } IPEndPoint LocalEndPoint { get; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs index 52a12d1a9..7630aa8cf 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs @@ -31,10 +31,6 @@ public class Connection : ConnectionContext, IConnectionControl private readonly UvStreamHandle _socket; private IConnectionContext _connectionContext; - //private readonly List _connectionAdapters; - //private AdaptedPipeline _adaptedPipeline; - //private Stream _filteredStream; - //private Task _readInputTask; private TaskCompletionSource _socketClosedTcs = new TaskCompletionSource(); @@ -68,25 +64,19 @@ internal Connection() public SocketOutputConsumer Output { get; set; } private IKestrelTrace Log => ListenerContext.TransportContext.Log; - private IThreadPool ThreadPool => ListenerContext.TransportContext.ThreadPool; private IConnectionHandler ConnectionHandler => ListenerContext.TransportContext.ConnectionHandler; private KestrelThread Thread => ListenerContext.Thread; public void Start() { - Log.ConnectionStart(ConnectionId); - //KestrelEventSource.Log.ConnectionStart(this); - - // Dispatch to a thread pool so if the first read completes synchronously - // we won't be on IO thread try { - // TODO: Dispatch OnConnection (and then dispatch back for ReadStart?) - //ThreadPool.UnsafeRun(state => ((Connection)state).StartFrame(), this); - _connectionContext = ConnectionHandler.OnConnection(this, ListenerContext.LibuvInputPipeOptions, ListenerContext.LibuvOutputPipeOptions); - + _connectionContext = ConnectionHandler.OnConnection(this, Thread, Thread); ConnectionId = _connectionContext.ConnectionId; + Log.ConnectionStart(ConnectionId); + //KestrelEventSource.Log.ConnectionStart(this); + Input = _connectionContext.Input; Output = new SocketOutputConsumer(_connectionContext.Output, Thread, _socket, this, ConnectionId, Log); @@ -101,20 +91,6 @@ public void Start() } } - //private void StartFrame() - //{ - // if (_connectionAdapters.Count == 0) - // { - // _frame.Start(); - // } - // else - // { - // // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). - // // Otherwise, it will close the connection. - // var ignore = ApplyConnectionAdaptersAsync(); - // } - //} - public Task StopAsync() { return Task.WhenAll(_connectionContext.StopAsync(), _socketClosedTcs.Task); @@ -122,37 +98,13 @@ public Task StopAsync() public virtual Task AbortAsync(Exception error = null) { - // Frame.Abort calls user code while this method is always - // called from a libuv thread. - ThreadPool.Run(() => - { - _connectionContext.Abort(error); - }); - + _connectionContext.Abort(error); return _socketClosedTcs.Task; } // Called on Libuv thread public virtual void OnSocketClosed() { - //KestrelEventSource.Log.ConnectionStop(this); - - //_connectionContext.FrameStartedTask.ContinueWith((task, state) => - //{ - // var connection = (Connection)state; - - // if (connection._adaptedPipeline != null) - // { - // Task.WhenAll(connection._readInputTask, connection._connectionContext.StopAsync()).ContinueWith((task2, state2) => - // { - // var connection2 = (Connection)state2; - // connection2._filteredStream.Dispose(); - // connection2._adaptedPipeline.Dispose(); - // Input.Reader.Complete(); - // }, connection); - // } - //}, this); - Input.Complete(new TaskCanceledException("The request was aborted")); _socketClosedTcs.TrySetResult(null); } @@ -175,50 +127,6 @@ public void Tick(long timestamp) Interlocked.Exchange(ref _lastTimestamp, timestamp); } - //private async Task ApplyConnectionAdaptersAsync() - //{ - // try - // { - // var rawStream = new RawStream(Input.Reader, Output); - // var adapterContext = new ConnectionAdapterContext(rawStream); - // var adaptedConnections = new IAdaptedConnection[_connectionAdapters.Count]; - - // for (var i = 0; i < _connectionAdapters.Count; i++) - // { - // var adaptedConnection = await _connectionAdapters[i].OnConnectionAsync(adapterContext); - // adaptedConnections[i] = adaptedConnection; - // adapterContext = new ConnectionAdapterContext(adaptedConnection.ConnectionStream); - // } - - // if (adapterContext.ConnectionStream != rawStream) - // { - // _filteredStream = adapterContext.ConnectionStream; - // _adaptedPipeline = new AdaptedPipeline( - // adapterContext.ConnectionStream, - // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions), - // Thread.PipelineFactory.Create(ListenerContext.AdaptedPipeOptions)); - - // _frame.Input = _adaptedPipeline.Input; - // _frame.Output = _adaptedPipeline.Output; - - // // Don't attempt to read input if connection has already closed. - // // This can happen if a client opens a connection and immediately closes it. - // _readInputTask = _socketClosedTcs.Task.Status == TaskStatus.WaitingForActivation - // ? _adaptedPipeline.StartAsync() - // : TaskCache.CompletedTask; - // } - - // _frame.AdaptedConnections = adaptedConnections; - // _frame.Start(); - // } - // catch (Exception ex) - // { - // Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); - // Input.Reader.Complete(); - // ConnectionControl.End(ProduceEndType.SocketDisconnect); - // } - //} - private static LibuvFunctions.uv_buf_t AllocCallback(UvStreamHandle handle, int suggestedSize, object state) { return ((Connection)state).OnAlloc(handle, suggestedSize); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs index 723f5df10..c2ff741d9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs @@ -20,6 +20,8 @@ public ConnectionContext(ListenerContext context) public ListenerContext ListenerContext { get; set; } + public ListenOptions ListenOptions => ListenerContext.ListenOptions; + public IConnectionControl ConnectionControl { get; set; } public IPEndPoint RemoteEndPoint { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs index 95ca480c6..d0742e1a4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs @@ -43,42 +43,5 @@ protected UvStreamHandle CreateAcceptSocket() throw new InvalidOperationException(); } } - - public PipeOptions LibuvInputPipeOptions => new PipeOptions - { - ReaderScheduler = TransportContext.ThreadPool, - WriterScheduler = Thread, - MaximumSizeHigh = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0, - MaximumSizeLow = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0 - }; - - public PipeOptions LibuvOutputPipeOptions => new PipeOptions - { - ReaderScheduler = Thread, - WriterScheduler = TransportContext.ThreadPool, - MaximumSizeHigh = GetOutputResponseBufferSize(), - MaximumSizeLow = GetOutputResponseBufferSize() - }; - - public PipeOptions AdaptedPipeOptions => new PipeOptions - { - ReaderScheduler = InlineScheduler.Default, - WriterScheduler = InlineScheduler.Default, - MaximumSizeHigh = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0, - MaximumSizeLow = TransportContext.Options.Limits.MaxRequestBufferSize ?? 0 - }; - - private long GetOutputResponseBufferSize() - { - var bufferSize = TransportContext.Options.Limits.MaxResponseBufferSize; - if (bufferSize == 0) - { - // 0 = no buffering so we need to configure the pipe so the the writer waits on the reader directly - return 1; - } - - // null means that we have no back pressure - return bufferSize ?? 0; - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs index 96887f048..2071b2121 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -74,7 +74,7 @@ public async Task StopAsync() public async Task BindAsync() { // TODO: Move thread management to LibuvTransportFactory - // TODO: Split connection management from thread management + // TODO: Split endpoint management from thread management for (var index = 0; index < TransportOptions.ThreadCount; index++) { Threads.Add(new KestrelThread(this)); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs deleted file mode 100644 index 34c6722ea..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportLimits.cs +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; - -namespace Microsoft.AspNetCore.Server.Kestrel.Libuv -{ - // REVIEW: Do we really want to configure these limits at the transport level? - public class LibuvTransportLimits - { - // Matches the non-configurable default response buffer size for Kestrel in 1.0.0 - private long? _maxResponseBufferSize = 64 * 1024; - - // Matches the default client_max_body_size in nginx. Also large enough that most requests - // should be under the limit. - private long? _maxRequestBufferSize = 1024 * 1024; - - /// - /// Gets or sets the maximum size of the response buffer before write - /// calls begin to block or return tasks that don't complete until the - /// buffer size drops below the configured limit. - /// - /// - /// When set to null, the size of the response buffer is unlimited. - /// When set to zero, all write calls will block or return tasks that - /// don't complete until the entire response buffer is flushed. - /// Defaults to 65,536 bytes (64 KB). - /// - public long? MaxResponseBufferSize - { - get - { - return _maxResponseBufferSize; - } - set - { - if (value.HasValue && value.Value < 0) - { - throw new ArgumentOutOfRangeException(nameof(value), "Value must be null or a non-negative integer."); - } - _maxResponseBufferSize = value; - } - } - - /// - /// Gets or sets the maximum size of the request buffer. - /// - /// - /// When set to null, the size of the request buffer is unlimited. - /// Defaults to 1,048,576 bytes (1 MB). - /// - public long? MaxRequestBufferSize - { - get - { - return _maxRequestBufferSize; - } - set - { - if (value.HasValue && value.Value <= 0) - { - throw new ArgumentOutOfRangeException(nameof(value), "Value must be null or a positive integer."); - } - _maxRequestBufferSize = value; - } - } - } -} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs index e66edb3bc..01d9fd8da 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs @@ -37,11 +37,6 @@ public class LibuvTransportOptions /// public TimeSpan ShutdownTimeout { get; set; } = TimeSpan.FromSeconds(5); - /// - /// Provides access to request and response buffer size limits. - /// - public LibuvTransportLimits Limits { get; } = new LibuvTransportLimits(); - private static int ProcessorThreadCount { get From 8238bac9f06d11ce6fd3ab95a5c7cb3835b195ef Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 23 Mar 2017 22:50:19 -0700 Subject: [PATCH 05/20] WIP 3 --- .../KestrelServer.cs | 26 ----------------- .../Internal/Http/ConnectionManager.cs | 17 +++++++---- .../Internal/Infrastructure/KestrelThread.cs | 28 +++++++++++++++---- .../Internal/LibuvTransportContext.cs | 2 -- .../KestrelEngine.cs | 1 - .../LibuvTransportFactory.cs | 22 ++++++++++----- 6 files changed, 50 insertions(+), 46 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index 2f2aa2a85..65894fe1f 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -114,32 +114,6 @@ public void Start(IHttpApplication application) var connectionHandler = new ConnectionHandler(serviceContext, application); _connectionHandlerDisposable = connectionHandler; - //var engine = new KestrelEngine(); - - //_disposables.Push(engine); - //_disposables.Push(dateHeaderValueManager); - - //var threadCount = Options.ThreadCount; - - //if (threadCount <= 0) - //{ - // throw new ArgumentOutOfRangeException(nameof(threadCount), - // threadCount, - // "ThreadCount must be positive."); - //} - - //if (!Constants.ECONNRESET.HasValue) - //{ - // _logger.LogWarning("Unable to determine ECONNRESET value on this platform."); - //} - - //if (!Constants.EADDRINUSE.HasValue) - //{ - // _logger.LogWarning("Unable to determine EADDRINUSE value on this platform."); - //} - - //engine.Start(threadCount); - var listenOptions = Options.ListenOptions; var hasListenOptions = listenOptions.Any(); var hasServerAddresses = _serverAddresses.Addresses.Any(); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs index dbea0eefe..ef7face88 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs @@ -12,12 +12,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http public class ConnectionManager { private readonly KestrelThread _thread; - private readonly IThreadPool _threadPool; - public ConnectionManager(KestrelThread thread, IThreadPool threadPool) + public ConnectionManager(KestrelThread thread) { _thread = thread; - _threadPool = threadPool; } public async Task WalkConnectionsAndCloseAsync(TimeSpan timeout) @@ -64,9 +62,18 @@ private void WalkConnectionsCore(Func action, TaskCompletionSo } }); - _threadPool.Run(() => + Task.Run(() => { - Task.WaitAll(tasks.ToArray()); + try + { + Task.WaitAll(tasks.ToArray()); + } + catch (Exception ex) + { + tcs.SetException(ex); + return; + } + tcs.SetResult(null); }); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs index 7d7849dca..ddaf879b3 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs @@ -53,7 +53,6 @@ public class KestrelThread : IScheduler private bool _initCompleted = false; private ExceptionDispatchInfo _closeError; private readonly IKestrelTrace _log; - private readonly IThreadPool _threadPool; private readonly TimeSpan _shutdownTimeout; private IntPtr _thisPtr; @@ -62,7 +61,6 @@ public KestrelThread(KestrelEngine engine) _engine = engine; _appLifetime = engine.AppLifetime; _log = engine.Log; - _threadPool = engine.ThreadPool; _shutdownTimeout = engine.TransportOptions.ShutdownTimeout; _loop = new UvLoopHandle(_log); _post = new UvAsyncHandle(_log); @@ -78,7 +76,7 @@ public KestrelThread(KestrelEngine engine) QueueCloseAsyncHandle = EnqueueCloseHandle; Memory = new MemoryPool(); WriteReqPool = new WriteReqPool(this, _log); - ConnectionManager = new ConnectionManager(this, _threadPool); + ConnectionManager = new ConnectionManager(this); } // For testing internal KestrelThread(KestrelEngine engine, int maxLoops) @@ -383,14 +381,34 @@ private bool DoPostWork() work.CallbackAdapter(work.Callback, work.State); if (work.Completion != null) { - _threadPool.Complete(work.Completion); + ThreadPool.QueueUserWorkItem(o => + { + try + { + ((TaskCompletionSource)o).SetResult(null); + } + catch (Exception e) + { + _log.LogError(0, e, "KestrelThread.DoPostWork"); + } + }, work.Completion); } } catch (Exception ex) { if (work.Completion != null) { - _threadPool.Error(work.Completion, ex); + ThreadPool.QueueUserWorkItem(o => + { + try + { + ((TaskCompletionSource)o).TrySetException(ex); + } + catch (Exception e) + { + _log.LogError(0, e, "KestrelThread.DoPostWork"); + } + }, work.Completion); } else { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs index eeceb4101..02672dce4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs @@ -15,8 +15,6 @@ public class LibuvTransportContext public IKestrelTrace Log { get; set; } - public IThreadPool ThreadPool { get; set; } - public IConnectionHandler ConnectionHandler { get; set; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs index 2071b2121..c45d4f7d0 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -41,7 +41,6 @@ internal KestrelEngine(LibuvFunctions uv, LibuvTransportContext context, ListenO public IApplicationLifetime AppLifetime => TransportContext.AppLifetime; public IKestrelTrace Log => TransportContext.Log; - public IThreadPool ThreadPool => TransportContext.ThreadPool; public LibuvTransportOptions TransportOptions => TransportContext.Options; public async Task StopAsync() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs index f1a432185..fdd42affa 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs @@ -39,14 +39,24 @@ public LibuvTransportFactory( // TODO: Add LibuvTrace var trace = new KestrelTrace(logger); - IThreadPool threadPool; - if (options.Value.ThreadPoolDispatching) + + var threadCount = options.Value.ThreadCount; + + if (threadCount <= 0) + { + throw new ArgumentOutOfRangeException(nameof(threadCount), + threadCount, + "ThreadCount must be positive."); + } + + if (!Constants.ECONNRESET.HasValue) { - threadPool = new LoggingThreadPool(trace); + trace.LogWarning("Unable to determine ECONNRESET value on this platform."); } - else + + if (!Constants.EADDRINUSE.HasValue) { - threadPool = new InlineLoggingThreadPool(trace); + trace.LogWarning("Unable to determine EADDRINUSE value on this platform."); } _baseTransportContext = new LibuvTransportContext @@ -54,7 +64,6 @@ public LibuvTransportFactory( Options = options.Value, AppLifetime = applicationLifetime, Log = trace, - ThreadPool = threadPool }; } @@ -65,7 +74,6 @@ public ITransport Create(ListenOptions listenOptions, IConnectionHandler handler Options = _baseTransportContext.Options, AppLifetime = _baseTransportContext.AppLifetime, Log = _baseTransportContext.Log, - ThreadPool = _baseTransportContext.ThreadPool, ConnectionHandler = handler }; From 4c5b0855552a3e841a8c090cb1b2b562fbc3464e Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 23 Mar 2017 23:55:19 -0700 Subject: [PATCH 06/20] WIP 4 --- .../Internal/Http/FrameOfT.cs | 33 ++-- .../KestrelServer.cs | 180 ++++++++---------- .../Exceptions/AddressInUseException.cs | 18 ++ .../Exceptions/ConnectionResetException.cs | 19 ++ .../Internal/Http/Connection.cs | 4 +- .../Internal/Http/ConnectionManager.cs | 4 +- .../KestrelEngine.cs | 6 + 7 files changed, 148 insertions(+), 116 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/AddressInUseException.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/ConnectionResetException.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs index 831165de6..1c95d33f8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs @@ -2,9 +2,12 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.IO; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting.Server; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -49,7 +52,8 @@ public override async Task RequestProcessingAsync() { if (_requestProcessingStatus == RequestProcessingStatus.ParsingHeaders) { - throw BadHttpRequestException.GetException(RequestRejectionReason.MalformedRequestInvalidHeaders); + throw BadHttpRequestException.GetException(RequestRejectionReason + .MalformedRequestInvalidHeaders); } throw; } @@ -70,9 +74,11 @@ public override async Task RequestProcessingAsync() case RequestProcessingStatus.RequestPending: return; case RequestProcessingStatus.ParsingRequestLine: - throw BadHttpRequestException.GetException(RequestRejectionReason.InvalidRequestLine); + throw BadHttpRequestException.GetException( + RequestRejectionReason.InvalidRequestLine); case RequestProcessingStatus.ParsingHeaders: - throw BadHttpRequestException.GetException(RequestRejectionReason.MalformedRequestInvalidHeaders); + throw BadHttpRequestException.GetException(RequestRejectionReason + .MalformedRequestInvalidHeaders); } } } @@ -187,15 +193,18 @@ public override async Task RequestProcessingAsync() // SetBadRequestState logs the error. SetBadRequestState(ex); } - //catch (IOException ex) when (ex.InnerException is UvException) - //{ - // // Don't log ECONNRESET errors made between requests. Browsers like IE will reset connections regularly. - // if (_requestProcessingStatus != RequestProcessingStatus.RequestPending || - // ((UvException)ex.InnerException).StatusCode != Constants.ECONNRESET) - // { - // Log.RequestProcessingError(ConnectionId, ex); - // } - //} + catch (ConnectionResetException ex) + { + // Don't log ECONNRESET errors made between requests. Browsers like IE will reset connections regularly. + if (_requestProcessingStatus != RequestProcessingStatus.RequestPending) + { + Log.RequestProcessingError(ConnectionId, ex); + } + } + catch (IOException ex) + { + Log.RequestProcessingError(ConnectionId, ex); + } catch (Exception ex) { Log.LogWarning(0, ex, "Connection processing ended abnormally"); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index 65894fe1f..a7cba7223 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -17,6 +17,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -129,15 +130,14 @@ public void Start(IHttpApplication application) { _logger.LogDebug($"No listening endpoints were configured. Binding to {Constants.DefaultServerAddress} by default."); - //// "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. - //StartLocalhost(engine, ServerAddress.FromUrl(Constants.DefaultServerAddress)); + // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. + StartLocalhost(connectionHandler, ServerAddress.FromUrl(Constants.DefaultServerAddress)); - //// If StartLocalhost doesn't throw, there is at least one listener. - //// The port cannot change for "localhost". - //_serverAddresses.Addresses.Add(Constants.DefaultServerAddress); + // If StartLocalhost doesn't throw, there is at least one listener. + // The port cannot change for "localhost". + _serverAddresses.Addresses.Add(Constants.DefaultServerAddress); - //return; - listenOptions.Add(new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000))); + return; } else if (!hasListenOptions) { @@ -165,16 +165,12 @@ public void Start(IHttpApplication application) { if (string.Equals(parsedAddress.Host, "localhost", StringComparison.OrdinalIgnoreCase)) { - //// "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. - //StartLocalhost(engine, parsedAddress); + // "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint. + StartLocalhost(connectionHandler, parsedAddress); - //// If StartLocalhost doesn't throw, there is at least one listener. - //// The port cannot change for "localhost". - //_serverAddresses.Addresses.Add(parsedAddress.ToString()); - listenOptions.Add(new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) - { - Scheme = parsedAddress.Scheme, - }); + // If StartLocalhost doesn't throw, there is at least one listener. + // The port cannot change for "localhost". + _serverAddresses.Addresses.Add(parsedAddress.ToString()); } else { @@ -190,33 +186,21 @@ public void Start(IHttpApplication application) foreach (var endPoint in listenOptions) { - _transports.Add(_transportFactory.Create(endPoint, connectionHandler)); - - //try - //{ - // _disposables.Push(engine.CreateServer(endPoint)); - //} - //catch (AggregateException ex) - //{ - // if ((ex.InnerException as UvException)?.StatusCode == Constants.EADDRINUSE) - // { - // throw new IOException($"Failed to bind to address {endPoint}: address already in use.", ex); - // } - - // throw; - //} + var transport = _transportFactory.Create(endPoint, connectionHandler); + _transports.Add(transport); + + try + { + transport.BindAsync().Wait(); + } + catch (AggregateException ex) when (ex.InnerException is AddressInUseException) + { + throw new IOException($"Failed to bind to address {endPoint}: address already in use.", ex); + } // If requested port was "0", replace with assigned dynamic port. _serverAddresses.Addresses.Add(endPoint.ToString()); } - - var tasks = new Task[_transports.Count]; - for (int i = 0; i < _transports.Count; i++) - { - tasks[i] = _transports[i].BindAsync(); - } - - Task.WaitAll(tasks); } catch (Exception ex) { @@ -233,8 +217,6 @@ public void Dispose() { tasks[i] = _transports[i].UnbindAsync(); } - - // REVIEW: Is it OK to rely on transports to timeout? Task.WaitAll(tasks); _connectionHandlerDisposable.Dispose(); @@ -266,66 +248,62 @@ private void ValidateOptions() } } - //private void StartLocalhost(KestrelEngine engine, ServerAddress parsedAddress) - //{ - // if (parsedAddress.Port == 0) - // { - // throw new InvalidOperationException("Dynamic port binding is not supported when binding to localhost. You must either bind to 127.0.0.1:0 or [::1]:0, or both."); - // } - - // var exceptions = new List(); - - // try - // { - // var ipv4ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) - // { - // Scheme = parsedAddress.Scheme, - // }; - - // _disposables.Push(engine.CreateServer(ipv4ListenOptions)); - // } - // catch (AggregateException ex) when (ex.InnerException is UvException) - // { - // var uvEx = (UvException)ex.InnerException; - // if (uvEx.StatusCode == Constants.EADDRINUSE) - // { - // throw new IOException($"Failed to bind to address {parsedAddress} on the IPv4 loopback interface: port already in use.", ex); - // } - // else - // { - // _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv4 loopback interface: ({uvEx.Message})"); - // exceptions.Add(uvEx); - // } - // } - - // try - // { - // var ipv6ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.IPv6Loopback, parsedAddress.Port)) - // { - // Scheme = parsedAddress.Scheme, - // }; - - // _disposables.Push(engine.CreateServer(ipv6ListenOptions)); - // } - // catch (AggregateException ex) when (ex.InnerException is UvException) - // { - // var uvEx = (UvException)ex.InnerException; - // if (uvEx.StatusCode == Constants.EADDRINUSE) - // { - // throw new IOException($"Failed to bind to address {parsedAddress} on the IPv6 loopback interface: port already in use.", ex); - // } - // else - // { - // _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv6 loopback interface: ({uvEx.Message})"); - // exceptions.Add(uvEx); - // } - // } - - // if (exceptions.Count == 2) - // { - // throw new IOException($"Failed to bind to address {parsedAddress}.", new AggregateException(exceptions)); - // } - //} + private void StartLocalhost(ConnectionHandler connectionHandler, ServerAddress parsedAddress) + { + if (parsedAddress.Port == 0) + { + throw new InvalidOperationException("Dynamic port binding is not supported when binding to localhost. You must either bind to 127.0.0.1:0 or [::1]:0, or both."); + } + + var exceptions = new List(); + + try + { + var ipv4ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, parsedAddress.Port)) + { + Scheme = parsedAddress.Scheme, + }; + + var transport = _transportFactory.Create(ipv4ListenOptions, connectionHandler); + _transports.Add(transport); + transport.BindAsync().Wait(); + } + catch (AggregateException ex) when (ex.InnerException is AddressInUseException) + { + throw new IOException($"Failed to bind to address {parsedAddress} on the IPv4 loopback interface: port already in use.", ex); + } + catch (AggregateException ex) + { + _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv4 loopback interface: ({ex.Message})"); + exceptions.Add(ex.InnerException); + } + + try + { + var ipv6ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.IPv6Loopback, parsedAddress.Port)) + { + Scheme = parsedAddress.Scheme, + }; + + var transport = _transportFactory.Create(ipv6ListenOptions, connectionHandler); + _transports.Add(transport); + transport.BindAsync().Wait(); + } + catch (AggregateException ex) when (ex.InnerException is AddressInUseException) + { + throw new IOException($"Failed to bind to address {parsedAddress} on the IPv6 loopback interface: port already in use.", ex); + } + catch (AggregateException ex) + { + _logger.LogWarning(0, $"Unable to bind to {parsedAddress} on the IPv6 loopback interface: ({ex.Message})"); + exceptions.Add(ex.InnerException); + } + + if (exceptions.Count == 2) + { + throw new IOException($"Failed to bind to address {parsedAddress}.", new AggregateException(exceptions)); + } + } /// /// Returns an for the given host an port. diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/AddressInUseException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/AddressInUseException.cs new file mode 100644 index 000000000..2d9d3e10a --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/AddressInUseException.cs @@ -0,0 +1,18 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions +{ + public class AddressInUseException : InvalidOperationException + { + public AddressInUseException(string message) : base(message) + { + } + + public AddressInUseException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/ConnectionResetException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/ConnectionResetException.cs new file mode 100644 index 000000000..87235175e --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/Exceptions/ConnectionResetException.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO; + +namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions +{ + public class ConnectionResetException : IOException + { + public ConnectionResetException(string message) : base(message) + { + } + + public ConnectionResetException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs index 7630aa8cf..c1f49ca96 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; @@ -183,13 +184,14 @@ private async void OnRead(UvStreamHandle handle, int status) if (status == Constants.ECONNRESET) { Log.ConnectionReset(ConnectionId); + error = new ConnectionResetException(uvError.Message, uvError); } else { Log.ConnectionError(ConnectionId, uvError); + error = new IOException(uvError.Message, uvError); } - error = new IOException(uvError.Message, uvError); _currentWritableBuffer?.Commit(); } else diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs index ef7face88..0cab3d93e 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs @@ -62,11 +62,11 @@ private void WalkConnectionsCore(Func action, TaskCompletionSo } }); - Task.Run(() => + Task.Run(async () => { try { - Task.WaitAll(tasks.ToArray()); + await Task.WhenAll(tasks.ToArray()); } catch (Exception ex) { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs index c45d4f7d0..fa23f2dab 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Libuv; using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal @@ -109,6 +110,11 @@ public async Task BindAsync() } } } + catch (AggregateException ex) when ((ex.InnerException as UvException)?.StatusCode == Constants.EADDRINUSE) + { + await UnbindAsync(); + throw new AddressInUseException(ex.InnerException.Message, ex.InnerException); + } catch { await UnbindAsync(); From b4c60a972388cd35bea4a07cbc19dc971ccd5eb1 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Fri, 24 Mar 2017 04:21:03 -0700 Subject: [PATCH 07/20] WIP 5 --- samples/SampleApp/Startup.cs | 6 +- .../Adapter/Internal/AdaptedPipeline.cs | 10 +- .../Internal/ConnectionHandler.cs | 1 + .../Internal/ConnectionLifetime.cs | 17 +- .../Http/ConnectionLifetimeControl.cs | 39 ++++ .../Internal/Http/Frame.cs | 19 +- .../Internal/Http/FrameContext.cs | 3 +- .../Internal/Http/FrameOfT.cs | 4 +- ...onnectionControl.cs => ITimeoutControl.cs} | 5 +- .../Infrastructure/KestrelEventSource.cs | 73 ------- .../KestrelServerOptions.cs | 44 ---- .../ListenOptions.cs | 3 +- .../Transport/IConnectionInformation.cs | 4 +- .../Internal/Http/Connection.cs | 65 ++---- .../Internal/Http/ConnectionContext.cs | 2 +- .../Internal/Http/ConnectionManager.cs | 4 +- .../Infrastructure/KestrelEventSource.cs | 73 +++++++ .../KestrelEngine.cs | 21 +- .../LibuvTransportOptions.cs | 8 - .../WebHostBuilderLibuvExtensions.cs | 2 +- ...Core.Server.Kestrel.FunctionalTests.csproj | 1 + .../RequestHeaderLimitsTests.cs | 202 +++++++++--------- .../ThreadCountTests.cs | 3 +- test/shared/MockConnection.cs | 8 +- test/shared/MockSocketOutput.cs | 4 + test/shared/TestFrame.cs | 2 +- test/shared/TestServer.cs | 25 +-- test/shared/TestServiceContext.cs | 36 ++-- 28 files changed, 313 insertions(+), 371 deletions(-) create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs rename src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/{IConnectionControl.cs => ITimeoutControl.cs} (76%) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs create mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs diff --git a/samples/SampleApp/Startup.cs b/samples/SampleApp/Startup.cs index f8d32ebe1..4a6f015a4 100644 --- a/samples/SampleApp/Startup.cs +++ b/samples/SampleApp/Startup.cs @@ -61,9 +61,11 @@ public static void Main(string[] args) // The following section should be used to demo sockets //options.ListenUnixSocket("/tmp/kestrel-test.sock"); - + }) + .UseLibuv(options => + { // Uncomment the following line to change the default number of libuv threads for all endpoints. - //options.ThreadCount = 4; + options.ThreadCount = 4; }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs index 44ced49a1..54674ae5d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/AdaptedPipeline.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal { - public class AdaptedPipeline : IDisposable + public class AdaptedPipeline { private const int MinAllocBufferSize = 2048; @@ -31,17 +31,15 @@ public AdaptedPipeline( public ISocketOutput Output => _output; - public void Dispose() - { - Input.Writer.Complete(); - } - public async Task RunAsync() { var inputTask = ReadInputAsync(); var outputTask = _output.WriteOutputAsync(); await inputTask; + + _output.Dispose(); + await outputTask; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index 5d34c8dda..f3a05b835 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -42,6 +42,7 @@ public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IS { ConnectionId = connectionId, ConnectionInformation = connectionInfo, + LifetimeControl = new ConnectionLifetimeControl(connectionId, outputPipe, _serviceContext.Log), ServiceContext = _serviceContext }; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs index e57a5ed67..c33874ac8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs @@ -125,11 +125,8 @@ private async Task ApplyConnectionAdaptersAsync() catch (Exception ex) { Log.LogError(0, ex, $"Uncaught exception from the {nameof(IConnectionAdapter.OnConnectionAsync)} method of an {nameof(IConnectionAdapter)}."); - _context.Output.Writer.Complete(); - _context.Input.Reader.Complete(); - - _adaptedPipeline?.Dispose(); - _filteredStream?.Dispose(); + _frameStartedTcs.SetResult(null); + CloseRawPipes(); } } @@ -146,9 +143,15 @@ private async Task RunAdaptedPipeline() } finally { - _adaptedPipeline.Dispose(); - _filteredStream.Dispose(); + CloseRawPipes(); } } + + private void CloseRawPipes() + { + _filteredStream?.Dispose(); + _context.Output.Writer.Complete(); + _context.Input.Reader.Complete(); + } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs new file mode 100644 index 000000000..f44ee8200 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs @@ -0,0 +1,39 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO.Pipelines; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http +{ + public class ConnectionLifetimeControl + { + public ConnectionLifetimeControl(string connectionId, IPipe outputPipe, IKestrelTrace log) + { + ConnectionId = connectionId; + Output = outputPipe; + Log = log; + } + + private string ConnectionId { get; } + private IPipe Output { get; } + private IKestrelTrace Log { get; } + + public void End(ProduceEndType endType) + { + switch (endType) + { + case ProduceEndType.ConnectionKeepAlive: + Log.ConnectionKeepAlive(ConnectionId); + break; + case ProduceEndType.SocketShutdown: + Output.Reader.CancelPendingRead(); + goto case ProduceEndType.SocketDisconnect; + case ProduceEndType.SocketDisconnect: + Output.Writer.Complete(); + Log.ConnectionDisconnect(ConnectionId); + break; + } + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index db03e4eac..b77ad0342 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -100,7 +100,8 @@ public Frame(FrameContext frameContext) public ISocketOutput Output { get; set; } public IEnumerable AdaptedConnections { get; set; } - protected IConnectionControl ConnectionControl => ConnectionInformation.ConnectionControl; + protected ITimeoutControl TimeoutControl => ConnectionInformation.TimeoutControl; + protected ConnectionLifetimeControl LifetimeControl => _frameContext.LifetimeControl; protected IKestrelTrace Log => ServiceContext.Log; private DateHeaderValueManager DateHeaderValueManager => ServiceContext.DateHeaderValueManager; @@ -421,7 +422,7 @@ public void Abort(Exception error = null) try { - End(ProduceEndType.SocketDisconnect); + LifetimeControl.End(ProduceEndType.SocketDisconnect); } catch (Exception ex) { @@ -435,12 +436,6 @@ public void Abort(Exception error = null) } } - protected void End(ProduceEndType endType) - { - ConnectionControl.End(endType); - Output.Dispose(); - } - /// /// Primary loop which consumes socket input, parses it for protocol framing, and invokes the /// application delegate for as long as the socket is intended to remain open. @@ -855,7 +850,7 @@ private Task WriteSuffix() if (_keepAlive) { - End(ProduceEndType.ConnectionKeepAlive); + LifetimeControl.End(ProduceEndType.ConnectionKeepAlive); } if (HttpMethods.IsHead(Method) && _responseBytesWritten > 0) @@ -875,7 +870,7 @@ private async Task WriteAutoChunkSuffixAwaited() if (_keepAlive) { - End(ProduceEndType.ConnectionKeepAlive); + LifetimeControl.End(ProduceEndType.ConnectionKeepAlive); } } @@ -994,7 +989,7 @@ public void ParseRequest(ReadableBuffer buffer, out ReadCursor consumed, out Rea break; } - ConnectionControl.ResetTimeout(_requestHeadersTimeoutMilliseconds, TimeoutAction.SendTimeoutResponse); + TimeoutControl.ResetTimeout(_requestHeadersTimeoutMilliseconds, TimeoutAction.SendTimeoutResponse); _requestProcessingStatus = RequestProcessingStatus.ParsingRequestLine; goto case RequestProcessingStatus.ParsingRequestLine; @@ -1059,7 +1054,7 @@ public bool TakeMessageHeaders(ReadableBuffer buffer, out ReadCursor consumed, o } if (result) { - ConnectionControl.CancelTimeout(); + TimeoutControl.CancelTimeout(); } return result; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs index 34aac3dab..4eac1f46c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Collections.Generic; -using Microsoft.AspNetCore.Server.Kestrel.Adapter; using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http @@ -11,6 +9,7 @@ public class FrameContext { public string ConnectionId { get; set; } public ServiceContext ServiceContext { get; set; } + public ConnectionLifetimeControl LifetimeControl { get; set; } public IConnectionInformation ConnectionInformation { get; set; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs index 1c95d33f8..282151a32 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs @@ -34,7 +34,7 @@ public override async Task RequestProcessingAsync() { while (!_requestProcessingStopping) { - ConnectionControl.SetTimeout(_keepAliveMilliseconds, TimeoutAction.CloseConnection); + TimeoutControl.SetTimeout(_keepAliveMilliseconds, TimeoutAction.CloseConnection); InitializeHeaders(); @@ -218,7 +218,7 @@ public override async Task RequestProcessingAsync() if (Volatile.Read(ref _requestAborted) == 0) { await TryProduceInvalidRequestResponse(); - End(ProduceEndType.SocketShutdown); + LifetimeControl.End(ProduceEndType.SocketShutdown); } } catch (Exception ex) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IConnectionControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ITimeoutControl.cs similarity index 76% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IConnectionControl.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ITimeoutControl.cs index 290591304..4fb389b54 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IConnectionControl.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ITimeoutControl.cs @@ -3,11 +3,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { - public interface IConnectionControl + public interface ITimeoutControl { - void Pause(); - void Resume(); - void End(ProduceEndType endType); void SetTimeout(long milliseconds, TimeoutAction timeoutAction); void ResetTimeout(long milliseconds, TimeoutAction timeoutAction); void CancelTimeout(); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs deleted file mode 100644 index 5aa5ce263..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/KestrelEventSource.cs +++ /dev/null @@ -1,73 +0,0 @@ -//// Copyright (c) .NET Foundation. All rights reserved. -//// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -//using System.Diagnostics.Tracing; -//using System.Runtime.CompilerServices; -//using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; - -//namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure -//{ -// [EventSource(Name = "Microsoft-AspNetCore-Server-Kestrel")] -// public sealed class KestrelEventSource : EventSource -// { -// public static readonly KestrelEventSource Log = new KestrelEventSource(); - -// private KestrelEventSource() -// { -// } - -// // NOTE -// // - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They -// // enable creating 'activities'. -// // For more information, take a look at the following blog post: -// // https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/ -// // - A stop event's event id must be next one after its start event. -// // - Avoid renaming methods or parameters marked with EventAttribute. EventSource uses these to form the event object. - -// [NonEvent] -// public void ConnectionStart(Connection connection) -// { -// // avoid allocating strings unless this event source is enabled -// if (IsEnabled()) -// { -// ConnectionStart( -// connection.ConnectionId, -// connection.ListenerContext.ListenOptions.Scheme, -// connection.LocalEndPoint.ToString(), -// connection.RemoteEndPoint.ToString()); -// } -// } - -// [MethodImpl(MethodImplOptions.NoInlining)] -// [Event(1, Level = EventLevel.Verbose)] -// private void ConnectionStart(string connectionId, -// string scheme, -// string localEndPoint, -// string remoteEndPoint) -// { -// WriteEvent( -// 1, -// connectionId, -// scheme, -// localEndPoint, -// remoteEndPoint -// ); -// } - -// [NonEvent] -// public void ConnectionStop(Connection connection) -// { -// if (IsEnabled()) -// { -// ConnectionStop(connection.ConnectionId); -// } -// } - -// [MethodImpl(MethodImplOptions.NoInlining)] -// [Event(2, Level = EventLevel.Verbose)] -// private void ConnectionStop(string connectionId) -// { -// WriteEvent(2, connectionId); -// } -// } -//} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs index b44ac2d38..e9aba3c67 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServerOptions.cs @@ -65,50 +65,6 @@ public long? MaxRequestBufferSize /// public KestrelServerLimits Limits { get; } = new KestrelServerLimits(); - /// - /// The amount of time after the server begins shutting down before connections will be forcefully closed. - /// Kestrel will wait for the duration of the timeout for any ongoing request processing to complete before - /// terminating the connection. No new connections or requests will be accepted during this time. - /// - /// - /// Defaults to 5 seconds. - /// - public TimeSpan ShutdownTimeout { get; set; } = TimeSpan.FromSeconds(5); - - /// - /// The number of libuv I/O threads used to process requests. - /// - /// - /// Defaults to half of rounded down and clamped between 1 and 16. - /// - public int ThreadCount { get; set; } = ProcessorThreadCount; - - private static int ProcessorThreadCount - { - get - { - // Actual core count would be a better number - // rather than logical cores which includes hyper-threaded cores. - // Divide by 2 for hyper-threading, and good defaults (still need threads to do webserving). - var threadCount = Environment.ProcessorCount >> 1; - - if (threadCount < 1) - { - // Ensure shifted value is at least one - return 1; - } - - if (threadCount > 16) - { - // Receive Side Scaling RSS Processor count currently maxes out at 16 - // would be better to check the NIC's current hardware queues; but xplat... - return 16; - } - - return threadCount; - } - } - /// /// Bind to given IP address and port. /// diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs index 7124a5360..d20fb5d0b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/ListenOptions.cs @@ -82,7 +82,8 @@ internal ListenOptions(ulong fileHandle) public List ConnectionAdapters { get; } = new List(); // Scheme is hopefully only a temporary measure for back compat with IServerAddressesFeature. - internal string Scheme { get; set; } = "http"; + // TODO: Allow connection adapters to configure the scheme + public string Scheme { get; set; } = "http"; public override string ToString() { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs index 37b97856a..79dbda109 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs @@ -13,7 +13,7 @@ public interface IConnectionInformation IPEndPoint RemoteEndPoint { get; } IPEndPoint LocalEndPoint { get; } - // TODO: Remove this (Use Pipes instead?) - IConnectionControl ConnectionControl { get; } + // TODO: Remove timeout management from transport + ITimeoutControl TimeoutControl { get; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs index c1f49ca96..65bfd3a51 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs @@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { - public class Connection : ConnectionContext, IConnectionControl + public class Connection : ConnectionContext, ITimeoutControl { private const int MinAllocBufferSize = 2048; @@ -43,9 +43,8 @@ public class Connection : ConnectionContext, IConnectionControl public Connection(ListenerContext context, UvStreamHandle socket) : base(context) { _socket = socket; - //_connectionAdapters = context.ListenOptions.ConnectionAdapters; socket.Connection = this; - ConnectionControl = this; + TimeoutControl = this; var tcpHandle = _socket as UvTcpHandle; if (tcpHandle != null) @@ -53,10 +52,12 @@ public Connection(ListenerContext context, UvStreamHandle socket) : base(context RemoteEndPoint = tcpHandle.GetPeerIPEndPoint(); LocalEndPoint = tcpHandle.GetSockIPEndPoint(); } + + _lastTimestamp = Thread.Loop.Now(); } - // Internal for testing - internal Connection() + // For testing + public Connection() { } @@ -76,7 +77,7 @@ public void Start() ConnectionId = _connectionContext.ConnectionId; Log.ConnectionStart(ConnectionId); - //KestrelEventSource.Log.ConnectionStart(this); + KestrelEventSource.Log.ConnectionStart(this); Input = _connectionContext.Input; Output = new SocketOutputConsumer(_connectionContext.Output, Thread, _socket, this, ConnectionId, Log); @@ -106,6 +107,8 @@ public virtual Task AbortAsync(Exception error = null) // Called on Libuv thread public virtual void OnSocketClosed() { + KestrelEventSource.Log.ConnectionStop(this); + Input.Complete(new TaskCanceledException("The request was aborted")); _socketClosedTcs.TrySetResult(null); } @@ -115,7 +118,7 @@ public void Tick(long timestamp) { if (timestamp > PlatformApis.VolatileRead(ref _timeoutTimestamp)) { - ConnectionControl.CancelTimeout(); + TimeoutControl.CancelTimeout(); if (_timeoutAction == TimeoutAction.SendTimeoutResponse) { @@ -206,12 +209,12 @@ private async void OnRead(UvStreamHandle handle, int status) _currentWritableBuffer = null; if (flushTask?.IsCompleted == false) { - OnPausePosted(); + Pause(); var result = await flushTask.Value; // If the reader isn't complete then resume if (!result.IsCompleted) { - OnResumePosted(); + Resume(); } } @@ -222,25 +225,7 @@ private async void OnRead(UvStreamHandle handle, int status) } } - void IConnectionControl.Pause() - { - Log.ConnectionPause(ConnectionId); - - // Even though this method is called on the event loop already, - // post anyway so the ReadStop() call doesn't get reordered - // relative to the ReadStart() call made in Resume(). - Thread.Post(state => state.OnPausePosted(), this); - } - - void IConnectionControl.Resume() - { - Log.ConnectionResume(ConnectionId); - - // This is called from the consuming thread. - Thread.Post(state => state.OnResumePosted(), this); - } - - private void OnPausePosted() + private void Pause() { // It's possible that uv_close was called between the call to Thread.Post() and now. if (!_socket.IsClosed) @@ -249,7 +234,7 @@ private void OnPausePosted() } } - private void OnResumePosted() + private void Resume() { // It's possible that uv_close was called even before the call to Resume(). if (!_socket.IsClosed) @@ -268,35 +253,19 @@ private void OnResumePosted() } } - void IConnectionControl.End(ProduceEndType endType) - { - switch (endType) - { - case ProduceEndType.ConnectionKeepAlive: - Log.ConnectionKeepAlive(ConnectionId); - break; - case ProduceEndType.SocketShutdown: - Output.Shutdown(); - goto case ProduceEndType.SocketDisconnect; - case ProduceEndType.SocketDisconnect: - Log.ConnectionDisconnect(ConnectionId); - break; - } - } - - void IConnectionControl.SetTimeout(long milliseconds, TimeoutAction timeoutAction) + void ITimeoutControl.SetTimeout(long milliseconds, TimeoutAction timeoutAction) { Debug.Assert(_timeoutTimestamp == long.MaxValue, "Concurrent timeouts are not supported"); AssignTimeout(milliseconds, timeoutAction); } - void IConnectionControl.ResetTimeout(long milliseconds, TimeoutAction timeoutAction) + void ITimeoutControl.ResetTimeout(long milliseconds, TimeoutAction timeoutAction) { AssignTimeout(milliseconds, timeoutAction); } - void IConnectionControl.CancelTimeout() + void ITimeoutControl.CancelTimeout() { Interlocked.Exchange(ref _timeoutTimestamp, long.MaxValue); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs index c2ff741d9..76e4cba0b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs @@ -22,7 +22,7 @@ public ConnectionContext(ListenerContext context) public ListenOptions ListenOptions => ListenerContext.ListenOptions; - public IConnectionControl ConnectionControl { get; set; } + public ITimeoutControl TimeoutControl { get; set; } public IPEndPoint RemoteEndPoint { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs index 0cab3d93e..ef7face88 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs @@ -62,11 +62,11 @@ private void WalkConnectionsCore(Func action, TaskCompletionSo } }); - Task.Run(async () => + Task.Run(() => { try { - await Task.WhenAll(tasks.ToArray()); + Task.WaitAll(tasks.ToArray()); } catch (Exception ex) { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs new file mode 100644 index 000000000..552b65ff3 --- /dev/null +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs @@ -0,0 +1,73 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Diagnostics.Tracing; +using System.Runtime.CompilerServices; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; + +namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure +{ + [EventSource(Name = "Microsoft-AspNetCore-Server-Kestrel")] + public sealed class KestrelEventSource : EventSource + { + public static readonly KestrelEventSource Log = new KestrelEventSource(); + + private KestrelEventSource() + { + } + + // NOTE + // - The 'Start' and 'Stop' suffixes on the following event names have special meaning in EventSource. They + // enable creating 'activities'. + // For more information, take a look at the following blog post: + // https://blogs.msdn.microsoft.com/vancem/2015/09/14/exploring-eventsource-activity-correlation-and-causation-features/ + // - A stop event's event id must be next one after its start event. + // - Avoid renaming methods or parameters marked with EventAttribute. EventSource uses these to form the event object. + + [NonEvent] + public void ConnectionStart(Connection connection) + { + // avoid allocating strings unless this event source is enabled + if (IsEnabled()) + { + ConnectionStart( + connection.ConnectionId, + connection.ListenerContext.ListenOptions.Scheme, + connection.LocalEndPoint.ToString(), + connection.RemoteEndPoint.ToString()); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + [Event(1, Level = EventLevel.Verbose)] + private void ConnectionStart(string connectionId, + string scheme, + string localEndPoint, + string remoteEndPoint) + { + WriteEvent( + 1, + connectionId, + scheme, + localEndPoint, + remoteEndPoint + ); + } + + [NonEvent] + public void ConnectionStop(Connection connection) + { + if (IsEnabled()) + { + ConnectionStop(connection.ConnectionId); + } + } + + [MethodImpl(MethodImplOptions.NoInlining)] + [Event(2, Level = EventLevel.Verbose)] + private void ConnectionStop(string connectionId) + { + WriteEvent(2, connectionId); + } + } +} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs index fa23f2dab..d6271b247 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -48,7 +48,8 @@ public async Task StopAsync() { try { - await Task.WhenAll(Threads.Select(thread => thread.StopAsync(TimeSpan.FromSeconds(2.5))).ToArray()); + await Task.WhenAll(Threads.Select(thread => thread.StopAsync(TimeSpan.FromSeconds(2.5))).ToArray()) + .ConfigureAwait(false); } catch (AggregateException aggEx) { @@ -82,7 +83,7 @@ public async Task BindAsync() foreach (var thread in Threads) { - thread.StartAsync().Wait(); + await thread.StartAsync().ConfigureAwait(false); } try @@ -91,7 +92,7 @@ public async Task BindAsync() { var listener = new Listener(TransportContext); _listeners.Add(listener); - await listener.StartAsync(_listenOptions, Threads[0]); + await listener.StartAsync(_listenOptions, Threads[0]).ConfigureAwait(false); } else { @@ -100,24 +101,24 @@ public async Task BindAsync() var listenerPrimary = new ListenerPrimary(TransportContext); _listeners.Add(listenerPrimary); - await listenerPrimary.StartAsync(pipeName, pipeMessage, _listenOptions, Threads[0]); + await listenerPrimary.StartAsync(pipeName, pipeMessage, _listenOptions, Threads[0]).ConfigureAwait(false); foreach (var thread in Threads.Skip(1)) { var listenerSecondary = new ListenerSecondary(TransportContext); _listeners.Add(listenerSecondary); - await listenerSecondary.StartAsync(pipeName, pipeMessage, _listenOptions, thread); + await listenerSecondary.StartAsync(pipeName, pipeMessage, _listenOptions, thread).ConfigureAwait(false); } } } - catch (AggregateException ex) when ((ex.InnerException as UvException)?.StatusCode == Constants.EADDRINUSE) + catch (UvException ex) when (ex.StatusCode == Constants.EADDRINUSE) { - await UnbindAsync(); - throw new AddressInUseException(ex.InnerException.Message, ex.InnerException); + await UnbindAsync().ConfigureAwait(false); + throw new AddressInUseException(ex.Message, ex); } catch { - await UnbindAsync(); + await UnbindAsync().ConfigureAwait(false); throw; } } @@ -126,7 +127,7 @@ public async Task UnbindAsync() { var disposeTasks = _listeners.Select(listener => listener.DisposeAsync()).ToArray(); - if (!await WaitAsync(Task.WhenAll(disposeTasks), TimeSpan.FromSeconds(2.5))) + if (!await WaitAsync(Task.WhenAll(disposeTasks), TimeSpan.FromSeconds(2.5)).ConfigureAwait(false)) { Log.LogError(0, null, "Disposing listeners failed"); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs index 01d9fd8da..9b233cbd2 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs @@ -18,14 +18,6 @@ public class LibuvTransportOptions /// public int ThreadCount { get; set; } = ProcessorThreadCount; - /// - /// - /// - /// - /// Defaults to true. - /// - public bool ThreadPoolDispatching { get; set; } = true; - // TODO: Move all shutdown timeout logic back into core project. /// /// The amount of time after the server begins shutting down before connections will be forcefully closed. diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs index 1173077a2..b43a3d90e 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs @@ -39,7 +39,7 @@ public static IWebHostBuilder UseLibuv(this IWebHostBuilder hostBuilder) /// /// The Microsoft.AspNetCore.Hosting.IWebHostBuilder. /// - public static IWebHostBuilder UseKestrel(this IWebHostBuilder hostBuilder, Action options) + public static IWebHostBuilder UseLibuv(this IWebHostBuilder hostBuilder, Action options) { return hostBuilder.UseLibuv().ConfigureServices(services => { diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj index ed0530aa9..7e3f9f44a 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests.csproj @@ -16,6 +16,7 @@ + diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs index f7c1d8bc1..54479f11d 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs @@ -80,107 +80,107 @@ await connection.ReceiveEnd( } } - [Theory] - [InlineData(1, 1)] - [InlineData(5, 5)] - [InlineData(100, 100)] - [InlineData(600, 100)] - [InlineData(700, 1)] - [InlineData(1, 700)] - public async Task ServerAcceptsHeadersAcrossSends(int header0Count, int header1Count) - { - var headers0 = MakeHeaders(header0Count); - var headers1 = MakeHeaders(header1Count, header0Count); - - using (var server = CreateServer(maxRequestHeaderCount: header0Count + header1Count)) - { - using (var connection = new TestConnection(server.Port)) - { - await connection.SendAll("GET / HTTP/1.1\r\n"); - // Wait for parsing to start - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame?.RequestHeaders != null); - - Assert.Equal(0, server.Frame.RequestHeaders.Count); - - await connection.SendAll(headers0); - // Wait for headers to be parsed - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count); - - Assert.Equal(header0Count, server.Frame.RequestHeaders.Count); - - await connection.SendAll(headers1); - // Wait for headers to be parsed - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count + header1Count); - - Assert.Equal(header0Count + header1Count, server.Frame.RequestHeaders.Count); - - await connection.SendAll("\r\n"); - await connection.ReceiveEnd( - "HTTP/1.1 200 OK", - $"Date: {server.Context.DateHeaderValue}", - "Transfer-Encoding: chunked", - "", - "c", - "hello, world", - "0", - "", - ""); - } - } - } - - [Theory] - [InlineData(1, 1)] - [InlineData(5, 5)] - public async Task ServerKeepsSameHeaderCollectionAcrossSends(int header0Count, int header1Count) - { - var headers0 = MakeHeaders(header0Count); - var headers1 = MakeHeaders(header0Count, header1Count); - - using (var server = CreateServer(maxRequestHeaderCount: header0Count + header1Count)) - { - using (var connection = new TestConnection(server.Port)) - { - await connection.SendAll("GET / HTTP/1.1\r\n"); - // Wait for parsing to start - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame?.RequestHeaders != null); - - Assert.Equal(0, server.Frame.RequestHeaders.Count); - - var newRequestHeaders = new RequestHeadersWrapper(server.Frame.RequestHeaders); - server.Frame.RequestHeaders = newRequestHeaders; - - Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); - - await connection.SendAll(headers0); - // Wait for headers to be parsed - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count); - - Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); - Assert.Equal(header0Count, server.Frame.RequestHeaders.Count); - - await connection.SendAll(headers1); - // Wait for headers to be parsed - await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count + header1Count); - - Assert.Equal(header0Count + header1Count, server.Frame.RequestHeaders.Count); - - Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); - - await connection.SendAll("\r\n"); - await connection.ReceiveEnd( - "HTTP/1.1 200 OK", - $"Date: {server.Context.DateHeaderValue}", - "Transfer-Encoding: chunked", - "", - "c", - "hello, world", - "0", - "", - ""); - } - } - } + //[Theory] + //[InlineData(1, 1)] + //[InlineData(5, 5)] + //[InlineData(100, 100)] + //[InlineData(600, 100)] + //[InlineData(700, 1)] + //[InlineData(1, 700)] + //public async Task ServerAcceptsHeadersAcrossSends(int header0Count, int header1Count) + //{ + // var headers0 = MakeHeaders(header0Count); + // var headers1 = MakeHeaders(header1Count, header0Count); + + // using (var server = CreateServer(maxRequestHeaderCount: header0Count + header1Count)) + // { + // using (var connection = new TestConnection(server.Port)) + // { + // await connection.SendAll("GET / HTTP/1.1\r\n"); + // // Wait for parsing to start + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame?.RequestHeaders != null); + + // Assert.Equal(0, server.Frame.RequestHeaders.Count); + + // await connection.SendAll(headers0); + // // Wait for headers to be parsed + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count); + + // Assert.Equal(header0Count, server.Frame.RequestHeaders.Count); + + // await connection.SendAll(headers1); + // // Wait for headers to be parsed + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count + header1Count); + + // Assert.Equal(header0Count + header1Count, server.Frame.RequestHeaders.Count); + + // await connection.SendAll("\r\n"); + // await connection.ReceiveEnd( + // "HTTP/1.1 200 OK", + // $"Date: {server.Context.DateHeaderValue}", + // "Transfer-Encoding: chunked", + // "", + // "c", + // "hello, world", + // "0", + // "", + // ""); + // } + // } + //} + + //[Theory] + //[InlineData(1, 1)] + //[InlineData(5, 5)] + //public async Task ServerKeepsSameHeaderCollectionAcrossSends(int header0Count, int header1Count) + //{ + // var headers0 = MakeHeaders(header0Count); + // var headers1 = MakeHeaders(header0Count, header1Count); + + // using (var server = CreateServer(maxRequestHeaderCount: header0Count + header1Count)) + // { + // using (var connection = new TestConnection(server.Port)) + // { + // await connection.SendAll("GET / HTTP/1.1\r\n"); + // // Wait for parsing to start + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame?.RequestHeaders != null); + + // Assert.Equal(0, server.Frame.RequestHeaders.Count); + + // var newRequestHeaders = new RequestHeadersWrapper(server.Frame.RequestHeaders); + // server.Frame.RequestHeaders = newRequestHeaders; + + // Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); + + // await connection.SendAll(headers0); + // // Wait for headers to be parsed + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count); + + // Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); + // Assert.Equal(header0Count, server.Frame.RequestHeaders.Count); + + // await connection.SendAll(headers1); + // // Wait for headers to be parsed + // await WaitForCondition(TimeSpan.FromSeconds(1), () => server.Frame.RequestHeaders.Count >= header0Count + header1Count); + + // Assert.Equal(header0Count + header1Count, server.Frame.RequestHeaders.Count); + + // Assert.Same(newRequestHeaders, server.Frame.RequestHeaders); + + // await connection.SendAll("\r\n"); + // await connection.ReceiveEnd( + // "HTTP/1.1 200 OK", + // $"Date: {server.Context.DateHeaderValue}", + // "Transfer-Encoding: chunked", + // "", + // "c", + // "hello, world", + // "0", + // "", + // ""); + // } + // } + //} [Theory] [InlineData(1)] diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ThreadCountTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ThreadCountTests.cs index cfd2e133a..67f5cbafb 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ThreadCountTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ThreadCountTests.cs @@ -20,7 +20,8 @@ public class ThreadCountTests public async Task OneToTenThreads(int threadCount) { var hostBuilder = new WebHostBuilder() - .UseKestrel(options => + .UseKestrel() + .UseLibuv(options => { options.ThreadCount = threadCount; }) diff --git a/test/shared/MockConnection.cs b/test/shared/MockConnection.cs index 56a9e84d5..c0a153e88 100644 --- a/test/shared/MockConnection.cs +++ b/test/shared/MockConnection.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Testing @@ -18,12 +19,9 @@ public class MockConnection : Connection, IDisposable public MockConnection() { - ConnectionControl = this; + TimeoutControl = this; RequestAbortedSource = new CancellationTokenSource(); - ListenerContext = new ListenerContext(new ServiceContext()) - { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) - }; + ListenerContext = new ListenerContext(new LibuvTransportContext()); } public override Task AbortAsync(Exception error = null) diff --git a/test/shared/MockSocketOutput.cs b/test/shared/MockSocketOutput.cs index a506b388f..3af698993 100644 --- a/test/shared/MockSocketOutput.cs +++ b/test/shared/MockSocketOutput.cs @@ -38,5 +38,9 @@ public void Write(Action write, T state) { } + + public void Dispose() + { + } } } diff --git a/test/shared/TestFrame.cs b/test/shared/TestFrame.cs index 5eda86513..cc2d262bd 100644 --- a/test/shared/TestFrame.cs +++ b/test/shared/TestFrame.cs @@ -9,7 +9,7 @@ namespace Microsoft.AspNetCore.Testing { public class TestFrame : Frame { - public TestFrame(IHttpApplication application, ConnectionContext context) + public TestFrame(IHttpApplication application, FrameContext context) : base(application, context) { } diff --git a/test/shared/TestServer.cs b/test/shared/TestServer.cs index ec0a8fbd1..f9bb65b48 100644 --- a/test/shared/TestServer.cs +++ b/test/shared/TestServer.cs @@ -17,9 +17,7 @@ namespace Microsoft.AspNetCore.Testing public class TestServer : IDisposable { private KestrelEngine _engine; - private IDisposable _server; private ListenOptions _listenOptions; - private Frame _frame; public TestServer(RequestDelegate app) : this(app, new TestServiceContext()) @@ -43,25 +41,20 @@ public TestServer(RequestDelegate app, TestServiceContext context, ListenOptions public TestServer(RequestDelegate app, TestServiceContext context, ListenOptions listenOptions, IHttpContextFactory httpContextFactory) { - Context = context; _listenOptions = listenOptions; - context.FrameFactory = connectionContext => - { - _frame = new Frame(new DummyApplication(app, httpContextFactory), connectionContext); - return _frame; - }; + Context = context; + Context.TransportContext.ConnectionHandler = new ConnectionHandler(Context, new DummyApplication(app, httpContextFactory)); try { - _engine = new KestrelEngine(context); - _engine.Start(1); - _server = _engine.CreateServer(_listenOptions); + _engine = new KestrelEngine(context.TransportContext, _listenOptions); + _engine.BindAsync().Wait(); } catch { - _server?.Dispose(); - _engine?.Dispose(); + _engine.UnbindAsync().Wait(); + _engine.StopAsync().Wait(); throw; } } @@ -69,8 +62,6 @@ public TestServer(RequestDelegate app, TestServiceContext context, ListenOptions public int Port => _listenOptions.IPEndPoint.Port; public AddressFamily AddressFamily => _listenOptions.IPEndPoint.AddressFamily; - public Frame Frame => _frame; - public TestServiceContext Context { get; } public TestConnection CreateConnection() @@ -80,8 +71,8 @@ public TestConnection CreateConnection() public void Dispose() { - _server.Dispose(); - _engine.Dispose(); + _engine.UnbindAsync().Wait(); + _engine.StopAsync().Wait(); } } } diff --git a/test/shared/TestServiceContext.cs b/test/shared/TestServiceContext.cs index ad78537ef..1672d0d7d 100644 --- a/test/shared/TestServiceContext.cs +++ b/test/shared/TestServiceContext.cs @@ -2,21 +2,19 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; namespace Microsoft.AspNetCore.Testing { public class TestServiceContext : ServiceContext { - private RequestDelegate _app; - public TestServiceContext() { - AppLifetime = new LifetimeNotImplemented(); Log = new TestKestrelTrace(); ThreadPool = new LoggingThreadPool(Log); DateHeaderValueManager = new DateHeaderValueManager(systemClock: new MockSystemClock()); @@ -24,27 +22,23 @@ public TestServiceContext() HttpParserFactory = frame => new KestrelHttpParser(Log); ServerOptions = new KestrelServerOptions { - AddServerHeader = false, - ShutdownTimeout = TimeSpan.FromSeconds(5) + AddServerHeader = false }; - } - public string DateHeaderValue { get; } - - public RequestDelegate App - { - get + TransportContext = new LibuvTransportContext { - return _app; - } - set - { - _app = value; - FrameFactory = connectionContext => + AppLifetime = new LifetimeNotImplemented(), + Log = Log, + Options = new LibuvTransportOptions { - return new Frame(new DummyApplication(_app), connectionContext); - }; - } + ThreadCount = 1, + ShutdownTimeout = TimeSpan.FromSeconds(5) + } + }; } + + public string DateHeaderValue { get; } + + public LibuvTransportContext TransportContext { get; } } } From 2a8ecd6795f4de7019e61d437e87aef55d75b214 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Fri, 24 Mar 2017 09:14:42 -0700 Subject: [PATCH 08/20] WIP 6 --- .../Internal/Http/SocketOutputProducer.cs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs index fe41862d6..880bde7a6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs @@ -22,8 +22,6 @@ public class SocketOutputProducer : ISocketOutput private bool _cancelled = false; private bool _completed = false; - // TODO: Set this when the socket is closed - private bool _isSocketClosed = false; // TODO: Set _lastWriteError //private Exception _lastWriteError; @@ -55,22 +53,17 @@ public Task WriteAsync( lock (_contextLock) { - if (_isSocketClosed) + if (_completed) { + // TODO: Get actual notification when the consumer stopped from Pipes, so we know if the socket is fully closed. _log.ConnectionDisconnectedWrite(_connectionId, buffer.Count, null/*_lastWriteError*/); - return TaskCache.CompletedTask; } - if (_completed) - { - return TaskCache.CompletedTask; - } + writableBuffer = _pipe.Alloc(); if (buffer.Count > 0) { - writableBuffer = _pipe.Alloc(); - if (chunk) { ChunkWriter.WriteBeginChunkBytes(ref writableBuffer, buffer.Count); @@ -82,9 +75,9 @@ public Task WriteAsync( { ChunkWriter.WriteEndChunkBytes(ref writableBuffer); } - - writableBuffer.Commit(); } + + writableBuffer.Commit(); } return FlushAsync(writableBuffer); @@ -175,7 +168,7 @@ public void Dispose() { lock (_contextLock) { - _isSocketClosed = false; + _completed = true; _pipe.Complete(); } } From 0567559d769376221af23228125306af88933345 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Fri, 24 Mar 2017 10:24:49 -0700 Subject: [PATCH 09/20] WIP 7 --- .../Internal/ConnectionHandler.cs | 11 ++++++++--- .../Internal/ConnectionLifetime.cs | 4 ++-- .../Internal/ConnectionLifetimeContext.cs | 1 + .../Internal/Http/ConnectionLifetimeControl.cs | 16 +++++++++++----- .../Internal/Http/Frame.cs | 2 +- .../Internal/Http/FrameContext.cs | 1 - .../Internal/Http/ISocketOutput.cs | 2 +- .../Internal/Http/SocketOutputProducer.cs | 15 +++++++-------- test/shared/MockSocketOutput.cs | 4 ---- 9 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index f3a05b835..18ae9938a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -42,19 +42,24 @@ public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IS { ConnectionId = connectionId, ConnectionInformation = connectionInfo, - LifetimeControl = new ConnectionLifetimeControl(connectionId, outputPipe, _serviceContext.Log), ServiceContext = _serviceContext }; + // TODO: Untangle this mess + var frame = new Frame(_application, frameContext); + var outputProducer = new SocketOutputProducer(outputPipe.Writer, frame, connectionId, _serviceContext.Log); + frame.LifetimeControl = new ConnectionLifetimeControl(connectionId, outputPipe.Reader, outputProducer, _serviceContext.Log); + var connection = new ConnectionLifetime(new ConnectionLifetimeContext { ConnectionId = connectionId, ServiceContext = _serviceContext, PipeFactory = _pipeFactory, ConnectionAdapters = connectionInfo.ListenOptions.ConnectionAdapters, - Frame = new Frame(_application, frameContext), + Frame = frame, Input = inputPipe, - Output = outputPipe + Output = outputPipe, + OutputProducer = outputProducer }); // Since data cannot be added to the inputPipe by the transport until OnConnection returns, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs index c33874ac8..46ed509b4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs @@ -52,7 +52,7 @@ public ConnectionLifetime(ConnectionLifetimeContext context) public void StartRequestProcessing() { _frame.Input = _context.Input.Reader; - _frame.Output = new SocketOutputProducer(_context.Output.Writer, this, ConnectionId, Log); + _frame.Output = _context.OutputProducer; if (_connectionAdapters.Count == 0) { @@ -150,7 +150,7 @@ private async Task RunAdaptedPipeline() private void CloseRawPipes() { _filteredStream?.Dispose(); - _context.Output.Writer.Complete(); + _context.OutputProducer.Dispose(); _context.Input.Reader.Complete(); } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs index e554b7357..c199fe581 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs @@ -15,6 +15,7 @@ public class ConnectionLifetimeContext public PipeFactory PipeFactory { get; set; } public List ConnectionAdapters { get; set; } public Frame Frame { get; set; } + public SocketOutputProducer OutputProducer { get; set; } public IPipe Input { get; set; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs index f44ee8200..ae7d98ba3 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ConnectionLifetimeControl.cs @@ -8,15 +8,21 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { public class ConnectionLifetimeControl { - public ConnectionLifetimeControl(string connectionId, IPipe outputPipe, IKestrelTrace log) + public ConnectionLifetimeControl( + string connectionId, + IPipeReader outputPipeReader, + SocketOutputProducer outputProducer, + IKestrelTrace log) { ConnectionId = connectionId; - Output = outputPipe; + OutputReader = outputPipeReader; + OutputProducer = outputProducer; Log = log; } private string ConnectionId { get; } - private IPipe Output { get; } + private IPipeReader OutputReader { get; } + private SocketOutputProducer OutputProducer { get; } private IKestrelTrace Log { get; } public void End(ProduceEndType endType) @@ -27,10 +33,10 @@ public void End(ProduceEndType endType) Log.ConnectionKeepAlive(ConnectionId); break; case ProduceEndType.SocketShutdown: - Output.Reader.CancelPendingRead(); + OutputReader.CancelPendingRead(); goto case ProduceEndType.SocketDisconnect; case ProduceEndType.SocketDisconnect: - Output.Writer.Complete(); + OutputProducer.Dispose(); Log.ConnectionDisconnect(ConnectionId); break; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index b77ad0342..fa5726beb 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -99,9 +99,9 @@ public Frame(FrameContext frameContext) public IPipeReader Input { get; set; } public ISocketOutput Output { get; set; } public IEnumerable AdaptedConnections { get; set; } + public ConnectionLifetimeControl LifetimeControl { get; set; } protected ITimeoutControl TimeoutControl => ConnectionInformation.TimeoutControl; - protected ConnectionLifetimeControl LifetimeControl => _frameContext.LifetimeControl; protected IKestrelTrace Log => ServiceContext.Log; private DateHeaderValueManager DateHeaderValueManager => ServiceContext.DateHeaderValueManager; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs index 4eac1f46c..134afd77b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameContext.cs @@ -9,7 +9,6 @@ public class FrameContext { public string ConnectionId { get; set; } public ServiceContext ServiceContext { get; set; } - public ConnectionLifetimeControl LifetimeControl { get; set; } public IConnectionInformation ConnectionInformation { get; set; } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs index 26287ae9b..7298b4216 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http /// /// Operations performed for buffered socket output /// - public interface ISocketOutput : IDisposable + public interface ISocketOutput { void Write(ArraySegment buffer, bool chunk = false); Task WriteAsync(ArraySegment buffer, bool chunk = false, CancellationToken cancellationToken = default(CancellationToken)); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs index 880bde7a6..d672a89a3 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs @@ -23,10 +23,8 @@ public class SocketOutputProducer : ISocketOutput private bool _cancelled = false; private bool _completed = false; - // TODO: Set _lastWriteError - //private Exception _lastWriteError; private readonly IPipeWriter _pipe; - private readonly ConnectionLifetime _connection; + private readonly Frame _frame; // https://github.com/dotnet/corefxlab/issues/1334 // Pipelines don't support multiple awaiters on flush @@ -35,10 +33,10 @@ public class SocketOutputProducer : ISocketOutput private readonly object _flushLock = new object(); private readonly Action _onFlushCallback; - public SocketOutputProducer(IPipeWriter pipe, ConnectionLifetime connection, string connectionId, IKestrelTrace log) + public SocketOutputProducer(IPipeWriter pipe, Frame frame, string connectionId, IKestrelTrace log) { _pipe = pipe; - _connection = connection; + _frame = frame; _connectionId = connectionId; _log = log; _onFlushCallback = OnFlush; @@ -55,8 +53,9 @@ public Task WriteAsync( { if (_completed) { - // TODO: Get actual notification when the consumer stopped from Pipes, so we know if the socket is fully closed. - _log.ConnectionDisconnectedWrite(_connectionId, buffer.Count, null/*_lastWriteError*/); + // TODO: Get actual notification when the consumer stopped from Pipes, + // so we know if the socket is fully closed and why (for logging exceptions); + _log.ConnectionDisconnectedWrite(_connectionId, buffer.Count, ex: null); return TaskCache.CompletedTask; } @@ -127,7 +126,7 @@ Task ISocketOutput.WriteAsync(ArraySegment buffer, bool chunk, Cancellatio { if (cancellationToken.IsCancellationRequested) { - _connection.Abort(ex: null); + _frame.Abort(); _cancelled = true; return Task.FromCanceled(cancellationToken); } diff --git a/test/shared/MockSocketOutput.cs b/test/shared/MockSocketOutput.cs index 3af698993..a506b388f 100644 --- a/test/shared/MockSocketOutput.cs +++ b/test/shared/MockSocketOutput.cs @@ -38,9 +38,5 @@ public void Write(Action write, T state) { } - - public void Dispose() - { - } } } From ef3b03343227e0a31d0e56986816953268a5c1cc Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 27 Mar 2017 12:21:51 -0700 Subject: [PATCH 10/20] WIP 8 --- .../Microsoft.AspNetCore.Server.Kestrel.Core.csproj | 2 +- .../Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj index 9902669e3..7d73ec6ec 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj @@ -4,7 +4,7 @@ Core components of ASP.NET Core Kestrel cross-platform web server. - net451;netstandard1.3 + netstandard1.3;net46 true aspnetcore;kestrel true diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj index 8cb9d0e45..d414d16e8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj @@ -4,7 +4,7 @@ Libuv transport for the ASP.NET Core Kestrel cross-platform web server. - net451;netstandard1.3 + netstandard1.3;net46 true aspnetcore;kestrel true From a90b1e74c7a38783e87d97c213ef8b1a9241fa28 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 27 Mar 2017 14:55:43 -0700 Subject: [PATCH 11/20] WIP 9 --- .../Internal/Http/Frame.cs | 28 +++++++++++-------- .../Internal/Http/SocketOutputConsumer.cs | 2 -- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index fa5726beb..1fb23ee4a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -408,6 +408,19 @@ public Task StopAsync() return _requestProcessingTask ?? TaskCache.CompletedTask; } + public void CancelRequestAbortedToken() + { + try + { + RequestAbortedSource.Cancel(); + _abortedCts = null; + } + catch (Exception ex) + { + Log.ApplicationError(ConnectionId, ex); + } + } + /// /// Immediate kill the connection and poison the request and response streams. /// @@ -420,19 +433,10 @@ public void Abort(Exception error = null) _frameStreams?.RequestBody.Abort(error); _frameStreams?.ResponseBody.Abort(); - try - { - LifetimeControl.End(ProduceEndType.SocketDisconnect); - } - catch (Exception ex) - { - Log.LogError(0, ex, "Abort"); - } + LifetimeControl.End(ProduceEndType.SocketDisconnect); - // Potentially calling user code. ThreadPool will catch and log any errors. - ServiceContext.ThreadPool.Run(() => RequestAbortedSource.Cancel()); - - _abortedCts = null; + // Potentially calling user code. CancelRequestAbortedToken logs any exceptions. + ServiceContext.ThreadPool.UnsafeRun(state => ((Frame)state).CancelRequestAbortedToken(), this); } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs index db5c80ec4..086fb90b8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs @@ -11,8 +11,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { public class SocketOutputConsumer { - private static readonly ArraySegment _emptyData = new ArraySegment(new byte[0]); - private readonly KestrelThread _thread; private readonly UvStreamHandle _socket; private readonly Connection _connection; From af243e05571b986887b792fb1a31854f4188b6c6 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Tue, 28 Mar 2017 12:00:00 -0700 Subject: [PATCH 12/20] WIP 10 --- .../Internal/Networking/Libuv.cs | 2 +- .../Internal/Networking/UvMemory.cs | 2 +- .../KestrelEngine.cs | 2 +- .../ConnectionTests.cs | 107 +++++++++++++----- .../KestrelEventSourceTests.cs | 4 +- ...soft.AspNetCore.Server.KestrelTests.csproj | 1 + .../TestHelpers/MockLibuv.cs | 2 +- .../TestHelpers/MockSocket.cs | 2 +- .../UvTimerHandleTests.cs | 4 +- 9 files changed, 89 insertions(+), 37 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs index c688e9bfa..b527524b6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs @@ -60,7 +60,7 @@ public LibuvFunctions() } // Second ctor that doesn't set any fields only to be used by MockLibuv - internal LibuvFunctions(bool onlyForTesting) + public LibuvFunctions(bool onlyForTesting) { } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs index 571702c78..3fb078ac1 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs @@ -70,7 +70,7 @@ protected static void DestroyMemory(IntPtr memory, IntPtr gcHandlePtr) Marshal.FreeCoTaskMem(memory); } - internal IntPtr InternalGetHandle() + public IntPtr InternalGetHandle() { return handle; } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs index d6271b247..7ccd200dd 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs @@ -28,7 +28,7 @@ public KestrelEngine(LibuvTransportContext context, ListenOptions listenOptions) { } // For testing - internal KestrelEngine(LibuvFunctions uv, LibuvTransportContext context, ListenOptions listenOptions) + public KestrelEngine(LibuvFunctions uv, LibuvTransportContext context, ListenOptions listenOptions) { Libuv = uv; TransportContext = context; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs index bd0b19723..cfbfb2b9a 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs @@ -1,18 +1,19 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; +using System.IO.Pipelines; using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; -using Microsoft.Extensions.Internal; using Xunit; namespace Microsoft.AspNetCore.Server.KestrelTests @@ -22,43 +23,93 @@ public class ConnectionTests [Fact] public async Task DoesNotEndConnectionOnZeroRead() { - var mockLibuv = new MockLibuv(); - var serviceContext = new TestServiceContext + + using (var testConnectionHandler = new TestConnectionHandler()) { - FrameFactory = connectionContext => new Frame( - new DummyApplication(httpContext => TaskCache.CompletedTask), connectionContext) - }; + var mockLibuv = new MockLibuv(); + var serviceContext = new TestServiceContext(); + serviceContext.TransportContext.ConnectionHandler = testConnectionHandler; + + var engine = new KestrelEngine(mockLibuv, serviceContext.TransportContext, null); + var thread = new KestrelThread(engine); + + try + { + await thread.StartAsync(); + await thread.PostAsync(_ => + { + var listenerContext = new ListenerContext(serviceContext.TransportContext) + { + Thread = thread + }; + var socket = new MockSocket(mockLibuv, Thread.CurrentThread.ManagedThreadId, serviceContext.Log); + var connection = new Connection(listenerContext, socket); + connection.Start(); + + LibuvFunctions.uv_buf_t ignored; + mockLibuv.AllocCallback(socket.InternalGetHandle(), 2048, out ignored); + mockLibuv.ReadCallback(socket.InternalGetHandle(), 0, ref ignored); + }, (object)null); + + var readAwaitable = await testConnectionHandler.Input.Reader.ReadAsync(); + Assert.False(readAwaitable.IsCompleted); + } + finally + { + await thread.StopAsync(TimeSpan.FromSeconds(1)); + } + } + } + + private class TestConnectionHandler : IConnectionHandler, IDisposable + { + private readonly PipeFactory _pipeFactory; + + public IPipe Input; - // Ensure ProcessRequestAsync runs inline with the ReadCallback - serviceContext.ThreadPool = new InlineLoggingThreadPool(serviceContext.Log); + public TestConnectionHandler() + { + _pipeFactory = new PipeFactory(); + } - using (var engine = new KestrelEngine(mockLibuv, serviceContext)) + public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler) { - engine.Start(count: 1); + Assert.Null(Input); - var listenerContext = new ListenerContext(serviceContext) + Input = _pipeFactory.Create(); + + return new TestConnectionContext { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)), - Thread = engine.Threads[0] + Input = Input.Writer, }; + } - Connection connection = null; - await listenerContext.Thread.PostAsync(_ => - { - var socket = new MockSocket(mockLibuv, Thread.CurrentThread.ManagedThreadId, serviceContext.Log); - connection = new Connection(listenerContext, socket); - connection.Start(); + public void Dispose() + { + Input?.Writer.Complete(); + _pipeFactory.Dispose(); + } - Libuv.uv_buf_t ignored; - mockLibuv.AllocCallback(socket.InternalGetHandle(), 2048, out ignored); - // This runs the ProcessRequestAsync inline - mockLibuv.ReadCallback(socket.InternalGetHandle(), 0, ref ignored); + private class TestConnectionContext : IConnectionContext + { + public string ConnectionId { get; } + public IPipeWriter Input { get; set; } + public IPipeReader Output { get; set; } - var readAwaitable = connection.Input.Reader.ReadAsync(); + public Task StopAsync() + { + throw new NotImplementedException(); + } - Assert.False(readAwaitable.IsCompleted); - }, (object)null); - connection.ConnectionControl.End(ProduceEndType.SocketDisconnect); + public void Abort(Exception ex) + { + throw new NotImplementedException(); + } + + public void SetBadRequestState(RequestRejectionReason reason) + { + throw new NotImplementedException(); + } } } } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs index 466109717..745e81b78 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs @@ -4,7 +4,7 @@ using System; using System.Diagnostics.Tracing; using System.Reflection; -using Microsoft.AspNetCore.Server.Kestrel; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; using Xunit; namespace Microsoft.AspNetCore.Server.KestrelTests @@ -14,7 +14,7 @@ public class KestrelEventSourceTests [Fact] public void ExistsWithCorrectId() { - var esType = typeof(KestrelServer).GetTypeInfo().Assembly.GetType( + var esType = typeof(LibuvTransportFactory).GetTypeInfo().Assembly.GetType( "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.KestrelEventSource", throwOnError: true, ignoreCase: false diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/Microsoft.AspNetCore.Server.KestrelTests.csproj b/test/Microsoft.AspNetCore.Server.KestrelTests/Microsoft.AspNetCore.Server.KestrelTests.csproj index 382492d09..1ee301957 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/Microsoft.AspNetCore.Server.KestrelTests.csproj +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/Microsoft.AspNetCore.Server.KestrelTests.csproj @@ -16,6 +16,7 @@ + diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockLibuv.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockLibuv.cs index 55ad9161d..8f809cf4f 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockLibuv.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockLibuv.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests.TestHelpers { - public class MockLibuv : Libuv + public class MockLibuv : LibuvFunctions { private UvAsyncHandle _postHandle; private uv_async_cb _onPost; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockSocket.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockSocket.cs index 7b398464d..fbe24d07b 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockSocket.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockSocket.cs @@ -6,7 +6,7 @@ namespace Microsoft.AspNetCore.Server.KestrelTests.TestHelpers { class MockSocket : UvStreamHandle { - public MockSocket(Libuv uv, int threadId, IKestrelTrace logger) : base(logger) + public MockSocket(LibuvFunctions uv, int threadId, IKestrelTrace logger) : base(logger) { CreateMemory(uv, threadId, IntPtr.Size); } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/UvTimerHandleTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/UvTimerHandleTests.cs index b81d14d89..cb5e41626 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/UvTimerHandleTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/UvTimerHandleTests.cs @@ -15,7 +15,7 @@ public void TestTimeout() var trace = new TestKestrelTrace(); var loop = new UvLoopHandle(trace); - loop.Init(new Libuv()); + loop.Init(new LibuvFunctions()); var timer = new UvTimerHandle(trace); timer.Init(loop, (a, b) => { }); @@ -41,7 +41,7 @@ public void TestRepeat() var trace = new TestKestrelTrace(); var loop = new UvLoopHandle(trace); - loop.Init(new Libuv()); + loop.Init(new LibuvFunctions()); var timer = new UvTimerHandle(trace); timer.Init(loop, (callback, handle) => { }); From 0a86f0c723dd1ca2e95af158ea57f117f3ab8534 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 01:21:48 -0700 Subject: [PATCH 13/20] WIP 11 --- .../Internal/ConnectionHandler.cs | 5 +- .../Internal/ConnectionLifetime.cs | 4 +- .../Internal/Http/Frame.cs | 2 +- .../Internal/Http/SocketOutputProducer.cs | 2 +- .../KestrelServer.cs | 28 +- .../Internal/Http/SocketOutputConsumer.cs | 6 - .../Internal/Infrastructure/KestrelThread.cs | 3 +- .../LibuvTransportFactory.cs | 1 - .../ConnectionTests.cs | 59 +-- .../EngineTests.cs | 42 +- .../FrameResponseHeadersTests.cs | 18 +- .../FrameTests.cs | 49 ++- .../KestrelServerOptionsTests.cs | 16 - .../KestrelServerTests.cs | 41 +- .../LibuvTransportFactoryTests.cs | 43 ++ .../LibuvTransportOptionsTests.cs | 28 ++ .../ListenerContextTests.cs | 72 --- .../ListenerPrimaryTests.cs | 351 +++++++-------- .../MessageBodyTests.cs | 2 +- .../MultipleLoopTests.cs | 18 +- .../NetworkingTests.cs | 9 +- .../PipeOptionsTests.cs | 73 ++++ .../SocketOutputTests.cs | 413 +++++++----------- .../TestHelpers/MockConnectionHandler.cs | 67 +++ .../TestHelpers/TestConstants.cs | 10 + .../TestInput.cs | 32 +- test/shared/TestServer.cs | 1 + test/shared/TestServiceContext.cs | 16 + 28 files changed, 678 insertions(+), 733 deletions(-) create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs delete mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/ListenerContextTests.cs create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/TestConstants.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index 18ae9938a..b50800a65 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -75,7 +75,8 @@ public void Dispose() _pipeFactory.Dispose(); } - private PipeOptions GetInputPipeOptions(IScheduler scheduler) => new PipeOptions + // Internal for testing + internal PipeOptions GetInputPipeOptions(IScheduler scheduler) => new PipeOptions { ReaderScheduler = _serviceContext.ThreadPool, WriterScheduler = scheduler, @@ -83,7 +84,7 @@ public void Dispose() MaximumSizeLow = _serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 }; - private PipeOptions GetOutputPipeOptions(IScheduler scheduler) => new PipeOptions + internal PipeOptions GetOutputPipeOptions(IScheduler scheduler) => new PipeOptions { ReaderScheduler = scheduler, WriterScheduler = _serviceContext.ThreadPool, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs index 46ed509b4..b18959033 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs @@ -39,7 +39,9 @@ public ConnectionLifetime(ConnectionLifetimeContext context) public IPipeReader Output => _context.Output.Reader; private PipeFactory PipeFactory => _context.PipeFactory; - private PipeOptions AdaptedPipeOptions => new PipeOptions + + // Internal for testing + internal PipeOptions AdaptedPipeOptions => new PipeOptions { ReaderScheduler = InlineScheduler.Default, WriterScheduler = InlineScheduler.Default, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs index 1fb23ee4a..e91ca6291 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.cs @@ -408,7 +408,7 @@ public Task StopAsync() return _requestProcessingTask ?? TaskCache.CompletedTask; } - public void CancelRequestAbortedToken() + private void CancelRequestAbortedToken() { try { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs index d672a89a3..956fd5a33 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/SocketOutputProducer.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { - public class SocketOutputProducer : ISocketOutput + public class SocketOutputProducer : ISocketOutput, IDisposable { private static readonly ArraySegment _emptyData = new ArraySegment(new byte[0]); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index a7cba7223..c32420c55 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -212,23 +212,25 @@ public void Start(IHttpApplication application) public void Dispose() { - var tasks = new Task[_transports.Count]; - for (int i = 0; i < _transports.Count; i++) + if (_transports != null) { - tasks[i] = _transports[i].UnbindAsync(); - } - Task.WaitAll(tasks); - - _connectionHandlerDisposable.Dispose(); + var tasks = new Task[_transports.Count]; + for (int i = 0; i < _transports.Count; i++) + { + tasks[i] = _transports[i].UnbindAsync(); + } + Task.WaitAll(tasks); - // TODO: Do transport-agnostic connection management/shutdown. - for (int i = 0; i < _transports.Count; i++) - { - tasks[i] = _transports[i].StopAsync(); + // TODO: Do transport-agnostic connection management/shutdown. + for (int i = 0; i < _transports.Count; i++) + { + tasks[i] = _transports[i].StopAsync(); + } + Task.WaitAll(tasks); } - Task.WaitAll(tasks); - _dateHeaderValueManager.Dispose(); + _connectionHandlerDisposable?.Dispose(); + _dateHeaderValueManager?.Dispose(); } private void ValidateOptions() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs index 086fb90b8..6e8e4319b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs @@ -139,11 +139,5 @@ private Task ShutdownAsync() return tcs.Task; } - - public void Shutdown() - { - // Graceful shutdown. - _pipe.CancelPendingRead(); - } } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs index ddaf879b3..43623f29b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs @@ -78,8 +78,9 @@ public KestrelThread(KestrelEngine engine) WriteReqPool = new WriteReqPool(this, _log); ConnectionManager = new ConnectionManager(this); } + // For testing - internal KestrelThread(KestrelEngine engine, int maxLoops) + public KestrelThread(KestrelEngine engine, int maxLoops) : this(engine) { _maxLoops = maxLoops; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs index fdd42affa..1ccad1237 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs @@ -39,7 +39,6 @@ public LibuvTransportFactory( // TODO: Add LibuvTrace var trace = new KestrelTrace(logger); - var threadCount = options.Value.ThreadCount; if (threadCount <= 0) diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs index cfbfb2b9a..98ed4c82d 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs @@ -23,12 +23,11 @@ public class ConnectionTests [Fact] public async Task DoesNotEndConnectionOnZeroRead() { - - using (var testConnectionHandler = new TestConnectionHandler()) + using (var mockConnectionHandler = new MockConnectionHandler()) { var mockLibuv = new MockLibuv(); var serviceContext = new TestServiceContext(); - serviceContext.TransportContext.ConnectionHandler = testConnectionHandler; + serviceContext.TransportContext.ConnectionHandler = mockConnectionHandler; var engine = new KestrelEngine(mockLibuv, serviceContext.TransportContext, null); var thread = new KestrelThread(engine); @@ -51,7 +50,7 @@ await thread.PostAsync(_ => mockLibuv.ReadCallback(socket.InternalGetHandle(), 0, ref ignored); }, (object)null); - var readAwaitable = await testConnectionHandler.Input.Reader.ReadAsync(); + var readAwaitable = await mockConnectionHandler.Input.Reader.ReadAsync(); Assert.False(readAwaitable.IsCompleted); } finally @@ -60,57 +59,5 @@ await thread.PostAsync(_ => } } } - - private class TestConnectionHandler : IConnectionHandler, IDisposable - { - private readonly PipeFactory _pipeFactory; - - public IPipe Input; - - public TestConnectionHandler() - { - _pipeFactory = new PipeFactory(); - } - - public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler) - { - Assert.Null(Input); - - Input = _pipeFactory.Create(); - - return new TestConnectionContext - { - Input = Input.Writer, - }; - } - - public void Dispose() - { - Input?.Writer.Complete(); - _pipeFactory.Dispose(); - } - - private class TestConnectionContext : IConnectionContext - { - public string ConnectionId { get; } - public IPipeWriter Input { get; set; } - public IPipeReader Output { get; set; } - - public Task StopAsync() - { - throw new NotImplementedException(); - } - - public void Abort(Exception ex) - { - throw new NotImplementedException(); - } - - public void SetBadRequestState(RequestRejectionReason reason) - { - throw new NotImplementedException(); - } - } - } } } \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs index f138f063b..076729e51 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/EngineTests.cs @@ -15,8 +15,6 @@ using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; using Xunit; @@ -38,35 +36,40 @@ public class EngineTests }; [Fact] - public void EngineCanStartAndStop() + public async Task EngineCanStartAndStop() { - var engine = new KestrelEngine(new TestServiceContext()); - engine.Start(1); - engine.Dispose(); + var serviceContext = new TestServiceContext(); + + // The engine can no longer start threads without binding to an endpoint. + var engine = new KestrelEngine(serviceContext.TransportContext, + new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))); + + await engine.BindAsync(); + await engine.StopAsync(); } [Theory] [MemberData(nameof(ConnectionAdapterData))] - public void ListenerCanCreateAndDispose(ListenOptions listenOptions) + public async Task ListenerCanCreateAndDispose(ListenOptions listenOptions) { var testContext = new TestServiceContext(); testContext.App = TestApp.EchoApp; - var engine = new KestrelEngine(testContext); - engine.Start(1); - var started = engine.CreateServer(listenOptions); - started.Dispose(); - engine.Dispose(); + var engine = new KestrelEngine(testContext.TransportContext, listenOptions); + + await engine.BindAsync(); + await engine.UnbindAsync(); + await engine.StopAsync(); } [Theory] [MemberData(nameof(ConnectionAdapterData))] - public void ConnectionCanReadAndWrite(ListenOptions listenOptions) + public async Task ConnectionCanReadAndWrite(ListenOptions listenOptions) { var testContext = new TestServiceContext(); testContext.App = TestApp.EchoApp; - var engine = new KestrelEngine(testContext); - engine.Start(1); - var started = engine.CreateServer(listenOptions); + var engine = new KestrelEngine(testContext.TransportContext, listenOptions); + + await engine.BindAsync(); var socket = TestConnection.CreateConnectedLoopbackSocket(listenOptions.IPEndPoint.Port); var data = "Hello World"; @@ -78,8 +81,9 @@ public void ConnectionCanReadAndWrite(ListenOptions listenOptions) read += socket.Receive(buffer, read, buffer.Length - read, SocketFlags.None); } socket.Dispose(); - started.Dispose(); - engine.Dispose(); + + await engine.UnbindAsync(); + await engine.StopAsync(); } [Theory] @@ -798,7 +802,7 @@ await connection.ReceiveForcedEnd( Assert.True(onStartingCalled); Assert.Equal(1, testLogger.ApplicationErrorsLogged); } - + [MemberData(nameof(ConnectionAdapterData))] public async Task ConnectionClosesWhenFinReceivedBeforeRequestCompletes(ListenOptions listenOptions) { diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs index 7b908fd64..fee390123 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs @@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Primitives; using Xunit; @@ -20,21 +21,12 @@ public class FrameResponseHeadersTests [Fact] public void InitialDictionaryIsEmpty() { - var serverOptions = new KestrelServerOptions(); - - var serviceContext = new ServiceContext - { - DateHeaderValueManager = new DateHeaderValueManager(), - ServerOptions = serverOptions, - HttpParserFactory = f => new NoopHttpParser(), - }; - var listenerContext = new ListenerContext(serviceContext) + var frameContext = new FrameContext { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) + ServiceContext = new TestServiceContext() }; - var connectionContext = new ConnectionContext(listenerContext); - var frame = new Frame(application: null, context: connectionContext); + var frame = new Frame(application: null, frameContext: frameContext); frame.InitializeHeaders(); @@ -287,7 +279,7 @@ public bool ParseRequestLine(T handler, ReadableBuffer buffer, out ReadCursor public void Reset() { - + } } } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs index a87cd5e8a..c10624978 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs @@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; @@ -29,14 +30,14 @@ public class FrameTests : IDisposable private readonly IPipe _input; private readonly TestFrame _frame; private readonly ServiceContext _serviceContext; - private readonly ConnectionContext _connectionContext; + private readonly FrameContext _frameContext; private readonly PipeFactory _pipelineFactory; private ReadCursor _consumed; private ReadCursor _examined; private class TestFrame : Frame { - public TestFrame(IHttpApplication application, ConnectionContext context) + public TestFrame(IHttpApplication application, FrameContext context) : base(application, context) { } @@ -49,29 +50,23 @@ public Task ProduceEndAsync() public FrameTests() { - var trace = new KestrelTrace(new TestKestrelTrace()); _pipelineFactory = new PipeFactory(); _input = _pipelineFactory.Create(); - _serviceContext = new ServiceContext - { - DateHeaderValueManager = new DateHeaderValueManager(), - ServerOptions = new KestrelServerOptions(), - HttpParserFactory = frame => new KestrelHttpParser(trace), - Log = trace - }; - var listenerContext = new ListenerContext(_serviceContext) + _serviceContext = new TestServiceContext(); + + _frameContext = new FrameContext { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) + ServiceContext = _serviceContext, + ConnectionInformation = new MockConnectionInformation() }; - _connectionContext = new ConnectionContext(listenerContext) + + _frame = new TestFrame(application: null, context: _frameContext) { - Input = _input, - Output = new MockSocketOutput(), - ConnectionControl = Mock.Of() + Input = _input.Reader, + Output = new MockSocketOutput() }; - _frame = new TestFrame(application: null, context: _connectionContext); _frame.Reset(); _frame.InitializeHeaders(); } @@ -295,8 +290,9 @@ public async Task TakeStartLineRemovesDotSegmentsFromTarget( [Fact] public async Task ParseRequestStartsRequestHeadersTimeoutOnFirstByteAvailable() { - var connectionControl = new Mock(); - _connectionContext.ConnectionControl = connectionControl.Object; + var connectionInfo = (MockConnectionInformation)_frameContext.ConnectionInformation; + var connectionControl = new Mock(); + connectionInfo.TimeoutControl = connectionControl.Object; await _input.Writer.WriteAsync(Encoding.ASCII.GetBytes("G")); @@ -418,8 +414,9 @@ public async Task TakeStartLineThrowsWhenMethodNotAllowed(string requestLine, Ht [Fact] public void RequestProcessingAsyncEnablesKeepAliveTimeout() { - var connectionControl = new Mock(); - _connectionContext.ConnectionControl = connectionControl.Object; + var connectionInfo = (MockConnectionInformation)_frameContext.ConnectionInformation; + var connectionControl = new Mock(); + connectionInfo.TimeoutControl = connectionControl.Object; var requestProcessingTask = _frame.RequestProcessingAsync(); @@ -635,7 +632,7 @@ public static TheoryData TargetWithEncodedNullCharData } } - public static TheoryData TargetInvalidData + public static TheoryData TargetInvalidData => HttpParsingData.TargetInvalidData; public static TheoryData MethodNotAllowedTargetData @@ -685,5 +682,13 @@ public static TheoryData QueryStringWithNullCharData return data; } } + + private class MockConnectionInformation : IConnectionInformation + { + public ListenOptions ListenOptions { get; } + public IPEndPoint RemoteEndPoint { get; } + public IPEndPoint LocalEndPoint { get; } + public ITimeoutControl TimeoutControl { get; set; } = Mock.Of(); + } } } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerOptionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerOptionsTests.cs index 8b7fa7d59..3d1e3eb9a 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerOptionsTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerOptionsTests.cs @@ -53,21 +53,5 @@ public void NoDelayDefaultsToTrue() Assert.True(o1.ListenOptions[0].NoDelay); Assert.False(o1.ListenOptions[1].NoDelay); } - - [Fact] - public void SetThreadCountUsingProcessorCount() - { - // Ideally we'd mock Environment.ProcessorCount to test edge cases. - var expected = Clamp(Environment.ProcessorCount >> 1, 1, 16); - - var information = new KestrelServerOptions(); - - Assert.Equal(expected, information.ThreadCount); - } - - private static int Clamp(int value, int min, int max) - { - return value < min ? min : value > max ? max : value; - } } } \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs index c22bdf678..32f0db51e 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs @@ -7,6 +7,8 @@ using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Server.Kestrel; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; @@ -18,22 +20,6 @@ namespace Microsoft.AspNetCore.Server.KestrelTests { public class KestrelServerTests { - [Theory] - [InlineData(0)] - [InlineData(-1337)] - public void StartWithNonPositiveThreadCountThrows(int threadCount) - { - var testLogger = new TestApplicationErrorLogger { ThrowOnCriticalErrors = false }; - - using (var server = CreateServer(new KestrelServerOptions() { ThreadCount = threadCount }, testLogger)) - { - var exception = Assert.Throws(() => StartDummyApplication(server)); - - Assert.Equal("threadCount", exception.ParamName); - Assert.Equal(1, testLogger.CriticalErrorsLogged); - } - } - [Fact] public void StartWithInvalidAddressThrows() { @@ -119,20 +105,35 @@ public void StartWithMaxRequestBufferSizeLessThanMaxRequestHeadersTotalSizeThrow public void LoggerCategoryNameIsKestrelServerNamespace() { var mockLoggerFactory = new Mock(); - new KestrelServer(Options.Create(null), new LifetimeNotImplemented(), mockLoggerFactory.Object); + new KestrelServer(Options.Create(null), Mock.Of(), mockLoggerFactory.Object); mockLoggerFactory.Verify(factory => factory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel")); } - private static KestrelServer CreateServer(KestrelServerOptions options, ILogger testLogger) + [Fact] + public void StartWithNoTrasnportFactoryThrows() { - var lifetime = new LifetimeNotImplemented(); + var exception = Assert.Throws(() => + new KestrelServer(Options.Create(null), null, Mock.Of())); + + Assert.Equal("transportFactory", exception.ParamName); + } - return new KestrelServer(Options.Create(options), lifetime, new KestrelTestLoggerFactory(testLogger)); + private static KestrelServer CreateServer(KestrelServerOptions options, ILogger testLogger) + { + return new KestrelServer(Options.Create(options), new MockTransportFactory(), new KestrelTestLoggerFactory(testLogger)); } private static void StartDummyApplication(IServer server) { server.Start(new DummyApplication(context => TaskCache.CompletedTask)); } + + private class MockTransportFactory : ITransportFactory + { + public ITransport Create(ListenOptions listenOptions, IConnectionHandler handler) + { + return Mock.Of(); + } + } } } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs new file mode 100644 index 000000000..1a30c7918 --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs @@ -0,0 +1,43 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Linq; +using System.Net; +using Microsoft.AspNetCore.Hosting.Server; +using Microsoft.AspNetCore.Hosting.Server.Features; +using Microsoft.AspNetCore.Server.Kestrel; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.Internal; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Moq; +using Xunit; + +namespace Microsoft.AspNetCore.Server.KestrelTests +{ + public class LibuvTransportFactoryTests + { + [Theory] + [InlineData(0)] + [InlineData(-1337)] + public void StartWithNonPositiveThreadCountThrows(int threadCount) + { + var options = new LibuvTransportOptions() { ThreadCount = threadCount }; + + var exception = Assert.Throws(() => + new LibuvTransportFactory(Options.Create(options), new LifetimeNotImplemented(), Mock.Of())); + + Assert.Equal("threadCount", exception.ParamName); + } + + [Fact] + public void LoggerCategoryNameIsKestrelServerNamespace() + { + var mockLoggerFactory = new Mock(); + new LibuvTransportFactory(Options.Create(new LibuvTransportOptions()), new LifetimeNotImplemented(), mockLoggerFactory.Object); + mockLoggerFactory.Verify(factory => factory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel")); + } + } +} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs new file mode 100644 index 000000000..e8dec1e3e --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs @@ -0,0 +1,28 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Xunit; + +namespace Microsoft.AspNetCore.Server.KestrelTests +{ + public class LibuvTransportOptionsTests + { + [Fact] + public void SetThreadCountUsingProcessorCount() + { + // Ideally we'd mock Environment.ProcessorCount to test edge cases. + var expected = Clamp(Environment.ProcessorCount >> 1, 1, 16); + + var information = new LibuvTransportOptions(); + + Assert.Equal(expected, information.ThreadCount); + } + + private static int Clamp(int value, int min, int max) + { + return value < min ? min : value > max ? max : value; + } + } +} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerContextTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerContextTests.cs deleted file mode 100644 index 4004c9585..000000000 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerContextTests.cs +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.IO.Pipelines; -using Microsoft.AspNetCore.Server.Kestrel.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Testing; -using Xunit; - -namespace Microsoft.AspNetCore.Server.KestrelTests -{ - public class ListenerContextTests - { - [Theory] - [InlineData(10, 10, 10)] - [InlineData(0, 1, 1)] - [InlineData(null, 0, 0)] - public void LibuvOutputPipeOptionsConfiguredCorrectly(long? maxResponseBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) - { - var serviceContext = new TestServiceContext(); - serviceContext.ServerOptions.Limits.MaxResponseBufferSize = maxResponseBufferSize; - serviceContext.ThreadPool = new LoggingThreadPool(null); - - var listenerContext = new ListenerContext(serviceContext) - { - Thread = new KestrelThread(new KestrelEngine(null, serviceContext)) - }; - - Assert.Equal(expectedMaximumSizeLow, listenerContext.LibuvOutputPipeOptions.MaximumSizeLow); - Assert.Equal(expectedMaximumSizeHigh, listenerContext.LibuvOutputPipeOptions.MaximumSizeHigh); - Assert.Same(listenerContext.Thread, listenerContext.LibuvOutputPipeOptions.ReaderScheduler); - Assert.Same(serviceContext.ThreadPool, listenerContext.LibuvOutputPipeOptions.WriterScheduler); - } - - [Theory] - [InlineData(10, 10, 10)] - [InlineData(null, 0, 0)] - public void LibuvInputPipeOptionsConfiguredCorrectly(long? maxRequestBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) - { - var serviceContext = new TestServiceContext(); - serviceContext.ServerOptions.Limits.MaxRequestBufferSize = maxRequestBufferSize; - serviceContext.ThreadPool = new LoggingThreadPool(null); - - var listenerContext = new ListenerContext(serviceContext) - { - Thread = new KestrelThread(new KestrelEngine(null, serviceContext)) - }; - - Assert.Equal(expectedMaximumSizeLow, listenerContext.LibuvInputPipeOptions.MaximumSizeLow); - Assert.Equal(expectedMaximumSizeHigh, listenerContext.LibuvInputPipeOptions.MaximumSizeHigh); - Assert.Same(serviceContext.ThreadPool, listenerContext.LibuvInputPipeOptions.ReaderScheduler); - Assert.Same(listenerContext.Thread, listenerContext.LibuvInputPipeOptions.WriterScheduler); - } - - [Theory] - [InlineData(10, 10, 10)] - [InlineData(null, 0, 0)] - public void AdaptedPipeOptionsConfiguredCorrectly(long? maxRequestBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) - { - var serviceContext = new TestServiceContext(); - serviceContext.ServerOptions.Limits.MaxRequestBufferSize = maxRequestBufferSize; - - var listenerContext = new ListenerContext(serviceContext); - - Assert.Equal(expectedMaximumSizeLow, listenerContext.AdaptedPipeOptions.MaximumSizeLow); - Assert.Equal(expectedMaximumSizeHigh, listenerContext.AdaptedPipeOptions.MaximumSizeHigh); - Assert.Same(InlineScheduler.Default, listenerContext.AdaptedPipeOptions.ReaderScheduler); - Assert.Same(InlineScheduler.Default, listenerContext.AdaptedPipeOptions.WriterScheduler); - } - } -} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs index 486b9ffda..5e524bee1 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs @@ -14,6 +14,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Logging; using Xunit; @@ -25,273 +26,221 @@ public class ListenerPrimaryTests [Fact] public async Task ConnectionsGetRoundRobinedToSecondaryListeners() { - var libuv = new Libuv(); + var libuv = new LibuvFunctions(); var serviceContextPrimary = new TestServiceContext { - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Primary"); - }), context); - } + App = c => c.Response.WriteAsync("Primary") }; - var serviceContextSecondary = new ServiceContext + var serviceContextSecondary = new TestServiceContext { - Log = serviceContextPrimary.Log, - AppLifetime = serviceContextPrimary.AppLifetime, - DateHeaderValueManager = serviceContextPrimary.DateHeaderValueManager, - ServerOptions = serviceContextPrimary.ServerOptions, - ThreadPool = serviceContextPrimary.ThreadPool, - HttpParserFactory = frame => new KestrelHttpParser(serviceContextPrimary.Log), - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Secondary"); - }), context); - } + App = c => c.Response.WriteAsync("Secondary") }; - using (var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary)) - { - var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); + var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); + var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary.TransportContext, listenOptions); - var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); - var pipeMessage = Guid.NewGuid().ToByteArray(); + var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); + var pipeMessage = Guid.NewGuid().ToByteArray(); - // Start primary listener - var kestrelThreadPrimary = new KestrelThread(kestrelEngine); - await kestrelThreadPrimary.StartAsync(); - var listenerPrimary = new ListenerPrimary(serviceContextPrimary); - await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); - var address = listenOptions.ToString(); + // Start primary listener + var kestrelThreadPrimary = new KestrelThread(kestrelEngine); + await kestrelThreadPrimary.StartAsync(); + var listenerPrimary = new ListenerPrimary(serviceContextPrimary.TransportContext); + await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); + var address = listenOptions.ToString(); - // Until a secondary listener is added, TCP connections get dispatched directly - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + // Until a secondary listener is added, TCP connections get dispatched directly + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - // Add secondary listener - var kestrelThreadSecondary = new KestrelThread(kestrelEngine); - await kestrelThreadSecondary.StartAsync(); - var listenerSecondary = new ListenerSecondary(serviceContextSecondary); - await listenerSecondary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadSecondary); + // Add secondary listener + var kestrelThreadSecondary = new KestrelThread(kestrelEngine); + await kestrelThreadSecondary.StartAsync(); + var listenerSecondary = new ListenerSecondary(serviceContextSecondary.TransportContext); + await listenerSecondary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadSecondary); - // Once a secondary listener is added, TCP connections start getting dispatched to it - await AssertResponseEventually(address, "Secondary", allowed: new[] { "Primary" }); + // Once a secondary listener is added, TCP connections start getting dispatched to it + await AssertResponseEventually(address, "Secondary", allowed: new[] { "Primary" }); - // TCP connections will still get round-robined to the primary listener - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + // TCP connections will still get round-robined to the primary listener + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - await listenerSecondary.DisposeAsync(); - await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); + await listenerSecondary.DisposeAsync(); + await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); - await listenerPrimary.DisposeAsync(); - await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); - } + await listenerPrimary.DisposeAsync(); + await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); } // https://github.com/aspnet/KestrelHttpServer/issues/1182 [Fact] public async Task NonListenerPipeConnectionsAreLoggedAndIgnored() { - var libuv = new Libuv(); - - var primaryTrace = new TestKestrelTrace(); + var libuv = new LibuvFunctions(); var serviceContextPrimary = new TestServiceContext { - Log = primaryTrace, - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Primary"); - }), context); - } + App = c => c.Response.WriteAsync("Primary") }; - var serviceContextSecondary = new ServiceContext + var serviceContextSecondary = new TestServiceContext { - Log = new TestKestrelTrace(), - AppLifetime = serviceContextPrimary.AppLifetime, DateHeaderValueManager = serviceContextPrimary.DateHeaderValueManager, ServerOptions = serviceContextPrimary.ServerOptions, ThreadPool = serviceContextPrimary.ThreadPool, - HttpParserFactory = frame => new KestrelHttpParser(serviceContextPrimary.Log), - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Secondary"); ; - }), context); - } + HttpParserFactory = serviceContextPrimary.HttpParserFactory, + App = c => c.Response.WriteAsync("Secondary") }; - using (var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary)) + var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); + var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary.TransportContext, listenOptions); + + var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); + var pipeMessage = Guid.NewGuid().ToByteArray(); + + // Start primary listener + var kestrelThreadPrimary = new KestrelThread(kestrelEngine); + await kestrelThreadPrimary.StartAsync(); + var listenerPrimary = new ListenerPrimary(serviceContextPrimary.TransportContext); + await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); + var address = listenOptions.ToString(); + + // Add secondary listener + var kestrelThreadSecondary = new KestrelThread(kestrelEngine); + await kestrelThreadSecondary.StartAsync(); + var listenerSecondary = new ListenerSecondary(serviceContextSecondary.TransportContext); + await listenerSecondary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadSecondary); + + // TCP Connections get round-robined + await AssertResponseEventually(address, "Secondary", allowed: new[] { "Primary" }); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + + // Create a pipe connection and keep it open without sending any data + var connectTcs = new TaskCompletionSource(); + var connectionTrace = new TestKestrelTrace(); + var pipe = new UvPipeHandle(connectionTrace); + + kestrelThreadPrimary.Post(_ => { - var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); - var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); - var pipeMessage = Guid.NewGuid().ToByteArray(); - - // Start primary listener - var kestrelThreadPrimary = new KestrelThread(kestrelEngine); - await kestrelThreadPrimary.StartAsync(); - var listenerPrimary = new ListenerPrimary(serviceContextPrimary); - await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); - var address = listenOptions.ToString(); - - // Add secondary listener - var kestrelThreadSecondary = new KestrelThread(kestrelEngine); - await kestrelThreadSecondary.StartAsync(); - var listenerSecondary = new ListenerSecondary(serviceContextSecondary); - await listenerSecondary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadSecondary); - - // TCP Connections get round-robined - await AssertResponseEventually(address, "Secondary", allowed: new[] { "Primary" }); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - - // Create a pipe connection and keep it open without sending any data - var connectTcs = new TaskCompletionSource(); - var connectionTrace = new TestKestrelTrace(); - var pipe = new UvPipeHandle(connectionTrace); - - kestrelThreadPrimary.Post(_ => - { - var connectReq = new UvConnectRequest(connectionTrace); + var connectReq = new UvConnectRequest(connectionTrace); + + pipe.Init(kestrelThreadPrimary.Loop, kestrelThreadPrimary.QueueCloseHandle); + connectReq.Init(kestrelThreadPrimary.Loop); - pipe.Init(kestrelThreadPrimary.Loop, kestrelThreadPrimary.QueueCloseHandle); - connectReq.Init(kestrelThreadPrimary.Loop); + connectReq.Connect( + pipe, + pipeName, + (req, status, ex, __) => + { + req.Dispose(); - connectReq.Connect( - pipe, - pipeName, - (req, status, ex, __) => + if (ex != null) { - req.Dispose(); - - if (ex != null) - { - connectTcs.SetException(ex); - } - else - { - connectTcs.SetResult(null); - } - }, - null); - }, (object)null); - - await connectTcs.Task; - - // TCP connections will still get round-robined between only the two listeners - Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); - - await kestrelThreadPrimary.PostAsync(_ => pipe.Dispose(), (object)null); - - // Wait up to 10 seconds for error to be logged - for (var i = 0; i < 10 && primaryTrace.Logger.TotalErrorsLogged == 0; i++) - { - await Task.Delay(100); - } + connectTcs.SetException(ex); + } + else + { + connectTcs.SetResult(null); + } + }, + null); + }, (object)null); - // Same for after the non-listener pipe connection is closed - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + await connectTcs.Task; - await listenerSecondary.DisposeAsync(); - await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); + // TCP connections will still get round-robined between only the two listeners + Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); - await listenerPrimary.DisposeAsync(); - await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); + await kestrelThreadPrimary.PostAsync(_ => pipe.Dispose(), (object)null); + + var primaryTrace = (TestKestrelTrace)serviceContextPrimary.Log; + + // Wait up to 10 seconds for error to be logged + for (var i = 0; i < 10 && primaryTrace.Logger.TotalErrorsLogged == 0; i++) + { + await Task.Delay(100); } + // Same for after the non-listener pipe connection is closed + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Secondary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + + await listenerSecondary.DisposeAsync(); + await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); + + await listenerPrimary.DisposeAsync(); + await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); + Assert.Equal(1, primaryTrace.Logger.TotalErrorsLogged); var errorMessage = primaryTrace.Logger.Messages.First(m => m.LogLevel == LogLevel.Error); - Assert.Equal(Constants.EOF, Assert.IsType(errorMessage.Exception).StatusCode); + Assert.Equal(TestConstants.EOF, Assert.IsType(errorMessage.Exception).StatusCode); } [Fact] public async Task PipeConnectionsWithWrongMessageAreLoggedAndIgnored() { - var libuv = new Libuv(); - - var primaryTrace = new TestKestrelTrace(); + var libuv = new LibuvFunctions(); var serviceContextPrimary = new TestServiceContext { - Log = primaryTrace, - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Primary"); - }), context); - } + App = c => c.Response.WriteAsync("Primary") }; - var serviceContextSecondary = new ServiceContext + var serviceContextSecondary = new TestServiceContext { - Log = new TestKestrelTrace(), - AppLifetime = serviceContextPrimary.AppLifetime, DateHeaderValueManager = serviceContextPrimary.DateHeaderValueManager, ServerOptions = serviceContextPrimary.ServerOptions, ThreadPool = serviceContextPrimary.ThreadPool, - HttpParserFactory = frame => new KestrelHttpParser(serviceContextPrimary.Log), - FrameFactory = context => - { - return new Frame(new TestApplication(c => - { - return c.Response.WriteAsync("Secondary"); - }), context); - } + HttpParserFactory = serviceContextPrimary.HttpParserFactory, + App = c => c.Response.WriteAsync("Secondary") }; - using (var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary)) - { - var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); - var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); - var pipeMessage = Guid.NewGuid().ToByteArray(); - - // Start primary listener - var kestrelThreadPrimary = new KestrelThread(kestrelEngine); - await kestrelThreadPrimary.StartAsync(); - var listenerPrimary = new ListenerPrimary(serviceContextPrimary); - await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); - var address = listenOptions.ToString(); - - // Add secondary listener with wrong pipe message - var kestrelThreadSecondary = new KestrelThread(kestrelEngine); - await kestrelThreadSecondary.StartAsync(); - var listenerSecondary = new ListenerSecondary(serviceContextSecondary); - await listenerSecondary.StartAsync(pipeName, Guid.NewGuid().ToByteArray(), listenOptions, kestrelThreadSecondary); - - // Wait up to 10 seconds for error to be logged - for (var i = 0; i < 10 && primaryTrace.Logger.TotalErrorsLogged == 0; i++) - { - await Task.Delay(100); - } + var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0)); + var kestrelEngine = new KestrelEngine(libuv, serviceContextPrimary.TransportContext, listenOptions); - // TCP Connections don't get round-robined - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); - Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + var pipeName = (libuv.IsWindows ? @"\\.\pipe\kestrel_" : "/tmp/kestrel_") + Guid.NewGuid().ToString("n"); + var pipeMessage = Guid.NewGuid().ToByteArray(); - await listenerSecondary.DisposeAsync(); - await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); + // Start primary listener + var kestrelThreadPrimary = new KestrelThread(kestrelEngine); + await kestrelThreadPrimary.StartAsync(); + var listenerPrimary = new ListenerPrimary(serviceContextPrimary.TransportContext); + await listenerPrimary.StartAsync(pipeName, pipeMessage, listenOptions, kestrelThreadPrimary); + var address = listenOptions.ToString(); - await listenerPrimary.DisposeAsync(); - await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); + // Add secondary listener with wrong pipe message + var kestrelThreadSecondary = new KestrelThread(kestrelEngine); + await kestrelThreadSecondary.StartAsync(); + var listenerSecondary = new ListenerSecondary(serviceContextSecondary.TransportContext); + await listenerSecondary.StartAsync(pipeName, Guid.NewGuid().ToByteArray(), listenOptions, kestrelThreadSecondary); + + var primaryTrace = (TestKestrelTrace)serviceContextPrimary.Log; + + // Wait up to 10 seconds for error to be logged + for (var i = 0; i < 10 && primaryTrace.Logger.TotalErrorsLogged == 0; i++) + { + await Task.Delay(100); } + // TCP Connections don't get round-robined + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + Assert.Equal("Primary", await HttpClientSlim.GetStringAsync(address)); + + await listenerSecondary.DisposeAsync(); + await kestrelThreadSecondary.StopAsync(TimeSpan.FromSeconds(1)); + + await listenerPrimary.DisposeAsync(); + await kestrelThreadPrimary.StopAsync(TimeSpan.FromSeconds(1)); + Assert.Equal(1, primaryTrace.Logger.TotalErrorsLogged); var errorMessage = primaryTrace.Logger.Messages.First(m => m.LogLevel == LogLevel.Error); Assert.IsType(errorMessage.Exception); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs index fcb7fdbcd..ee9cb5521 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs @@ -281,7 +281,7 @@ public async Task CopyToAsyncDoesNotCopyBlocks(FrameRequestHeaders headers, stri // The block returned by IncomingStart always has at least 2048 available bytes, // so no need to bounds check in this test. - var socketInput = input.FrameContext.Input; + var socketInput = input.Pipe; var bytes = Encoding.ASCII.GetBytes(data[0]); var buffer = socketInput.Writer.Alloc(2048); ArraySegment block; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs index d34e0c02a..b9ae2707d 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs @@ -7,9 +7,12 @@ using System.Net.Sockets; using System.Runtime.InteropServices; using System.Threading; +using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; +using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; @@ -17,13 +20,12 @@ namespace Microsoft.AspNetCore.Server.KestrelTests { public class MultipleLoopTests { - private readonly Libuv _uv; + private readonly LibuvFunctions _uv; private readonly IKestrelTrace _logger; public MultipleLoopTests() { - var engine = new KestrelEngine(new TestServiceContext()); - _uv = engine.Libuv; - _logger = engine.Log; + _uv = new LibuvFunctions(); + _logger = new TestKestrelTrace(); } [Fact] @@ -72,7 +74,7 @@ public void ServerPipeListenForConnections() var writeRequest = new UvWriteReq(new KestrelTrace(new TestKestrelTrace())); writeRequest.Init(loop); - + await writeRequest.WriteAsync( serverConnectionPipe, ReadableBuffer.Create(new byte[] { 1, 2, 3, 4 })); @@ -101,7 +103,7 @@ await writeRequest.WriteAsync( (handle2, cb, state2) => buf, (handle2, status2, state2) => { - if (status2 == Constants.EOF) + if (status2 == TestConstants.EOF) { clientConnectionPipe.Dispose(); } @@ -202,7 +204,7 @@ public void ServerPipeDispatchConnections() (handle2, cb, state2) => buf, (handle2, status2, state2) => { - if (status2 == Constants.EOF) + if (status2 == TestConstants.EOF) { clientConnectionPipe.Dispose(); return; @@ -216,7 +218,7 @@ public void ServerPipeDispatchConnections() (handle3, cb, state3) => buf2, (handle3, status3, state3) => { - if (status3 == Constants.EOF) + if (status3 == TestConstants.EOF) { clientConnectionTcp.Dispose(); } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs index 2cf84068c..479943863 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/NetworkingTests.cs @@ -20,13 +20,12 @@ namespace Microsoft.AspNetCore.Server.KestrelTests /// public class NetworkingTests { - private readonly Libuv _uv; + private readonly LibuvFunctions _uv; private readonly IKestrelTrace _logger; public NetworkingTests() { - var engine = new KestrelEngine(new TestServiceContext()); - _uv = engine.Libuv; - _logger = engine.Log; + _uv = new LibuvFunctions(); + _logger = new TestKestrelTrace(); } [Fact] @@ -171,7 +170,7 @@ public async Task SocketCanReadAndWrite() var req = new UvWriteReq(new KestrelTrace(new TestKestrelTrace())); req.Init(loop); var block = ReadableBuffer.Create(new byte[] { 65, 66, 67, 68, 69 }); - + await req.WriteAsync( tcp2, block); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs new file mode 100644 index 000000000..a937fede3 --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs @@ -0,0 +1,73 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.IO.Pipelines; +using Microsoft.AspNetCore.Server.Kestrel.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; +using Microsoft.AspNetCore.Testing; +using Moq; +using Xunit; + +namespace Microsoft.AspNetCore.Server.KestrelTests +{ + public class PipeOptionsTests + { + [Theory] + [InlineData(10, 10, 10)] + [InlineData(0, 1, 1)] + [InlineData(null, 0, 0)] + public void OutputPipeOptionsConfiguredCorrectly(long? maxResponseBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) + { + var serviceContext = new TestServiceContext(); + serviceContext.ServerOptions.Limits.MaxResponseBufferSize = maxResponseBufferSize; + serviceContext.ThreadPool = new LoggingThreadPool(null); + + var connectionHandler = new ConnectionHandler(serviceContext, application: null); + var mockScheduler = Mock.Of(); + var outputPipeOptions = connectionHandler.GetOutputPipeOptions(mockScheduler); + + Assert.Equal(expectedMaximumSizeLow, outputPipeOptions.MaximumSizeLow); + Assert.Equal(expectedMaximumSizeHigh, outputPipeOptions.MaximumSizeHigh); + Assert.Same(mockScheduler, outputPipeOptions.ReaderScheduler); + Assert.Same(serviceContext.ThreadPool, outputPipeOptions.WriterScheduler); + } + + [Theory] + [InlineData(10, 10, 10)] + [InlineData(null, 0, 0)] + public void LibuvInputPipeOptionsConfiguredCorrectly(long? maxRequestBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) + { + var serviceContext = new TestServiceContext(); + serviceContext.ServerOptions.Limits.MaxRequestBufferSize = maxRequestBufferSize; + serviceContext.ThreadPool = new LoggingThreadPool(null); + + var connectionHandler = new ConnectionHandler(serviceContext, application: null); + var mockScheduler = Mock.Of(); + var inputPipeOptions = connectionHandler.GetInputPipeOptions(mockScheduler); + + Assert.Equal(expectedMaximumSizeLow, inputPipeOptions.MaximumSizeLow); + Assert.Equal(expectedMaximumSizeHigh, inputPipeOptions.MaximumSizeHigh); + Assert.Same(serviceContext.ThreadPool, inputPipeOptions.ReaderScheduler); + Assert.Same(mockScheduler, inputPipeOptions.WriterScheduler); + } + + [Theory] + [InlineData(10, 10, 10)] + [InlineData(null, 0, 0)] + public void AdaptedPipeOptionsConfiguredCorrectly(long? maxRequestBufferSize, long expectedMaximumSizeLow, long expectedMaximumSizeHigh) + { + var serviceContext = new TestServiceContext(); + serviceContext.ServerOptions.Limits.MaxRequestBufferSize = maxRequestBufferSize; + + var connectionLifetime = new ConnectionLifetime(new ConnectionLifetimeContext + { + ServiceContext = serviceContext + }); + + Assert.Equal(expectedMaximumSizeLow, connectionLifetime.AdaptedPipeOptions.MaximumSizeLow); + Assert.Equal(expectedMaximumSizeHigh, connectionLifetime.AdaptedPipeOptions.MaximumSizeHigh); + Assert.Same(InlineScheduler.Default, connectionLifetime.AdaptedPipeOptions.ReaderScheduler); + Assert.Same(InlineScheduler.Default, connectionLifetime.AdaptedPipeOptions.WriterScheduler); + } + } +} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/SocketOutputTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/SocketOutputTests.cs index e1257a8dd..3232ef028 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/SocketOutputTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/SocketOutputTests.cs @@ -15,8 +15,12 @@ namespace Microsoft.AspNetCore.Server.KestrelTests { - public class SocketOutputTests + public class SocketOutputTests : IDisposable { + private readonly PipeFactory _pipeFactory; + private readonly MockLibuv _mockLibuv; + private readonly KestrelThread _kestrelThread; + public static TheoryData MaxResponseBufferSizeData => new TheoryData { new KestrelServerOptions().Limits.MaxResponseBufferSize, 0, 1024, 1024 * 1024, null @@ -27,37 +31,41 @@ public class SocketOutputTests (int)new KestrelServerOptions().Limits.MaxResponseBufferSize, 1024, (1024 * 1024) + 1 }; + public SocketOutputTests() + { + _pipeFactory = new PipeFactory(); + _mockLibuv = new MockLibuv(); + + var kestrelEngine = new KestrelEngine(_mockLibuv, new TestServiceContext().TransportContext, new ListenOptions(0)); + _kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); + _kestrelThread.StartAsync().Wait(); + } + + public void Dispose() + { + _kestrelThread.StopAsync(TimeSpan.FromSeconds(1)).Wait(); + _pipeFactory.Dispose(); + } + [Theory] [MemberData(nameof(MaxResponseBufferSizeData))] public async Task CanWrite1MB(long? maxResponseBufferSize) { // This test was added because when initially implementing write-behind buffering in // SocketOutput, the write callback would never be invoked for writes larger than - // _maxBytesPreCompleted even after the write actually completed. + // maxResponseBufferSize even after the write actually completed. - // Arrange - var mockLibuv = new MockLibuv(); - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + // ConnectionHandler will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. + // This is verified in PipeOptionsTests.OutputPipeOptionsConfiguredCorrectly. + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - - // ListenerContext will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. - // This is verified in ListenerContextTests.LibuvOutputPipeOptionsConfiguredCorrectly. - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize ?? 0, - MaximumSizeLow = maxResponseBufferSize ?? 0, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize ?? 0, + MaximumSizeLow = maxResponseBufferSize ?? 0, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { // At least one run of this test should have a MaxResponseBufferSize < 1 MB. var bufferSize = 1024 * 1024; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize); @@ -67,9 +75,6 @@ public async Task CanWrite1MB(long? maxResponseBufferSize) // Assert await writeTask.TimeoutAfter(TimeSpan.FromSeconds(5)); - - // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); } } @@ -79,36 +84,23 @@ public async Task NullMaxResponseBufferSizeAllowsUnlimitedBuffer() var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + // ConnectionHandler will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. + // This is verified in PipeOptionsTests.OutputPipeOptionsConfiguredCorrectly. + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - - // ListenerContext will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. - // This is verified in ListenerContextTests.LibuvOutputPipeOptionsConfiguredCorrectly. - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = 0, - MaximumSizeLow = 0, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = 0, + MaximumSizeLow = 0, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { // Don't want to allocate anything too huge for perf. This is at least larger than the default buffer. var bufferSize = 1024 * 1024; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize); @@ -120,14 +112,14 @@ public async Task NullMaxResponseBufferSizeAllowsUnlimitedBuffer() await writeTask.TimeoutAfter(TimeSpan.FromSeconds(5)); // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); + socketOutput.Dispose(); // Wait for all writes to complete so the completeQueue isn't modified during enumeration. - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; foreach (var triggerCompleted in completeQueue) { - await kestrelThread.PostAsync(cb => cb(0), triggerCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerCompleted); } } } @@ -138,36 +130,23 @@ public async Task ZeroMaxResponseBufferSizeDisablesBuffering() var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + // ConnectionHandler will set MaximumSizeHigh/Low to 1 when MaxResponseBufferSize is zero. + // This is verified in PipeOptionsTests.OutputPipeOptionsConfiguredCorrectly. + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - - // ListenerContext will set MaximumSizeHigh/Low to 1 when MaxResponseBufferSize is zero. - // This is verified in ListenerContextTests.LibuvOutputPipeOptionsConfiguredCorrectly. - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = 1, - MaximumSizeLow = 1, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = 1, + MaximumSizeLow = 1, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { var bufferSize = 1; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize); @@ -178,24 +157,24 @@ public async Task ZeroMaxResponseBufferSizeDisablesBuffering() Assert.False(writeTask.IsCompleted); // Act - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; // Finishing the write should allow the task to complete. Assert.True(completeQueue.TryDequeue(out var triggerNextCompleted)); - await kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); // Assert await writeTask.TimeoutAfter(TimeSpan.FromSeconds(5)); // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); + socketOutput.Dispose(); // Wait for all writes to complete so the completeQueue isn't modified during enumeration. - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; foreach (var triggerCompleted in completeQueue) { - await kestrelThread.PostAsync(cb => cb(0), triggerCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerCompleted); } } } @@ -207,33 +186,21 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesAreAlreadyBuffere var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize, - MaximumSizeLow = maxResponseBufferSize, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize, + MaximumSizeLow = maxResponseBufferSize, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { var bufferSize = maxResponseBufferSize - 1; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize); @@ -246,7 +213,7 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesAreAlreadyBuffere // Act var writeTask2 = socketOutput.WriteAsync(buffer, default(CancellationToken)); - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; // Assert // Too many bytes are already pre-completed for the second write to pre-complete. @@ -254,20 +221,20 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesAreAlreadyBuffere // Act Assert.True(completeQueue.TryDequeue(out var triggerNextCompleted)); - await kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); // Finishing the first write should allow the second write to pre-complete. await writeTask2.TimeoutAfter(TimeSpan.FromSeconds(5)); // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); + socketOutput.Dispose(); // Wait for all writes to complete so the completeQueue isn't modified during enumeration. - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; foreach (var triggerCompleted in completeQueue) { - await kestrelThread.PostAsync(cb => cb(0), triggerCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerCompleted); } } } @@ -279,33 +246,21 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesIncludingNonImmed var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize, - MaximumSizeLow = maxResponseBufferSize, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize, + MaximumSizeLow = maxResponseBufferSize, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { var bufferSize = maxResponseBufferSize / 2; var data = new byte[bufferSize]; var halfWriteBehindBuffer = new ArraySegment(data, 0, bufferSize); @@ -316,11 +271,11 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesIncludingNonImmed // Assert // The first write should pre-complete since it is <= _maxBytesPreCompleted. Assert.Equal(TaskStatus.RanToCompletion, writeTask1.Status); - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; Assert.NotEmpty(completeQueue); // Add more bytes to the write-behind buffer to prevent the next write from - socketOutput.Write((writableBuffer, state) => + ((ISocketOutput)socketOutput).Write((writableBuffer, state) => { writableBuffer.Write(state); }, @@ -336,7 +291,7 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesIncludingNonImmed // Drain the write queue while (completeQueue.TryDequeue(out var triggerNextCompleted)) { - await kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); } var timeout = TimeSpan.FromSeconds(5); @@ -345,9 +300,6 @@ public async Task WritesDontCompleteImmediatelyWhenTooManyBytesIncludingNonImmed await writeTask3.TimeoutAfter(timeout); Assert.Empty(completeQueue); - - // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); } } @@ -358,37 +310,25 @@ public async Task FailedWriteCompletesOrCancelsAllPendingTasks(int maxResponseBu var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + using (var mockConnection = new MockConnection()) { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); + var abortedSource = mockConnection.RequestAbortedSource; - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - - using (var mockConnection = new MockConnection()) + var pipeOptions = new PipeOptions { - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize, - MaximumSizeLow = maxResponseBufferSize, - }; - var pipe = factory.Create(pipeOptions); - var abortedSource = mockConnection.RequestAbortedSource; - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, mockConnection, "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize, + MaximumSizeLow = maxResponseBufferSize, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions, mockConnection)) + { var bufferSize = maxResponseBufferSize - 1; var data = new byte[bufferSize]; @@ -408,7 +348,7 @@ public async Task FailedWriteCompletesOrCancelsAllPendingTasks(int maxResponseBu var task3Canceled = socketOutput.WriteAsync(fullBuffer, cancellationToken: abortedSource.Token); // Give time for tasks to percolate - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; // Second task is not completed Assert.False(task2Success.IsCompleted); @@ -420,11 +360,10 @@ public async Task FailedWriteCompletesOrCancelsAllPendingTasks(int maxResponseBu Assert.False(task3Canceled.IsCanceled); Assert.False(task3Canceled.IsFaulted); - // Cause all writes to fail while (completeQueue.TryDequeue(out var triggerNextCompleted)) { - await kestrelThread.PostAsync(cb => cb(-1), triggerNextCompleted); + await _kestrelThread.PostAsync(cb => cb(-1), triggerNextCompleted); } // Second task is now completed @@ -436,9 +375,6 @@ public async Task FailedWriteCompletesOrCancelsAllPendingTasks(int maxResponseBu // Assert.True(task3Canceled.IsCanceled); Assert.True(abortedSource.IsCancellationRequested); - - // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); } } } @@ -450,33 +386,21 @@ public async Task WritesDontGetCompletedTooQuickly(int maxResponseBufferSize) var completeQueue = new ConcurrentQueue>(); // Arrange - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - completeQueue.Enqueue(triggerCompleted); - return 0; - } + completeQueue.Enqueue(triggerCompleted); + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize, - MaximumSizeLow = maxResponseBufferSize, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize, + MaximumSizeLow = maxResponseBufferSize, + }; + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { var bufferSize = maxResponseBufferSize - 1; var buffer = new ArraySegment(new byte[bufferSize], 0, bufferSize); @@ -485,7 +409,7 @@ public async Task WritesDontGetCompletedTooQuickly(int maxResponseBufferSize) // Assert // The first write should pre-complete since it is < _maxBytesPreCompleted. - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; Assert.Equal(TaskStatus.RanToCompletion, writeTask1.Status); Assert.NotEmpty(completeQueue); @@ -496,7 +420,7 @@ public async Task WritesDontGetCompletedTooQuickly(int maxResponseBufferSize) // Drain the write queue while (completeQueue.TryDequeue(out var triggerNextCompleted)) { - await kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); + await _kestrelThread.PostAsync(cb => cb(0), triggerNextCompleted); } var timeout = TimeSpan.FromSeconds(5); @@ -506,9 +430,6 @@ public async Task WritesDontGetCompletedTooQuickly(int maxResponseBufferSize) // https://github.com/aspnet/KestrelHttpServer/issues/356 await writeTask2.TimeoutAfter(timeout); await writeTask3.TimeoutAfter(timeout); - - // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); } } @@ -519,39 +440,26 @@ public async Task WritesAreAggregated(long? maxResponseBufferSize) var writeCalled = false; var writeCount = 0; - var mockLibuv = new MockLibuv + _mockLibuv.OnWrite = (socket, buffers, triggerCompleted) => { - OnWrite = (socket, buffers, triggerCompleted) => - { - writeCount++; - triggerCompleted(0); - writeCalled = true; - return 0; - } + writeCount++; + triggerCompleted(0); + writeCalled = true; + return 0; }; - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + // ConnectionHandler will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. + // This is verified in PipeOptionsTests.OutputPipeOptionsConfiguredCorrectly. + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - - // ListenerContext will set MaximumSizeHigh/Low to zero when MaxResponseBufferSize is null. - // This is verified in ListenerContextTests.LibuvOutputPipeOptionsConfiguredCorrectly. - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - MaximumSizeHigh = maxResponseBufferSize ?? 0, - MaximumSizeLow = maxResponseBufferSize ?? 0, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, new MockConnection(), "0", trace); + ReaderScheduler = _kestrelThread, + MaximumSizeHigh = maxResponseBufferSize ?? 0, + MaximumSizeLow = maxResponseBufferSize ?? 0, + }; - mockLibuv.KestrelThreadBlocker.Reset(); + using (var socketOutput = CreateSocketOutput(pipeOptions)) + { + _mockLibuv.KestrelThreadBlocker.Reset(); var buffer = new ArraySegment(new byte[1]); @@ -560,66 +468,67 @@ public async Task WritesAreAggregated(long? maxResponseBufferSize) var ignore = socketOutput.WriteAsync(buffer, CancellationToken.None); ignore = socketOutput.WriteAsync(buffer, CancellationToken.None); - mockLibuv.KestrelThreadBlocker.Set(); + _mockLibuv.KestrelThreadBlocker.Set(); - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; Assert.True(writeCalled); writeCalled = false; // Write isn't called twice after the thread is unblocked - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; Assert.False(writeCalled); // One call to ScheduleWrite - Assert.Equal(1, mockLibuv.PostCount); + Assert.Equal(1, _mockLibuv.PostCount); // One call to uv_write Assert.Equal(1, writeCount); - - // Cleanup - socketOutput.End(ProduceEndType.SocketDisconnect); } } [Fact] public async Task AllocCommitCanBeCalledAfterConnectionClose() { - var mockLibuv = new MockLibuv(); - - using (var kestrelEngine = new KestrelEngine(mockLibuv, new TestServiceContext())) - using (var factory = new PipeFactory()) + var pipeOptions = new PipeOptions { - var kestrelThread = new KestrelThread(kestrelEngine, maxLoops: 1); - kestrelEngine.Threads.Add(kestrelThread); - await kestrelThread.StartAsync(); - - var socket = new MockSocket(mockLibuv, kestrelThread.Loop.ThreadId, new TestKestrelTrace()); - var trace = new KestrelTrace(new TestKestrelTrace()); - var connection = new MockConnection(); - var pipeOptions = new PipeOptions - { - ReaderScheduler = kestrelThread, - }; - var pipe = factory.Create(pipeOptions); - var socketOutput = new SocketOutput(pipe, kestrelThread, socket, connection, "0", trace); + ReaderScheduler = _kestrelThread, + }; + using (var connection = new MockConnection()) + { + var socketOutput = CreateSocketOutput(pipeOptions, connection); // Close SocketOutput - socketOutput.End(ProduceEndType.SocketDisconnect); + socketOutput.Dispose(); - await mockLibuv.OnPostTask; + await _mockLibuv.OnPostTask; Assert.Equal(TaskStatus.RanToCompletion, connection.SocketClosed.Status); var called = false; - socketOutput.Write((buffer, state) => + ((ISocketOutput)socketOutput).Write((buffer, state) => { called = true; - }, + }, null); Assert.False(called); } } + + private SocketOutputProducer CreateSocketOutput(PipeOptions pipeOptions, MockConnection connection = null) + { + var pipe = _pipeFactory.Create(pipeOptions); + var serviceContext = new TestServiceContext(); + var trace = serviceContext.Log; + + var frame = new Frame(null, new FrameContext { ServiceContext = serviceContext }); + + var socket = new MockSocket(_mockLibuv, _kestrelThread.Loop.ThreadId, new TestKestrelTrace()); + var socketOutput = new SocketOutputProducer(pipe.Writer, frame, "0", trace); + var consumer = new SocketOutputConsumer(pipe.Reader, _kestrelThread, socket, connection ?? new MockConnection(), "0", trace); + + return socketOutput; + } } } \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs new file mode 100644 index 000000000..d7c450028 --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs @@ -0,0 +1,67 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.IO.Pipelines; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Xunit; + +namespace Microsoft.AspNetCore.Server.KestrelTests.TestHelpers +{ + public class MockConnectionHandler : IConnectionHandler, IDisposable + { + private readonly PipeFactory _pipeFactory; + + public MockConnectionHandler() + { + _pipeFactory = new PipeFactory(); + } + + public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler) + { + Assert.Null(Input); + + Input = _pipeFactory.Create(); + Output = _pipeFactory.Create(); + + return new TestConnectionContext + { + Input = Input.Writer, + Output = Output.Reader, + }; + } + + public IPipe Input { get; private set; } + public IPipe Output { get; private set; } + + public void Dispose() + { + Input?.Writer.Complete(); + _pipeFactory.Dispose(); + } + + private class TestConnectionContext : IConnectionContext + { + public string ConnectionId { get; } + public IPipeWriter Input { get; set; } + public IPipeReader Output { get; set; } + + public Task StopAsync() + { + throw new NotImplementedException(); + } + + public void Abort(Exception ex) + { + throw new NotImplementedException(); + } + + public void SetBadRequestState(RequestRejectionReason reason) + { + throw new NotImplementedException(); + } + } + } +} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/TestConstants.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/TestConstants.cs new file mode 100644 index 000000000..25f213c2a --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/TestConstants.cs @@ -0,0 +1,10 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace Microsoft.AspNetCore.Server.KestrelTests.TestHelpers +{ + public class TestConstants + { + public const int EOF = -4095; + } +} diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs index be520d99f..2b3f64d4e 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs @@ -15,47 +15,35 @@ namespace Microsoft.AspNetCore.Server.KestrelTests { - class TestInput : IConnectionControl, IFrameControl, IDisposable + class TestInput : ITimeoutControl, IFrameControl, IDisposable { private MemoryPool _memoryPool; private PipeFactory _pipelineFactory; public TestInput() { - var trace = new KestrelTrace(new TestKestrelTrace()); - var serviceContext = new ServiceContext - { - DateHeaderValueManager = new DateHeaderValueManager(), - ServerOptions = new KestrelServerOptions(), - HttpParserFactory = frame => new KestrelHttpParser(trace), - }; - var listenerContext = new ListenerContext(serviceContext) - { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) - }; - var connectionContext = new ConnectionContext(listenerContext) - { - ConnectionControl = this - }; - var context = new Frame(null, connectionContext); - FrameContext = context; + var innerContext = new FrameContext { ServiceContext = new TestServiceContext() }; + + FrameContext = new Frame(null, innerContext); FrameContext.FrameControl = this; - FrameContext.ConnectionContext.ListenerContext.ServiceContext.Log = trace; _memoryPool = new MemoryPool(); _pipelineFactory = new PipeFactory(); - FrameContext.Input = _pipelineFactory.Create(); ; + Pipe = _pipelineFactory.Create(); + FrameContext.Input = Pipe.Reader; } + public IPipe Pipe { get; } + public Frame FrameContext { get; set; } public void Add(string text, bool fin = false) { var data = Encoding.ASCII.GetBytes(text); - FrameContext.Input.Writer.WriteAsync(data).Wait(); + Pipe.Writer.WriteAsync(data).Wait(); if (fin) { - FrameContext.Input.Writer.Complete(); + Pipe.Writer.Complete(); } } diff --git a/test/shared/TestServer.cs b/test/shared/TestServer.cs index f9bb65b48..1293d46ed 100644 --- a/test/shared/TestServer.cs +++ b/test/shared/TestServer.cs @@ -44,6 +44,7 @@ public TestServer(RequestDelegate app, TestServiceContext context, ListenOptions _listenOptions = listenOptions; Context = context; + Context.App = app; Context.TransportContext.ConnectionHandler = new ConnectionHandler(Context, new DummyApplication(app, httpContextFactory)); try diff --git a/test/shared/TestServiceContext.cs b/test/shared/TestServiceContext.cs index 1672d0d7d..f7083c93d 100644 --- a/test/shared/TestServiceContext.cs +++ b/test/shared/TestServiceContext.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; @@ -13,6 +14,8 @@ namespace Microsoft.AspNetCore.Testing { public class TestServiceContext : ServiceContext { + private RequestDelegate _app; + public TestServiceContext() { Log = new TestKestrelTrace(); @@ -40,5 +43,18 @@ public TestServiceContext() public string DateHeaderValue { get; } public LibuvTransportContext TransportContext { get; } + + public RequestDelegate App + { + get + { + return _app; + } + set + { + TransportContext.ConnectionHandler = new ConnectionHandler(this, new DummyApplication(value)); + _app = value; + } + } } } From 236fea541346f16d3f2b91b5f724090e415f2778 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 02:28:58 -0700 Subject: [PATCH 14/20] WIP 12 --- .../FrameParsingOverheadBenchmark.cs | 17 ++++++--- .../FrameWritingBenchmark.cs | 18 +++++----- .../Mocks/MockConnectionControl.cs | 17 --------- .../Mocks/MockConnectionInformation.cs | 35 +++++++++++++++++++ .../RequestParsingBenchmark.cs | 18 ++++++---- .../ResponseHeaderCollectionBenchmark.cs | 19 +++++++--- .../ResponseHeadersWritingBenchmark.cs | 19 +++++----- test/shared/TestServiceContext.cs | 2 +- 8 files changed, 91 insertions(+), 54 deletions(-) delete mode 100644 test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionControl.cs create mode 100644 test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameParsingOverheadBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameParsingOverheadBenchmark.cs index 2b5065707..a3d009263 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameParsingOverheadBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameParsingOverheadBenchmark.cs @@ -5,8 +5,8 @@ using System.IO.Pipelines; using System.Text; using BenchmarkDotNet.Attributes; +using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.Server.Kestrel.Performance { @@ -21,11 +21,18 @@ public class FrameParsingOverheadBenchmark [Setup] public void Setup() { - var connectionContext = new MockConnection(); - connectionContext.ListenerContext.ServiceContext.HttpParserFactory = frame => NullParser.Instance; - connectionContext.ListenerContext.ServiceContext.ServerOptions = new KestrelServerOptions(); + var serviceContext = new ServiceContext + { + HttpParserFactory = _ => NullParser.Instance, + ServerOptions = new KestrelServerOptions() + }; + var frameContext = new FrameContext + { + ServiceContext = serviceContext, + ConnectionInformation = new MockConnectionInformation() + }; - _frame = new Frame(application: null, context: connectionContext); + _frame = new Frame(application: null, frameContext: frameContext); } [Benchmark(Baseline = true, OperationsPerInvoke = InnerLoopCount)] diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs index ffb4e95b6..f7945b013 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs @@ -93,21 +93,21 @@ private TestFrame MakeFrame() { DateHeaderValueManager = new DateHeaderValueManager(), ServerOptions = new KestrelServerOptions(), - Log = new MockTrace() + Log = new MockTrace(), + HttpParserFactory = f => new KestrelHttpParser(log: null) }; - var listenerContext = new ListenerContext(serviceContext) + var frameContext = new FrameContext { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) + ServiceContext = serviceContext, + ConnectionInformation = new MockConnectionInformation() }; - var connectionContext = new ConnectionContext(listenerContext) + + var frame = new TestFrame(application: null, context: frameContext) { - Input = socketInput, - Output = new MockSocketOutput(), - ConnectionControl = new MockConnectionControl() + Input = socketInput.Reader, + Output = new MockSocketOutput() }; - connectionContext.ListenerContext.ServiceContext.HttpParserFactory = f => new Internal.Http.KestrelHttpParser(log: null); - var frame = new TestFrame(application: null, context: connectionContext); frame.Reset(); frame.InitializeHeaders(); diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionControl.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionControl.cs deleted file mode 100644 index 14e53e3f5..000000000 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionControl.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; - -namespace Microsoft.AspNetCore.Server.Kestrel.Performance -{ - public class MockConnectionControl : IConnectionControl - { - public void CancelTimeout() { } - public void End(ProduceEndType endType) { } - public void Pause() { } - public void ResetTimeout(long milliseconds, TimeoutAction timeoutAction) { } - public void Resume() { } - public void SetTimeout(long milliseconds, TimeoutAction timeoutAction) { } - } -} diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs new file mode 100644 index 000000000..519054515 --- /dev/null +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs @@ -0,0 +1,35 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Net; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; +using Microsoft.AspNetCore.Server.Kestrel.Transport; + +namespace Microsoft.AspNetCore.Server.Kestrel.Performance +{ + public class MockConnectionInformation : IConnectionInformation + { + public ListenOptions ListenOptions { get; } + + public IPEndPoint RemoteEndPoint { get; } + public IPEndPoint LocalEndPoint { get; } + + public ITimeoutControl TimeoutControl { get; } = new MockTimeoutControl(); + + private class MockTimeoutControl : ITimeoutControl + { + public void CancelTimeout() + { + } + + public void ResetTimeout(long milliseconds, TimeoutAction timeoutAction) + { + } + + public void SetTimeout(long milliseconds, TimeoutAction timeoutAction) + { + } + } + } +} diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/RequestParsingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/RequestParsingBenchmark.cs index 8e29354ee..68da390b7 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/RequestParsingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/RequestParsingBenchmark.cs @@ -1,11 +1,10 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.IO.Pipelines; using BenchmarkDotNet.Attributes; +using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.Server.Kestrel.Performance { @@ -21,11 +20,18 @@ public class RequestParsingBenchmark [Setup] public void Setup() { - var connectionContext = new MockConnection(); - connectionContext.ListenerContext.ServiceContext.HttpParserFactory = frame => new KestrelHttpParser(frame.ConnectionContext.ListenerContext.ServiceContext.Log); - connectionContext.ListenerContext.ServiceContext.ServerOptions = new KestrelServerOptions(); + var serviceContext = new ServiceContext + { + HttpParserFactory = f => new KestrelHttpParser(f.ServiceContext.Log), + ServerOptions = new KestrelServerOptions() + }; + var frameContext = new FrameContext + { + ServiceContext = serviceContext, + ConnectionInformation = new MockConnectionInformation() + }; - Frame = new Frame(application: null, context: connectionContext); + Frame = new Frame(application: null, frameContext: frameContext); PipelineFactory = new PipeFactory(); Pipe = PipelineFactory.Create(); } diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs index f8668024a..a437d753f 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs @@ -6,8 +6,8 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Testing; using BenchmarkDotNet.Attributes; +using Microsoft.AspNetCore.Server.Kestrel.Internal; namespace Microsoft.AspNetCore.Server.Kestrel.Performance { @@ -167,10 +167,19 @@ private void Unknown(int count) [Setup] public void Setup() { - var connectionContext = new MockConnection(); - connectionContext.ListenerContext.ServiceContext.HttpParserFactory = f => new KestrelHttpParser(f.ConnectionContext.ListenerContext.ServiceContext.Log); - connectionContext.ListenerContext.ServiceContext.ServerOptions = new KestrelServerOptions(); - var frame = new Frame(application: null, context: connectionContext); + var serviceContext = new ServiceContext + { + HttpParserFactory = f => new KestrelHttpParser(f.ServiceContext.Log), + ServerOptions = new KestrelServerOptions() + }; + var frameContext = new FrameContext + { + ServiceContext = serviceContext, + ConnectionInformation = new MockConnectionInformation() + }; + + var frame = new Frame(application: null, frameContext: frameContext); + frame.Reset(); frame.InitializeHeaders(); _responseHeadersDirect = (FrameResponseHeaders)frame.ResponseHeaders; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs index 642ad4e57..825e379d2 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs @@ -120,25 +120,22 @@ public void Setup() { DateHeaderValueManager = new DateHeaderValueManager(), ServerOptions = new KestrelServerOptions(), - Log = new MockTrace() + Log = new MockTrace(), + HttpParserFactory = f => new KestrelHttpParser(log: null) }; - var listenerContext = new ListenerContext(serviceContext) + var frameContext = new FrameContext { - ListenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 5000)) + ServiceContext = serviceContext, + ConnectionInformation = new MockConnectionInformation() }; - var connectionContext = new ConnectionContext(listenerContext) + var frame = new TestFrame(application: null, context: frameContext) { - Input = input, - Output = socketOutput, - ConnectionControl = new MockConnectionControl() + Input = input.Reader, + Output = socketOutput }; - connectionContext.ListenerContext.ServiceContext.HttpParserFactory = f => new KestrelHttpParser(log: null); - connectionContext.ListenerContext.ServiceContext.ServerOptions = new KestrelServerOptions(); - - var frame = new TestFrame(application: null, context: connectionContext); frame.Reset(); frame.InitializeHeaders(); diff --git a/test/shared/TestServiceContext.cs b/test/shared/TestServiceContext.cs index f7083c93d..40489f689 100644 --- a/test/shared/TestServiceContext.cs +++ b/test/shared/TestServiceContext.cs @@ -22,7 +22,7 @@ public TestServiceContext() ThreadPool = new LoggingThreadPool(Log); DateHeaderValueManager = new DateHeaderValueManager(systemClock: new MockSystemClock()); DateHeaderValue = DateHeaderValueManager.GetDateHeaderValues().String; - HttpParserFactory = frame => new KestrelHttpParser(Log); + HttpParserFactory = frame => new KestrelHttpParser(frame.ServiceContext.Log); ServerOptions = new KestrelServerOptions { AddServerHeader = false From 9c2f5d95ef04400e7d41e702cf16f3b35a071c43 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 10:47:32 -0700 Subject: [PATCH 15/20] WIP 13 --- .../Internal/ConnectionHandler.cs | 25 +++++++------------ .../KestrelServer.cs | 3 --- .../Transport/IConnectionHandler.cs | 2 +- .../Transport/IConnectionInformation.cs | 6 ++++- .../Internal/Http/Connection.cs | 2 +- .../Internal/Http/ConnectionContext.cs | 10 +++++--- .../Internal/Http/SocketOutputConsumer.cs | 4 --- .../Internal/Infrastructure/KestrelThread.cs | 6 ++--- .../Mocks/MockConnectionInformation.cs | 7 ++++-- .../FrameTests.cs | 3 +++ 10 files changed, 33 insertions(+), 35 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index b50800a65..776e77411 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal { - public class ConnectionHandler : IConnectionHandler, IDisposable + public class ConnectionHandler : IConnectionHandler { // Base32 encoding - in ascii sort order for easy text based sorting private static readonly string _encode32Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUV"; @@ -22,19 +22,17 @@ public class ConnectionHandler : IConnectionHandler, IDisposable private readonly ServiceContext _serviceContext; private readonly IHttpApplication _application; - private readonly PipeFactory _pipeFactory; public ConnectionHandler(ServiceContext serviceContext, IHttpApplication application) { _serviceContext = serviceContext; _application = application; - _pipeFactory = new PipeFactory(); } - public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler) + public IConnectionContext OnConnection(IConnectionInformation connectionInfo) { - var inputPipe = _pipeFactory.Create(GetInputPipeOptions(inputWriterScheduler)); - var outputPipe = _pipeFactory.Create(GetOutputPipeOptions(outputReaderScheduler)); + var inputPipe = connectionInfo.PipeFactory.Create(GetInputPipeOptions(connectionInfo.InputWriterScheduler)); + var outputPipe = connectionInfo.PipeFactory.Create(GetOutputPipeOptions(connectionInfo.OutputWriterScheduler)); var connectionId = GenerateConnectionId(Interlocked.Increment(ref _lastConnectionId)); @@ -54,7 +52,7 @@ public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IS { ConnectionId = connectionId, ServiceContext = _serviceContext, - PipeFactory = _pipeFactory, + PipeFactory = connectionInfo.PipeFactory, ConnectionAdapters = connectionInfo.ListenOptions.ConnectionAdapters, Frame = frame, Input = inputPipe, @@ -70,23 +68,18 @@ public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IS return connection; } - public void Dispose() - { - _pipeFactory.Dispose(); - } - // Internal for testing - internal PipeOptions GetInputPipeOptions(IScheduler scheduler) => new PipeOptions + internal PipeOptions GetInputPipeOptions(IScheduler writerScheduler) => new PipeOptions { ReaderScheduler = _serviceContext.ThreadPool, - WriterScheduler = scheduler, + WriterScheduler = writerScheduler, MaximumSizeHigh = _serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0, MaximumSizeLow = _serviceContext.ServerOptions.Limits.MaxRequestBufferSize ?? 0 }; - internal PipeOptions GetOutputPipeOptions(IScheduler scheduler) => new PipeOptions + internal PipeOptions GetOutputPipeOptions(IScheduler readerScheduler) => new PipeOptions { - ReaderScheduler = scheduler, + ReaderScheduler = readerScheduler, WriterScheduler = _serviceContext.ThreadPool, MaximumSizeHigh = GetOutputResponseBufferSize(), MaximumSizeLow = GetOutputResponseBufferSize() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index c32420c55..d09ea0d41 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -33,7 +33,6 @@ public class KestrelServer : IServer private readonly ITransportFactory _transportFactory; private bool _isRunning; - private IDisposable _connectionHandlerDisposable; private DateHeaderValueManager _dateHeaderValueManager; public KestrelServer( @@ -113,7 +112,6 @@ public void Start(IHttpApplication application) }; var connectionHandler = new ConnectionHandler(serviceContext, application); - _connectionHandlerDisposable = connectionHandler; var listenOptions = Options.ListenOptions; var hasListenOptions = listenOptions.Any(); @@ -229,7 +227,6 @@ public void Dispose() Task.WaitAll(tasks); } - _connectionHandlerDisposable?.Dispose(); _dateHeaderValueManager?.Dispose(); } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs index 5249b8f32..06b22efc1 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs @@ -7,6 +7,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport { public interface IConnectionHandler { - IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler); + IConnectionContext OnConnection(IConnectionInformation connectionInfo); } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs index 79dbda109..911b83a0d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionInformation.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.IO.Pipelines; using System.Net; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; @@ -9,10 +10,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport public interface IConnectionInformation { ListenOptions ListenOptions { get; } - IPEndPoint RemoteEndPoint { get; } IPEndPoint LocalEndPoint { get; } + PipeFactory PipeFactory { get; } + IScheduler InputWriterScheduler { get; } + IScheduler OutputWriterScheduler { get; } + // TODO: Remove timeout management from transport ITimeoutControl TimeoutControl { get; } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs index 65bfd3a51..a3a8a3c6d 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs @@ -73,7 +73,7 @@ public void Start() { try { - _connectionContext = ConnectionHandler.OnConnection(this, Thread, Thread); + _connectionContext = ConnectionHandler.OnConnection(this); ConnectionId = _connectionContext.ConnectionId; Log.ConnectionStart(ConnectionId); diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs index 76e4cba0b..84b215675 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs @@ -21,11 +21,13 @@ public ConnectionContext(ListenerContext context) public ListenerContext ListenerContext { get; set; } public ListenOptions ListenOptions => ListenerContext.ListenOptions; - - public ITimeoutControl TimeoutControl { get; set; } - public IPEndPoint RemoteEndPoint { get; set; } - public IPEndPoint LocalEndPoint { get; set; } + + public PipeFactory PipeFactory => ListenerContext.Thread.PipelineFactory; + public IScheduler InputWriterScheduler => ListenerContext.Thread; + public IScheduler OutputWriterScheduler => ListenerContext.Thread; + + public ITimeoutControl TimeoutControl { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs index 6e8e4319b..60a5b8fe2 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs @@ -20,10 +20,6 @@ public class SocketOutputConsumer private readonly WriteReqPool _writeReqPool; private readonly IPipeReader _pipe; - // https://github.com/dotnet/corefxlab/issues/1334 - // Pipelines don't support multiple awaiters on flush - // this is temporary until it does - public SocketOutputConsumer( IPipeReader pipe, KestrelThread thread, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs index 43623f29b..5978ce4f9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs @@ -74,7 +74,7 @@ public KestrelThread(KestrelEngine engine) #endif QueueCloseHandle = PostCloseHandle; QueueCloseAsyncHandle = EnqueueCloseHandle; - Memory = new MemoryPool(); + PipelineFactory = new PipeFactory(); WriteReqPool = new WriteReqPool(this, _log); ConnectionManager = new ConnectionManager(this); } @@ -88,7 +88,7 @@ public KestrelThread(KestrelEngine engine, int maxLoops) public UvLoopHandle Loop { get { return _loop; } } - public MemoryPool Memory { get; } + public PipeFactory PipelineFactory { get; } public ConnectionManager ConnectionManager { get; } @@ -189,7 +189,7 @@ private async Task DisposeConnectionsAsync() } finally { - Memory.Dispose(); + PipelineFactory.Dispose(); } } diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs index 519054515..9faa8d2f6 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Mocks/MockConnectionInformation.cs @@ -1,7 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; +using System.IO.Pipelines; using System.Net; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Transport; @@ -11,10 +11,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Performance public class MockConnectionInformation : IConnectionInformation { public ListenOptions ListenOptions { get; } - public IPEndPoint RemoteEndPoint { get; } public IPEndPoint LocalEndPoint { get; } + public PipeFactory PipeFactory { get; } + public IScheduler InputWriterScheduler { get; } + public IScheduler OutputWriterScheduler { get; } + public ITimeoutControl TimeoutControl { get; } = new MockTimeoutControl(); private class MockTimeoutControl : ITimeoutControl diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs index c10624978..9e0a068f1 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameTests.cs @@ -688,6 +688,9 @@ private class MockConnectionInformation : IConnectionInformation public ListenOptions ListenOptions { get; } public IPEndPoint RemoteEndPoint { get; } public IPEndPoint LocalEndPoint { get; } + public PipeFactory PipeFactory { get; } + public IScheduler InputWriterScheduler { get; } + public IScheduler OutputWriterScheduler { get; } public ITimeoutControl TimeoutControl { get; set; } = Mock.Of(); } } From ba1b4c1d759de41b0486fa594d0009e6d0363c63 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 11:27:50 -0700 Subject: [PATCH 16/20] WIP 14 --- samples/SampleApp/SampleApp.csproj | 1 - .../Internal/ConnectionHandler.cs | 2 +- .../{ConnectionLifetime.cs => FrameConnection.cs} | 10 +++++----- ...ionLifetimeContext.cs => FrameConnectionContext.cs} | 3 +-- .../Internal/Http/SocketOutputConsumer.cs | 1 - .../PipeOptionsTests.cs | 2 +- .../TestHelpers/MockConnectionHandler.cs | 2 +- 7 files changed, 9 insertions(+), 12 deletions(-) rename src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/{ConnectionLifetime.cs => FrameConnection.cs} (93%) rename src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/{ConnectionLifetimeContext.cs => FrameConnectionContext.cs} (95%) diff --git a/samples/SampleApp/SampleApp.csproj b/samples/SampleApp/SampleApp.csproj index 8aa2355a1..b62345639 100644 --- a/samples/SampleApp/SampleApp.csproj +++ b/samples/SampleApp/SampleApp.csproj @@ -12,7 +12,6 @@ - diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs index 776e77411..9a346f180 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionHandler.cs @@ -48,7 +48,7 @@ public IConnectionContext OnConnection(IConnectionInformation connectionInfo) var outputProducer = new SocketOutputProducer(outputPipe.Writer, frame, connectionId, _serviceContext.Log); frame.LifetimeControl = new ConnectionLifetimeControl(connectionId, outputPipe.Reader, outputProducer, _serviceContext.Log); - var connection = new ConnectionLifetime(new ConnectionLifetimeContext + var connection = new FrameConnection(new FrameConnectionContext { ConnectionId = connectionId, ServiceContext = _serviceContext, diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs similarity index 93% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs index b18959033..57bb28b02 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetime.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs @@ -16,9 +16,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal { - public class ConnectionLifetime : IConnectionContext + public class FrameConnection : IConnectionContext { - private readonly ConnectionLifetimeContext _context; + private readonly FrameConnectionContext _context; private readonly Frame _frame; private readonly List _connectionAdapters; private readonly TaskCompletionSource _frameStartedTcs = new TaskCompletionSource(); @@ -27,7 +27,7 @@ public class ConnectionLifetime : IConnectionContext private Stream _filteredStream; private Task _adaptedPipelineTask = TaskCache.CompletedTask; - public ConnectionLifetime(ConnectionLifetimeContext context) + public FrameConnection(FrameConnectionContext context) { _context = context; _frame = context.Frame; @@ -68,7 +68,7 @@ public void StartRequestProcessing() { // ApplyConnectionAdaptersAsync should never throw. If it succeeds, it will call _frame.Start(). // Otherwise, it will close the connection. - var ignore = ((ConnectionLifetime)state).ApplyConnectionAdaptersAsync(); + var ignore = ((FrameConnection)state).ApplyConnectionAdaptersAsync(); }, this); } } @@ -141,7 +141,7 @@ private async Task RunAdaptedPipeline() catch (Exception ex) { // adaptedPipeline.RunAsync() shouldn't throw. - Log.LogError(0, ex, $"{nameof(ConnectionLifetime)}.{nameof(ApplyConnectionAdaptersAsync)}"); + Log.LogError(0, ex, $"{nameof(FrameConnection)}.{nameof(ApplyConnectionAdaptersAsync)}"); } finally { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnectionContext.cs similarity index 95% rename from src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnectionContext.cs index c199fe581..271c00938 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/ConnectionLifetimeContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnectionContext.cs @@ -8,7 +8,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal { - public class ConnectionLifetimeContext + public class FrameConnectionContext { public string ConnectionId { get; set; } public ServiceContext ServiceContext { get; set; } @@ -17,7 +17,6 @@ public class ConnectionLifetimeContext public Frame Frame { get; set; } public SocketOutputProducer OutputProducer { get; set; } - public IPipe Input { get; set; } public IPipe Output { get; set; } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs index 60a5b8fe2..af6b5e222 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs @@ -38,7 +38,6 @@ public SocketOutputConsumer( _log = log; _writeReqPool = thread.WriteReqPool; - // REVIEW: This was ignored before but stored in a field. var ignore = StartWrites(); } diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs index a937fede3..924a4200e 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/PipeOptionsTests.cs @@ -59,7 +59,7 @@ public void AdaptedPipeOptionsConfiguredCorrectly(long? maxRequestBufferSize, lo var serviceContext = new TestServiceContext(); serviceContext.ServerOptions.Limits.MaxRequestBufferSize = maxRequestBufferSize; - var connectionLifetime = new ConnectionLifetime(new ConnectionLifetimeContext + var connectionLifetime = new FrameConnection(new FrameConnectionContext { ServiceContext = serviceContext }); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs index d7c450028..2abe06e19 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs @@ -19,7 +19,7 @@ public MockConnectionHandler() _pipeFactory = new PipeFactory(); } - public IConnectionContext OnConnection(IConnectionInformation connectionInfo, IScheduler inputWriterScheduler, IScheduler outputReaderScheduler) + public IConnectionContext OnConnection(IConnectionInformation connectionInfo) { Assert.Null(Input); From 45fd2a5ce8b447180aa1878311e45b670fe4584f Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 11:55:55 -0700 Subject: [PATCH 17/20] WIP 15 - Rename Microsoft.AspNetCore.Server.Kestrel.Libuv to Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv --- KestrelHttpServer.sln | 2 +- ...soft.AspNetCore.Server.Kestrel.Core.csproj | 1 + .../baseline.net45.json | 12700 ---------------- .../baseline.netcore.json | 12700 ---------------- .../exceptions.net45.json | 46 - .../exceptions.netcore.json | 46 - ...oft.AspNetCore.Server.Kestrel.Https.csproj | 1 + .../baseline.net45.json | 292 - .../baseline.netcore.json | 292 - .../exceptions.net45.json | 14 - .../exceptions.netcore.json | 14 - .../Internal/Http/Connection.cs | 0 .../Internal/Http/ConnectionContext.cs | 0 .../Internal/Http/ConnectionManager.cs | 0 .../Internal/Http/IAsyncDisposable.cs | 0 .../Internal/Http/Listener.cs | 2 +- .../Internal/Http/ListenerContext.cs | 2 +- .../Internal/Http/ListenerPrimary.cs | 2 +- .../Internal/Http/ListenerSecondary.cs | 2 +- .../Internal/Http/SocketOutputConsumer.cs | 0 .../Internal/Infrastructure/Constants.cs | 0 .../Infrastructure/KestrelEventSource.cs | 0 .../Internal/Infrastructure/KestrelThread.cs | 0 .../Internal/Infrastructure/LibuvAwaitable.cs | 0 .../Internal/Infrastructure/WriteReqPool.cs | 0 .../Internal/LibuvTransportContext.cs | 2 +- .../Internal/Networking/Libuv.cs | 0 .../Internal/Networking/PlatformApis.cs | 0 .../Internal/Networking/SockAddr.cs | 0 .../Internal/Networking/UvAsyncHandle.cs | 0 .../Internal/Networking/UvConnectRequest.cs | 0 .../Internal/Networking/UvException.cs | 0 .../Internal/Networking/UvHandle.cs | 0 .../Internal/Networking/UvLoopHandle.cs | 0 .../Internal/Networking/UvMemory.cs | 0 .../Internal/Networking/UvPipeHandle.cs | 0 .../Internal/Networking/UvRequest.cs | 0 .../Internal/Networking/UvShutdownReq.cs | 0 .../Internal/Networking/UvStreamHandle.cs | 0 .../Internal/Networking/UvTcpHandle.cs | 0 .../Internal/Networking/UvTimerHandle.cs | 0 .../Internal/Networking/UvWriteReq.cs | 0 .../KestrelEngine.cs | 4 +- .../LibuvTransportFactory.cs | 4 +- .../LibuvTransportOptions.cs | 2 +- ...ore.Server.Kestrel.Transport.Libuv.csproj} | 1 + .../WebHostBuilderLibuvExtensions.cs | 2 +- ...Microsoft.AspNetCore.Server.Kestrel.csproj | 3 +- .../KestrelEventSourceTests.cs | 2 +- .../KestrelServerTests.cs | 2 +- .../LibuvTransportFactoryTests.cs | 2 +- .../LibuvTransportOptionsTests.cs | 2 +- .../MultipleLoopTests.cs | 2 +- test/shared/MockConnection.cs | 2 +- test/shared/TestServiceContext.cs | 4 +- 55 files changed, 25 insertions(+), 26125 deletions(-) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.net45.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.netcore.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.net45.json delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.netcore.json rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/Connection.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/ConnectionContext.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/ConnectionManager.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/IAsyncDisposable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/Listener.cs (98%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/ListenerContext.cs (96%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/ListenerPrimary.cs (99%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/ListenerSecondary.cs (98%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Http/SocketOutputConsumer.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Infrastructure/Constants.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Infrastructure/KestrelEventSource.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Infrastructure/KestrelThread.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Infrastructure/LibuvAwaitable.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Infrastructure/WriteReqPool.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/LibuvTransportContext.cs (89%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/Libuv.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/PlatformApis.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/SockAddr.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvAsyncHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvConnectRequest.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvException.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvLoopHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvMemory.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvPipeHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvRequest.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvShutdownReq.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvStreamHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvTcpHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvTimerHandle.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/Internal/Networking/UvWriteReq.cs (100%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/KestrelEngine.cs (97%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/LibuvTransportFactory.cs (95%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/LibuvTransportOptions.cs (97%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj} (95%) rename src/{Microsoft.AspNetCore.Server.Kestrel.Libuv => Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv}/WebHostBuilderLibuvExtensions.cs (96%) diff --git a/KestrelHttpServer.sln b/KestrelHttpServer.sln index 3db498fe1..24a8e7902 100644 --- a/KestrelHttpServer.sln +++ b/KestrelHttpServer.sln @@ -61,7 +61,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestResources", "TestResour test\shared\TestResources\testCert.pfx = test\shared\TestResources\testCert.pfx EndProjectSection EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Libuv", "src\Microsoft.AspNetCore.Server.Kestrel.Libuv\Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj", "{A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv", "src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj", "{A76B8C8C-0DC5-4DD3-9B1F-02E51A0915F4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "src\Microsoft.AspNetCore.Server.Kestrel\Microsoft.AspNetCore.Server.Kestrel.csproj", "{56139957-5C29-4E7D-89BD-7D20598B4EAF}" EndProject diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj index 7d73ec6ec..b7038ded2 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Microsoft.AspNetCore.Server.Kestrel.Core.csproj @@ -9,6 +9,7 @@ aspnetcore;kestrel true CS1591;$(NoWarn) + false diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json deleted file mode 100644 index f8ee9ee32..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.net45.json +++ /dev/null @@ -1,12700 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.AspNetCore.Server.Kestrel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.AspNetCore.Hosting.WebHostBuilderKestrelExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseKestrel", - "Parameters": [ - { - "Name": "hostBuilder", - "Type": "Microsoft.AspNetCore.Hosting.IWebHostBuilder" - } - ], - "ReturnType": "Microsoft.AspNetCore.Hosting.IWebHostBuilder", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseKestrel", - "Parameters": [ - { - "Name": "hostBuilder", - "Type": "Microsoft.AspNetCore.Hosting.IWebHostBuilder" - }, - { - "Name": "options", - "Type": "System.Action" - } - ], - "ReturnType": "Microsoft.AspNetCore.Hosting.IWebHostBuilder", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Hosting.KestrelServerOptionsConnectionLoggingExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseConnectionLogging", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseConnectionLogging", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "loggerName", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.IO.IOException", - "ImplementedInterfaces": [], - "Members": [], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.KestrelServer", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Hosting.Server.IServer" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Features", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.Features.IFeatureCollection", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Hosting.Server.IServer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Options", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [ - { - "Name": "application", - "Type": "Microsoft.AspNetCore.Hosting.Server.IHttpApplication" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Hosting.Server.IServer", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TContext", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.Extensions.Options.IOptions" - }, - { - "Name": "applicationLifetime", - "Type": "Microsoft.AspNetCore.Hosting.IApplicationLifetime" - }, - { - "Name": "loggerFactory", - "Type": "Microsoft.Extensions.Logging.ILoggerFactory" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_AddServerHeader", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_AddServerHeader", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ApplicationServices", - "Parameters": [], - "ReturnType": "System.IServiceProvider", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ApplicationServices", - "Parameters": [ - { - "Name": "value", - "Type": "System.IServiceProvider" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionFilter", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionFilter", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_MaxRequestBufferSize", - "Parameters": [], - "ReturnType": "System.Nullable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_MaxRequestBufferSize", - "Parameters": [ - { - "Name": "value", - "Type": "System.Nullable" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_NoDelay", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_NoDelay", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ShutdownTimeout", - "Parameters": [], - "ReturnType": "System.TimeSpan", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ShutdownTimeout", - "Parameters": [ - { - "Name": "value", - "Type": "System.TimeSpan" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadCount", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ThreadCount", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Host", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PathBase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Port", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Scheme", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsUnixPipe", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_UnixPipePath", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ToString", - "Parameters": [], - "ReturnType": "System.String", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetHashCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Equals", - "Parameters": [ - { - "Name": "obj", - "Type": "System.Object" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FromUrl", - "Parameters": [ - { - "Name": "url", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Libuv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Threads", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateServer", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelServerOptionsSetup", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Options.IConfigureOptions" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Configure", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Options.IConfigureOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "services", - "Type": "System.IServiceProvider" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_AppLifetime", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Hosting.IApplicationLifetime", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_AppLifetime", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Hosting.IApplicationLifetime" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Log", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Log", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadPool", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ThreadPool", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameFactory", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_FrameFactory", - "Parameters": [ - { - "Name": "value", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_DateHeaderValueManager", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_DateHeaderValueManager", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ServerOptions", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerOptions", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Disposable", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "dispose", - "Type": "System.Action" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Loop", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FatalError", - "Parameters": [], - "ReturnType": "System.Runtime.ExceptionServices.ExceptionDispatchInfo", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_QueueCloseHandle", - "Parameters": [], - "ReturnType": "System.Action, System.IntPtr>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AllowStop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [ - { - "Name": "timeout", - "Type": "System.TimeSpan" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Post", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PostAsync", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Walk", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "engine", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - ], - "Members": [ - { - "Kind": "Method", - "Name": "ConnectionStart", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionStop", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionRead", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionPause", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionResume", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionReadFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWroteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionKeepAlive", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnect", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteCallback", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ApplicationError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnectedWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NotAllConnectionsClosedGracefully", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionBadRequest", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Log", - "Parameters": [ - { - "Name": "logLevel", - "Type": "Microsoft.Extensions.Logging.LogLevel" - }, - { - "Name": "eventId", - "Type": "Microsoft.Extensions.Logging.EventId" - }, - { - "Name": "state", - "Type": "T0" - }, - { - "Name": "exception", - "Type": "System.Exception" - }, - { - "Name": "formatter", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TState", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Method", - "Name": "IsEnabled", - "Parameters": [ - { - "Name": "logLevel", - "Type": "Microsoft.Extensions.Logging.LogLevel" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginScope", - "Parameters": [ - { - "Name": "state", - "Type": "T0" - } - ], - "ReturnType": "System.IDisposable", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TState", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_logger", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Logging.ILogger", - "ReadOnly": true, - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Check", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Check", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_init", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_close", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "run", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "mode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "stop", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ref", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "unref", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "uv_fileno", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "close", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "close_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "close", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "close_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "async_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_async_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "async_send", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "unsafe_async_send", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_bind", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_open", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "hSocket", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_nodelay", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "enable", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "ipc", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_bind", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "listen", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "backlog", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connection_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "accept", - "Parameters": [ - { - "Name": "server", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "client", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_connect", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvConnectRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connect_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_pending_count", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "read_start", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "alloc_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_alloc_cb" - }, - { - "Name": "read_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_read_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "read_stop", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "try_write", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t[]" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "write", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "write2", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "shutdown", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvShutdownReq" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_shutdown_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "err_name", - "Parameters": [ - { - "Name": "err", - "Type": "System.Int32" - } - ], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "strerror", - "Parameters": [ - { - "Name": "err", - "Type": "System.Int32" - } - ], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_size", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "handle_size", - "Parameters": [ - { - "Name": "handleType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+HandleType" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "req_size", - "Parameters": [ - { - "Name": "reqType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+RequestType" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ip4_addr", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ip6_addr", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "walk", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "walk_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_walk_cb" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_getsockname", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_getpeername", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "buf_init", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "len", - "Type": "System.Int32" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "IsWindows", - "Parameters": [], - "ReturnType": "System.Boolean", - "ReadOnly": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_close", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_run", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_stop", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ref", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_unref", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_fileno", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_fileno_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_close", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_async_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_async_send", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_unsafe_async_send", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_bind", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_bind_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_open", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_nodelay", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_bind", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_listen", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_accept", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_connect", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_pending_count", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_read_start", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_read_stop", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_try_write", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_write", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_write2", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write2_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_shutdown", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_err_name", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_strerror", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_handle_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_req_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ip4_addr", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip4_addr_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ip6_addr", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip6_addr_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_walk", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_getsockname", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getsockname_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_getpeername", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getpeername_func", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.PlatformApis", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_IsWindows", - "Parameters": [], - "ReturnType": "System.Boolean", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsDarwin", - "Parameters": [], - "ReturnType": "System.Boolean", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "ignored", - "Type": "System.Int64" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Send", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvConnectRequest", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Connect", - "Parameters": [ - { - "Name": "pipe", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.Exception", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_StatusCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "message", - "Type": "System.String" - }, - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateHandle", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - }, - { - "Name": "threadId", - "Type": "System.Int32" - }, - { - "Name": "size", - "Type": "System.Int32" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reference", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Unreference", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "mode", - "Type": "System.Int32", - "DefaultValue": "0" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "System.Runtime.InteropServices.SafeHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Libuv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsInvalid", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadId", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateMemory", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - }, - { - "Name": "threadId", - "Type": "System.Int32" - }, - { - "Name": "size", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DestroyMemory", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DestroyMemory", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "gcHandlePtr", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Validate", - "Parameters": [ - { - "Name": "closed", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FromIntPtr", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "T0", - "Static": true, - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "THandle", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_threadId", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_log", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "ReadOnly": true, - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - }, - { - "Name": "ipc", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Bind", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PendingCount", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Pin", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Unpin", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvShutdownReq", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Shutdown", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Connection", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Connection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Listen", - "Parameters": [ - { - "Name": "backlog", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Accept", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadStart", - "Parameters": [ - { - "Name": "allocCallback", - "Type": "System.Func" - }, - { - "Name": "readCallback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadStop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryWrite", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Bind", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetPeerIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetSockIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Open", - "Parameters": [ - { - "Name": "hSocket", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NoDelay", - "Parameters": [ - { - "Name": "enable", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateIPEndpoint", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Net.IPEndPoint", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvWriteReq", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "nBuffers", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write2", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "System.ArraySegment>" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [ - "Microsoft.Extensions.Logging.ILogger" - ], - "Members": [ - { - "Kind": "Method", - "Name": "ConnectionStart", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionStop", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionRead", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionPause", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionResume", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionReadFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWroteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionKeepAlive", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnect", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteCallback", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnectedWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionBadRequest", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NotAllConnectionsClosedGracefully", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ApplicationError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Complete", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Cancel", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Error", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "action", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.LoggingThreadPool", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "action", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Complete", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Cancel", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Error", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "log", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Lease", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Return", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaxPooledBlockLength", - "Parameters": [], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "4032" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Pool", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Slab", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Array", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Finalize", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ToString", - "Parameters": [], - "ReturnType": "System.String", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetIterator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "dataArrayPtr", - "Type": "System.IntPtr" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "DataArrayPtr", - "Parameters": [], - "ReturnType": "System.IntPtr", - "ReadOnly": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Data", - "Parameters": [], - "ReturnType": "System.ArraySegment", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "End", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Next", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_IsDefault", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsEnd", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Block", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Index", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Take", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Skip", - "Parameters": [ - { - "Name": "bytesToSkip", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Peek", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PeekLong", - "Parameters": [], - "ReturnType": "System.Int64", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - }, - { - "Name": "byte1Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - }, - { - "Name": "byte1Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - }, - { - "Name": "byte2Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Put", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetLength", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyTo", - "Parameters": [ - { - "Name": "array", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "actual", - "Type": "System.Int32", - "Direction": "Out" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFromAscii", - "Parameters": [ - { - "Name": "data", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - }, - { - "Name": "index", - "Type": "System.Int32" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIteratorExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetAsciiString", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.String", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetUtf8String", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.String", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetArraySegment", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.ArraySegment", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetKnownMethod", - "Parameters": [ - { - "Name": "begin", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "knownMethod", - "Type": "System.String", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetKnownVersion", - "Parameters": [ - { - "Name": "begin", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "knownVersion", - "Type": "System.String", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "HttpConnectMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"CONNECT\"" - }, - { - "Kind": "Field", - "Name": "HttpDeleteMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"DELETE\"" - }, - { - "Kind": "Field", - "Name": "HttpGetMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"GET\"" - }, - { - "Kind": "Field", - "Name": "HttpHeadMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HEAD\"" - }, - { - "Kind": "Field", - "Name": "HttpPatchMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"PATCH\"" - }, - { - "Kind": "Field", - "Name": "HttpPostMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"POST\"" - }, - { - "Kind": "Field", - "Name": "HttpPutMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"PUT\"" - }, - { - "Kind": "Field", - "Name": "HttpOptionsMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"OPTIONS\"" - }, - { - "Kind": "Field", - "Name": "HttpTraceMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"TRACE\"" - }, - { - "Kind": "Field", - "Name": "Http10Version", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HTTP/1.0\"" - }, - { - "Kind": "Field", - "Name": "Http11Version", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HTTP/1.1\"" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "length", - "Type": "System.Int32" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Finalize", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Array", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "ArrayPtr", - "Parameters": [], - "ReturnType": "System.IntPtr", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "IsActive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.TaskUtilities", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetCancelledTask", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCancelledZeroTask", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "CompletedTask", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "ZeroTask", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.BufferSizeControl", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Add", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Subtract", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "maxSize", - "Type": "System.Int64" - }, - { - "Name": "connectionControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - }, - { - "Name": "connectionThread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ChunkWriter", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "BeginChunkBytes", - "Parameters": [ - { - "Name": "dataCount", - "Type": "System.Int32" - } - ], - "ReturnType": "System.ArraySegment", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteBeginChunkBytes", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - }, - { - "Name": "dataCount", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteEndChunkBytes", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StopAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnSocketClosed", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - }, - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_SocketInput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SocketInput", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SocketOutput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SocketOutput", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionControl", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemoteEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteEndPoint", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPEndPoint" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalEndPoint", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPEndPoint" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionId", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionId", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PrepareRequest", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PrepareRequest", - "Parameters": [ - { - "Name": "value", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "WalkConnectionsAndClose", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WaitForConnectionCloseAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "GetDateHeaderValues", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager+DateHeaderValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Microsoft.AspNetCore.Http.Features.IFeatureCollection", - "Microsoft.AspNetCore.Http.Features.IHttpRequestFeature", - "Microsoft.AspNetCore.Http.Features.IHttpResponseFeature", - "Microsoft.AspNetCore.Http.Features.IHttpUpgradeFeature", - "Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature", - "Microsoft.AspNetCore.Http.Features.IHttpRequestLifetimeFeature" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_ConnectionIdFeature", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionIdFeature", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemoteIpAddress", - "Parameters": [], - "ReturnType": "System.Net.IPAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteIpAddress", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemotePort", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemotePort", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalIpAddress", - "Parameters": [], - "ReturnType": "System.Net.IPAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalIpAddress", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalPort", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalPort", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Scheme", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Scheme", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Method", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Method", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PathBase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PathBase", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Path", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Path", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_QueryString", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_QueryString", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RawTarget", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RawTarget", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HttpVersion", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HttpVersion", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.IHeaderDictionary", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Http.IHeaderDictionary" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestBody", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestBody", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_StatusCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_StatusCode", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ReasonPhrase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ReasonPhrase", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ResponseHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.IHeaderDictionary", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ResponseHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Http.IHeaderDictionary" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ResponseBody", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ResponseBody", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_DuplexStream", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_DuplexStream", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestAborted", - "Parameters": [], - "ReturnType": "System.Threading.CancellationToken", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestAborted", - "Parameters": [ - { - "Name": "value", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasResponseStarted", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameRequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameResponseHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "InitializeHeaders", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "InitializeStreams", - "Parameters": [ - { - "Name": "messageBody", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PauseStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ResumeStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StopStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RequestProcessingAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Abstract": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnStarting", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Func" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnCompleted", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Func" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FireOnStarting", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FireOnCompleted", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsyncAwaited", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceContinue", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceStartAndFireOnStarting", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryProduceInvalidRequestResponse", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceEnd", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TakeStartLine", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestLineStatus", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TakeMessageHeaders", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "requestHeaders", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StatusCanHaveBody", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RejectRequest", - "Parameters": [ - { - "Name": "message", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetBadRequestState", - "Parameters": [ - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReportApplicationError", - "Parameters": [ - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ResetFeatureCollection", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameControl", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_FrameControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestRejected", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_onStarting", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List, System.Object>>", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_onCompleted", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List, System.Object>>", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestProcessingStopping", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestAborted", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestProcessingStatus", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestProcessingStatus", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_keepAlive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_applicationException", - "Parameters": [], - "ReturnType": "System.Exception", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Http.IHeaderDictionary" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Unknown", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Dictionary", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowReadOnlyException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowArgumentException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowKeyNotFoundException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowDuplicateKeyException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetReadOnly", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AppendValue", - "Parameters": [ - { - "Name": "existing", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "append", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BitCount", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ValidateHeaderCharacters", - "Parameters": [ - { - "Name": "headerValues", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ValidateHeaderCharacters", - "Parameters": [ - { - "Name": "headerCharacters", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_isReadOnly", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaybeUnknown", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Dictionary", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_HeaderCacheControl", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCacheControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderConnection", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderDate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderKeepAlive", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderPragma", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderPragma", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTrailer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTrailer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTransferEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUpgrade", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUpgrade", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVia", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVia", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWarning", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWarning", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAllow", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAllow", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLength", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentType", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentType", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentMD5", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentMD5", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpires", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpires", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLastModified", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLastModified", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccept", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccept", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptCharset", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptCharset", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAuthorization", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAuthorization", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderCookie", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCookie", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpect", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpect", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderFrom", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderFrom", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderHost", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderHost", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfMatch", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfMatch", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfModifiedSince", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfModifiedSince", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfNoneMatch", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfNoneMatch", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfUnmodifiedSince", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfUnmodifiedSince", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderMaxForwards", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderMaxForwards", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderProxyAuthorization", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderProxyAuthorization", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderReferer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderReferer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTE", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTE", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTranslate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTranslate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUserAgent", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUserAgent", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderOrigin", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderOrigin", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlRequestMethod", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlRequestMethod", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlRequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlRequestHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Append", - "Parameters": [ - { - "Name": "keyBytes", - "Type": "System.Byte[]" - }, - { - "Name": "keyOffset", - "Type": "System.Int32" - }, - { - "Name": "keyLength", - "Type": "System.Int32" - }, - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumerator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders+Enumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_HeaderCacheControl", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCacheControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderConnection", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderDate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderKeepAlive", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderPragma", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderPragma", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTrailer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTrailer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTransferEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUpgrade", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUpgrade", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVia", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVia", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWarning", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWarning", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAllow", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAllow", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLength", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentType", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentType", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentMD5", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentMD5", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpires", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpires", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLastModified", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLastModified", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptRanges", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptRanges", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAge", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAge", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderETag", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderETag", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderProxyAutheticate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderProxyAutheticate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderRetryAfter", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderRetryAfter", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderServer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderServer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderSetCookie", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderSetCookie", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVary", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVary", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWWWAuthenticate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWWWAuthenticate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowCredentials", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowCredentials", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowMethods", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowMethods", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowOrigin", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowOrigin", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlExposeHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlExposeHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlMaxAge", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlMaxAge", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawServer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasConnection", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasTransferEncoding", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasContentLength", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasServer", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasDate", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumerator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders+Enumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyTo", - "Parameters": [ - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "RequestProcessingAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "application", - "Type": "Microsoft.AspNetCore.Hosting.Server.IHttpApplication" - }, - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [ - { - "ParameterName": "TContext", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Add", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Subtract", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Pause", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Resume", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "End", - "Parameters": [ - { - "Name": "endType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ProduceContinue", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_ListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionCallback", - "Parameters": [ - { - "Name": "stream", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DispatchConnection", - "Parameters": [ - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ServerAddress", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerAddress", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Thread", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Thread", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Memory", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Memory", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionManager", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionManager", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_WriteReqPool", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Queue", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_WriteReqPool", - "Parameters": [ - { - "Name": "value", - "Type": "System.Collections.Generic.Queue" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "listenerContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "pipeName", - "Type": "System.String" - }, - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DispatchConnection", - "Parameters": [ - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "pipeName", - "Type": "System.String" - }, - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_RequestKeepAlive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Consume", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsyncImplementation", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Virtual": true, - "Abstract": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "For", - "Parameters": [ - { - "Name": "httpVersion", - "Type": "System.String" - }, - { - "Name": "headers", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders" - }, - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PathNormalizer", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "RemoveDotSegments", - "Parameters": [ - { - "Name": "path", - "Type": "System.String" - } - ], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListener", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "SocketShutdown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "SocketDisconnect", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "ConnectionKeepAlive", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ReasonPhrases", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ToStatusBytes", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - }, - { - "Name": "reasonPhrase", - "Type": "System.String", - "DefaultValue": "null" - } - ], - "ReturnType": "System.Byte[]", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.Runtime.CompilerServices.ICriticalNotifyCompletion", - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_RemoteIntakeFin", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteIntakeFin", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsCompleted", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingData", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingComplete", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingDeferred", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingFin", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConsumingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConsumingComplete", - "Parameters": [ - { - "Name": "consumed", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "examined", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CompleteAwaiting", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AbortAwaiting", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAwaiter", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnCompleted", - "Parameters": [ - { - "Name": "continuation", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Runtime.CompilerServices.INotifyCompletion", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UnsafeOnCompleted", - "Parameters": [ - { - "Name": "continuation", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Runtime.CompilerServices.ICriticalNotifyCompletion", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResult", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "bufferSizeControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "DefaultValue": "null" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInputExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketOutput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - ], - "Members": [ - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "socketShutdownSend", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "socketDisconnect", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "isSync", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "End", - "Parameters": [ - { - "Name": "endType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - }, - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "connection", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection" - }, - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "log", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "writeReqPool", - "Type": "System.Collections.Generic.Queue" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaxPooledWriteReqs", - "Parameters": [], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "1024" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.UrlPathDecoder", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Unescape", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Address", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Address", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Connection", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Connection", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PrepareRequest", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PrepareRequest", - "Parameters": [ - { - "Name": "value", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.LoggingConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - }, - { - "Name": "previous", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.NoOpConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.FilteredStreamAdapter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_SocketInput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SocketOutput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadInputAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "filteredStream", - "Type": "System.IO.Stream" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "bufferSizeControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LibuvStream", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.IO.Stream", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_CanRead", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CanSeek", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CanWrite", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Length", - "Parameters": [], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Position", - "Parameters": [], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Position", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "offset", - "Type": "System.Int64" - }, - { - "Name": "origin", - "Type": "System.IO.SeekOrigin" - } - ], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetLength", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Read", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "token", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.StreamSocketOutput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "outputStream", - "Type": "System.IO.Stream" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_fileno_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_async_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_bind_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connection_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connect_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_alloc_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "suggested_size", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "suggested_size", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_read_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "nread", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "nread", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write2_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_shutdown_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip4_addr_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip6_addr_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_walk_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getsockname_func", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getpeername_func", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "len", - "Type": "System.Int32" - }, - { - "Name": "IsWindows", - "Type": "System.Boolean" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+HandleType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Unknown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "ASYNC", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "CHECK", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "FS_EVENT", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "FS_POLL", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "HANDLE", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - }, - { - "Kind": "Field", - "Name": "IDLE", - "Parameters": [], - "GenericParameter": [], - "Literal": "6" - }, - { - "Kind": "Field", - "Name": "NAMED_PIPE", - "Parameters": [], - "GenericParameter": [], - "Literal": "7" - }, - { - "Kind": "Field", - "Name": "POLL", - "Parameters": [], - "GenericParameter": [], - "Literal": "8" - }, - { - "Kind": "Field", - "Name": "PREPARE", - "Parameters": [], - "GenericParameter": [], - "Literal": "9" - }, - { - "Kind": "Field", - "Name": "PROCESS", - "Parameters": [], - "GenericParameter": [], - "Literal": "10" - }, - { - "Kind": "Field", - "Name": "STREAM", - "Parameters": [], - "GenericParameter": [], - "Literal": "11" - }, - { - "Kind": "Field", - "Name": "TCP", - "Parameters": [], - "GenericParameter": [], - "Literal": "12" - }, - { - "Kind": "Field", - "Name": "TIMER", - "Parameters": [], - "GenericParameter": [], - "Literal": "13" - }, - { - "Kind": "Field", - "Name": "TTY", - "Parameters": [], - "GenericParameter": [], - "Literal": "14" - }, - { - "Kind": "Field", - "Name": "UDP", - "Parameters": [], - "GenericParameter": [], - "Literal": "15" - }, - { - "Kind": "Field", - "Name": "SIGNAL", - "Parameters": [], - "GenericParameter": [], - "Literal": "16" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+RequestType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Unknown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "REQ", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "CONNECT", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "WRITE", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "SHUTDOWN", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "UDP_SEND", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - }, - { - "Kind": "Field", - "Name": "FS", - "Parameters": [], - "GenericParameter": [], - "Literal": "6" - }, - { - "Kind": "Field", - "Name": "WORK", - "Parameters": [], - "GenericParameter": [], - "Literal": "7" - }, - { - "Kind": "Field", - "Name": "GETADDRINFO", - "Parameters": [], - "GenericParameter": [], - "Literal": "8" - }, - { - "Kind": "Field", - "Name": "GETNAMEINFO", - "Parameters": [], - "GenericParameter": [], - "Literal": "9" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager+DateHeaderValues", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Bytes", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "String", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestLineStatus", - "Visibility": "Protected", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Empty", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "MethodIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "TargetIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "VersionIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "Incomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "Done", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestProcessingStatus", - "Visibility": "Protected", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "RequestPending", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "RequestStarted", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "ResponseStarted", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders+Enumerator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [ - "System.Collections.Generic.IEnumerator>" - ], - "Members": [ - { - "Kind": "Method", - "Name": "MoveNext", - "Parameters": [], - "ReturnType": "System.Boolean", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Current", - "Parameters": [], - "ReturnType": "System.Collections.Generic.KeyValuePair", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.Generic.IEnumerator>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders+Enumerator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [ - "System.Collections.Generic.IEnumerator>" - ], - "Members": [ - { - "Kind": "Method", - "Name": "MoveNext", - "Parameters": [], - "ReturnType": "System.Boolean", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Current", - "Parameters": [], - "ReturnType": "System.Collections.Generic.KeyValuePair", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.Generic.IEnumerator>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json deleted file mode 100644 index e786e3a8e..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/baseline.netcore.json +++ /dev/null @@ -1,12700 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.AspNetCore.Server.Kestrel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.AspNetCore.Hosting.WebHostBuilderKestrelExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseKestrel", - "Parameters": [ - { - "Name": "hostBuilder", - "Type": "Microsoft.AspNetCore.Hosting.IWebHostBuilder" - } - ], - "ReturnType": "Microsoft.AspNetCore.Hosting.IWebHostBuilder", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseKestrel", - "Parameters": [ - { - "Name": "hostBuilder", - "Type": "Microsoft.AspNetCore.Hosting.IWebHostBuilder" - }, - { - "Name": "options", - "Type": "System.Action" - } - ], - "ReturnType": "Microsoft.AspNetCore.Hosting.IWebHostBuilder", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Hosting.KestrelServerOptionsConnectionLoggingExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseConnectionLogging", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseConnectionLogging", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "loggerName", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.IO.IOException", - "ImplementedInterfaces": [], - "Members": [], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.KestrelServer", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Hosting.Server.IServer" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Features", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.Features.IFeatureCollection", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Hosting.Server.IServer", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Options", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [ - { - "Name": "application", - "Type": "Microsoft.AspNetCore.Hosting.Server.IHttpApplication" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Hosting.Server.IServer", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TContext", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.Extensions.Options.IOptions" - }, - { - "Name": "applicationLifetime", - "Type": "Microsoft.AspNetCore.Hosting.IApplicationLifetime" - }, - { - "Name": "loggerFactory", - "Type": "Microsoft.Extensions.Logging.ILoggerFactory" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_AddServerHeader", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_AddServerHeader", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ApplicationServices", - "Parameters": [], - "ReturnType": "System.IServiceProvider", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ApplicationServices", - "Parameters": [ - { - "Name": "value", - "Type": "System.IServiceProvider" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionFilter", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionFilter", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_MaxRequestBufferSize", - "Parameters": [], - "ReturnType": "System.Nullable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_MaxRequestBufferSize", - "Parameters": [ - { - "Name": "value", - "Type": "System.Nullable" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_NoDelay", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_NoDelay", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ShutdownTimeout", - "Parameters": [], - "ReturnType": "System.TimeSpan", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ShutdownTimeout", - "Parameters": [ - { - "Name": "value", - "Type": "System.TimeSpan" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadCount", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ThreadCount", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Host", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PathBase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Port", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Scheme", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsUnixPipe", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_UnixPipePath", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ToString", - "Parameters": [], - "ReturnType": "System.String", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetHashCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Equals", - "Parameters": [ - { - "Name": "obj", - "Type": "System.Object" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FromUrl", - "Parameters": [ - { - "Name": "url", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Libuv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Threads", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateServer", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelServerOptionsSetup", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.Extensions.Options.IConfigureOptions" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Configure", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Options.IConfigureOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "services", - "Type": "System.IServiceProvider" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_AppLifetime", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Hosting.IApplicationLifetime", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_AppLifetime", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Hosting.IApplicationLifetime" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Log", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Log", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadPool", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ThreadPool", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameFactory", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_FrameFactory", - "Parameters": [ - { - "Name": "value", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_DateHeaderValueManager", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_DateHeaderValueManager", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ServerOptions", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerOptions", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Disposable", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "dispose", - "Type": "System.Action" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Loop", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FatalError", - "Parameters": [], - "ReturnType": "System.Runtime.ExceptionServices.ExceptionDispatchInfo", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_QueueCloseHandle", - "Parameters": [], - "ReturnType": "System.Action, System.IntPtr>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AllowStop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [ - { - "Name": "timeout", - "Type": "System.TimeSpan" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Post", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PostAsync", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Walk", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "engine", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelEngine" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelTrace", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - ], - "Members": [ - { - "Kind": "Method", - "Name": "ConnectionStart", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionStop", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionRead", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionPause", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionResume", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionReadFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWroteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionKeepAlive", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnect", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteCallback", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ApplicationError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnectedWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NotAllConnectionsClosedGracefully", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionBadRequest", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Log", - "Parameters": [ - { - "Name": "logLevel", - "Type": "Microsoft.Extensions.Logging.LogLevel" - }, - { - "Name": "eventId", - "Type": "Microsoft.Extensions.Logging.EventId" - }, - { - "Name": "state", - "Type": "T0" - }, - { - "Name": "exception", - "Type": "System.Exception" - }, - { - "Name": "formatter", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TState", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Method", - "Name": "IsEnabled", - "Parameters": [ - { - "Name": "logLevel", - "Type": "Microsoft.Extensions.Logging.LogLevel" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginScope", - "Parameters": [ - { - "Name": "state", - "Type": "T0" - } - ], - "ReturnType": "System.IDisposable", - "Virtual": true, - "ImplementedInterface": "Microsoft.Extensions.Logging.ILogger", - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "TState", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_logger", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Logging.ILogger", - "ReadOnly": true, - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Check", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Check", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_init", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_close", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "run", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "mode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "stop", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ref", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "unref", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "uv_fileno", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "close", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "close_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "close", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "close_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "async_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_async_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "async_send", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "unsafe_async_send", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_bind", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_open", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "hSocket", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_nodelay", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "enable", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "ipc", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_bind", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "listen", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "backlog", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connection_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "accept", - "Parameters": [ - { - "Name": "server", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "client", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_connect", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvConnectRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connect_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "pipe_pending_count", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "read_start", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "alloc_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_alloc_cb" - }, - { - "Name": "read_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_read_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "read_stop", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "try_write", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t[]" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "write", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "write2", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "shutdown", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvShutdownReq" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_shutdown_cb" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "err_name", - "Parameters": [ - { - "Name": "err", - "Type": "System.Int32" - } - ], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "strerror", - "Parameters": [ - { - "Name": "err", - "Type": "System.Int32" - } - ], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "loop_size", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "handle_size", - "Parameters": [ - { - "Name": "handleType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+HandleType" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "req_size", - "Parameters": [ - { - "Name": "reqType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+RequestType" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ip4_addr", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ip6_addr", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "error", - "Type": "System.Exception", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "walk", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "walk_cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_walk_cb" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_getsockname", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "tcp_getpeername", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "buf_init", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "len", - "Type": "System.Int32" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "IsWindows", - "Parameters": [], - "ReturnType": "System.Boolean", - "ReadOnly": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_close", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_run", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_stop", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ref", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_unref", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_fileno", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_fileno_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_close", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_async_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_async_send", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_unsafe_async_send", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_bind", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_bind_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_open", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_nodelay", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_init", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_bind", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_listen", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_accept", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_connect", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_pipe_pending_count", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_read_start", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_read_stop", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_try_write", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_write", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_write2", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write2_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_shutdown", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_err_name", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_strerror", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_loop_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_handle_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_req_size", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ip4_addr", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip4_addr_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_ip6_addr", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip6_addr_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_walk", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_getsockname", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getsockname_func", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv_tcp_getpeername", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getpeername_func", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.PlatformApis", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_IsWindows", - "Parameters": [], - "ReturnType": "System.Boolean", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsDarwin", - "Parameters": [], - "ReturnType": "System.Boolean", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "ignored", - "Type": "System.Int64" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvAsyncHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Send", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvConnectRequest", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Connect", - "Parameters": [ - { - "Name": "pipe", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle" - }, - { - "Name": "name", - "Type": "System.String" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.Exception", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_StatusCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "message", - "Type": "System.String" - }, - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateHandle", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - }, - { - "Name": "threadId", - "Type": "System.Int32" - }, - { - "Name": "size", - "Type": "System.Int32" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reference", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Unreference", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "mode", - "Type": "System.Int32", - "DefaultValue": "0" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "System.Runtime.InteropServices.SafeHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Libuv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsInvalid", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ThreadId", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateMemory", - "Parameters": [ - { - "Name": "uv", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv" - }, - { - "Name": "threadId", - "Type": "System.Int32" - }, - { - "Name": "size", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DestroyMemory", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DestroyMemory", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "gcHandlePtr", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Validate", - "Parameters": [ - { - "Name": "closed", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FromIntPtr", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "T0", - "Static": true, - "Visibility": "Public", - "GenericParameter": [ - { - "ParameterName": "THandle", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_uv", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_threadId", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_log", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "ReadOnly": true, - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvPipeHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - }, - { - "Name": "ipc", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Bind", - "Parameters": [ - { - "Name": "name", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PendingCount", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvMemory", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Pin", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Unpin", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvShutdownReq", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Shutdown", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Connection", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Connection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReleaseHandle", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Listen", - "Parameters": [ - { - "Name": "backlog", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Accept", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadStart", - "Parameters": [ - { - "Name": "allocCallback", - "Type": "System.Func" - }, - { - "Name": "readCallback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadStop", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryWrite", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - }, - { - "Name": "queueCloseHandle", - "Type": "System.Action, System.IntPtr>" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Bind", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetPeerIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetSockIPEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Open", - "Parameters": [ - { - "Name": "hSocket", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NoDelay", - "Parameters": [ - { - "Name": "enable", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateIPEndpoint", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Net.IPEndPoint", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvWriteReq", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Init", - "Parameters": [ - { - "Name": "loop", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvLoopHandle" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "nBuffers", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write2", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "System.ArraySegment>" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "callback", - "Type": "System.Action" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [ - "Microsoft.Extensions.Logging.ILogger" - ], - "Members": [ - { - "Kind": "Method", - "Name": "ConnectionStart", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionStop", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionRead", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionPause", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionResume", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionReadFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWroteFin", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionKeepAlive", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnect", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionWriteCallback", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionDisconnectedWrite", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionBadRequest", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "NotAllConnectionsClosedGracefully", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ApplicationError", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Complete", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Cancel", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Error", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "action", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.LoggingThreadPool", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Run", - "Parameters": [ - { - "Name": "action", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Complete", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Cancel", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Error", - "Parameters": [ - { - "Name": "tcs", - "Type": "System.Threading.Tasks.TaskCompletionSource" - }, - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "log", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Lease", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Return", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaxPooledBlockLength", - "Parameters": [], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "4032" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Pool", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Slab", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Array", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Finalize", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ToString", - "Parameters": [], - "ReturnType": "System.String", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetIterator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "dataArrayPtr", - "Type": "System.IntPtr" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "DataArrayPtr", - "Parameters": [], - "ReturnType": "System.IntPtr", - "ReadOnly": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Data", - "Parameters": [], - "ReturnType": "System.ArraySegment", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "End", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Next", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_IsDefault", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsEnd", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Block", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Index", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Take", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Skip", - "Parameters": [ - { - "Name": "bytesToSkip", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Peek", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PeekLong", - "Parameters": [], - "ReturnType": "System.Int64", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - }, - { - "Name": "byte1Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "byte0Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - }, - { - "Name": "byte1Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - }, - { - "Name": "byte2Vector", - "Type": "System.Numerics.Vector`1[[System.Byte, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Put", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetLength", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyTo", - "Parameters": [ - { - "Name": "array", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "actual", - "Type": "System.Int32", - "Direction": "Out" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFrom", - "Parameters": [ - { - "Name": "data", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyFromAscii", - "Parameters": [ - { - "Name": "data", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "block", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock" - }, - { - "Name": "index", - "Type": "System.Int32" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIteratorExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetAsciiString", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.String", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetUtf8String", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.String", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetArraySegment", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.ArraySegment", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetKnownMethod", - "Parameters": [ - { - "Name": "begin", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "knownMethod", - "Type": "System.String", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetKnownVersion", - "Parameters": [ - { - "Name": "begin", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "knownVersion", - "Type": "System.String", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "HttpConnectMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"CONNECT\"" - }, - { - "Kind": "Field", - "Name": "HttpDeleteMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"DELETE\"" - }, - { - "Kind": "Field", - "Name": "HttpGetMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"GET\"" - }, - { - "Kind": "Field", - "Name": "HttpHeadMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HEAD\"" - }, - { - "Kind": "Field", - "Name": "HttpPatchMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"PATCH\"" - }, - { - "Kind": "Field", - "Name": "HttpPostMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"POST\"" - }, - { - "Kind": "Field", - "Name": "HttpPutMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"PUT\"" - }, - { - "Kind": "Field", - "Name": "HttpOptionsMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"OPTIONS\"" - }, - { - "Kind": "Field", - "Name": "HttpTraceMethod", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"TRACE\"" - }, - { - "Kind": "Field", - "Name": "Http10Version", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HTTP/1.0\"" - }, - { - "Kind": "Field", - "Name": "Http11Version", - "Parameters": [], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "\"HTTP/1.1\"" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Create", - "Parameters": [ - { - "Name": "length", - "Type": "System.Int32" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolSlab", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [ - { - "Name": "disposing", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Finalize", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Array", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "ArrayPtr", - "Parameters": [], - "ReturnType": "System.IntPtr", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "IsActive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.TaskUtilities", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "GetCancelledTask", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCancelledZeroTask", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "CompletedTask", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "ZeroTask", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.BufferSizeControl", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Add", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Subtract", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "maxSize", - "Type": "System.Int64" - }, - { - "Name": "connectionControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - }, - { - "Name": "connectionThread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ChunkWriter", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "BeginChunkBytes", - "Parameters": [ - { - "Name": "dataCount", - "Type": "System.Int32" - } - ], - "ReturnType": "System.ArraySegment", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteBeginChunkBytes", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - }, - { - "Name": "dataCount", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteEndChunkBytes", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StopAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnSocketClosed", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - }, - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_SocketInput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SocketInput", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SocketOutput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SocketOutput", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionControl", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemoteEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteEndPoint", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPEndPoint" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalEndPoint", - "Parameters": [], - "ReturnType": "System.Net.IPEndPoint", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalEndPoint", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPEndPoint" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionId", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionId", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PrepareRequest", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PrepareRequest", - "Parameters": [ - { - "Name": "value", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "WalkConnectionsAndClose", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WaitForConnectionCloseAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "GetDateHeaderValues", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager+DateHeaderValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Microsoft.AspNetCore.Http.Features.IFeatureCollection", - "Microsoft.AspNetCore.Http.Features.IHttpRequestFeature", - "Microsoft.AspNetCore.Http.Features.IHttpResponseFeature", - "Microsoft.AspNetCore.Http.Features.IHttpUpgradeFeature", - "Microsoft.AspNetCore.Http.Features.IHttpConnectionFeature", - "Microsoft.AspNetCore.Http.Features.IHttpRequestLifetimeFeature" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_ConnectionIdFeature", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionIdFeature", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemoteIpAddress", - "Parameters": [], - "ReturnType": "System.Net.IPAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteIpAddress", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RemotePort", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemotePort", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalIpAddress", - "Parameters": [], - "ReturnType": "System.Net.IPAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalIpAddress", - "Parameters": [ - { - "Name": "value", - "Type": "System.Net.IPAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_LocalPort", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_LocalPort", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Scheme", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Scheme", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Method", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Method", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PathBase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PathBase", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Path", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Path", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_QueryString", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_QueryString", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RawTarget", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RawTarget", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HttpVersion", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HttpVersion", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.IHeaderDictionary", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Http.IHeaderDictionary" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestBody", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestBody", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_StatusCode", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_StatusCode", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ReasonPhrase", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ReasonPhrase", - "Parameters": [ - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ResponseHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Http.IHeaderDictionary", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ResponseHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Http.IHeaderDictionary" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ResponseBody", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ResponseBody", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_DuplexStream", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_DuplexStream", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_RequestAborted", - "Parameters": [], - "ReturnType": "System.Threading.CancellationToken", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestAborted", - "Parameters": [ - { - "Name": "value", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasResponseStarted", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameRequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameResponseHeaders", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "InitializeHeaders", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "InitializeStreams", - "Parameters": [ - { - "Name": "messageBody", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "PauseStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ResumeStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StopStreams", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Start", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Stop", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RequestProcessingAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Abstract": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnStarting", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Func" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnCompleted", - "Parameters": [ - { - "Name": "callback", - "Type": "System.Func" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FireOnStarting", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FireOnCompleted", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsyncAwaited", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceContinue", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceStartAndFireOnStarting", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryProduceInvalidRequestResponse", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProduceEnd", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TakeStartLine", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestLineStatus", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TakeMessageHeaders", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "requestHeaders", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StatusCanHaveBody", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RejectRequest", - "Parameters": [ - { - "Name": "message", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetBadRequestState", - "Parameters": [ - { - "Name": "ex", - "Type": "Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReportApplicationError", - "Parameters": [ - { - "Name": "ex", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ResetFeatureCollection", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_FrameControl", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_FrameControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestRejected", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_onStarting", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List, System.Object>>", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_onCompleted", - "Parameters": [], - "ReturnType": "System.Collections.Generic.List, System.Object>>", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestProcessingStopping", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestAborted", - "Parameters": [], - "ReturnType": "System.Int32", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_requestProcessingStatus", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestProcessingStatus", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_keepAlive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_applicationException", - "Parameters": [], - "ReturnType": "System.Exception", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Http.IHeaderDictionary" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_Unknown", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Dictionary", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowReadOnlyException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowArgumentException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowKeyNotFoundException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ThrowDuplicateKeyException", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetReadOnly", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AppendValue", - "Parameters": [ - { - "Name": "existing", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "append", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BitCount", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ValidateHeaderCharacters", - "Parameters": [ - { - "Name": "headerValues", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ValidateHeaderCharacters", - "Parameters": [ - { - "Name": "headerCharacters", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "_isReadOnly", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaybeUnknown", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Dictionary", - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_HeaderCacheControl", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCacheControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderConnection", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderDate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderKeepAlive", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderPragma", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderPragma", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTrailer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTrailer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTransferEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUpgrade", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUpgrade", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVia", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVia", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWarning", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWarning", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAllow", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAllow", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLength", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentType", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentType", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentMD5", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentMD5", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpires", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpires", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLastModified", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLastModified", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccept", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccept", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptCharset", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptCharset", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAuthorization", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAuthorization", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderCookie", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCookie", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpect", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpect", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderFrom", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderFrom", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderHost", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderHost", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfMatch", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfMatch", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfModifiedSince", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfModifiedSince", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfNoneMatch", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfNoneMatch", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderIfUnmodifiedSince", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderIfUnmodifiedSince", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderMaxForwards", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderMaxForwards", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderProxyAuthorization", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderProxyAuthorization", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderReferer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderReferer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTE", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTE", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTranslate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTranslate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUserAgent", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUserAgent", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderOrigin", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderOrigin", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlRequestMethod", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlRequestMethod", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlRequestHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlRequestHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Append", - "Parameters": [ - { - "Name": "keyBytes", - "Type": "System.Byte[]" - }, - { - "Name": "keyOffset", - "Type": "System.Int32" - }, - { - "Name": "keyLength", - "Type": "System.Int32" - }, - { - "Name": "value", - "Type": "System.String" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumerator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders+Enumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_HeaderCacheControl", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderCacheControl", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderConnection", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderDate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderKeepAlive", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderPragma", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderPragma", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTrailer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTrailer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderTransferEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderUpgrade", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderUpgrade", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVia", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVia", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWarning", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWarning", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAllow", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAllow", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLength", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentType", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentType", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentEncoding", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLanguage", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLanguage", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentMD5", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentMD5", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderContentRange", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderContentRange", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderExpires", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderExpires", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLastModified", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLastModified", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAcceptRanges", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAcceptRanges", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAge", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAge", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderETag", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderETag", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderLocation", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderLocation", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderProxyAutheticate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderProxyAutheticate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderRetryAfter", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderRetryAfter", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderServer", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderServer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderSetCookie", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderSetCookie", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderVary", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderVary", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderWWWAuthenticate", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderWWWAuthenticate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowCredentials", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowCredentials", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowMethods", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowMethods", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlAllowOrigin", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlAllowOrigin", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlExposeHeaders", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlExposeHeaders", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HeaderAccessControlMaxAge", - "Parameters": [], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_HeaderAccessControlMaxAge", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawConnection", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawDate", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawTransferEncoding", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawContentLength", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetRawServer", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - }, - { - "Name": "raw", - "Type": "System.Byte[]" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetCountFast", - "Parameters": [], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.Extensions.Primitives.StringValues", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "TryGetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues", - "Direction": "Out" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AddValueFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - }, - { - "Name": "value", - "Type": "Microsoft.Extensions.Primitives.StringValues" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "RemoveFast", - "Parameters": [ - { - "Name": "key", - "Type": "System.String" - } - ], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ClearFast", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "array", - "Type": "System.Collections.Generic.KeyValuePair[]" - }, - { - "Name": "arrayIndex", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyToFast", - "Parameters": [ - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasConnection", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasTransferEncoding", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasContentLength", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasServer", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_HasDate", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumerator", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders+Enumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetEnumeratorFast", - "Parameters": [], - "ReturnType": "System.Collections.Generic.IEnumerator>", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CopyTo", - "Parameters": [ - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "RequestProcessingAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "application", - "Type": "Microsoft.AspNetCore.Hosting.Server.IHttpApplication" - }, - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [ - { - "ParameterName": "TContext", - "ParameterPosition": 0, - "BaseTypeOrInterfaces": [] - } - ] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Add", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Subtract", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IConnectionControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Pause", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Resume", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "End", - "Parameters": [ - { - "Name": "endType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IFrameControl", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ProduceContinue", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "data", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_ListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConnectionCallback", - "Parameters": [ - { - "Name": "stream", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception" - }, - { - "Name": "state", - "Type": "System.Object" - } - ], - "ReturnType": "System.Void", - "Static": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DispatchConnection", - "Parameters": [ - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ServerAddress", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerAddress", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Thread", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Thread", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Memory", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Memory", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ConnectionManager", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ConnectionManager", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ConnectionManager" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_WriteReqPool", - "Parameters": [], - "ReturnType": "System.Collections.Generic.Queue", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_WriteReqPool", - "Parameters": [ - { - "Name": "value", - "Type": "System.Collections.Generic.Queue" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "listenerContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "pipeName", - "Type": "System.String" - }, - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DispatchConnection", - "Parameters": [ - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerContext", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "StartAsync", - "Parameters": [ - { - "Name": "pipeName", - "Type": "System.String" - }, - { - "Name": "address", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - }, - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Abstract": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "DisposeAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IAsyncDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_RequestKeepAlive", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RequestKeepAlive", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Consume", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken", - "DefaultValue": "default(System.Threading.CancellationToken)" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsyncImplementation", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Virtual": true, - "Abstract": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "For", - "Parameters": [ - { - "Name": "httpVersion", - "Type": "System.String" - }, - { - "Name": "headers", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders" - }, - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.MessageBody", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame" - } - ], - "Visibility": "Protected", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PathNormalizer", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "RemoveDotSegments", - "Parameters": [ - { - "Name": "path", - "Type": "System.String" - } - ], - "ReturnType": "System.String", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListener", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.PipeListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "SocketShutdown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "SocketDisconnect", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "ConnectionKeepAlive", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ReasonPhrases", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ToStatusBytes", - "Parameters": [ - { - "Name": "statusCode", - "Type": "System.Int32" - }, - { - "Name": "reasonPhrase", - "Type": "System.String", - "DefaultValue": "null" - } - ], - "ReturnType": "System.Byte[]", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.Runtime.CompilerServices.ICriticalNotifyCompletion", - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_RemoteIntakeFin", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_RemoteIntakeFin", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_IsCompleted", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolBlock", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingData", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingComplete", - "Parameters": [ - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "error", - "Type": "System.Exception" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingDeferred", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "IncomingFin", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConsumingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ConsumingComplete", - "Parameters": [ - { - "Name": "consumed", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "examined", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "CompleteAwaiting", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "AbortAwaiting", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetAwaiter", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnCompleted", - "Parameters": [ - { - "Name": "continuation", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Runtime.CompilerServices.INotifyCompletion", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UnsafeOnCompleted", - "Parameters": [ - { - "Name": "continuation", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Runtime.CompilerServices.ICriticalNotifyCompletion", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "GetResult", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "bufferSizeControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl", - "DefaultValue": "null" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInputExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Threading.Tasks.ValueTask", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketOutput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - ], - "Members": [ - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - }, - { - "Name": "chunk", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "socketShutdownSend", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "socketDisconnect", - "Type": "System.Boolean", - "DefaultValue": "False" - }, - { - "Name": "isSync", - "Type": "System.Boolean", - "DefaultValue": "False" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "End", - "Parameters": [ - { - "Name": "endType", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ProduceEndType" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "thread", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.KestrelThread" - }, - { - "Name": "socket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "connection", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Connection" - }, - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "log", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "writeReqPool", - "Type": "System.Collections.Generic.Queue" - } - ], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "MaxPooledWriteReqs", - "Parameters": [], - "ReturnType": "System.Int32", - "Static": true, - "Visibility": "Public", - "GenericParameter": [], - "Constant": true, - "Literal": "1024" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListener", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Listener", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListenerPrimary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerPrimary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateListenSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "OnConnection", - "Parameters": [ - { - "Name": "listenSocket", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.TcpListenerSecondary", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ListenerSecondary", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "CreateAcceptSocket", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle", - "Virtual": true, - "Override": true, - "Visibility": "Protected", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "serviceContext", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.ServiceContext" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.UrlPathDecoder", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Unescape", - "Parameters": [ - { - "Name": "start", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - }, - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Static": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_Address", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Address", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.ServerAddress" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Connection", - "Parameters": [], - "ReturnType": "System.IO.Stream", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Connection", - "Parameters": [ - { - "Name": "value", - "Type": "System.IO.Stream" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_PrepareRequest", - "Parameters": [], - "ReturnType": "System.Action", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_PrepareRequest", - "Parameters": [ - { - "Name": "value", - "Type": "System.Action" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "Kind": "Interface", - "Abstract": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.LoggingConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "logger", - "Type": "Microsoft.Extensions.Logging.ILogger" - }, - { - "Name": "previous", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.NoOpConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.FilteredStreamAdapter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "System.IDisposable" - ], - "Members": [ - { - "Kind": "Method", - "Name": "get_SocketInput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SocketOutput", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadInputAsync", - "Parameters": [], - "ReturnType": "System.Threading.Tasks.Task", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Abort", - "Parameters": [], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "filteredStream", - "Type": "System.IO.Stream" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - }, - { - "Name": "threadPool", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IThreadPool" - }, - { - "Name": "bufferSizeControl", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.IBufferSizeControl" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.LibuvStream", - "Visibility": "Public", - "Kind": "Class", - "BaseType": "System.IO.Stream", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_CanRead", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CanSeek", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CanWrite", - "Parameters": [], - "ReturnType": "System.Boolean", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Length", - "Parameters": [], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Position", - "Parameters": [], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_Position", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Seek", - "Parameters": [ - { - "Name": "offset", - "Type": "System.Int64" - }, - { - "Name": "origin", - "Type": "System.IO.SeekOrigin" - } - ], - "ReturnType": "System.Int64", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "SetLength", - "Parameters": [ - { - "Name": "value", - "Type": "System.Int64" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Read", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ReadAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.Byte[]" - }, - { - "Name": "offset", - "Type": "System.Int32" - }, - { - "Name": "count", - "Type": "System.Int32" - }, - { - "Name": "token", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Flush", - "Parameters": [], - "ReturnType": "System.Void", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "FlushAsync", - "Parameters": [ - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Virtual": true, - "Override": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "input", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.SocketInput" - }, - { - "Name": "output", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Filter.Internal.StreamSocketOutput", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput" - ], - "Members": [ - { - "Kind": "Method", - "Name": "Write", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "WriteAsync", - "Parameters": [ - { - "Name": "buffer", - "Type": "System.ArraySegment" - }, - { - "Name": "chunk", - "Type": "System.Boolean" - }, - { - "Name": "cancellationToken", - "Type": "System.Threading.CancellationToken" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingStart", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "ProducingComplete", - "Parameters": [ - { - "Name": "end", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIterator" - } - ], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.ISocketOutput", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "connectionId", - "Type": "System.String" - }, - { - "Name": "outputStream", - "Type": "System.IO.Stream" - }, - { - "Name": "memory", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPool" - }, - { - "Name": "logger", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.IKestrelTrace" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_fileno_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvHandle" - }, - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "socket", - "Type": "System.IntPtr", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_close_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_async_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_bind_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "flags", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connection_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_connect_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_alloc_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "suggested_size", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "suggested_size", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_read_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "nread", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "server", - "Type": "System.IntPtr" - }, - { - "Name": "nread", - "Type": "System.Int32" - }, - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "buf", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write2_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvRequest" - }, - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "bufs", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t*" - }, - { - "Name": "nbufs", - "Type": "System.Int32" - }, - { - "Name": "sendHandle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvStreamHandle" - }, - { - "Name": "cb", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_write_cb" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_shutdown_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "req", - "Type": "System.IntPtr" - }, - { - "Name": "status", - "Type": "System.Int32" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip4_addr_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_ip6_addr_func", - "Visibility": "Protected", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "ip", - "Type": "System.String" - }, - { - "Name": "port", - "Type": "System.Int32" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_walk_cb", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "System.IntPtr" - }, - { - "Name": "arg", - "Type": "System.IntPtr" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Void", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getsockname_func", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_tcp_getpeername_func", - "Visibility": "Public", - "Kind": "Class", - "Sealed": true, - "BaseType": "System.MulticastDelegate", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "Invoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "BeginInvoke", - "Parameters": [ - { - "Name": "handle", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvTcpHandle" - }, - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "callback", - "Type": "System.AsyncCallback" - }, - { - "Name": "object", - "Type": "System.Object" - } - ], - "ReturnType": "System.IAsyncResult", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "EndInvoke", - "Parameters": [ - { - "Name": "addr", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.SockAddr", - "Direction": "Out" - }, - { - "Name": "namelen", - "Type": "System.Int32", - "Direction": "Ref" - }, - { - "Name": "result", - "Type": "System.IAsyncResult" - } - ], - "ReturnType": "System.Int32", - "Virtual": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "object", - "Type": "System.Object" - }, - { - "Name": "method", - "Type": "System.IntPtr" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+uv_buf_t", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "memory", - "Type": "System.IntPtr" - }, - { - "Name": "len", - "Type": "System.Int32" - }, - { - "Name": "IsWindows", - "Type": "System.Boolean" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+HandleType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Unknown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "ASYNC", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "CHECK", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "FS_EVENT", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "FS_POLL", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "HANDLE", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - }, - { - "Kind": "Field", - "Name": "IDLE", - "Parameters": [], - "GenericParameter": [], - "Literal": "6" - }, - { - "Kind": "Field", - "Name": "NAMED_PIPE", - "Parameters": [], - "GenericParameter": [], - "Literal": "7" - }, - { - "Kind": "Field", - "Name": "POLL", - "Parameters": [], - "GenericParameter": [], - "Literal": "8" - }, - { - "Kind": "Field", - "Name": "PREPARE", - "Parameters": [], - "GenericParameter": [], - "Literal": "9" - }, - { - "Kind": "Field", - "Name": "PROCESS", - "Parameters": [], - "GenericParameter": [], - "Literal": "10" - }, - { - "Kind": "Field", - "Name": "STREAM", - "Parameters": [], - "GenericParameter": [], - "Literal": "11" - }, - { - "Kind": "Field", - "Name": "TCP", - "Parameters": [], - "GenericParameter": [], - "Literal": "12" - }, - { - "Kind": "Field", - "Name": "TIMER", - "Parameters": [], - "GenericParameter": [], - "Literal": "13" - }, - { - "Kind": "Field", - "Name": "TTY", - "Parameters": [], - "GenericParameter": [], - "Literal": "14" - }, - { - "Kind": "Field", - "Name": "UDP", - "Parameters": [], - "GenericParameter": [], - "Literal": "15" - }, - { - "Kind": "Field", - "Name": "SIGNAL", - "Parameters": [], - "GenericParameter": [], - "Literal": "16" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.Libuv+RequestType", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Unknown", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "REQ", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "CONNECT", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "WRITE", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "SHUTDOWN", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "UDP_SEND", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - }, - { - "Kind": "Field", - "Name": "FS", - "Parameters": [], - "GenericParameter": [], - "Literal": "6" - }, - { - "Kind": "Field", - "Name": "WORK", - "Parameters": [], - "GenericParameter": [], - "Literal": "7" - }, - { - "Kind": "Field", - "Name": "GETADDRINFO", - "Parameters": [], - "GenericParameter": [], - "Literal": "8" - }, - { - "Kind": "Field", - "Name": "GETNAMEINFO", - "Parameters": [], - "GenericParameter": [], - "Literal": "9" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.DateHeaderValueManager+DateHeaderValues", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "Bytes", - "Parameters": [], - "ReturnType": "System.Byte[]", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Field", - "Name": "String", - "Parameters": [], - "ReturnType": "System.String", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestLineStatus", - "Visibility": "Protected", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "Empty", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "MethodIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "TargetIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - }, - { - "Kind": "Field", - "Name": "VersionIncomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "3" - }, - { - "Kind": "Field", - "Name": "Incomplete", - "Parameters": [], - "GenericParameter": [], - "Literal": "4" - }, - { - "Kind": "Field", - "Name": "Done", - "Parameters": [], - "GenericParameter": [], - "Literal": "5" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame+RequestProcessingStatus", - "Visibility": "Protected", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "RequestPending", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "RequestStarted", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "ResponseStarted", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestHeaders+Enumerator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [ - "System.Collections.Generic.IEnumerator>" - ], - "Members": [ - { - "Kind": "Method", - "Name": "MoveNext", - "Parameters": [], - "ReturnType": "System.Boolean", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Current", - "Parameters": [], - "ReturnType": "System.Collections.Generic.KeyValuePair", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.Generic.IEnumerator>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameResponseHeaders+Enumerator", - "Visibility": "Public", - "Kind": "Struct", - "Sealed": true, - "ImplementedInterfaces": [ - "System.Collections.Generic.IEnumerator>" - ], - "Members": [ - { - "Kind": "Method", - "Name": "MoveNext", - "Parameters": [], - "ReturnType": "System.Boolean", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_Current", - "Parameters": [], - "ReturnType": "System.Collections.Generic.KeyValuePair", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.Generic.IEnumerator>", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Dispose", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.IDisposable", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "Reset", - "Parameters": [], - "ReturnType": "System.Void", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "System.Collections.IEnumerator", - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json deleted file mode 100644 index 95752b837..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.net45.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "OldTypeId": "public static class Microsoft.AspNetCore.Hosting.KestrelServerOptionsConnectionLoggingExtensions", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext", - "Kind": "Removal" - }, - { - "OldTypeId": "public interface Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.LoggingConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.NoOpConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter get_ConnectionFilter()", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Void set_ConnectionFilter(Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter value)", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Boolean get_NoDelay()", - "NewTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.ListenOptions", - "NewMemberId": "public System.Boolean get_NoDelay()", - "Kind": "Modification" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Void set_NoDelay(System.Boolean value)", - "NewTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.ListenOptions", - "NewMemberId": "public System.Void set_NoDelay(System.Boolean value)", - "Kind": "Modification" - } -] \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json deleted file mode 100644 index 95752b837..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/exceptions.netcore.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "OldTypeId": "public static class Microsoft.AspNetCore.Hosting.KestrelServerOptionsConnectionLoggingExtensions", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext", - "Kind": "Removal" - }, - { - "OldTypeId": "public interface Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.LoggingConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Filter.NoOpConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter get_ConnectionFilter()", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Void set_ConnectionFilter(Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter value)", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Boolean get_NoDelay()", - "NewTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.ListenOptions", - "NewMemberId": "public System.Boolean get_NoDelay()", - "Kind": "Modification" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "OldMemberId": "public System.Void set_NoDelay(System.Boolean value)", - "NewTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.ListenOptions", - "NewMemberId": "public System.Void set_NoDelay(System.Boolean value)", - "Kind": "Modification" - } -] \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj index 4a024bc17..f49fae363 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Https/Microsoft.AspNetCore.Server.Kestrel.Https.csproj @@ -8,6 +8,7 @@ true aspnetcore;kestrel CS1591;$(NoWarn) + false diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.net45.json deleted file mode 100644 index f6e1715d5..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.net45.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.AspNetCore.Server.Kestrel.Https, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.AspNetCore.Hosting.KestrelServerOptionsHttpsExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "fileName", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "fileName", - "Type": "System.String" - }, - { - "Name": "password", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "serverCertificate", - "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "httpsOptions", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "NoCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "AllowCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "RequireCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions" - }, - { - "Name": "previous", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ServerCertificate", - "Parameters": [], - "ReturnType": "System.Security.Cryptography.X509Certificates.X509Certificate2", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerCertificate", - "Parameters": [ - { - "Name": "value", - "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ClientCertificateMode", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ClientCertificateMode", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ClientCertificateValidation", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ClientCertificateValidation", - "Parameters": [ - { - "Name": "value", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SslProtocols", - "Parameters": [], - "ReturnType": "System.Security.Authentication.SslProtocols", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SslProtocols", - "Parameters": [ - { - "Name": "value", - "Type": "System.Security.Authentication.SslProtocols" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CheckCertificateRevocation", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_CheckCertificateRevocation", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.netcore.json deleted file mode 100644 index f6e1715d5..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/baseline.netcore.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "AssemblyIdentity": "Microsoft.AspNetCore.Server.Kestrel.Https, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60", - "Types": [ - { - "Name": "Microsoft.AspNetCore.Hosting.KestrelServerOptionsHttpsExtensions", - "Visibility": "Public", - "Kind": "Class", - "Abstract": true, - "Static": true, - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "fileName", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "fileName", - "Type": "System.String" - }, - { - "Name": "password", - "Type": "System.String" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "serverCertificate", - "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "UseHttps", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions" - }, - { - "Name": "httpsOptions", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions" - } - ], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions", - "Static": true, - "Extension": true, - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode", - "Visibility": "Public", - "Kind": "Enumeration", - "Sealed": true, - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Field", - "Name": "NoCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "0" - }, - { - "Kind": "Field", - "Name": "AllowCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "1" - }, - { - "Kind": "Field", - "Name": "RequireCertificate", - "Parameters": [], - "GenericParameter": [], - "Literal": "2" - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [ - "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - ], - "Members": [ - { - "Kind": "Method", - "Name": "OnConnectionAsync", - "Parameters": [ - { - "Name": "context", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.ConnectionFilterContext" - } - ], - "ReturnType": "System.Threading.Tasks.Task", - "Sealed": true, - "Virtual": true, - "ImplementedInterface": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [ - { - "Name": "options", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions" - }, - { - "Name": "previous", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter" - } - ], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - }, - { - "Name": "Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions", - "Visibility": "Public", - "Kind": "Class", - "ImplementedInterfaces": [], - "Members": [ - { - "Kind": "Method", - "Name": "get_ServerCertificate", - "Parameters": [], - "ReturnType": "System.Security.Cryptography.X509Certificates.X509Certificate2", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ServerCertificate", - "Parameters": [ - { - "Name": "value", - "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ClientCertificateMode", - "Parameters": [], - "ReturnType": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ClientCertificateMode", - "Parameters": [ - { - "Name": "value", - "Type": "Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_ClientCertificateValidation", - "Parameters": [], - "ReturnType": "System.Func", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_ClientCertificateValidation", - "Parameters": [ - { - "Name": "value", - "Type": "System.Func" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_SslProtocols", - "Parameters": [], - "ReturnType": "System.Security.Authentication.SslProtocols", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_SslProtocols", - "Parameters": [ - { - "Name": "value", - "Type": "System.Security.Authentication.SslProtocols" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "get_CheckCertificateRevocation", - "Parameters": [], - "ReturnType": "System.Boolean", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Method", - "Name": "set_CheckCertificateRevocation", - "Parameters": [ - { - "Name": "value", - "Type": "System.Boolean" - } - ], - "ReturnType": "System.Void", - "Visibility": "Public", - "GenericParameter": [] - }, - { - "Kind": "Constructor", - "Name": ".ctor", - "Parameters": [], - "Visibility": "Public", - "GenericParameter": [] - } - ], - "GenericParameters": [] - } - ] -} \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.net45.json b/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.net45.json deleted file mode 100644 index c063085ff..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.net45.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OldTypeId": "public static class Microsoft.AspNetCore.Hosting.KestrelServerOptionsHttpsExtensions", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions", - "Kind": "Removal" - } -] \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.netcore.json b/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.netcore.json deleted file mode 100644 index c063085ff..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/exceptions.netcore.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OldTypeId": "public static class Microsoft.AspNetCore.Hosting.KestrelServerOptionsHttpsExtensions", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilter : Microsoft.AspNetCore.Server.Kestrel.Filter.IConnectionFilter", - "Kind": "Removal" - }, - { - "OldTypeId": "public class Microsoft.AspNetCore.Server.Kestrel.Https.HttpsConnectionFilterOptions", - "Kind": "Removal" - } -] \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Connection.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ConnectionManager.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/IAsyncDisposable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/IAsyncDisposable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/IAsyncDisposable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/IAsyncDisposable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Listener.cs similarity index 98% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Listener.cs index 3e97e2e2c..9666be818 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/Listener.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Listener.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs similarity index 96% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs index d0742e1a4..f68c172c5 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs @@ -4,7 +4,7 @@ using System; using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerPrimary.cs similarity index 99% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerPrimary.cs index d4ba1e5b8..8d47e7871 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerPrimary.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerPrimary.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerSecondary.cs similarity index 98% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerSecondary.cs index 9523cb571..243a72472 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/ListenerSecondary.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerSecondary.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/SocketOutputConsumer.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Http/SocketOutputConsumer.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/SocketOutputConsumer.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/Constants.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/Constants.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/Constants.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/KestrelEventSource.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelEventSource.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/KestrelEventSource.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/KestrelThread.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/KestrelThread.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/KestrelThread.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LibuvAwaitable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/LibuvAwaitable.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/WriteReqPool.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/WriteReqPool.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Infrastructure/WriteReqPool.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/WriteReqPool.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs similarity index 89% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs index 02672dce4..0541c3015 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/LibuvTransportContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs @@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Transport; -namespace Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal +namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal { public class LibuvTransportContext { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/Libuv.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/Libuv.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/Libuv.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/PlatformApis.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/PlatformApis.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/PlatformApis.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/PlatformApis.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/SockAddr.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/SockAddr.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/SockAddr.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/SockAddr.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvAsyncHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvAsyncHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvAsyncHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvAsyncHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvConnectRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvConnectRequest.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvConnectRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvConnectRequest.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvException.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvException.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvException.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvException.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvLoopHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvLoopHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvLoopHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvLoopHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvMemory.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvMemory.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvMemory.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvPipeHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvPipeHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvPipeHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvPipeHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvRequest.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvRequest.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvRequest.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvRequest.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvShutdownReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvShutdownReq.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvShutdownReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvShutdownReq.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvStreamHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvStreamHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvStreamHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvStreamHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTcpHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTcpHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTimerHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTimerHandle.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvTimerHandle.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTimerHandle.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvWriteReq.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvWriteReq.cs similarity index 100% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Internal/Networking/UvWriteReq.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvWriteReq.cs diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs similarity index 97% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs index 7ccd200dd..095644437 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs @@ -9,8 +9,8 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Logging; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs similarity index 95% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs index 1ccad1237..d95aee5d9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportFactory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs @@ -5,12 +5,12 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv { public class LibuvTransportFactory : ITransportFactory { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportOptions.cs similarity index 97% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportOptions.cs index 9b233cbd2..974607d8a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/LibuvTransportOptions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportOptions.cs @@ -3,7 +3,7 @@ using System; -namespace Microsoft.AspNetCore.Server.Kestrel.Libuv +namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv { /// /// Provides programmatic configuration of Libuv transport features. diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj similarity index 95% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj index d414d16e8..a9a71f397 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/Microsoft.AspNetCore.Server.Kestrel.Libuv.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj @@ -9,6 +9,7 @@ aspnetcore;kestrel true CS1591;$(NoWarn) + false diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs similarity index 96% rename from src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs rename to src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs index b43a3d90e..1adf10080 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Libuv/WebHostBuilderLibuvExtensions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.DependencyInjection; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj index 8df1496ce..27e7cc51f 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj +++ b/src/Microsoft.AspNetCore.Server.Kestrel/Microsoft.AspNetCore.Server.Kestrel.csproj @@ -8,11 +8,12 @@ true aspnetcore;kestrel CS1591;$(NoWarn) + false - + diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs index 745e81b78..1d5c1fdd8 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelEventSourceTests.cs @@ -4,7 +4,7 @@ using System; using System.Diagnostics.Tracing; using System.Reflection; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Xunit; namespace Microsoft.AspNetCore.Server.KestrelTests diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs index 32f0db51e..078da7cd3 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs index 1a30c7918..44ff074fd 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs index e8dec1e3e..df45392c0 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportOptionsTests.cs @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Xunit; namespace Microsoft.AspNetCore.Server.KestrelTests diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs index b9ae2707d..83f6180bc 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs @@ -11,7 +11,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; diff --git a/test/shared/MockConnection.cs b/test/shared/MockConnection.cs index c0a153e88..c91127d03 100644 --- a/test/shared/MockConnection.cs +++ b/test/shared/MockConnection.cs @@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Testing diff --git a/test/shared/TestServiceContext.cs b/test/shared/TestServiceContext.cs index 40489f689..522acbd74 100644 --- a/test/shared/TestServiceContext.cs +++ b/test/shared/TestServiceContext.cs @@ -7,8 +7,8 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Libuv; -using Microsoft.AspNetCore.Server.Kestrel.Libuv.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; namespace Microsoft.AspNetCore.Testing { From 86aa9303a28372e2a25e5e940bec57235e6162aa Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 12:32:10 -0700 Subject: [PATCH 18/20] WIP 16 --- .../Adapter/IConnectionAdapter.cs | 1 - .../Adapter/Internal/RawStream.cs | 1 - .../Internal/Http/ChunkWriter.cs | 1 - .../Internal/Http/Frame.FeatureCollection.cs | 1 - .../Internal/Http/FrameOfT.cs | 1 - .../Internal/Http/FrameRequestStream.cs | 1 - .../Internal/Http/FrameResponseHeaders.cs | 1 - .../Internal/Http/FrameResponseStream.cs | 1 - .../Internal/Http/IBufferSizeControl.cs | 13 ------------- .../Internal/Http/ISocketOutput.cs | 2 +- .../Internal/Http/KestrelHttpParser.cs | 1 - .../Internal/Infrastructure/Constants.cs | 2 -- .../KestrelServer.cs | 1 - .../Properties/AssemblyInfo.cs | 2 -- .../Transport/IConnectionHandler.cs | 2 -- .../ListenOptionsHttpsExtensions.cs | 1 - .../Internal/Http/Connection.cs | 5 ----- .../Internal/Http/ConnectionContext.cs | 2 +- .../Internal/Http/ConnectionManager.cs | 1 - .../Internal/Http/ListenerContext.cs | 2 -- .../Internal/Infrastructure/LibuvAwaitable.cs | 3 +-- .../Internal/LibuvTransportContext.cs | 1 - .../Internal/Networking/UvTcpHandle.cs | 1 - .../KestrelEngine.cs | 4 ++-- .../LibuvTransportFactory.cs | 1 - .../WebHostBuilderLibuvExtensions.cs | 2 +- .../BadHttpRequestTests.cs | 4 ---- .../RequestHeaderLimitsTests.cs | 7 +++---- .../ResponseTests.cs | 1 - .../FrameWritingBenchmark.cs | 1 - .../PipeThroughputBenchmark.cs | 2 -- .../Program.cs | 1 - .../ResponseHeaderCollectionBenchmark.cs | 4 ++-- .../ResponseHeadersWritingBenchmark.cs | 2 -- .../.KestrelEventSourceTests.cs.swp | Bin 0 -> 12288 bytes .../AsciiDecoding.cs | 1 - .../ChunkedResponseTests.cs | 1 - .../ConnectionAdapterTests.cs | 1 - .../ConnectionTests.cs | 5 ----- .../FrameResponseHeadersTests.cs | 3 --- .../KestrelServerTests.cs | 1 - .../LibuvTransportFactoryTests.cs | 6 ------ .../ListenerPrimaryTests.cs | 1 - .../MessageBodyTests.cs | 2 -- .../MultipleLoopTests.cs | 2 -- .../StreamSocketOutputTests.cs | 2 -- .../TestInput.cs | 3 --- .../WebHostBuilderKestrelExtensionsTests.cs | 1 - test/shared/HttpParsingData.cs | 2 +- test/shared/MockConnection.cs | 3 --- test/shared/MockSocketOutput.cs | 2 +- test/shared/PassThroughConnectionAdapter.cs | 1 - test/shared/TestServer.cs | 1 - 53 files changed, 13 insertions(+), 101 deletions(-) delete mode 100644 src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs create mode 100644 test/Microsoft.AspNetCore.Server.KestrelTests/.KestrelEventSourceTests.cs.swp diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs index cbdb12b3b..65140d195 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/IConnectionAdapter.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.IO; using System.Threading.Tasks; namespace Microsoft.AspNetCore.Server.Kestrel.Adapter diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs index 7433d5eb7..6e2195857 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Adapter/Internal/RawStream.cs @@ -7,7 +7,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs index 8b69ba460..6ffbc577b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ChunkWriter.cs @@ -4,7 +4,6 @@ using System; using System.IO.Pipelines; using System.Text; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs index 66be41e7e..bffde30a5 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/Frame.FeatureCollection.cs @@ -5,7 +5,6 @@ using System.Collections; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; using System.Threading; using System.Threading.Tasks; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs index 282151a32..37f3feede 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameOfT.cs @@ -6,7 +6,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting.Server; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; using Microsoft.Extensions.Logging; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs index a7b168a73..3d084adaf 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameRequestStream.cs @@ -5,7 +5,6 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.Extensions.Internal; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs index ea51f47d1..4b6d98332 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseHeaders.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.IO.Pipelines; using System.Runtime.CompilerServices; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs index e654a3d7e..310052039 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/FrameResponseStream.cs @@ -5,7 +5,6 @@ using System.IO; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs deleted file mode 100644 index 3d05cfe4f..000000000 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/IBufferSizeControl.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http -{ - public interface IBufferSizeControl - { - void Add(int count); - void Subtract(int count); - } -} diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs index 7298b4216..379dd5231 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/ISocketOutput.cs @@ -2,9 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.IO.Pipelines; using System.Threading; using System.Threading.Tasks; -using System.IO.Pipelines; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs index 5e3aa7097..581281ca4 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Http/KestrelHttpParser.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Buffers; using System.IO.Pipelines; using System.Numerics; using System.Runtime.CompilerServices; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs index 8d823c9e7..f18246c65 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/Infrastructure/Constants.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Runtime.InteropServices; - namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure { internal static class Constants diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs index d09ea0d41..02ac36417 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/KestrelServer.cs @@ -9,7 +9,6 @@ using System.Reflection; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Http.Features; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs index a171d27c0..8d850b7d8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Properties/AssemblyInfo.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Reflection; -using System.Resources; using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.FunctionalTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")] diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs index 06b22efc1..ba575773e 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionHandler.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.IO.Pipelines; - namespace Microsoft.AspNetCore.Server.Kestrel.Transport { public interface IConnectionHandler diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Https/ListenOptionsHttpsExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Https/ListenOptionsHttpsExtensions.cs index 148da6deb..f757beb3b 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Https/ListenOptionsHttpsExtensions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Https/ListenOptionsHttpsExtensions.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.IO; using System.Security.Cryptography.X509Certificates; using Microsoft.AspNetCore.Server.Kestrel; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs index a3a8a3c6d..858377eab 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs @@ -2,20 +2,15 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.IO.Pipelines; -using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Adapter; -using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; -using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs index 84b215675..869935033 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionContext.cs @@ -1,8 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System.Net; using System.IO.Pipelines; +using System.Net; using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs index ef7face88..302887aa8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ConnectionManager.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs index f68c172c5..ac0d07f37 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/ListenerContext.cs @@ -2,10 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Http { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs index 8fc241858..110c1316f 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Infrastructure/LibuvAwaitable.cs @@ -2,10 +2,9 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; -using System.Net; -using System.Threading.Tasks; using System.Runtime.CompilerServices; using System.Threading; +using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs index 0541c3015..5a94ff302 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/LibuvTransportContext.cs @@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; -using Microsoft.AspNetCore.Server.Kestrel.Transport; namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal { diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs index d791a6d70..5f124518c 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Networking/UvTcpHandle.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Diagnostics; using System.Net; using System.Runtime.InteropServices; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs index 095644437..d4d9a48d8 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/KestrelEngine.cs @@ -9,10 +9,10 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; -using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Server.Kestrel.Transport.Exceptions; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Server.Kestrel.Internal diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs index d95aee5d9..8985247f9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/LibuvTransportFactory.cs @@ -6,7 +6,6 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs index 1adf10080..0cfa830f9 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/WebHostBuilderLibuvExtensions.cs @@ -2,8 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Server.Kestrel.Transport; +using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.Hosting diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/BadHttpRequestTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/BadHttpRequestTests.cs index 36af57bd1..89deac4fa 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/BadHttpRequestTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/BadHttpRequestTests.cs @@ -4,11 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Net.Sockets; using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs index 54479f11d..8c62cc097 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/RequestHeaderLimitsTests.cs @@ -2,15 +2,14 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Testing; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Xunit; using Microsoft.Extensions.Primitives; -using System.Collections; -using System.Collections.Generic; +using Xunit; namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests { diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs index fad98eaea..a8e071e33 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/ResponseTests.cs @@ -16,7 +16,6 @@ using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; -using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Primitives; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs index f7945b013..ae41da195 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/FrameWritingBenchmark.cs @@ -3,7 +3,6 @@ using System; using System.IO.Pipelines; -using System.Net; using System.Threading; using System.Threading.Tasks; using BenchmarkDotNet.Attributes; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/PipeThroughputBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/PipeThroughputBenchmark.cs index abdd7ab8b..957a66b19 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/PipeThroughputBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/PipeThroughputBenchmark.cs @@ -1,9 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.IO.Pipelines; -using System.Text; using System.Threading.Tasks; using BenchmarkDotNet.Attributes; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Program.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Program.cs index 8a8d9c6d6..2c73b19ef 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Program.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/Program.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Reflection; using BenchmarkDotNet.Running; diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs index a437d753f..0d2852dcf 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeaderCollectionBenchmark.cs @@ -3,11 +3,11 @@ using System.Runtime.CompilerServices; using System.Text; +using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using BenchmarkDotNet.Attributes; using Microsoft.AspNetCore.Server.Kestrel.Internal; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; namespace Microsoft.AspNetCore.Server.Kestrel.Performance { diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs index 825e379d2..f7a7f9806 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs @@ -4,7 +4,6 @@ using System; using System.IO; using System.IO.Pipelines; -using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -12,7 +11,6 @@ using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.Server.Kestrel.Performance diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/.KestrelEventSourceTests.cs.swp b/test/Microsoft.AspNetCore.Server.KestrelTests/.KestrelEventSourceTests.cs.swp new file mode 100644 index 0000000000000000000000000000000000000000..04ade1cbf73f343ab4f618eaa6ba2c9e7200634c GIT binary patch literal 12288 zcmeI2&u<$=6vwB%0&Rgi4DMwu#j~m7I&GpJOmJI6VyfCHL5Rb6cN`B|&nz>uCRW9t zzya}BfH-mH%#S-q{sZ_Q;JfzPaT+z^Oy5Xf@BDag-n`F_A~}Ae?Pt9szAIV`?G|Ha z*Z({zyZ7!g<|i@>%9X<_+u(8MaM*p?IJtAB89UgEkG*m}t~QQSHH(jpo?%YKA1NQ4 z${vT150t}P9553f>BL!Y$3b*_-dEwkIwh6{qH-C+&aeEtGiAcS7A{eXd6D?5PerRl z;8h`TgY7i$Y~QZE$KQVI_*F@o@+1O8fCvx)B0vO)01+SpM4%!N@@woL^shtjK-Vha zL5&Cy0U|&IhyW2F0z`la5CI}U1c(3;_@5AvDZcl=#@G)~`TKwQKY-tFGWIES0(}TY z&`s!%8;t!5{Q`XleG5&X5j246(7VuYZ!k87-iJ8!CUgt>`*p_tg1&)j(9ekZ6ZB&h z|NHU`)QA8PAOb{y2oM1xKm>>Y5deX&8An@wUhI{ljz?u}5PciE(>%`>fo3)v74nFAJGPj|!cN zCla;0QEil}QLDY%ZpfXsYTRwLnvHaH|9+#j+it1mPP3itrnUMOzj&-rZc&})%22g+ z6>#Ic3b?VX0&Y}Qz_m-e_vKV=?9NtMl+SZs{UXa&R{QwEve911zFg6#1_j6m(yKi_ zmYG*1_4;^-m?1&W`md^b?m zE=HJ1$Cs~|Ki~mx+K!_`Jt}5HCymdo3lC)ytee+yH9~n65Wz-uoMm|(R@2e?;Lq2+ zyclIV;WMjK-aXT(y#7Ro397Q4NTAo-$|#>NhD-O#HOX-8_~k4X<=X5yGk9%2 zmxO>i@QeK!;IUXj8caRqz)yfushSGQJ&zoXf@PS&dh;SCTHVdEJ z*)MPm?yL=bY#j&xa$l@tG?nE6MH%nF=5wb{CxJ&vor`{V$RAq7URv-@mhr{1=T70T J#Z0Aw{R literal 0 HcmV?d00001 diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/AsciiDecoding.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/AsciiDecoding.cs index 5252a96e9..4e5528d44 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/AsciiDecoding.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/AsciiDecoding.cs @@ -3,7 +3,6 @@ using System; using System.Linq; -using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedResponseTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedResponseTests.cs index ad35e4339..ed28131ea 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedResponseTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ChunkedResponseTests.cs @@ -8,7 +8,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionAdapterTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionAdapterTests.cs index c842e0e83..21d1ab94f 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionAdapterTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionAdapterTests.cs @@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Adapter; -using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs index 98ed4c82d..a37e4c9a9 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ConnectionTests.cs @@ -2,16 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.IO.Pipelines; -using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs index fee390123..d62651242 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/FrameResponseHeadersTests.cs @@ -5,10 +5,7 @@ using System.Collections.Generic; using System.Globalization; using System.IO.Pipelines; -using System.Net; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Primitives; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs index 078da7cd3..dd36a3666 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/KestrelServerTests.cs @@ -7,7 +7,6 @@ using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server.Features; using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs index 44ff074fd..2d0dc0c2b 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/LibuvTransportFactoryTests.cs @@ -2,14 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Linq; -using System.Net; -using Microsoft.AspNetCore.Hosting.Server; -using Microsoft.AspNetCore.Hosting.Server.Features; -using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv; using Microsoft.AspNetCore.Testing; -using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Moq; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs index 5e524bee1..8045cb651 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/ListenerPrimaryTests.cs @@ -12,7 +12,6 @@ using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs index ee9cb5521..d5294de41 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/MessageBodyTests.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.IO.Pipelines; using System.Linq; using System.Text; using System.Threading; @@ -12,7 +11,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; using Moq; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs index 83f6180bc..e95605a33 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/MultipleLoopTests.cs @@ -7,11 +7,9 @@ using System.Net.Sockets; using System.Runtime.InteropServices; using System.Threading; -using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure; using Microsoft.AspNetCore.Server.Kestrel.Internal.Networking; -using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.AspNetCore.Server.KestrelTests.TestHelpers; using Microsoft.AspNetCore.Testing; using Xunit; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/StreamSocketOutputTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/StreamSocketOutputTests.cs index 910a88856..1dab5016f 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/StreamSocketOutputTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/StreamSocketOutputTests.cs @@ -5,8 +5,6 @@ using System.IO; using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; -using Microsoft.AspNetCore.Testing; using Xunit; namespace Microsoft.AspNetCore.Server.KestrelTests diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs index 2b3f64d4e..cfa87eb55 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestInput.cs @@ -4,11 +4,8 @@ using System; using System.IO.Pipelines; using System.Text; -using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Testing; using Microsoft.Extensions.Internal; diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/WebHostBuilderKestrelExtensionsTests.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/WebHostBuilderKestrelExtensionsTests.cs index 12e1d9e35..4eeebba77 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/WebHostBuilderKestrelExtensionsTests.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/WebHostBuilderKestrelExtensionsTests.cs @@ -1,7 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.Extensions.DependencyInjection; diff --git a/test/shared/HttpParsingData.cs b/test/shared/HttpParsingData.cs index 1af1a2da1..944a1f936 100644 --- a/test/shared/HttpParsingData.cs +++ b/test/shared/HttpParsingData.cs @@ -1,10 +1,10 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using System; using System.Collections.Generic; using System.Linq; +using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Xunit; namespace Microsoft.AspNetCore.Testing diff --git a/test/shared/MockConnection.cs b/test/shared/MockConnection.cs index c91127d03..9c6528673 100644 --- a/test/shared/MockConnection.cs +++ b/test/shared/MockConnection.cs @@ -2,11 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Net; using System.Threading; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel; -using Microsoft.AspNetCore.Server.Kestrel.Internal; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal; using Microsoft.Extensions.Internal; diff --git a/test/shared/MockSocketOutput.cs b/test/shared/MockSocketOutput.cs index a506b388f..c5cdc32cb 100644 --- a/test/shared/MockSocketOutput.cs +++ b/test/shared/MockSocketOutput.cs @@ -2,9 +2,9 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.IO.Pipelines; using System.Threading; using System.Threading.Tasks; -using System.IO.Pipelines; using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.Extensions.Internal; diff --git a/test/shared/PassThroughConnectionAdapter.cs b/test/shared/PassThroughConnectionAdapter.cs index faa688a19..35d04ab46 100644 --- a/test/shared/PassThroughConnectionAdapter.cs +++ b/test/shared/PassThroughConnectionAdapter.cs @@ -6,7 +6,6 @@ using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Server.Kestrel.Adapter; using Microsoft.AspNetCore.Server.Kestrel.Adapter.Internal; -using Microsoft.AspNetCore.Testing; namespace Microsoft.AspNetCore.Testing { diff --git a/test/shared/TestServer.cs b/test/shared/TestServer.cs index 1293d46ed..bf72cd048 100644 --- a/test/shared/TestServer.cs +++ b/test/shared/TestServer.cs @@ -7,7 +7,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel; using Microsoft.AspNetCore.Server.Kestrel.Internal; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; namespace Microsoft.AspNetCore.Testing { From 711faa46b7a821e9578043f5c57b058b5a69580f Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 13:53:32 -0700 Subject: [PATCH 19/20] WIP 16 --- .../Internal/FrameConnection.cs | 4 ++-- .../Transport/IConnectionContext.cs | 3 +-- .../Internal/Http/Connection.cs | 2 +- .../TestHelpers/MockConnectionHandler.cs | 3 +-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs index 57bb28b02..e601f5f0a 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Internal/FrameConnection.cs @@ -85,9 +85,9 @@ public void Abort(Exception ex) _frame.Abort(ex); } - public void SetBadRequestState(RequestRejectionReason reason) + public void Timeout() { - _frame.SetBadRequestState(reason); + _frame.SetBadRequestState(RequestRejectionReason.RequestTimeout); } private async Task ApplyConnectionAdaptersAsync() diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs index e26ae4c01..3e1b19119 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Core/Transport/IConnectionContext.cs @@ -4,7 +4,6 @@ using System; using System.IO.Pipelines; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; namespace Microsoft.AspNetCore.Server.Kestrel.Transport { @@ -17,6 +16,6 @@ public interface IConnectionContext // TODO: Remove these (Use Pipes instead?) Task StopAsync(); void Abort(Exception ex); - void SetBadRequestState(RequestRejectionReason reason); + void Timeout(); } } diff --git a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs index 858377eab..c1e0637f6 100644 --- a/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs +++ b/src/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv/Internal/Http/Connection.cs @@ -117,7 +117,7 @@ public void Tick(long timestamp) if (_timeoutAction == TimeoutAction.SendTimeoutResponse) { - _connectionContext.SetBadRequestState(RequestRejectionReason.RequestTimeout); + _connectionContext.Timeout(); } StopAsync(); diff --git a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs index 2abe06e19..6df2d283d 100644 --- a/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs +++ b/test/Microsoft.AspNetCore.Server.KestrelTests/TestHelpers/MockConnectionHandler.cs @@ -4,7 +4,6 @@ using System; using System.IO.Pipelines; using System.Threading.Tasks; -using Microsoft.AspNetCore.Server.Kestrel.Internal.Http; using Microsoft.AspNetCore.Server.Kestrel.Transport; using Xunit; @@ -58,7 +57,7 @@ public void Abort(Exception ex) throw new NotImplementedException(); } - public void SetBadRequestState(RequestRejectionReason reason) + public void Timeout() { throw new NotImplementedException(); } From da3c0286fe8caf77382a507f884c7500e677bc97 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 29 Mar 2017 14:06:28 -0700 Subject: [PATCH 20/20] WIP 17 --- .../ResponseHeadersWritingBenchmark.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs index f7a7f9806..270f73928 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Performance/ResponseHeadersWritingBenchmark.cs @@ -128,10 +128,12 @@ public void Setup() ConnectionInformation = new MockConnectionInformation() }; + var socketOutputProducer = new SocketOutputProducer(output.Writer, null, null, null); var frame = new TestFrame(application: null, context: frameContext) { Input = input.Reader, - Output = socketOutput + Output = socketOutput, + LifetimeControl = new ConnectionLifetimeControl(null, output.Reader, socketOutputProducer, serviceContext.Log) }; frame.Reset();