From a147865bab879bd874f038b845614920ca04d697 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Thu, 6 Dec 2018 16:21:26 -0800 Subject: [PATCH 01/13] make 2.1 work with IISIntegration --- .azure/pipelines/jobs/iisintegration-job.yml | 8 +- build/artifacts.props | 1 - build/buildorder.props | 1 - build/repo.props | 4 +- build/submodules.props | 1 - eng/Baseline.Designer.props | 19 + eng/Baseline.xml | 1 + eng/Dependencies.props | 9 +- eng/ProjectReferences.props | 1 + eng/targets/Cpp.Common.targets | 2 + src/IISIntegration/Directory.Build.props | 23 - src/IISIntegration/Directory.Build.targets | 7 - src/IISIntegration/IISIntegration.sln | 300 -- src/IISIntegration/README.md | 3 - src/IISIntegration/build.cmd | 3 - src/IISIntegration/build.sh | 7 - src/IISIntegration/build/build.msbuild | 31 - src/IISIntegration/build/dependencies.props | 55 - src/IISIntegration/build/launchSettings.json | 37 - src/IISIntegration/build/repo.props | 26 - src/IISIntegration/build/repo.targets | 84 - src/IISIntegration/build/sources.props | 17 - src/IISIntegration/build/testsite.props | 92 - src/IISIntegration/korebuild.json | 17 - src/IISIntegration/nuget/AspNetCoreV1.nuspec | 29 - src/IISIntegration/nuget/AspNetCoreV2.nuspec | 31 - .../samples/IISSample/IISSample.csproj | 15 - .../IISSample/Properties/launchSettings.json | 28 - .../NativeIISSample/NativeIISSample.csproj | 20 - .../Properties/launchSettings.json | 37 - .../samples/NativeIISSample/Startup.cs | 88 - .../samples/NativeIISSample/web.config | 9 - .../AspNetCore/AspNetCore.vcxproj | 260 -- .../AspNetCore/Inc/applicationinfo.h | 251 -- .../AspNetCore/Inc/applicationmanager.h | 154 - .../AspNetCore/Inc/appoffline.h | 101 - .../AspNetCore/Inc/filewatcher.h | 127 - .../AspNetCore/Inc/fx_ver.h | 49 - .../AspNetCore/Inc/globalmodule.h | 37 - .../AspNetCore/Inc/proxymodule.h | 64 - .../AspNetCoreModuleV2/AspNetCore/Source.def | 4 - .../AspNetCoreModuleV2/AspNetCore/ancm.mof | 208 -- .../AspNetCore/aspnetcore_schema.xml | 47 - .../AspNetCore/aspnetcoremodule.rc | 120 - .../AspNetCore/src/applicationinfo.cpp | 650 ---- .../AspNetCore/src/applicationmanager.cxx | 458 --- .../AspNetCore/src/dllmain.cpp | 254 -- .../AspNetCore/src/filewatcher.cxx | 497 --- .../AspNetCore/src/globalmodule.cpp | 65 - .../AspNetCore/src/precomp.hxx | 159 - .../AspNetCore/src/proxymodule.cxx | 211 -- .../CommonLib/CommonLib.vcxproj | 226 -- .../CommonLib/SRWLockWrapper.cpp | 13 - .../CommonLib/SRWLockWrapper.h | 9 - .../CommonLib/application.cpp | 50 - .../CommonLib/application.h | 53 - .../CommonLib/aspnetcore_msg.mc | 217 -- .../CommonLib/aspnetcoreconfig.cxx | 609 ---- .../CommonLib/aspnetcoreconfig.h | 332 -- .../AspNetCoreModuleV2/CommonLib/debugutil.h | 81 - .../CommonLib/environmentvariablehash.h | 131 - .../AspNetCoreModuleV2/CommonLib/fx_ver.cxx | 192 -- .../src/AspNetCoreModuleV2/CommonLib/fx_ver.h | 46 - .../CommonLib/hostfxr_utility.cpp | 807 ----- .../CommonLib/hostfxr_utility.h | 78 - .../CommonLib/requesthandler.cxx | 44 - .../CommonLib/requesthandler.h | 59 - .../AspNetCoreModuleV2/CommonLib/resources.h | 47 - .../AspNetCoreModuleV2/CommonLib/stdafx.cpp | 4 - .../src/AspNetCoreModuleV2/CommonLib/stdafx.h | 34 - .../AspNetCoreModuleV2/CommonLib/targetver.h | 8 - .../AspNetCoreModuleV2/CommonLib/utility.cxx | 656 ---- .../AspNetCoreModuleV2/CommonLib/utility.h | 137 - .../AspNetCoreModuleV2/IISLib/IISLib.vcxproj | 201 -- .../src/AspNetCoreModuleV2/IISLib/acache.cxx | 443 --- .../src/AspNetCoreModuleV2/IISLib/acache.h | 115 - .../src/AspNetCoreModuleV2/IISLib/ahutil.cpp | 1671 ---------- .../src/AspNetCoreModuleV2/IISLib/ahutil.h | 258 -- .../src/AspNetCoreModuleV2/IISLib/base64.cpp | 482 --- .../src/AspNetCoreModuleV2/IISLib/base64.h | 42 - .../src/AspNetCoreModuleV2/IISLib/buffer.h | 271 -- .../src/AspNetCoreModuleV2/IISLib/datetime.h | 14 - .../src/AspNetCoreModuleV2/IISLib/dbgutil.h | 102 - .../src/AspNetCoreModuleV2/IISLib/hashfn.h | 325 -- .../src/AspNetCoreModuleV2/IISLib/hashtable.h | 666 ---- .../src/AspNetCoreModuleV2/IISLib/listentry.h | 163 - .../src/AspNetCoreModuleV2/IISLib/macros.h | 63 - .../src/AspNetCoreModuleV2/IISLib/multisz.cpp | 474 --- .../src/AspNetCoreModuleV2/IISLib/multisz.h | 225 -- .../AspNetCoreModuleV2/IISLib/multisza.cpp | 408 --- .../src/AspNetCoreModuleV2/IISLib/multisza.h | 226 -- .../src/AspNetCoreModuleV2/IISLib/ntassert.h | 32 - .../src/AspNetCoreModuleV2/IISLib/percpu.h | 305 -- .../src/AspNetCoreModuleV2/IISLib/precomp.h | 22 - .../src/AspNetCoreModuleV2/IISLib/prime.h | 85 - .../src/AspNetCoreModuleV2/IISLib/pudebug.h | 736 ----- .../src/AspNetCoreModuleV2/IISLib/reftrace.c | 229 -- .../src/AspNetCoreModuleV2/IISLib/reftrace.h | 87 - .../src/AspNetCoreModuleV2/IISLib/rwlock.h | 193 -- .../src/AspNetCoreModuleV2/IISLib/stringa.cpp | 1767 ----------- .../src/AspNetCoreModuleV2/IISLib/stringa.h | 515 --- .../src/AspNetCoreModuleV2/IISLib/stringu.cpp | 1271 -------- .../src/AspNetCoreModuleV2/IISLib/stringu.h | 427 --- .../src/AspNetCoreModuleV2/IISLib/tracelog.c | 235 -- .../src/AspNetCoreModuleV2/IISLib/tracelog.h | 105 - .../src/AspNetCoreModuleV2/IISLib/treehash.h | 850 ----- .../src/AspNetCoreModuleV2/IISLib/util.cxx | 78 - .../RequestHandler/RequestHandler.vcxproj | 259 -- .../RequestHandler/Source.def | 6 - .../RequestHandler/aspnetcore_event.h | 550 ---- .../RequestHandler/disconnectcontext.h | 78 - .../RequestHandler/dllmain.cxx | 369 --- .../environmentvariablehelpers.h | 421 --- .../inprocess/inprocessapplication.cpp | 986 ------ .../inprocess/inprocessapplication.h | 191 -- .../inprocess/inprocesshandler.cpp | 136 - .../inprocess/inprocesshandler.h | 72 - .../RequestHandler/managedexports.cxx | 450 --- .../outofprocess/forwarderconnection.cxx | 52 - .../outofprocess/forwarderconnection.h | 157 - .../outofprocess/forwardinghandler.cpp | 2747 ----------------- .../outofprocess/forwardinghandler.h | 233 -- .../outofprocess/outprocessapplication.cpp | 78 - .../outofprocess/outprocessapplication.h | 30 - .../outofprocess/processmanager.cxx | 274 -- .../outofprocess/processmanager.h | 195 -- .../outofprocess/protocolconfig.cxx | 48 - .../outofprocess/protocolconfig.h | 103 - .../outofprocess/responseheaderhash.cxx | 98 - .../outofprocess/responseheaderhash.h | 108 - .../outofprocess/serverprocess.cxx | 2148 ------------- .../outofprocess/serverprocess.h | 279 -- .../outofprocess/websockethandler.cxx | 1151 ------- .../outofprocess/websockethandler.h | 225 -- .../outofprocess/winhttphelper.cxx | 176 -- .../outofprocess/winhttphelper.h | 91 - .../RequestHandler/precomp.hxx | 120 - .../RequestHandler/requesthandler.rc | 119 - .../RequestHandler/sttimer.h | 279 -- src/IISIntegration/src/Directory.Build.props | 7 - ...ft.AspNetCore.Server.IISIntegration.csproj | 33 - .../AspNetCoreModuleTests.vcxproj | 184 -- .../test/AspNetCoreModuleTests/stdafx.h | 56 - src/IISIntegration/test/Directory.Build.props | 14 - .../IISIntegration.FunctionalTests.csproj | 29 - ...xpressSupportsInProcessHostingAttribute.cs | 62 - .../Utilities/IISTestSiteCollection.cs | 16 - .../Utilities/IISTestSiteFixture.cs | 53 - ...NetCore.Server.IISIntegration.Tests.csproj | 18 - .../test/TestTasks/InjectRequestHandler.cs | 62 - .../test/TestTasks/TestTasks.csproj | 12 - .../InProcessWebSite/InProcessWebSite.csproj | 21 - .../test/WebSites/InProcessWebSite/Program.cs | 26 - .../Properties/launchSettings.json | 37 - .../test/WebSites/InProcessWebSite/Startup.cs | 684 ---- .../test/WebSites/InProcessWebSite/web.config | 16 - .../OutOfProcessWebSite.csproj | 22 - .../Properties/launchSettings.json | 37 - .../OverriddenServerWebSite.csproj | 17 - .../OverriddenServerWebSite/Program.cs | 48 - .../Properties/launchSettings.json | 37 - .../OverriddenServerWebSite/web.config | 9 - .../WebSites/StressTestWebSite/Program.cs | 26 - .../Properties/launchSettings.json | 37 - .../WebSites/StressTestWebSite/Startup.cs | 231 -- .../StressTestWebSite.csproj | 19 - .../StressTestWebSite/WebSockets/Constants.cs | 17 - .../WebSockets/HandshakeHelpers.cs | 42 - .../test/FunctionalTests/HttpsTests.cs | 2 +- .../IIS}/.gitignore | 7 +- src/Servers/IIS/IISIntegration.sln | 163 + .../IIS}/LICENSE.txt | 0 .../IIS}/NuGetPackageVerifier.json | 1 - .../IIS}/NuGetPackageVerifier.xplat.json | 0 .../IIS}/build/Build.Settings | 24 +- .../IIS}/build/Config.Definitions.Props | 0 .../IIS}/build/applicationhost.config | 0 .../IIS}/build/applicationhost.iis.config | 0 src/Servers/IIS/build/build.msbuild | 6 + .../IIS}/build/native.targets | 2 +- src/Servers/IIS/build/repo.props | 23 + src/Servers/IIS/build/repo.targets | 8 + src/Servers/IIS/build/testsite.props | 44 + .../IIS/samples/IISSample/IISSample.csproj | 15 + .../IIS}/samples/IISSample/Startup.cs | 0 .../IIS}/samples/IISSample/web.config | 0 .../AspNetCore/AspNetCore.vcxproj | 1 + .../AspNetCore/Inc/application.h | 0 .../AspNetCore/Inc/applicationmanager.h | 0 .../AspNetCore/Inc/aspnetcoreconfig.h | 0 .../AspNetCore/Inc/debugutil.h | 0 .../AspNetCore/Inc/environmentvariablehash.h | 0 .../AspNetCore/Inc/filewatcher.h | 0 .../AspNetCore/Inc/forwarderconnection.h | 0 .../AspNetCore/Inc/forwardinghandler.h | 0 .../AspNetCoreModuleV1/AspNetCore/Inc/path.h | 0 .../AspNetCore/Inc/processmanager.h | 0 .../AspNetCore/Inc/protocolconfig.h | 0 .../AspNetCore/Inc/proxymodule.h | 0 .../AspNetCore/Inc/resource.h | 0 .../AspNetCore/Inc/responseheaderhash.h | 0 .../AspNetCore/Inc/serverprocess.h | 0 .../AspNetCore/Inc/sttimer.h | 0 .../AspNetCore/Inc/websockethandler.h | 0 .../AspNetCore/Inc/winhttphelper.h | 0 .../AspNetCoreModuleV1/AspNetCore/Source.def | 0 .../AspNetCore/aspnetcore_msg.h | 129 + .../AspNetCore/aspnetcore_msg.mc | 0 .../AspNetCore}/aspnetcore_msg.rc | 0 .../AspNetCore/aspnetcore_schema.xml | 0 .../AspNetCore/aspnetcoremodule.rc | 0 .../AspNetCoreModuleV1/AspNetCore/resource.h | 0 .../AspNetCore/src/application.cxx | 0 .../AspNetCore/src/applicationmanager.cxx | 0 .../AspNetCore/src/aspnetcoreconfig.cxx | 0 .../AspNetCore/src/filewatcher.cxx | 0 .../AspNetCore/src/forwarderconnection.cxx | 0 .../AspNetCore/src/forwardinghandler.cxx | 0 .../AspNetCore/src/main.cxx | 0 .../AspNetCore/src/path.cxx | 0 .../AspNetCore/src/precomp.hxx | 0 .../AspNetCore/src/processmanager.cxx | 0 .../AspNetCore/src/protocolconfig.cxx | 0 .../AspNetCore/src/proxymodule.cxx | 0 .../AspNetCore/src/responseheaderhash.cxx | 0 .../AspNetCore/src/serverprocess.cxx | 0 .../AspNetCore/src/websockethandler.cxx | 0 .../AspNetCore/src/winhttphelper.cxx | 0 .../AspNetCoreModuleV1/IISLib/IISLib.vcxproj | 3 + .../src/AspNetCoreModuleV1/IISLib/acache.cxx | 0 .../src/AspNetCoreModuleV1/IISLib/acache.h | 0 .../src/AspNetCoreModuleV1/IISLib/ahutil.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/ahutil.h | 0 .../src/AspNetCoreModuleV1/IISLib/base64.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/base64.h | 0 .../src/AspNetCoreModuleV1/IISLib/buffer.h | 0 .../src/AspNetCoreModuleV1/IISLib/datetime.h | 0 .../src/AspNetCoreModuleV1/IISLib/dbgutil.h | 0 .../src/AspNetCoreModuleV1/IISLib/hashfn.h | 0 .../src/AspNetCoreModuleV1/IISLib/hashtable.h | 0 .../src/AspNetCoreModuleV1/IISLib/listentry.h | 0 .../src/AspNetCoreModuleV1/IISLib/macros.h | 0 .../src/AspNetCoreModuleV1/IISLib/multisz.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/multisz.h | 0 .../AspNetCoreModuleV1/IISLib/multisza.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/multisza.h | 0 .../src/AspNetCoreModuleV1/IISLib/ntassert.h | 0 .../src/AspNetCoreModuleV1/IISLib/percpu.h | 0 .../src/AspNetCoreModuleV1/IISLib/precomp.h | 0 .../src/AspNetCoreModuleV1/IISLib/prime.h | 0 .../src/AspNetCoreModuleV1/IISLib/pudebug.h | 0 .../src/AspNetCoreModuleV1/IISLib/reftrace.c | 0 .../src/AspNetCoreModuleV1/IISLib/reftrace.h | 0 .../src/AspNetCoreModuleV1/IISLib/rwlock.h | 0 .../src/AspNetCoreModuleV1/IISLib/stringa.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/stringa.h | 0 .../src/AspNetCoreModuleV1/IISLib/stringu.cpp | 0 .../src/AspNetCoreModuleV1/IISLib/stringu.h | 0 .../src/AspNetCoreModuleV1/IISLib/tracelog.c | 0 .../src/AspNetCoreModuleV1/IISLib/tracelog.h | 0 .../src/AspNetCoreModuleV1/IISLib/treehash.h | 0 .../src/AspNetCoreModuleV1/IISLib/util.cxx | 0 .../Directory.Build.targets | 34 + ...icrosoft.AspNetCore.AspNetCoreModule.props | 4 +- ...soft.AspNetCore.AspNetCoreModuleV1.pkgproj | 36 + .../lib/netcoreapp2.1/_._ | 0 .../AuthenticationHandler.cs | 0 .../ForwardedTlsConnectionFeature.cs | 0 .../IISDefaults.cs | 0 .../IISHostingStartup.cs | 0 .../IISMiddleware.cs | 0 .../IISOptions.cs | 0 .../IISSetupFilter.cs | 0 ...ft.AspNetCore.Server.IISIntegration.csproj | 42 + .../NativeMethods.cs | 1 + .../Properties/AssemblyInfo.cs | 0 .../WebHostBuilderIISExtensions.cs | 0 .../baseline.netcore.json | 0 .../AppHostConfig/Http.config | 0 .../AppHostConfig/Https.config | 0 .../AppHostConfig/NtlmAuthentation.config | 0 .../WebsocketsNotSupported.config | 0 .../IISIntegration.FunctionalTests.csproj | 23 + .../OutOfProcess/HelloWorldTest.cs | 3 +- .../OutOfProcess/HttpsTest.cs | 14 +- .../OutOfProcess/NtlmAuthentationTest.cs | 2 +- .../Properties/AssemblyInfo.cs | 1 - .../UpgradeFeatureDetectionTests.cs | 10 - .../Utilities/Helpers.cs | 10 +- .../IISExtensionTests.cs | 0 .../IISMiddlewareTests.cs | 0 ...NetCore.Server.IISIntegration.Tests.csproj | 15 + .../OutOfProcessWebSite.csproj | 19 + .../OutOfProcessWebSite/Program.cs | 0 .../OutOfProcessWebSite/StartupHelloWorld.cs | 0 .../StartupHttpsHelloWorld.cs | 0 .../StartupNtlmAuthentication.cs | 2 - .../StartupUpgradeFeatureDetection.cs | 0 .../OutOfProcessWebSite/web.config | 0 .../IIS}/tools/SetupTestEnvironment.ps1 | 0 .../tools/UpdateIISExpressCertificate.ps1 | 0 .../IIS}/tools/certificate.ps1 | 0 .../IIS}/tools/httpsys.ps1 | 0 .../IIS}/tools/installancm.ps1 | 0 .../IIS}/tools/stresstest.ps1 | 0 .../IIS}/tools/update_schema.ps1 | 0 .../IIS}/version.props | 0 .../.gradle/4.9/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/4.9/fileHashes/fileHashes.bin | Bin 0 -> 18597 bytes .../.gradle/4.9/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../.gradle/4.9/taskHistory/taskHistory.lock | Bin 0 -> 17 bytes .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../.gradle/vcsWorkingDirs/gc.properties | 0 .../signalr/build/libs/signalr-1.0.0-rtm.pom | 80 + 315 files changed, 708 insertions(+), 35760 deletions(-) delete mode 100644 src/IISIntegration/Directory.Build.props delete mode 100644 src/IISIntegration/Directory.Build.targets delete mode 100644 src/IISIntegration/IISIntegration.sln delete mode 100644 src/IISIntegration/README.md delete mode 100644 src/IISIntegration/build.cmd delete mode 100644 src/IISIntegration/build.sh delete mode 100644 src/IISIntegration/build/build.msbuild delete mode 100644 src/IISIntegration/build/dependencies.props delete mode 100644 src/IISIntegration/build/launchSettings.json delete mode 100644 src/IISIntegration/build/repo.props delete mode 100644 src/IISIntegration/build/repo.targets delete mode 100644 src/IISIntegration/build/sources.props delete mode 100644 src/IISIntegration/build/testsite.props delete mode 100644 src/IISIntegration/korebuild.json delete mode 100644 src/IISIntegration/nuget/AspNetCoreV1.nuspec delete mode 100644 src/IISIntegration/nuget/AspNetCoreV2.nuspec delete mode 100644 src/IISIntegration/samples/IISSample/IISSample.csproj delete mode 100644 src/IISIntegration/samples/IISSample/Properties/launchSettings.json delete mode 100644 src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj delete mode 100644 src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json delete mode 100644 src/IISIntegration/samples/NativeIISSample/Startup.cs delete mode 100644 src/IISIntegration/samples/NativeIISSample/web.config delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationinfo.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationmanager.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/appoffline.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/filewatcher.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/fx_ver.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/globalmodule.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/proxymodule.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema.xml delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationinfo.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationmanager.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/dllmain.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/filewatcher.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/globalmodule.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/precomp.hxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/proxymodule.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/environmentvariablehash.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/pudebug.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/RequestHandler.vcxproj delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/Source.def delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/aspnetcore_event.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/disconnectcontext.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/dllmain.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/environmentvariablehelpers.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/managedexports.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.cpp delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.cxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.h delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/precomp.hxx delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/requesthandler.rc delete mode 100644 src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/sttimer.h delete mode 100644 src/IISIntegration/src/Directory.Build.props delete mode 100644 src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj delete mode 100644 src/IISIntegration/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj delete mode 100644 src/IISIntegration/test/AspNetCoreModuleTests/stdafx.h delete mode 100644 src/IISIntegration/test/Directory.Build.props delete mode 100644 src/IISIntegration/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj delete mode 100644 src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISExpressSupportsInProcessHostingAttribute.cs delete mode 100644 src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs delete mode 100644 src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs delete mode 100644 src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj delete mode 100644 src/IISIntegration/test/TestTasks/InjectRequestHandler.cs delete mode 100644 src/IISIntegration/test/TestTasks/TestTasks.csproj delete mode 100644 src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj delete mode 100644 src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs delete mode 100644 src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json delete mode 100644 src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs delete mode 100644 src/IISIntegration/test/WebSites/InProcessWebSite/web.config delete mode 100644 src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj delete mode 100644 src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json delete mode 100644 src/IISIntegration/test/WebSites/OverriddenServerWebSite/OverriddenServerWebSite.csproj delete mode 100644 src/IISIntegration/test/WebSites/OverriddenServerWebSite/Program.cs delete mode 100644 src/IISIntegration/test/WebSites/OverriddenServerWebSite/Properties/launchSettings.json delete mode 100644 src/IISIntegration/test/WebSites/OverriddenServerWebSite/web.config delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/Constants.cs delete mode 100644 src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/HandshakeHelpers.cs rename src/{IISIntegration => Servers/IIS}/.gitignore (97%) create mode 100644 src/Servers/IIS/IISIntegration.sln rename src/{IISIntegration => Servers/IIS}/LICENSE.txt (100%) rename src/{IISIntegration => Servers/IIS}/NuGetPackageVerifier.json (80%) rename src/{IISIntegration => Servers/IIS}/NuGetPackageVerifier.xplat.json (100%) rename src/{IISIntegration => Servers/IIS}/build/Build.Settings (92%) rename src/{IISIntegration => Servers/IIS}/build/Config.Definitions.Props (100%) rename src/{IISIntegration => Servers/IIS}/build/applicationhost.config (100%) rename src/{IISIntegration => Servers/IIS}/build/applicationhost.iis.config (100%) create mode 100644 src/Servers/IIS/build/build.msbuild rename src/{IISIntegration => Servers/IIS}/build/native.targets (96%) create mode 100644 src/Servers/IIS/build/repo.props create mode 100644 src/Servers/IIS/build/repo.targets create mode 100644 src/Servers/IIS/build/testsite.props create mode 100644 src/Servers/IIS/samples/IISSample/IISSample.csproj rename src/{IISIntegration => Servers/IIS}/samples/IISSample/Startup.cs (100%) rename src/{IISIntegration => Servers/IIS}/samples/IISSample/web.config (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj (99%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/Source.def (100%) create mode 100644 src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.h rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc (100%) rename src/{IISIntegration/src/AspNetCoreModuleV2/CommonLib => Servers/IIS/src/AspNetCoreModuleV1/AspNetCore}/aspnetcore_msg.rc (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_schema.xml (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/resource.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj (99%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/acache.cxx (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/acache.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/ahutil.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/ahutil.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/base64.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/base64.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/buffer.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/datetime.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/dbgutil.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/hashfn.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/hashtable.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/listentry.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/macros.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/multisz.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/multisz.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/multisza.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/multisza.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/ntassert.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/percpu.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/precomp.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/prime.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/pudebug.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/reftrace.c (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/reftrace.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/rwlock.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/stringa.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/stringa.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/stringu.cpp (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/stringu.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/tracelog.c (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/tracelog.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/treehash.h (100%) rename src/{IISIntegration => Servers/IIS}/src/AspNetCoreModuleV1/IISLib/util.cxx (100%) create mode 100644 src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Directory.Build.targets rename src/{IISIntegration/nuget => Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1}/Microsoft.AspNetCore.AspNetCoreModule.props (53%) create mode 100644 src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj create mode 100644 src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/lib/netcoreapp2.1/_._ rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs (100%) create mode 100644 src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs (92%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs (100%) rename src/{IISIntegration => Servers/IIS}/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json (100%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config (100%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/AppHostConfig/Https.config (100%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/AppHostConfig/NtlmAuthentation.config (100%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/AppHostConfig/WebsocketsNotSupported.config (100%) create mode 100644 src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs (98%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs (95%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs (99%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs (76%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs (90%) rename src/{IISIntegration => Servers/IIS}/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs (89%) rename src/{IISIntegration => Servers/IIS}/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs (100%) rename src/{IISIntegration => Servers/IIS}/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs (100%) create mode 100644 src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj create mode 100644 src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/Program.cs (100%) rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/StartupHelloWorld.cs (100%) rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/StartupHttpsHelloWorld.cs (100%) rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/StartupNtlmAuthentication.cs (96%) rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/StartupUpgradeFeatureDetection.cs (100%) rename src/{IISIntegration/test/WebSites => Servers/IIS/test/testassets}/OutOfProcessWebSite/web.config (100%) rename src/{IISIntegration => Servers/IIS}/tools/SetupTestEnvironment.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/UpdateIISExpressCertificate.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/certificate.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/httpsys.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/installancm.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/stresstest.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/tools/update_schema.ps1 (100%) rename src/{IISIntegration => Servers/IIS}/version.props (100%) create mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin create mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin create mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock create mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock create mode 100644 src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties create mode 100644 src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties create mode 100644 src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom diff --git a/.azure/pipelines/jobs/iisintegration-job.yml b/.azure/pipelines/jobs/iisintegration-job.yml index 14c40ebb44d7..d5b45efca26d 100644 --- a/.azure/pipelines/jobs/iisintegration-job.yml +++ b/.azure/pipelines/jobs/iisintegration-job.yml @@ -4,10 +4,10 @@ jobs: jobName: 'IISIntegration' jobDisplayName: 'IISIntegration' beforeBuild: - - powershell: "& ./src/IISIntegration/tools/UpdateIISExpressCertificate.ps1; & ./src/IISIntegration/tools/SetupTestEnvironment.ps1 Setup" + - powershell: "& ./src/servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/servers/IIS/tools/SetupTestEnvironment.ps1 Setup" displayName: Prepare repo afterBuild: - - powershell: "& ./src/IISIntegration/tools/SetupTestEnvironment.ps1 Shutdown" + - powershell: "& ./src/servers/IIS/tools/SetupTestEnvironment.ps1 Shutdown" displayName: Stop AppVerifier condition: always() - task: PublishBuildArtifacts@1 @@ -16,5 +16,5 @@ jobs: inputs: artifactName: logs artifactType: Container - pathtoPublish: src/IISIntegration/artifacts/logs - buildDirectory: src/IISIntegration + pathtoPublish: src/servers/IIS/artifacts/logs + buildDirectory: src/servers/IIS diff --git a/build/artifacts.props b/build/artifacts.props index c9ce534c4f0b..14973792a3e6 100644 --- a/build/artifacts.props +++ b/build/artifacts.props @@ -30,7 +30,6 @@ - diff --git a/build/buildorder.props b/build/buildorder.props index 21999af70f01..2338a88d737f 100644 --- a/build/buildorder.props +++ b/build/buildorder.props @@ -9,7 +9,6 @@ - diff --git a/build/repo.props b/build/repo.props index 35e1ed077b78..4ee59e96d790 100644 --- a/build/repo.props +++ b/build/repo.props @@ -64,6 +64,7 @@ $(RepositoryRoot)src\Tools\dotnet-watch\test\TestProjects\**\*.csproj " /> + - diff --git a/eng/Baseline.Designer.props b/eng/Baseline.Designer.props index 03f9802505a5..c7b8c6bc768f 100644 --- a/eng/Baseline.Designer.props +++ b/eng/Baseline.Designer.props @@ -296,6 +296,25 @@ + + + 2.1.2 + + + + + + + + + + + + + + + + 2.1.1 diff --git a/eng/Baseline.xml b/eng/Baseline.xml index dc0f2f0b136b..4886e244a37d 100644 --- a/eng/Baseline.xml +++ b/eng/Baseline.xml @@ -43,6 +43,7 @@ + diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 836b443038a8..2fb22adc2394 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -36,6 +36,7 @@ + @@ -48,12 +49,16 @@ + - - + + + + + diff --git a/eng/ProjectReferences.props b/eng/ProjectReferences.props index bb785afb7d80..0b3bc1f6aa84 100644 --- a/eng/ProjectReferences.props +++ b/eng/ProjectReferences.props @@ -32,6 +32,7 @@ + diff --git a/eng/targets/Cpp.Common.targets b/eng/targets/Cpp.Common.targets index f2cad0d8c08e..b81c4e806996 100644 --- a/eng/targets/Cpp.Common.targets +++ b/eng/targets/Cpp.Common.targets @@ -3,4 +3,6 @@ + + diff --git a/src/IISIntegration/Directory.Build.props b/src/IISIntegration/Directory.Build.props deleted file mode 100644 index 5a07124cb62e..000000000000 --- a/src/IISIntegration/Directory.Build.props +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - Microsoft ASP.NET Core - https://github.com/aspnet/AspNetCore - git - $(MSBuildThisFileDirectory) - $(MSBuildThisFileDirectory)..\..\eng\AspNetCore.snk - true - true - true - - false - - - diff --git a/src/IISIntegration/Directory.Build.targets b/src/IISIntegration/Directory.Build.targets deleted file mode 100644 index 53b3f6e1daba..000000000000 --- a/src/IISIntegration/Directory.Build.targets +++ /dev/null @@ -1,7 +0,0 @@ - - - $(MicrosoftNETCoreApp20PackageVersion) - $(MicrosoftNETCoreApp21PackageVersion) - $(NETStandardLibrary20PackageVersion) - - diff --git a/src/IISIntegration/IISIntegration.sln b/src/IISIntegration/IISIntegration.sln deleted file mode 100644 index 90a9a25db739..000000000000 --- a/src/IISIntegration/IISIntegration.sln +++ /dev/null @@ -1,300 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2036 -MinimumVisualStudioVersion = 15.0.26730.03 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{04B1EDB6-E967-4D25-89B9-E6F8304038CD}" - ProjectSection(SolutionItems) = preProject - src\Directory.Build.props = src\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0EF45656-B25D-40D8-959C-726EAF185E60}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets - NuGet.Config = NuGet.Config - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EF30B533-D715-421A-92B7-92FEF460AC9C}" - ProjectSection(SolutionItems) = preProject - test\Directory.Build.props = test\Directory.Build.props - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "samples\IISSample\IISSample.csproj", "{E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{8B3446E8-E6A8-4591-AA63-A95837C6E97C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "test\Microsoft.AspNetCore.Server.IISIntegration.Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{4106DB10-E09F-480E-9CE6-B39235512EE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\WebSites\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{F54715C3-88D8-49E3-A291-C13570FE81FC}" - ProjectSection(ProjectDependencies) = postProject - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E-9CC8-450C-8A8D-94FC76428150}" - ProjectSection(SolutionItems) = preProject - build\applicationhost.config = build\applicationhost.config - build\applicationhost.iis.config = build\applicationhost.iis.config - build\dependencies.props = build\dependencies.props - build\native.targets = build\native.targets - build\repo.props = build\repo.props - build\testsite.props = build\testsite.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISIntegration.FunctionalTests", "test\IISIntegration.FunctionalTests\IISIntegration.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeIISSample", "samples\NativeIISSample\NativeIISSample.csproj", "{9BC4AFCB-325D-4C81-8228-8CF301CE2F97}" - ProjectSection(ProjectDependencies) = postProject - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InProcessWebSite", "test\WebSites\InProcessWebSite\InProcessWebSite.csproj", "{679FA2A2-898B-4320-884E-C2D294A97CE1}" - ProjectSection(ProjectDependencies) = postProject - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StressTestWebSite", "test\WebSites\StressTestWebSite\StressTestWebSite.csproj", "{13FD8F12-FFBE-4D01-B4AC-444F2994B04F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestTasks", "test\TestTasks\TestTasks.csproj", "{064D860B-4D7C-4B1D-918F-E020F1B99E2A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebSites", "WebSites", "{744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OverriddenServerWebSite", "test\WebSites\OverriddenServerWebSite\OverriddenServerWebSite.csproj", "{FC2A97F8-A749-4C04-97D1-97500066A820}" - ProjectSection(ProjectDependencies) = postProject - {D57EA297-6DC2-4BC0-8C91-334863327863} = {D57EA297-6DC2-4BC0-8C91-334863327863} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV1", "AspNetCoreModuleV1", "{16E521CE-77F1-4B1C-A183-520A41C4F372}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV2", "AspNetCoreModuleV2", "{06CA2C2B-83B0-4D83-905A-E0C74790009E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV1\IISLib\IISLib.vcxproj", "{4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj", "{439824F9-1455-4CC4-BD79-B44FA0A16552}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV2\AspNetCore\AspNetCore.vcxproj", "{EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CommonLib", "src\AspNetCoreModuleV2\CommonLib\CommonLib.vcxproj", "{55494E58-E061-4C4C-A0A8-837008E72F85}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV2\IISLib\IISLib.vcxproj", "{09D9D1D6-2951-4E14-BC35-76A23CF9391A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RequestHandler", "src\AspNetCoreModuleV2\RequestHandler\RequestHandler.vcxproj", "{D57EA297-6DC2-4BC0-8C91-334863327863}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.ActiveCfg = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.Build.0 = Debug|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.Build.0 = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.Build.0 = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.ActiveCfg = Release|Any CPU - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.Build.0 = Debug|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.Build.0 = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.ActiveCfg = Release|Any CPU - {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.ActiveCfg = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.Build.0 = Debug|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.Build.0 = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.ActiveCfg = Release|Any CPU - {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.Build.0 = Release|Any CPU - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|Any CPU.ActiveCfg = Debug|x86 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.ActiveCfg = Debug|x64 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.Build.0 = Debug|x64 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.ActiveCfg = Debug|x86 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.Build.0 = Debug|x86 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|Any CPU.ActiveCfg = Release|x86 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.ActiveCfg = Release|x64 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.Build.0 = Release|x64 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.ActiveCfg = Release|x86 - {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.Build.0 = Release|x86 - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.Build.0 = Debug|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.Build.0 = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.ActiveCfg = Release|Any CPU - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.Build.0 = Release|Any CPU - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|Any CPU.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|Any CPU.Build.0 = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x64.ActiveCfg = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x64.Build.0 = Debug|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x86.ActiveCfg = Debug|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Debug|x86.Build.0 = Debug|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|Any CPU.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|Any CPU.Build.0 = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x64.ActiveCfg = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x64.Build.0 = Release|x64 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.ActiveCfg = Release|x86 - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97}.Release|x86.Build.0 = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|Any CPU.ActiveCfg = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.ActiveCfg = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x64.Build.0 = Debug|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.ActiveCfg = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Debug|x86.Build.0 = Debug|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|Any CPU.ActiveCfg = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.ActiveCfg = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x64.Build.0 = Release|x64 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.ActiveCfg = Release|x86 - {679FA2A2-898B-4320-884E-C2D294A97CE1}.Release|x86.Build.0 = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.ActiveCfg = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x64.Build.0 = Debug|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.ActiveCfg = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Debug|x86.Build.0 = Debug|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|Any CPU.ActiveCfg = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.ActiveCfg = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x64.Build.0 = Release|x64 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.ActiveCfg = Release|x86 - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F}.Release|x86.Build.0 = Release|x86 - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x64.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x64.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x86.ActiveCfg = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Debug|x86.Build.0 = Debug|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|Any CPU.Build.0 = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x64.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x64.Build.0 = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x86.ActiveCfg = Release|Any CPU - {064D860B-4D7C-4B1D-918F-E020F1B99E2A}.Release|x86.Build.0 = Release|Any CPU - {FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|Any CPU.ActiveCfg = Debug|x86 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x64.ActiveCfg = Debug|x64 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x64.Build.0 = Debug|x64 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x86.ActiveCfg = Debug|x86 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Debug|x86.Build.0 = Debug|x86 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Release|Any CPU.ActiveCfg = Release|x86 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x64.ActiveCfg = Release|x64 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x64.Build.0 = Release|x64 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x86.ActiveCfg = Release|x86 - {FC2A97F8-A749-4C04-97D1-97500066A820}.Release|x86.Build.0 = Release|x86 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.ActiveCfg = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.Build.0 = Debug|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.ActiveCfg = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.Build.0 = Debug|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|Any CPU.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.ActiveCfg = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.Build.0 = Release|x64 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.ActiveCfg = Release|Win32 - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.Build.0 = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.ActiveCfg = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.Build.0 = Debug|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.ActiveCfg = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.Build.0 = Debug|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|Any CPU.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.ActiveCfg = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.Build.0 = Release|x64 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.ActiveCfg = Release|Win32 - {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.Build.0 = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.ActiveCfg = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x64.Build.0 = Debug|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.ActiveCfg = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Debug|x86.Build.0 = Debug|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|Any CPU.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.ActiveCfg = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x64.Build.0 = Release|x64 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.ActiveCfg = Release|Win32 - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B}.Release|x86.Build.0 = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.ActiveCfg = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x64.Build.0 = Debug|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.ActiveCfg = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Debug|x86.Build.0 = Debug|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|Any CPU.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.ActiveCfg = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x64.Build.0 = Release|x64 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.ActiveCfg = Release|Win32 - {55494E58-E061-4C4C-A0A8-837008E72F85}.Release|x86.Build.0 = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.ActiveCfg = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x64.Build.0 = Debug|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.ActiveCfg = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Debug|x86.Build.0 = Debug|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|Any CPU.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.ActiveCfg = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x64.Build.0 = Release|x64 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.ActiveCfg = Release|Win32 - {09D9D1D6-2951-4E14-BC35-76A23CF9391A}.Release|x86.Build.0 = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.ActiveCfg = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x64.Build.0 = Debug|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.ActiveCfg = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Debug|x86.Build.0 = Debug|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|Any CPU.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.ActiveCfg = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x64.Build.0 = Release|x64 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.ActiveCfg = Release|Win32 - {D57EA297-6DC2-4BC0-8C91-334863327863}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} - {8B3446E8-E6A8-4591-AA63-A95837C6E97C} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {4106DB10-E09F-480E-9CE6-B39235512EE6} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {F54715C3-88D8-49E3-A291-C13570FE81FC} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {9BC4AFCB-325D-4C81-8228-8CF301CE2F97} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} - {679FA2A2-898B-4320-884E-C2D294A97CE1} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {13FD8F12-FFBE-4D01-B4AC-444F2994B04F} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {064D860B-4D7C-4B1D-918F-E020F1B99E2A} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} = {EF30B533-D715-421A-92B7-92FEF460AC9C} - {FC2A97F8-A749-4C04-97D1-97500066A820} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} - {16E521CE-77F1-4B1C-A183-520A41C4F372} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {06CA2C2B-83B0-4D83-905A-E0C74790009E} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} - {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE} = {16E521CE-77F1-4B1C-A183-520A41C4F372} - {439824F9-1455-4CC4-BD79-B44FA0A16552} = {16E521CE-77F1-4B1C-A183-520A41C4F372} - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {55494E58-E061-4C4C-A0A8-837008E72F85} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - {D57EA297-6DC2-4BC0-8C91-334863327863} = {06CA2C2B-83B0-4D83-905A-E0C74790009E} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} - EndGlobalSection -EndGlobal diff --git a/src/IISIntegration/README.md b/src/IISIntegration/README.md deleted file mode 100644 index f9310e5d9e5e..000000000000 --- a/src/IISIntegration/README.md +++ /dev/null @@ -1,3 +0,0 @@ -This repo hosts the ASP.NET Core middleware for IIS integration and the ASP.NET Core Module. - -This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [Home](https://github.com/aspnet/home) repo. diff --git a/src/IISIntegration/build.cmd b/src/IISIntegration/build.cmd deleted file mode 100644 index f4169ea5e411..000000000000 --- a/src/IISIntegration/build.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@ECHO OFF -SET RepoRoot="%~dp0..\.." -%RepoRoot%\build.cmd -LockFile %RepoRoot%\korebuild-lock.txt -Path %~dp0 %* diff --git a/src/IISIntegration/build.sh b/src/IISIntegration/build.sh deleted file mode 100644 index d5bb0cf6312d..000000000000 --- a/src/IISIntegration/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -repo_root="$DIR/../.." -"$repo_root/build.sh" --path "$DIR" --lockfile "$repo_root/korebuild-lock.txt" "$@" diff --git a/src/IISIntegration/build/build.msbuild b/src/IISIntegration/build/build.msbuild deleted file mode 100644 index 117ed59becf7..000000000000 --- a/src/IISIntegration/build/build.msbuild +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/build/dependencies.props b/src/IISIntegration/build/dependencies.props deleted file mode 100644 index c90801a57326..000000000000 --- a/src/IISIntegration/build/dependencies.props +++ /dev/null @@ -1,55 +0,0 @@ - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - - 2.1.3-rtm-15802 - 15.6.82 - 15.6.82 - 2.0.0 - 2.1.2 - 15.6.1 - 2.0.3 - 4.5.0 - 4.5.0 - 4.5.1 - 4.5.1 - 4.5.0 - 4.5.1 - 4.5.0 - 9.0.1 - 2.3.1 - 2.4.0-beta.1.build3945 - - - - - - - - 2.1.2 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 0.5.1 - 2.1.2 - 2.1.1 - 2.1.0 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - 2.1.1 - - diff --git a/src/IISIntegration/build/launchSettings.json b/src/IISIntegration/build/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/build/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/build/repo.props b/src/IISIntegration/build/repo.props deleted file mode 100644 index 780afe4e43b3..000000000000 --- a/src/IISIntegration/build/repo.props +++ /dev/null @@ -1,26 +0,0 @@ - - - - - Microsoft - $(BuildDir)AspNetCoreModule.zip - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/build/repo.targets b/src/IISIntegration/build/repo.targets deleted file mode 100644 index 97753f24241e..000000000000 --- a/src/IISIntegration/build/repo.targets +++ /dev/null @@ -1,84 +0,0 @@ - - - - BuildNativeAssets;$(CompileDependsOn) - $(PackageDependsOn);PackageNativeProjects - $(RepositoryRoot)NuGetPackageVerifier.xplat.json - - - - - -p:Configuration=$(Configuration) -v:m -nologo -clp:NoSummary -p:CommitHash=$(CommitHash) - - - - - - - - - - - - - - - - NuGetPackage - Microsoft.AspNetCore.AspNetCoreModule - $(PackageVersion) - $(RepositoryRoot) - - - - - NuGetPackage - Microsoft.AspNetCore.AspNetCoreModuleV1 - $(PackageVersion) - $(RepositoryRoot) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/build/sources.props b/src/IISIntegration/build/sources.props deleted file mode 100644 index 9215df9751b4..000000000000 --- a/src/IISIntegration/build/sources.props +++ /dev/null @@ -1,17 +0,0 @@ - - - - - $(DotNetRestoreSources) - - $(RestoreSources); - https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json; - https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json; - - - $(RestoreSources); - https://api.nuget.org/v3/index.json; - - - diff --git a/src/IISIntegration/build/testsite.props b/src/IISIntegration/build/testsite.props deleted file mode 100644 index d2f6acea7e81..000000000000 --- a/src/IISIntegration/build/testsite.props +++ /dev/null @@ -1,92 +0,0 @@ - - - - win7-x64;win7-x86 - x64;x86 - $(MSBuildThisFileDirectory)applicationhost.config - $(MSBuildThisFileDirectory)applicationhost.iis.config - x64 - $(Platform) - - - - $(MSBuildProgramFiles32)\IIS Express\iisexpress.exe - $(SystemRoot)\SysWOW64\inetsrv\w3wp.exe - Win32 - - - - $(ProgramW6432)\IIS Express\iisexpress.exe - $(SystemRoot)\System32\inetsrv\w3wp.exe - x64 - - - - - $(NativePlatform)\ - - - - - - - - - - - - - - - /config:"$(IISExpressAppHostConfig)" - -h "$(IISAppHostConfig)" - - $(NativePlatform)\aspnetcore.dll - $(NativePlatform)\aspnetcorerh.dll - $(userprofile)\.dotnet\$(NativePlatform)\dotnet.exe - - - - - - - - - - - False - - - - - - - $(MSBuildThisFileDirectory)..\test\TestTasks\bin\$(Configuration)\$(TargetFramework)\TestTasks - - $(InjectDepsAssembly) - "win7-$(NativePlatform)" "$(AncmRHPath)" - - - - $(InjectDepsAssembly).exe - $(InjectDepsAssembly) - - - - $(InjectDepsAssembly).dll - dotnet - $(InjectDepsAssembly) $(InjectDepsArguments) - - - - - - - - - - - - diff --git a/src/IISIntegration/korebuild.json b/src/IISIntegration/korebuild.json deleted file mode 100644 index 663f87823359..000000000000 --- a/src/IISIntegration/korebuild.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/release/2.1/tools/korebuild.schema.json", - "channel": "release/2.1", - "toolsets": { - "visualstudio": { - "required": ["Windows"], - "includePrerelease": true, - "minVersion": "15.0.26730.03", - "requiredWorkloads": [ - "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", - "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Win81", - "Microsoft.VisualStudio.Component.VC.ATL", - "Microsoft.VisualStudio.Component.Windows10SDK.15063.Desktop" - ] - } - } - } \ No newline at end of file diff --git a/src/IISIntegration/nuget/AspNetCoreV1.nuspec b/src/IISIntegration/nuget/AspNetCoreV1.nuspec deleted file mode 100644 index f89b7ff754cf..000000000000 --- a/src/IISIntegration/nuget/AspNetCoreV1.nuspec +++ /dev/null @@ -1,29 +0,0 @@ - - - - Microsoft.AspNetCore.AspNetCoreModuleV1 - Microsoft ASP.NET Core Module - $VERSION$ - Microsoft - Microsoft - https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm - © .NET Foundation. All rights reserved. - https://www.asp.net/ - https://go.microsoft.com/fwlink/?LinkID=288859 - true - ASP.NET Core Module - en-US - Microsoft.AspNetCore.AspNetCoreModuleV1 - - - - - - - - - - - - - diff --git a/src/IISIntegration/nuget/AspNetCoreV2.nuspec b/src/IISIntegration/nuget/AspNetCoreV2.nuspec deleted file mode 100644 index 10745f52c46e..000000000000 --- a/src/IISIntegration/nuget/AspNetCoreV2.nuspec +++ /dev/null @@ -1,31 +0,0 @@ - - - - Microsoft.AspNetCore.AspNetCoreModule - Microsoft ASP.NET Core Module - $VERSION$ - Microsoft - Microsoft - https://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm - © .NET Foundation. All rights reserved. - https://www.asp.net/ - https://go.microsoft.com/fwlink/?LinkID=288859 - true - ASP.NET Core Module - en-US - Microsoft.AspNetCore.AspNetCoreModule - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/samples/IISSample/IISSample.csproj b/src/IISIntegration/samples/IISSample/IISSample.csproj deleted file mode 100644 index f8dafd69ef2c..000000000000 --- a/src/IISIntegration/samples/IISSample/IISSample.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - netcoreapp2.1;net461 - - - - - - - - - - - diff --git a/src/IISIntegration/samples/IISSample/Properties/launchSettings.json b/src/IISIntegration/samples/IISSample/Properties/launchSettings.json deleted file mode 100644 index 009aa9ab8902..000000000000 --- a/src/IISIntegration/samples/IISSample/Properties/launchSettings.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:25334/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Server.IISIntegration" - } - }, - "IISSample": { - "commandName": "Project", - "launchBrowser": true, - "launchUrl": "http://localhost:5000", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj b/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj deleted file mode 100644 index d9bf22ba1640..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/NativeIISSample.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - netcoreapp2.1 - - - - - - - - - - - - inprocess - - diff --git a/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json b/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/Properties/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/samples/NativeIISSample/Startup.cs b/src/IISIntegration/samples/NativeIISSample/Startup.cs deleted file mode 100644 index d36f26908dfe..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/Startup.cs +++ /dev/null @@ -1,88 +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.Linq; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.AspNetCore.Server.IISIntegration; - -namespace NativeIISSample -{ - public class Startup - { - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env, IAuthenticationSchemeProvider authSchemeProvider) - { - app.Run(async (context) => - { - context.Response.ContentType = "text/plain"; - - await context.Response.WriteAsync("Hello World - " + DateTimeOffset.Now + Environment.NewLine); - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Address:" + Environment.NewLine); - await context.Response.WriteAsync("Scheme: " + context.Request.Scheme + Environment.NewLine); - await context.Response.WriteAsync("Host: " + context.Request.Headers["Host"] + Environment.NewLine); - await context.Response.WriteAsync("PathBase: " + context.Request.PathBase.Value + Environment.NewLine); - await context.Response.WriteAsync("Path: " + context.Request.Path.Value + Environment.NewLine); - await context.Response.WriteAsync("Query: " + context.Request.QueryString.Value + Environment.NewLine); - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Connection:" + Environment.NewLine); - await context.Response.WriteAsync("RemoteIp: " + context.Connection.RemoteIpAddress + Environment.NewLine); - await context.Response.WriteAsync("RemotePort: " + context.Connection.RemotePort + Environment.NewLine); - await context.Response.WriteAsync("LocalIp: " + context.Connection.LocalIpAddress + Environment.NewLine); - await context.Response.WriteAsync("LocalPort: " + context.Connection.LocalPort + Environment.NewLine); - await context.Response.WriteAsync("ClientCert: " + context.Connection.ClientCertificate + Environment.NewLine); - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("User: " + context.User.Identity.Name + Environment.NewLine); - var scheme = await authSchemeProvider.GetSchemeAsync(IISDefaults.AuthenticationScheme); - await context.Response.WriteAsync("DisplayName: " + scheme?.DisplayName + Environment.NewLine); - - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Headers:" + Environment.NewLine); - foreach (var header in context.Request.Headers) - { - await context.Response.WriteAsync(header.Key + ": " + header.Value + Environment.NewLine); - } - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Environment Variables:" + Environment.NewLine); - var vars = Environment.GetEnvironmentVariables(); - foreach (var key in vars.Keys.Cast().OrderBy(key => key, StringComparer.OrdinalIgnoreCase)) - { - var value = vars[key]; - await context.Response.WriteAsync(key + ": " + value + Environment.NewLine); - } - await context.Response.WriteAsync(Environment.NewLine); - - // accessing IIS server variables - await context.Response.WriteAsync("Server Variables:" + Environment.NewLine); - - if (context.Features.Get() != null) - { - await context.Response.WriteAsync("Websocket feature is enabled."); - } - else - { - await context.Response.WriteAsync("Websocket feature is disabled."); - } - }); - } - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .UseIISIntegration() - .UseStartup() - .Build(); - - host.Run(); - } - } -} diff --git a/src/IISIntegration/samples/NativeIISSample/web.config b/src/IISIntegration/samples/NativeIISSample/web.config deleted file mode 100644 index 08baab0922e3..000000000000 --- a/src/IISIntegration/samples/NativeIISSample/web.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj deleted file mode 100644 index 4660054b0bfc..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {EC82302F-D2F0-4727-99D1-EABC0DD9DC3B} - Win32Proj - AspNetCoreModule - AspNetCore - aspnetcore - false - 10.0.15063.0 - - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ - - - - NotUsing - Level4 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions) - precomp.hxx - $(IntDir)$(TargetName).pch - ..\IISLib;.\Inc - ProgramDatabase - MultiThreadedDebug - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - true - kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - Source.def - - - ..\Commonlib - - - - - NotUsing - Level4 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions) - precomp.hxx - $(IntDir)$(TargetName).pch - ..\IISLib;.\Inc - ProgramDatabase - MultiThreadedDebug - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - true - kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - Source.def - - - ..\Commonlib - - - - - Level4 - NotUsing - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions) - ..\IISLib;inc - precomp.hxx - MultiThreaded - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - false - true - true - Source.def - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;winhttp.lib;odbc32.lib;ws2_32.lib;odbccp32.lib;wbemuuid.lib;iphlpapi.lib;pdh.lib;rpcrt4.lib;%(AdditionalDependencies) - - - ..\Commonlib - - - - - Level4 - NotUsing - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;ASPNETCOREMODULE_EXPORTS;%(PreprocessorDefinitions) - precomp.hxx - ..\IISLib;inc - MultiThreaded - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - false - true - true - Source.def - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - - - ..\Commonlib - - - - - - - - - - - - - - - - - - - - - - {55494e58-e061-4c4c-a0a8-837008e72f85} - - - {09d9d1d6-2951-4e14-bc35-76a23cf9391a} - - - - - - - - - - - - PreserveNewest - - - PreserveNewest - - - - - - - - - - \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationinfo.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationinfo.h deleted file mode 100644 index f47b51786bfc..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationinfo.h +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#define API_BUFFER_TOO_SMALL 0x80008098 - -extern BOOL g_fRecycleProcessCalled; - -typedef -HRESULT -(WINAPI * PFN_ASPNETCORE_CREATE_APPLICATION)( - _In_ IHttpServer *pServer, - _In_ ASPNETCORE_CONFIG *pConfig, - _Out_ APPLICATION **pApplication - ); - -typedef -HRESULT -(WINAPI * PFN_ASPNETCORE_CREATE_REQUEST_HANDLER)( - _In_ IHttpContext *pHttpContext, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication, - _Out_ REQUEST_HANDLER **pRequestHandler - ); -// -// The key used for hash-table lookups, consists of the port on which the http process is created. -// -class APPLICATION_INFO_KEY -{ -public: - - APPLICATION_INFO_KEY( - VOID - ) : INLINE_STRU_INIT(m_struKey) - { - } - - HRESULT - Initialize( - _In_ LPCWSTR pszKey - ) - { - return m_struKey.Copy(pszKey); - } - - BOOL - GetIsEqual( - const APPLICATION_INFO_KEY * key2 - ) const - { - return m_struKey.Equals(key2->m_struKey); - } - - DWORD CalcKeyHash() const - { - return Hash(m_struKey.QueryStr()); - } - -private: - - INLINE_STRU(m_struKey, 1024); -}; - - -class APPLICATION_INFO -{ -public: - - APPLICATION_INFO(IHttpServer *pServer) : - m_pServer(pServer), - m_cRefs(1), m_fAppOfflineFound(FALSE), - m_pAppOfflineHtm(NULL), m_pFileWatcherEntry(NULL), - m_pConfiguration(NULL), - m_pfnAspNetCoreCreateApplication(NULL), - m_pfnAspNetCoreCreateRequestHandler(NULL) - { - InitializeSRWLock(&m_srwLock); - } - - APPLICATION_INFO_KEY * - QueryApplicationInfoKey() - { - return &m_applicationInfoKey; - } - - virtual - ~APPLICATION_INFO(); - - HRESULT - Initialize( - _In_ ASPNETCORE_CONFIG *pConfiguration, - _In_ FILE_WATCHER *pFileWatcher - ); - - VOID - ReferenceApplicationInfo() const - { - InterlockedIncrement(&m_cRefs); - } - - VOID - DereferenceApplicationInfo() const - { - if (InterlockedDecrement(&m_cRefs) == 0) - { - delete this; - } - } - - APP_OFFLINE_HTM* QueryAppOfflineHtm() - { - return m_pAppOfflineHtm; - } - - BOOL - AppOfflineFound() - { - return m_fAppOfflineFound; - } - - VOID - UpdateAppOfflineFileHandle(); - - HRESULT - StartMonitoringAppOffline(); - - ASPNETCORE_CONFIG* - QueryConfig() - { - return m_pConfiguration; - } - - // - // ExtractApplication will increase the reference counter of the application - // Caller is responsible for dereference the application. - // Otherwise memory leak - // - VOID - ExtractApplication(APPLICATION** ppApplication) - { - AcquireSRWLockShared(&m_srwLock); - if (m_pApplication != NULL) - { - m_pApplication->ReferenceApplication(); - } - *ppApplication = m_pApplication; - ReleaseSRWLockShared(&m_srwLock); - } - - VOID - RecycleApplication(); - - VOID - ShutDownApplication(); - - HRESULT - EnsureApplicationCreated(); - - PFN_ASPNETCORE_CREATE_REQUEST_HANDLER - QueryCreateRequestHandler() - { - return m_pfnAspNetCoreCreateRequestHandler; - } - -private: - HRESULT FindRequestHandlerAssembly(); - HRESULT FindNativeAssemblyFromGlobalLocation(STRU* struFilename); - HRESULT FindNativeAssemblyFromHostfxr(STRU* struFilename); - - static VOID DoRecycleApplication(LPVOID lpParam); - - mutable LONG m_cRefs; - APPLICATION_INFO_KEY m_applicationInfoKey; - BOOL m_fAppOfflineFound; - APP_OFFLINE_HTM *m_pAppOfflineHtm; - FILE_WATCHER_ENTRY *m_pFileWatcherEntry; - ASPNETCORE_CONFIG *m_pConfiguration; - APPLICATION *m_pApplication; - SRWLOCK m_srwLock; - IHttpServer *m_pServer; - PFN_ASPNETCORE_CREATE_APPLICATION m_pfnAspNetCoreCreateApplication; - PFN_ASPNETCORE_CREATE_REQUEST_HANDLER m_pfnAspNetCoreCreateRequestHandler; -}; - -class APPLICATION_INFO_HASH : - public HASH_TABLE -{ - -public: - - APPLICATION_INFO_HASH() - {} - - APPLICATION_INFO_KEY * - ExtractKey( - APPLICATION_INFO *pApplicationInfo - ) - { - return pApplicationInfo->QueryApplicationInfoKey(); - } - - DWORD - CalcKeyHash( - APPLICATION_INFO_KEY *key - ) - { - return key->CalcKeyHash(); - } - - BOOL - EqualKeys( - APPLICATION_INFO_KEY *key1, - APPLICATION_INFO_KEY *key2 - ) - { - return key1->GetIsEqual(key2); - } - - VOID - ReferenceRecord( - APPLICATION_INFO *pApplicationInfo - ) - { - pApplicationInfo->ReferenceApplicationInfo(); - } - - VOID - DereferenceRecord( - APPLICATION_INFO *pApplicationInfo - ) - { - pApplicationInfo->DereferenceApplicationInfo(); - } - - static - VOID - ReferenceCopyToTable( - APPLICATION_INFO * pEntry, - PVOID pvData - ) - { - APPLICATION_INFO_HASH *pHash = static_cast(pvData); - DBG_ASSERT(pHash); - pHash->InsertRecord(pEntry); - } - -private: - - APPLICATION_INFO_HASH(const APPLICATION_INFO_HASH &); - void operator=(const APPLICATION_INFO_HASH &); -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationmanager.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationmanager.h deleted file mode 100644 index 7201d7de4920..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/applicationmanager.h +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define DEFAULT_HASH_BUCKETS 17 - -// -// This class will manage the lifecycle of all Asp.Net Core applciation -// It should be global singleton. -// Should always call GetInstance to get the object instance -// - -struct CONFIG_CHANGE_CONTEXT -{ - PCWSTR pstrPath; - MULTISZ MultiSz; -}; - -class APPLICATION_MANAGER -{ -public: - - static - APPLICATION_MANAGER* - GetInstance( - VOID - ) - { - if ( sm_pApplicationManager == NULL ) - { - sm_pApplicationManager = new APPLICATION_MANAGER(); - } - - return sm_pApplicationManager; - } - - static - VOID - Cleanup( - VOID - ) - { - if(sm_pApplicationManager != NULL) - { - delete sm_pApplicationManager; - sm_pApplicationManager = NULL; - } - } - - static - BOOL - FindConfigChangedApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ PVOID pvContext - ); - - static - VOID - ShutdownApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ PVOID pvContext - ); - - HRESULT - GetOrCreateApplicationInfo( - _In_ IHttpServer* pServer, - _In_ ASPNETCORE_CONFIG* pConfig, - _Out_ APPLICATION_INFO ** ppApplicationInfo - ); - - HRESULT - RecycleApplicationFromManager( - _In_ LPCWSTR pszApplicationId - ); - - VOID - ShutDown(); - - ~APPLICATION_MANAGER() - { - if (m_pFileWatcher != NULL) - { - delete m_pFileWatcher; - m_pFileWatcher = NULL; - } - - if(m_pApplicationInfoHash != NULL) - { - m_pApplicationInfoHash->Clear(); - delete m_pApplicationInfoHash; - m_pApplicationInfoHash = NULL; - } - } - - FILE_WATCHER* - GetFileWatcher() - { - return m_pFileWatcher; - } - - HRESULT Initialize() - { - HRESULT hr = S_OK; - - if(m_pApplicationInfoHash == NULL) - { - m_pApplicationInfoHash = new APPLICATION_INFO_HASH(); - if(m_pApplicationInfoHash == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = m_pApplicationInfoHash->Initialize(DEFAULT_HASH_BUCKETS); - if(FAILED(hr)) - { - goto Finished; - } - } - - if( m_pFileWatcher == NULL ) - { - m_pFileWatcher = new FILE_WATCHER; - if(m_pFileWatcher == NULL) - { - hr = HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY ); - goto Finished; - } - - m_pFileWatcher->Create(); - } - - Finished: - return hr; - } - -private: - // - // we currently limit the size of m_pstrErrorInfo to 5000, be careful if you want to change its payload - // - APPLICATION_MANAGER() : m_pApplicationInfoHash(NULL), - m_pFileWatcher(NULL), - m_hostingModel(HOSTING_UNKNOWN) - { - InitializeSRWLock(&m_srwLock); - } - - FILE_WATCHER *m_pFileWatcher; - APPLICATION_INFO_HASH *m_pApplicationInfoHash; - static APPLICATION_MANAGER *sm_pApplicationManager; - SRWLOCK m_srwLock; - APP_HOSTING_MODEL m_hostingModel; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/appoffline.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/appoffline.h deleted file mode 100644 index 85b6c13ea8d3..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/appoffline.h +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -class APP_OFFLINE_HTM -{ -public: - APP_OFFLINE_HTM(LPCWSTR pszPath) : m_cRefs(1) - { - m_Path.Copy(pszPath); - } - - VOID - ReferenceAppOfflineHtm() const - { - InterlockedIncrement(&m_cRefs); - } - - VOID - DereferenceAppOfflineHtm() const - { - if (InterlockedDecrement(&m_cRefs) == 0) - { - delete this; - } - } - - BOOL - Load( - VOID - ) - { - BOOL fResult = TRUE; - LARGE_INTEGER li = { 0 }; - CHAR *pszBuff = NULL; - HANDLE handle = INVALID_HANDLE_VALUE; - - handle = CreateFile(m_Path.QueryStr(), - GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (handle == INVALID_HANDLE_VALUE) - { - if (HRESULT_FROM_WIN32(GetLastError()) == ERROR_FILE_NOT_FOUND) - { - fResult = FALSE; - } - - // This Load() member function is supposed be called only when the change notification event of file creation or file modification happens. - // If file is currenlty locked exclusively by other processes, we might get INVALID_HANDLE_VALUE even though the file exists. In that case, we should return TRUE here. - goto Finished; - } - - if (!GetFileSizeEx(handle, &li)) - { - goto Finished; - } - - if (li.HighPart != 0) - { - // > 4gb file size not supported - // todo: log a warning at event log - goto Finished; - } - - DWORD bytesRead = 0; - - if (li.LowPart > 0) - { - pszBuff = new CHAR[li.LowPart + 1]; - - if (ReadFile(handle, pszBuff, li.LowPart, &bytesRead, NULL)) - { - m_Contents.Copy(pszBuff, bytesRead); - } - } - - Finished: - if (handle != INVALID_HANDLE_VALUE) - { - CloseHandle(handle); - handle = INVALID_HANDLE_VALUE; - } - - if (pszBuff != NULL) - { - delete[] pszBuff; - pszBuff = NULL; - } - - return fResult; - } - - mutable LONG m_cRefs; - STRA m_Contents; - STRU m_Path; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/filewatcher.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/filewatcher.h deleted file mode 100644 index d8bde448a781..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/filewatcher.h +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define FILE_WATCHER_SHUTDOWN_KEY (ULONG_PTR)(-1) -#define FILE_WATCHER_ENTRY_BUFFER_SIZE 4096 -#ifndef CONTAINING_RECORD -// -// Calculate the address of the base of the structure given its type, and an -// address of a field within the structure. -// - -#define CONTAINING_RECORD(address, type, field) \ - ((type *)((PCHAR)(address)-(ULONG_PTR)(&((type *)0)->field))) - -#endif // !CONTAINING_RECORD -#define FILE_NOTIFY_VALID_MASK 0x00000fff -#define FILE_WATCHER_ENTRY_SIGNATURE ((DWORD) 'FWES') -#define FILE_WATCHER_ENTRY_SIGNATURE_FREE ((DWORD) 'sewf') - -class APPLICATION_INFO; - -class FILE_WATCHER{ -public: - - FILE_WATCHER(); - - ~FILE_WATCHER(); - - HRESULT Create(); - - HANDLE - QueryCompletionPort( - VOID - ) const - { - return m_hCompletionPort; - } - - static - DWORD - WINAPI ChangeNotificationThread(LPVOID); - - static - void - WINAPI FileWatcherCompletionRoutine - ( - DWORD dwCompletionStatus, - DWORD cbCompletion, - OVERLAPPED * pOverlapped - ); - -private: - HANDLE m_hCompletionPort; - HANDLE m_hChangeNotificationThread; - volatile BOOL m_fThreadExit; -}; - -class FILE_WATCHER_ENTRY -{ -public: - FILE_WATCHER_ENTRY(FILE_WATCHER * pFileMonitor); - - OVERLAPPED _overlapped; - - HRESULT - Create( - _In_ PCWSTR pszDirectoryToMonitor, - _In_ PCWSTR pszFileNameToMonitor, - _In_ APPLICATION_INFO* pApplicationInfo, - _In_ HANDLE hImpersonationToken - ); - - VOID - ReferenceFileWatcherEntry() const - { - InterlockedIncrement(&_cRefs); - } - - VOID - DereferenceFileWatcherEntry() const - { - if (InterlockedDecrement(&_cRefs) == 0) - { - delete this; - } - } - - BOOL - QueryIsValid() const - { - return _fIsValid; - } - - VOID - MarkEntryInValid() - { - _fIsValid = FALSE; - } - - HRESULT Monitor(); - - VOID StopMonitor(); - - HRESULT - HandleChangeCompletion( - _In_ DWORD dwCompletionStatus, - _In_ DWORD cbCompletion - ); - -private: - virtual ~FILE_WATCHER_ENTRY(); - - DWORD _dwSignature; - BUFFER _buffDirectoryChanges; - HANDLE _hImpersonationToken; - HANDLE _hDirectory; - FILE_WATCHER* _pFileMonitor; - APPLICATION_INFO* _pApplicationInfo; - STRU _strFileName; - STRU _strDirectoryName; - LONG _lStopMonitorCalled; - mutable LONG _cRefs; - BOOL _fIsValid; - SRWLOCK _srwLock; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/fx_ver.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/fx_ver.h deleted file mode 100644 index f485ba5a6e7f..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/fx_ver.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#ifndef __FX_VER_H__ -#define __FX_VER_H__ -#include - -// Note: This is not SemVer (esp., in comparing pre-release part, fx_ver_t does not -// compare multiple dot separated identifiers individually.) ex: 1.0.0-beta.2 vs. 1.0.0-beta.11 -struct fx_ver_t -{ - fx_ver_t(int major, int minor, int patch); - fx_ver_t(int major, int minor, int patch, const std::wstring& pre); - fx_ver_t(int major, int minor, int patch, const std::wstring& pre, const std::wstring& build); - - int get_major() const { return m_major; } - int get_minor() const { return m_minor; } - int get_patch() const { return m_patch; } - - void set_major(int m) { m_major = m; } - void set_minor(int m) { m_minor = m; } - void set_patch(int p) { m_patch = p; } - - bool is_prerelease() const { return !m_pre.empty(); } - - std::wstring as_str() const; - std::wstring prerelease_glob() const; - std::wstring patch_glob() const; - - bool operator ==(const fx_ver_t& b) const; - bool operator !=(const fx_ver_t& b) const; - bool operator <(const fx_ver_t& b) const; - bool operator >(const fx_ver_t& b) const; - bool operator <=(const fx_ver_t& b) const; - bool operator >=(const fx_ver_t& b) const; - - static bool parse(const std::wstring& ver, fx_ver_t* fx_ver, bool parse_only_production = false); - -private: - int m_major; - int m_minor; - int m_patch; - std::wstring m_pre; - std::wstring m_build; - - static int compare(const fx_ver_t&a, const fx_ver_t& b); -}; - -#endif // __FX_VER_H__ \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/globalmodule.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/globalmodule.h deleted file mode 100644 index aca185705179..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/globalmodule.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -class ASPNET_CORE_GLOBAL_MODULE : public CGlobalModule -{ - -public: - - ASPNET_CORE_GLOBAL_MODULE( - APPLICATION_MANAGER* pApplicationManager - ); - - ~ASPNET_CORE_GLOBAL_MODULE() - { - } - - VOID Terminate() - { - // Remove the class from memory. - delete this; - } - - GLOBAL_NOTIFICATION_STATUS - OnGlobalStopListening( - _In_ IGlobalStopListeningProvider * pProvider - ); - - GLOBAL_NOTIFICATION_STATUS - OnGlobalConfigurationChange( - _In_ IGlobalConfigurationChangeProvider * pProvider - ); - -private: - APPLICATION_MANAGER * m_pApplicationManager; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/proxymodule.h b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/proxymodule.h deleted file mode 100644 index 7e5f30a8eb83..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Inc/proxymodule.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -extern HTTP_MODULE_ID g_pModuleId; -extern IHttpServer *g_pHttpServer; -extern HMODULE g_hAspnetCoreRH; - -class ASPNET_CORE_PROXY_MODULE : public CHttpModule -{ - public: - - ASPNET_CORE_PROXY_MODULE(); - - ~ASPNET_CORE_PROXY_MODULE(); - - void * operator new(size_t size, IModuleAllocator * pPlacement) - { - return pPlacement->AllocateMemory(static_cast(size)); - } - - VOID - operator delete( - void * - ) - {} - - __override - REQUEST_NOTIFICATION_STATUS - OnExecuteRequestHandler( - IHttpContext * pHttpContext, - IHttpEventProvider * pProvider - ); - - __override - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - IHttpContext * pHttpContext, - DWORD dwNotification, - BOOL fPostNotification, - IHttpEventProvider * pProvider, - IHttpCompletionInfo * pCompletionInfo - ); - - private: - - APPLICATION_INFO *m_pApplicationInfo; - APPLICATION *m_pApplication; - REQUEST_HANDLER *m_pHandler; -}; - -class ASPNET_CORE_PROXY_MODULE_FACTORY : public IHttpModuleFactory -{ - public: - HRESULT - GetHttpModule( - CHttpModule ** ppModule, - IModuleAllocator * pAllocator - ); - - VOID - Terminate(); -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def deleted file mode 100644 index 9aae10ab5d9a..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/Source.def +++ /dev/null @@ -1,4 +0,0 @@ -LIBRARY aspnetcore - -EXPORTS - RegisterModule diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof deleted file mode 100644 index 5a50b1991468..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/ancm.mof +++ /dev/null @@ -1,208 +0,0 @@ -#pragma classflags("forceupdate") -#pragma namespace ("\\\\.\\Root\\WMI") -#pragma autorecover - -/* - * AspNetCore module trace events layout - * Uncomment the following class to run mof2trace to generate header file - * comment it back before checking it in */ -[Dynamic, - Description("IIS: WWW Server"), - Guid("{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"), - locale("MS\\0x409")] -class IIS_Trace:EventTrace -{ - [Description ("Enable Flags") : amended, - ValueDescriptions{ - "AspNetCore module events" } : amended, - DefineValues{ - "ETW_IIS_ANCM" }, - Values{ - "ANCM" }, - ValueMap{ - "0x10000" } - ] - uint32 Flags; - - [Description ("Levels") : amended, - ValueDescriptions{ - "Abnormal exit or termination", - "Severe errors", - "Warnings", - "Information", - "Detailed information" } : amended, - DefineValues{ - "TRACE_LEVEL_FATAL", - "TRACE_LEVEL_ERROR", - "TRACE_LEVEL_WARNING", - "TRACE_LEVEL_INFORMATION", - "TRACE_LEVEL_VERBOSE" }, - Values{ - "Fatal", - "Error", - "Warning", - "Information", - "Verbose" }, - ValueMap{ - "0x1", - "0x2", - "0x3", - "0x4", - "0x5" }, - ValueType("index") - ] - uint32 Level; -}; -*/ - -[Dynamic, - Description("ANCM runtime events") : amended, - Guid("{82ADEAD7-12B2-4781-BDCA-5A4B6C757191}"), - EventVersion(1), - DisplayName("ANCM"), - EventANCMRuntime, - locale("MS\\0x409") -] -class ANCM_Events:IIS_Trace -{ -}; - -[Dynamic, - Description("Start application success") : amended, - EventType(1), - EventLevel(4), - EventTypeName("ANCM_START_APPLICATION_SUCCESS") : amended -] -class ANCMAppStart:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; - [WmiDataId(2), - Description("Application Description") : amended, - StringTermination("NullTerminated"), - format("w"), - read] - string AppDescription; -}; - -[Dynamic, - Description("Start application failed") : amended, - EventType(2), - EventLevel(2), - EventTypeName("ANCM_START_APPLICATION_FAIL") : amended -] -class ANCMAppStartFail:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; - [WmiDataId(2), - Description("Application Start Failure Description") : amended, - StringTermination("NullTerminated"), - format("w"), - read] - string FailureDescription; -}; - -[Dynamic, - Description("Start forwarding request") : amended, - EventType(3), - EventLevel(4), - EventTypeName("ANCM_REQUEST_FORWARD_START") : amended -] -class ANCMForwardStart:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; -}; - -[Dynamic, - Description("Finish forwarding request") : amended, - EventType(4), - EventLevel(4), - EventTypeName("ANCM_REQUEST_FORWARD_END") : amended -] -class ANCMForwardEnd:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; -}; - -[Dynamic, - Description("Forwarding request failure") : amended, - EventType(5), - EventLevel(2), - EventTypeName("ANCM_REQUEST_FORWARD_FAIL") : amended -] -class ANCMForwardFail:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; - [WmiDataId(2), - Description("Error code") : amended, - format("x"), - read] - uint32 ErrorCode; -}; - -[Dynamic, - Description("Receiving callback from WinHttp") : amended, - EventType(6), - EventLevel(4), - EventTypeName("ANCM_WINHTTP_CALLBACK") : amended -] -class ANCMWinHttpCallBack:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; - [WmiDataId(2), - Description("InternetStatus") : amended, - format("x"), - read] - uint32 InternetStatus; -}; - -[Dynamic, - Description("Inprocess executing request failure") : amended, - EventType(7), - EventLevel(2), - EventTypeName("ANCM_EXECUTE_REQUEST_FAIL") : amended -] -class ANCMExecuteFailed:ANCM_Events -{ - [WmiDataId(1), - Description("Context ID") : amended, - extension("Guid"), - ActivityID, - read] - object ContextId; - [WmiDataId(2), - Description("InternetStatus") : amended, - format("x"), - read] - uint32 ErrorCode; -}; - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema.xml b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema.xml deleted file mode 100644 index d65be071958c..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_schema.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc deleted file mode 100644 index 9d0dfa7f832e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/aspnetcoremodule.rc +++ /dev/null @@ -1,120 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include -#include "version.h" -#include "..\CommonLib\Aspnetcore_msg.rc" -#include "..\CommonLib\resources.h" -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#define FileDescription "IIS AspNetCore Module. Commit: " CommitHash - -///////////////////////////////////////////////////////////////////////////// -// -// 11 -// - -//1 11 -//BEGIN -// 0x0001, 0x0000, 0x03e8, 0x0000, 0x03ed, 0x0000, 0x0010, 0x0000, 0x0010, -// 0x0001, 0x0025, 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, -// 0x0025, 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, -// 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, -// 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, 0x000d, -// 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, 0x000d, 0x000a, -// 0x0000, 0x0000 -//END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\CommonLib\resources.h\0" -END - -2 TEXTINCLUDE -BEGIN - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FileVersion - PRODUCTVERSION ProductVersion - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Microsoft Corporation" - VALUE "FileDescription", FileDescription - VALUE "FileVersion", FileVersionStr - VALUE "InternalName", "aspnetcore" - VALUE "LegalCopyright", "Copyright (C) Microsoft Corporation" - VALUE "OriginalFilename", "aspnetcore.dll" - VALUE "ProductName", "ASP.NET Core Module" - VALUE "ProductVersion", ProductVersionStr - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_INVALID_PROPERTY "Property name '%s' in system.webServer/aspNetCore section has invalid value '%s' which does not conform to the prescribed format" - IDS_SERVER_ERROR "There was a connection error while trying to route the request." -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationinfo.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationinfo.cpp deleted file mode 100644 index 63efb9e889db..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationinfo.cpp +++ /dev/null @@ -1,650 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.hxx" - -APPLICATION_INFO::~APPLICATION_INFO() -{ - if (m_pAppOfflineHtm != NULL) - { - m_pAppOfflineHtm->DereferenceAppOfflineHtm(); - m_pAppOfflineHtm = NULL; - } - - if (m_pFileWatcherEntry != NULL) - { - // Mark the entry as invalid, - // StopMonitor will close the file handle and trigger a FCN - // the entry will delete itself when processing this FCN - m_pFileWatcherEntry->MarkEntryInValid(); - m_pFileWatcherEntry->StopMonitor(); - m_pFileWatcherEntry->DereferenceFileWatcherEntry(); - m_pFileWatcherEntry = NULL; - } - - if (m_pApplication != NULL) - { - // shutdown the application - m_pApplication->ShutDown(); - m_pApplication->DereferenceApplication(); - m_pApplication = NULL; - } - - // configuration should be dereferenced after application shutdown - // since the former will use it during shutdown - if (m_pConfiguration != NULL) - { - // Need to dereference the configuration instance - m_pConfiguration->DereferenceConfiguration(); - m_pConfiguration = NULL; - } -} - -HRESULT -APPLICATION_INFO::Initialize( - _In_ ASPNETCORE_CONFIG *pConfiguration, - _In_ FILE_WATCHER *pFileWatcher -) -{ - HRESULT hr = S_OK; - - DBG_ASSERT(pConfiguration); - DBG_ASSERT(pFileWatcher); - - m_pConfiguration = pConfiguration; - - // reference the configuration instance to prevent it will be not release - // earlier in case of configuration change and shutdown - m_pConfiguration->ReferenceConfiguration(); - - hr = m_applicationInfoKey.Initialize(pConfiguration->QueryConfigPath()->QueryStr()); - if (FAILED(hr)) - { - goto Finished; - } - - if (m_pFileWatcherEntry == NULL) - { - m_pFileWatcherEntry = new FILE_WATCHER_ENTRY(pFileWatcher); - if (m_pFileWatcherEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - } - - UpdateAppOfflineFileHandle(); - -Finished: - return hr; -} - -HRESULT -APPLICATION_INFO::StartMonitoringAppOffline() -{ - HRESULT hr = S_OK; - if (m_pFileWatcherEntry != NULL) - { - hr = m_pFileWatcherEntry->Create(m_pConfiguration->QueryApplicationPhysicalPath()->QueryStr(), L"app_offline.htm", this, NULL); - } - return hr; -} - -// -// Called by the file watcher when the app_offline.htm's file status has been changed. -// If it finds it, we will call recycle on the application. -// -VOID -APPLICATION_INFO::UpdateAppOfflineFileHandle() -{ - STRU strFilePath; - UTILITY::ConvertPathToFullPath(L".\\app_offline.htm", - m_pConfiguration->QueryApplicationPhysicalPath()->QueryStr(), - &strFilePath); - APP_OFFLINE_HTM *pOldAppOfflineHtm = NULL; - APP_OFFLINE_HTM *pNewAppOfflineHtm = NULL; - - ReferenceApplicationInfo(); - - if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(strFilePath.QueryStr()) && - GetLastError() == ERROR_FILE_NOT_FOUND) - { - // Check if app offline was originally present. - // if it was, log that app_offline has been dropped. - if (m_fAppOfflineFound) - { - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED_MSG))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED, - strEventMsg.QueryStr()); - } - } - - m_fAppOfflineFound = FALSE; - } - else - { - pNewAppOfflineHtm = new APP_OFFLINE_HTM(strFilePath.QueryStr()); - - if (pNewAppOfflineHtm != NULL) - { - if (pNewAppOfflineHtm->Load()) - { - // - // loaded the new app_offline.htm - // - pOldAppOfflineHtm = (APP_OFFLINE_HTM *)InterlockedExchangePointer((VOID**)&m_pAppOfflineHtm, pNewAppOfflineHtm); - - if (pOldAppOfflineHtm != NULL) - { - pOldAppOfflineHtm->DereferenceAppOfflineHtm(); - pOldAppOfflineHtm = NULL; - } - } - else - { - // ignored the new app_offline file because the file does not exist. - pNewAppOfflineHtm->DereferenceAppOfflineHtm(); - pNewAppOfflineHtm = NULL; - } - } - - m_fAppOfflineFound = TRUE; - - // recycle the application - if (m_pApplication != NULL) - { - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG, - m_pApplication->QueryConfig()->QueryApplicationPath()->QueryStr()))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_RECYCLE_APPOFFLINE, - strEventMsg.QueryStr()); - } - - RecycleApplication(); - } - } - - DereferenceApplicationInfo(); -} - -HRESULT -APPLICATION_INFO::EnsureApplicationCreated() -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - APPLICATION* pApplication = NULL; - STACK_STRU(struFileName, 300); // >MAX_PATH - STRU struHostFxrDllLocation; - - if (m_pApplication != NULL) - { - goto Finished; - } - - if (m_pApplication == NULL) - { - AcquireSRWLockExclusive(&m_srwLock); - fLocked = TRUE; - if (m_pApplication != NULL) - { - goto Finished; - } - - // - // in case of app offline, we don't want to create a new application now - // - if (!m_fAppOfflineFound) - { - - // Move the request handler check inside of the lock - // such that only one request finds and loads it. - // FindRequestHandlerAssembly obtains a global lock, but after releasing the lock, - // there is a period where we could call - - hr = FindRequestHandlerAssembly(); - if (FAILED(hr)) - { - goto Finished; - } - - if (m_pfnAspNetCoreCreateApplication == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION); - goto Finished; - } - - hr = m_pfnAspNetCoreCreateApplication(m_pServer, m_pConfiguration, &pApplication); - if (FAILED(hr)) - { - goto Finished; - } - m_pApplication = pApplication; - } - } - -Finished: - if (fLocked) - { - ReleaseSRWLockExclusive(&m_srwLock); - } - return hr; -} - -HRESULT -APPLICATION_INFO::FindRequestHandlerAssembly() -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - STACK_STRU(struFileName, 256); - - if (g_fAspnetcoreRHLoadedError) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - goto Finished; - } - else if (!g_fAspnetcoreRHAssemblyLoaded) - { - AcquireSRWLockExclusive(&g_srwLock); - fLocked = TRUE; - if (g_fAspnetcoreRHLoadedError) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - goto Finished; - } - if (g_fAspnetcoreRHAssemblyLoaded) - { - goto Finished; - } - - if (m_pConfiguration->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) - { - if (FAILED(hr = FindNativeAssemblyFromHostfxr(&struFileName))) - { - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_INPROCESS_RH_MISSING_MSG))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_INPROCESS_RH_MISSING, - strEventMsg.QueryStr()); - } - - goto Finished; - } - } - else - { - if (FAILED(hr = FindNativeAssemblyFromGlobalLocation(&struFileName))) - { - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING, - strEventMsg.QueryStr()); - } - - goto Finished; - } - } - - g_hAspnetCoreRH = LoadLibraryW(struFileName.QueryStr()); - if (g_hAspnetCoreRH == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - g_pfnAspNetCoreCreateApplication = (PFN_ASPNETCORE_CREATE_APPLICATION) - GetProcAddress(g_hAspnetCoreRH, "CreateApplication"); - if (g_pfnAspNetCoreCreateApplication == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - g_pfnAspNetCoreCreateRequestHandler = (PFN_ASPNETCORE_CREATE_REQUEST_HANDLER) - GetProcAddress(g_hAspnetCoreRH, "CreateRequestHandler"); - if (g_pfnAspNetCoreCreateRequestHandler == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - g_fAspnetcoreRHAssemblyLoaded = TRUE; - } - -Finished: - // - // Question: we remember the load failure so that we will not try again. - // User needs to check whether the fuction pointer is NULL - // - m_pfnAspNetCoreCreateApplication = g_pfnAspNetCoreCreateApplication; - m_pfnAspNetCoreCreateRequestHandler = g_pfnAspNetCoreCreateRequestHandler; - if (!g_fAspnetcoreRHLoadedError && FAILED(hr)) - { - g_fAspnetcoreRHLoadedError = TRUE; - } - - if (fLocked) - { - ReleaseSRWLockExclusive(&g_srwLock); - } - return hr; -} - -HRESULT -APPLICATION_INFO::FindNativeAssemblyFromGlobalLocation(STRU* struFilename) -{ - HRESULT hr = S_OK; - DWORD dwSize = MAX_PATH; - BOOL fDone = FALSE; - DWORD dwPosition = 0; - - // Though we could call LoadLibrary(L"aspnetcorerh.dll") relying the OS to solve - // the path (the targeted dll is the same folder of w3wp.exe/iisexpress) - // let's still load with full path to avoid security issue - if (FAILED(hr = struFilename->Resize(dwSize + 20))) - { - goto Finished; - } - - while (!fDone) - { - DWORD dwReturnedSize = GetModuleFileNameW(g_hModule, struFilename->QueryStr(), dwSize); - if (dwReturnedSize == 0) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - fDone = TRUE; - goto Finished; - } - else if ((dwReturnedSize == dwSize) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) - { - dwSize *= 2; // smaller buffer. increase the buffer and retry - if (FAILED(hr = struFilename->Resize(dwSize + 20))) // + 20 for aspnetcorerh.dll - { - goto Finished; - } - } - else - { - fDone = TRUE; - } - } - - if (FAILED(hr = struFilename->SyncWithBuffer())) - { - goto Finished; - } - dwPosition = struFilename->LastIndexOf(L'\\', 0); - struFilename->QueryStr()[dwPosition] = L'\0'; - - if (FAILED(hr = struFilename->SyncWithBuffer()) || - FAILED(hr = struFilename->Append(L"\\")) || - FAILED(hr = struFilename->Append(g_pwzAspnetcoreRequestHandlerName))) - { - goto Finished; - } - -Finished: - return hr; -} - -// -// Tries to find aspnetcorerh.dll from the application -// Calls into hostfxr.dll to find it. -// Will leave hostfxr.dll loaded as it will be used again to call hostfxr_main. -// -HRESULT -APPLICATION_INFO::FindNativeAssemblyFromHostfxr( - STRU* struFilename -) -{ - HRESULT hr = S_OK; - STRU struApplicationFullPath; - STRU struNativeSearchPaths; - STRU struNativeDllLocation; - HMODULE hmHostFxrDll = NULL; - INT intHostFxrExitCode = 0; - INT intIndex = -1; - INT intPrevIndex = 0; - BOOL fFound = FALSE; - DWORD dwBufferSize = 1024 * 10; - DWORD dwRequiredBufferSize = 0; - - DBG_ASSERT(struFileName != NULL); - - hmHostFxrDll = LoadLibraryW(m_pConfiguration->QueryHostFxrFullPath()); - - if (hmHostFxrDll == NULL) - { - // Could not load hostfxr - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hostfxr_get_native_search_directories_fn pFnHostFxrSearchDirectories = (hostfxr_get_native_search_directories_fn) - GetProcAddress(hmHostFxrDll, "hostfxr_get_native_search_directories"); - - if (pFnHostFxrSearchDirectories == NULL) - { - // Host fxr version is incorrect (need a higher version). - // TODO log error - hr = E_FAIL; - goto Finished; - } - - if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize))) - { - goto Finished; - } - - while (TRUE) - { - intHostFxrExitCode = pFnHostFxrSearchDirectories( - m_pConfiguration->QueryHostFxrArgCount(), - m_pConfiguration->QueryHostFxrArguments(), - struNativeSearchPaths.QueryStr(), - dwBufferSize, - &dwRequiredBufferSize - ); - - if (intHostFxrExitCode == 0) - { - break; - } - else if (dwRequiredBufferSize > dwBufferSize) - { - dwBufferSize = dwRequiredBufferSize + 1; // for null terminator - - if (FAILED(hr = struNativeSearchPaths.Resize(dwBufferSize))) - { - goto Finished; - } - } - else - { - hr = E_FAIL; - // Log "Error finding native search directories from aspnetcore application. - goto Finished; - } - } - - if (FAILED(hr = struNativeSearchPaths.SyncWithBuffer())) - { - goto Finished; - } - - fFound = FALSE; - - // The native search directories are semicolon delimited. - // Split on semicolons, append aspnetcorerh.dll, and check if the file exists. - while ((intIndex = struNativeSearchPaths.IndexOf(L";", intPrevIndex)) != -1) - { - if (FAILED(hr = struNativeDllLocation.Copy(&struNativeSearchPaths.QueryStr()[intPrevIndex], intIndex - intPrevIndex))) - { - goto Finished; - } - - if (!struNativeDllLocation.EndsWith(L"\\")) - { - if (FAILED(hr = struNativeDllLocation.Append(L"\\"))) - { - goto Finished; - } - } - - if (FAILED(hr = struNativeDllLocation.Append(g_pwzAspnetcoreRequestHandlerName))) - { - goto Finished; - } - - if (UTILITY::CheckIfFileExists(struNativeDllLocation.QueryStr())) - { - if (FAILED(hr = struFilename->Copy(struNativeDllLocation))) - { - goto Finished; - } - fFound = TRUE; - break; - } - - intPrevIndex = intIndex + 1; - } - - if (!fFound) - { - hr = E_FAIL; - goto Finished; - } - -Finished: - if (FAILED(hr) && hmHostFxrDll != NULL) - { - FreeLibrary(hmHostFxrDll); - } - return hr; -} - -VOID -APPLICATION_INFO::RecycleApplication() -{ - APPLICATION* pApplication = NULL; - HANDLE hThread = INVALID_HANDLE_VALUE; - BOOL fLockAcquired = FALSE; - - if (m_pApplication != NULL) - { - AcquireSRWLockExclusive(&m_srwLock); - fLockAcquired = TRUE; - if (m_pApplication != NULL) - { - pApplication = m_pApplication; - if (pApplication->QueryConfig()->QueryHostingModel() == HOSTING_OUT_PROCESS) - { - // - // For inprocess, need to set m_pApplication to NULL first to - // avoid mapping new request to the recycled application. - // Outofprocess application instance will be created for new request - // For inprocess, as recycle will lead to shutdown later, leave m_pApplication - // to not block incoming requests till worker process shutdown - // - m_pApplication = NULL; - } - else - { - // - // For inprocess, need hold the application till shutdown is called - // Bump the reference counter as DoRecycleApplication will do dereference - // - pApplication->ReferenceApplication(); - } - - hThread = CreateThread( - NULL, // default security attributes - 0, // default stack size - (LPTHREAD_START_ROUTINE)DoRecycleApplication, - pApplication, // thread function arguments - 0, // default creation flags - NULL); // receive thread identifier - } - - if (hThread == NULL) - { - if (!g_fRecycleProcessCalled) - { - g_fRecycleProcessCalled = TRUE; - g_pHttpServer->RecycleProcess(L"On Demand by AspNetCore Module for recycle application failure"); - } - } - else - { - // Closing a thread handle does not terminate the associated thread or remove the thread object. - CloseHandle(hThread); - } - - if (fLockAcquired) - { - ReleaseSRWLockExclusive(&m_srwLock); - } - } -} - - -VOID -APPLICATION_INFO::DoRecycleApplication( - LPVOID lpParam) -{ - APPLICATION* pApplication = static_cast(lpParam); - - // No lock required - - if (pApplication != NULL) - { - // Recycle will call shutdown for out of process - pApplication->Recycle(); - - // Decrement the ref count as we reference it in RecycleApplication. - pApplication->DereferenceApplication(); - } -} - - -VOID -APPLICATION_INFO::ShutDownApplication() -{ - APPLICATION* pApplication = NULL; - BOOL fLockAcquired = FALSE; - - // pApplication can be NULL due to app_offline - if (m_pApplication != NULL) - { - AcquireSRWLockExclusive(&m_srwLock); - fLockAcquired = TRUE; - if (m_pApplication != NULL) - { - pApplication = m_pApplication; - - // Set m_pApplication to NULL first to prevent anyone from using it - m_pApplication = NULL; - pApplication->ShutDown(); - pApplication->DereferenceApplication(); - } - - if (fLockAcquired) - { - ReleaseSRWLockExclusive(&m_srwLock); - } - } -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationmanager.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationmanager.cxx deleted file mode 100644 index fd83a19818a9..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/applicationmanager.cxx +++ /dev/null @@ -1,458 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.hxx" - -// The application manager is a singleton across ANCM. -APPLICATION_MANAGER* APPLICATION_MANAGER::sm_pApplicationManager = NULL; - -// -// Retrieves the application info from the application manager -// Will create the application info if it isn't initalized -// -HRESULT -APPLICATION_MANAGER::GetOrCreateApplicationInfo( - _In_ IHttpServer* pServer, - _In_ ASPNETCORE_CONFIG* pConfig, - _Out_ APPLICATION_INFO ** ppApplicationInfo -) -{ - HRESULT hr = S_OK; - APPLICATION_INFO *pApplicationInfo = NULL; - APPLICATION_INFO_KEY key; - BOOL fExclusiveLock = FALSE; - BOOL fMixedHostingModelError = FALSE; - BOOL fDuplicatedInProcessApp = FALSE; - PCWSTR pszApplicationId = NULL; - STACK_STRU ( strEventMsg, 256 ); - - DBG_ASSERT(pServer); - DBG_ASSERT(pConfig); - DBG_ASSERT(ppApplicationInfo); - - *ppApplicationInfo = NULL; - - // The configuration path is unique for each application and is used for the - // key in the applicationInfoHash. - pszApplicationId = pConfig->QueryConfigPath()->QueryStr(); - hr = key.Initialize(pszApplicationId); - if (FAILED(hr)) - { - goto Finished; - } - - // When accessing the m_pApplicationInfoHash, we need to acquire the application manager - // lock to avoid races on setting state. - AcquireSRWLockShared(&m_srwLock); - if (g_fInShutdown) - { - ReleaseSRWLockShared(&m_srwLock); - hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS); - goto Finished; - } - m_pApplicationInfoHash->FindKey(&key, ppApplicationInfo); - ReleaseSRWLockShared(&m_srwLock); - - if (*ppApplicationInfo == NULL) - { - // Check which hosting model we want to support - switch (pConfig->QueryHostingModel()) - { - case HOSTING_IN_PROCESS: - if (m_pApplicationInfoHash->Count() > 0) - { - // Only one inprocess app is allowed per IIS worker process - fDuplicatedInProcessApp = TRUE; - hr = HRESULT_FROM_WIN32(ERROR_APP_INIT_FAILURE); - goto Finished; - } - break; - - case HOSTING_OUT_PROCESS: - break; - - default: - hr = E_UNEXPECTED; - goto Finished; - } - pApplicationInfo = new APPLICATION_INFO(pServer); - if (pApplicationInfo == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - AcquireSRWLockExclusive(&m_srwLock); - fExclusiveLock = TRUE; - if (g_fInShutdown) - { - // Already in shuting down. No need to create the application - hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS); - goto Finished; - } - m_pApplicationInfoHash->FindKey(&key, ppApplicationInfo); - - if (*ppApplicationInfo != NULL) - { - // someone else created the application - delete pApplicationInfo; - pApplicationInfo = NULL; - goto Finished; - } - - // hosting model check. We do not allow mixed scenario for now - // could be changed in the future - if (m_hostingModel != HOSTING_UNKNOWN) - { - if (m_hostingModel != pConfig->QueryHostingModel()) - { - // hosting model does not match, error out - fMixedHostingModelError = TRUE; - hr = HRESULT_FROM_WIN32(ERROR_APP_INIT_FAILURE); - goto Finished; - } - } - - hr = pApplicationInfo->Initialize(pConfig, m_pFileWatcher); - if (FAILED(hr)) - { - goto Finished; - } - - hr = m_pApplicationInfoHash->InsertRecord( pApplicationInfo ); - if (FAILED(hr)) - { - goto Finished; - } - - // - // first application will decide which hosting model allowed by this process - // - if (m_hostingModel == HOSTING_UNKNOWN) - { - m_hostingModel = pConfig->QueryHostingModel(); - } - - *ppApplicationInfo = pApplicationInfo; - pApplicationInfo->StartMonitoringAppOffline(); - - // Release the locko after starting to monitor for app offline to avoid races with it being dropped. - ReleaseSRWLockExclusive(&m_srwLock); - - fExclusiveLock = FALSE; - pApplicationInfo = NULL; - } - -Finished: - - if (fExclusiveLock) - { - ReleaseSRWLockExclusive(&m_srwLock); - } - - if (pApplicationInfo != NULL) - { - pApplicationInfo->DereferenceApplicationInfo(); - pApplicationInfo = NULL; - } - - if (FAILED(hr)) - { - if (fDuplicatedInProcessApp) - { - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG, - pszApplicationId))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP, - strEventMsg.QueryStr()); - } - } - else if (fMixedHostingModelError) - { - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG, - pszApplicationId, - pConfig->QueryHostingModel()))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR, - strEventMsg.QueryStr()); - } - } - else - { - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_ADD_APPLICATION_ERROR_MSG, - pszApplicationId, - hr))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_ADD_APPLICATION_ERROR, - strEventMsg.QueryStr()); - } - } - } - - return hr; -} - - -// -// If the application's configuration was changed, -// append the configuration path to the config change context. -// -BOOL -APPLICATION_MANAGER::FindConfigChangedApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ PVOID pvContext) -{ - DBG_ASSERT(pEntry); - DBG_ASSERT(pvContext); - - // Config Change context contains the original config path that changed - // and a multiStr containing - CONFIG_CHANGE_CONTEXT* pContext = static_cast(pvContext); - STRU* pstruConfigPath = pEntry->QueryConfig()->QueryConfigPath(); - - // check if the application path contains our app/subapp by seeing if the config path - // starts with the notification path. - BOOL fChanged = pstruConfigPath->StartsWith(pContext->pstrPath, true); - if (fChanged) - { - DWORD dwLen = (DWORD)wcslen(pContext->pstrPath); - WCHAR wChar = pstruConfigPath->QueryStr()[dwLen]; - - // We need to check that the last character of the config path - // is either a null terminator or a slash. - // This checks the case where the config path was - // MACHINE/WEBROOT/site and your site path is MACHINE/WEBROOT/siteTest - if (wChar != L'\0' && wChar != L'/') - { - // not current app or sub app - fChanged = FALSE; - } - else - { - pContext->MultiSz.Append(*pstruConfigPath); - } - } - return fChanged; -} - -// -// Finds any applications affected by a configuration change and calls Recycle on them -// InProcess: Triggers g_httpServer->RecycleProcess() and keep the application inside of the manager. -// This will cause a shutdown event to occur through the global stop listening event. -// OutOfProcess: Removes all applications in the application manager and calls Recycle, which will call Shutdown, -// on each application. -// -HRESULT -APPLICATION_MANAGER::RecycleApplicationFromManager( - _In_ LPCWSTR pszApplicationId -) -{ - HRESULT hr = S_OK; - APPLICATION_INFO_KEY key; - DWORD dwPreviousCounter = 0; - APPLICATION_INFO_HASH* table = NULL; - CONFIG_CHANGE_CONTEXT context; - BOOL fKeepTable = FALSE; - - if (g_fInShutdown) - { - // We are already shutting down, ignore this event as a global configuration change event - // can occur after global stop listening for some reason. - return hr; - } - - AcquireSRWLockExclusive(&m_srwLock); - if (g_fInShutdown) - { - ReleaseSRWLockExclusive(&m_srwLock); - return hr; - } - - hr = key.Initialize(pszApplicationId); - if (FAILED(hr)) - { - goto Finished; - } - // Make a shallow copy of existing hashtable as we may need to remove nodes - // This will be used for finding differences in which applications are affected by a config change. - table = new APPLICATION_INFO_HASH(); - - if (table == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - // few application expected, small bucket size for hash table - if (FAILED(hr = table->Initialize(17 /*prime*/))) - { - goto Finished; - } - - context.pstrPath = pszApplicationId; - - // Keep track of the preview count of applications to know whether there are applications to delete - dwPreviousCounter = m_pApplicationInfoHash->Count(); - - // We don't want to hold the application manager lock for long time as it will block all incoming requests - // Don't call application shutdown inside the lock - m_pApplicationInfoHash->Apply(APPLICATION_INFO_HASH::ReferenceCopyToTable, static_cast(table)); - DBG_ASSERT(dwPreviousCounter == table->Count()); - - // Removed the applications which are impacted by the configurtion change - m_pApplicationInfoHash->DeleteIf(FindConfigChangedApplication, (PVOID)&context); - - if (dwPreviousCounter != m_pApplicationInfoHash->Count()) - { - if (m_hostingModel == HOSTING_IN_PROCESS) - { - // When we are inprocess, we need to keep the application the - // application manager that is being deleted. This is because we will always need to recycle the worker - // process and any requests that hit this worker process must be rejected (while out of process can - // start a new dotnet process). We will immediately call Recycle after this call. - DBG_ASSERT(m_pApplicationInfoHash->Count() == 0); - delete m_pApplicationInfoHash; - - // We don't want to delete the table as m_pApplicationInfoHash = table - fKeepTable = TRUE; - m_pApplicationInfoHash = table; - } - } - - if (m_pApplicationInfoHash->Count() == 0) - { - m_hostingModel = HOSTING_UNKNOWN; - } - - ReleaseSRWLockExclusive(&m_srwLock); - - // If we receive a request at this point. - // OutOfProcess: we will create a new application with new configuration - // InProcess: the request would have to be rejected, as we are about to call g_HttpServer->RecycleProcess - // on the worker proocess - if (!context.MultiSz.IsEmpty()) - { - PCWSTR path = context.MultiSz.First(); - // Iterate through each of the paths that were shut down, - // calling RecycleApplication on each of them. - while (path != NULL) - { - APPLICATION_INFO* pRecord; - - // Application got recycled. Log an event - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_RECYCLE_CONFIGURATION_MSG, - path))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_RECYCLE_CONFIGURATION, - strEventMsg.QueryStr()); - } - - hr = key.Initialize(path); - if (FAILED(hr)) - { - goto Finished; - } - - table->FindKey(&key, &pRecord); - DBG_ASSERT(pRecord != NULL); - - // RecycleApplication is called on a separate thread. - pRecord->RecycleApplication(); - pRecord->DereferenceApplicationInfo(); - path = context.MultiSz.Next(path); - } - } - -Finished: - if (table != NULL && !fKeepTable) - { - table->Clear(); - delete table; - } - - if (FAILED(hr)) - { - // Failed to recycle an application. Log an event - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_RECYCLE_FAILURE_CONFIGURATION_MSG, - pszApplicationId))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_RECYCLE_APP_FAILURE, - strEventMsg.QueryStr()); - } - // Need to recycle the process as we cannot recycle the application - if (!g_fRecycleProcessCalled) - { - g_fRecycleProcessCalled = TRUE; - g_pHttpServer->RecycleProcess(L"AspNetCore Recycle Process on Demand Due Application Recycle Error"); - } - } - - return hr; -} - -// -// Shutsdown all applications in the application hashtable -// Only called by OnGlobalStopListening. -// -VOID -APPLICATION_MANAGER::ShutDown() -{ - // We are guaranteed to only have one outstanding OnGlobalStopListening event at a time - // However, it is possible to receive multiple OnGlobalStopListening events - // Protect against this by checking if we already shut down. - g_fInShutdown = TRUE; - if (m_pApplicationInfoHash != NULL) - { - if (m_pFileWatcher != NULL) - { - delete m_pFileWatcher; - m_pFileWatcher = NULL; - } - - DBG_ASSERT(m_pApplicationInfoHash); - // During shutdown we lock until we delete the application - AcquireSRWLockExclusive(&m_srwLock); - - // Call shutdown on each application in the application manager - m_pApplicationInfoHash->Apply(ShutdownApplication, NULL); - m_pApplicationInfoHash->Clear(); - delete m_pApplicationInfoHash; - m_pApplicationInfoHash = NULL; - - ReleaseSRWLockExclusive(&m_srwLock); - } -} - -// -// Calls shutdown on each application. ApplicationManager's lock is held for duration of -// each shutdown call, guaranteeing another application cannot be created. -// -// static -VOID -APPLICATION_MANAGER::ShutdownApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ PVOID pvContext -) -{ - UNREFERENCED_PARAMETER(pvContext); - DBG_ASSERT(pEntry != NULL); - - pEntry->ShutDownApplication(); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/dllmain.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/dllmain.cpp deleted file mode 100644 index 2e4f87e542e0..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/dllmain.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.hxx" -#include - -HTTP_MODULE_ID g_pModuleId = NULL; -IHttpServer * g_pHttpServer = NULL; -HANDLE g_hEventLog = NULL; -BOOL g_fRecycleProcessCalled = FALSE; -PCWSTR g_pszModuleName = NULL; -HINSTANCE g_hModule; -HMODULE g_hAspnetCoreRH = NULL; -BOOL g_fAspnetcoreRHAssemblyLoaded = FALSE; -BOOL g_fAspnetcoreRHLoadedError = FALSE; -BOOL g_fInShutdown = FALSE; -DWORD g_dwAspNetCoreDebugFlags = 0; -DWORD g_dwActiveServerProcesses = 0; -SRWLOCK g_srwLock; -DWORD g_dwDebugFlags = 0; -PCSTR g_szDebugLabel = "ASPNET_CORE_MODULE"; -PCWSTR g_pwzAspnetcoreRequestHandlerName = L"aspnetcorerh.dll"; -PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication; -PFN_ASPNETCORE_CREATE_REQUEST_HANDLER g_pfnAspNetCoreCreateRequestHandler; - -VOID -StaticCleanup() -{ - APPLICATION_MANAGER::Cleanup(); - if (g_hEventLog != NULL) - { - DeregisterEventSource(g_hEventLog); - g_hEventLog = NULL; - } -} - -BOOL WINAPI DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - UNREFERENCED_PARAMETER(lpReserved); - - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - g_hModule = hModule; - DisableThreadLibraryCalls(hModule); - break; - case DLL_PROCESS_DETACH: - // IIS can cause dll detach to occur before we receive global notifications - // For example, when we switch the bitness of the worker process, - // this is a bug in IIS. To try to avoid AVs, we will set a global flag - g_fInShutdown = TRUE; - StaticCleanup(); - default: - break; - } - - return TRUE; -} - -HRESULT -__stdcall -RegisterModule( -DWORD dwServerVersion, -IHttpModuleRegistrationInfo * pModuleInfo, -IHttpServer * pHttpServer -) -/*++ - -Routine description: - -Function called by IIS immediately after loading the module, used to let -IIS know what notifications the module is interested in - -Arguments: - -dwServerVersion - IIS version the module is being loaded on -pModuleInfo - info regarding this module -pHttpServer - callback functions which can be used by the module at -any point - -Return value: - -HRESULT - ---*/ -{ - HRESULT hr = S_OK; - HKEY hKey; - BOOL fDisableANCM = FALSE; - ASPNET_CORE_PROXY_MODULE_FACTORY * pFactory = NULL; - ASPNET_CORE_GLOBAL_MODULE * pGlobalModule = NULL; - APPLICATION_MANAGER * pApplicationManager = NULL; - - UNREFERENCED_PARAMETER(dwServerVersion); - -#ifdef DEBUG - CREATE_DEBUG_PRINT_OBJECT("Asp.Net Core Module"); - g_dwDebugFlags = DEBUG_FLAGS_ANY; -#endif // DEBUG - - CREATE_DEBUG_PRINT_OBJECT; - - //LoadGlobalConfiguration(); - - InitializeSRWLock(&g_srwLock); - - g_pModuleId = pModuleInfo->GetId(); - g_pszModuleName = pModuleInfo->GetName(); - g_pHttpServer = pHttpServer; - - if (g_pHttpServer->IsCommandLineLaunch()) - { - g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER); - } - else - { - g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_EVENT_PROVIDER); - } - - // check whether the feature is disabled due to security reason - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters", - 0, - KEY_READ, - &hKey) == NO_ERROR) - { - DWORD dwType; - DWORD dwData; - DWORD cbData; - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"DisableANCM", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - fDisableANCM = (dwData != 0); - } - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"DebugFlags", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - g_dwAspNetCoreDebugFlags = dwData; - } - - RegCloseKey(hKey); - } - - if (fDisableANCM) - { - // Logging - STACK_STRU(strEventMsg, 256); - if (SUCCEEDED(strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_MODULE_DISABLED_MSG))) - { - UTILITY::LogEvent(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_MODULE_DISABLED, - strEventMsg.QueryStr()); - } - // this will return 500 error to client - // as we did not register the module - goto Finished; - } - - // - // Create the factory before any static initialization. - // The ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate method will clean any - // static object initialized. - // - pFactory = new ASPNET_CORE_PROXY_MODULE_FACTORY; - - if (pFactory == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pModuleInfo->SetRequestNotifications( - pFactory, - RQ_EXECUTE_REQUEST_HANDLER, - 0); - if (FAILED(hr)) - { - goto Finished; - } - - pFactory = NULL; - pApplicationManager = APPLICATION_MANAGER::GetInstance(); - if(pApplicationManager == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pApplicationManager->Initialize(); - if(FAILED(hr)) - { - goto Finished; - } - pGlobalModule = NULL; - - pGlobalModule = new ASPNET_CORE_GLOBAL_MODULE(pApplicationManager); - if (pGlobalModule == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pModuleInfo->SetGlobalNotifications( - pGlobalModule, - GL_CONFIGURATION_CHANGE | // Configuration change trigers IIS application stop - GL_STOP_LISTENING); // worker process stop or recycle - - if (FAILED(hr)) - { - goto Finished; - } - pGlobalModule = NULL; - - hr = ALLOC_CACHE_HANDLER::StaticInitialize(); - if (FAILED(hr)) - { - goto Finished; - } - -Finished: - if (pGlobalModule != NULL) - { - delete pGlobalModule; - pGlobalModule = NULL; - } - - if (pFactory != NULL) - { - pFactory->Terminate(); - pFactory = NULL; - } - - return hr; -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/filewatcher.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/filewatcher.cxx deleted file mode 100644 index 4d3174937f02..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/filewatcher.cxx +++ /dev/null @@ -1,497 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.hxx" - -FILE_WATCHER::FILE_WATCHER() : - m_hCompletionPort(NULL), - m_hChangeNotificationThread(NULL), - m_fThreadExit(FALSE) -{ -} - -FILE_WATCHER::~FILE_WATCHER() -{ - if (m_hChangeNotificationThread != NULL) - { - DWORD dwRetryCounter = 20; // totally wait for 1s - DWORD dwExitCode = STILL_ACTIVE; - - // signal the file watch thread to exit - PostQueuedCompletionStatus(m_hCompletionPort, 0, FILE_WATCHER_SHUTDOWN_KEY, NULL); - while (!m_fThreadExit && dwRetryCounter > 0) - { - if (GetExitCodeThread(m_hChangeNotificationThread, &dwExitCode)) - { - if (dwExitCode == STILL_ACTIVE) - { - // the file watcher thread will set m_fThreadExit before exit - WaitForSingleObject(m_hChangeNotificationThread, 50); - } - } - else - { - // fail to get thread status - // call terminitethread - TerminateThread(m_hChangeNotificationThread, 1); - m_fThreadExit = TRUE; - } - dwRetryCounter--; - } - - if (!m_fThreadExit) - { - TerminateThread(m_hChangeNotificationThread, 1); - } - - CloseHandle(m_hChangeNotificationThread); - m_hChangeNotificationThread = NULL; - } - - if (NULL != m_hCompletionPort) - { - CloseHandle(m_hCompletionPort); - m_hCompletionPort = NULL; - } -} - -HRESULT -FILE_WATCHER::Create( - VOID -) -{ - HRESULT hr = S_OK; - - m_hCompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, - NULL, - 0, - 0); - - if (m_hCompletionPort == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - m_hChangeNotificationThread = CreateThread(NULL, - 0, - ChangeNotificationThread, - this, - 0, - NULL); - - if (m_hChangeNotificationThread == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - - CloseHandle(m_hCompletionPort); - m_hCompletionPort = NULL; - - goto Finished; - } - -Finished: - return hr; -} - -DWORD -WINAPI -FILE_WATCHER::ChangeNotificationThread( - LPVOID pvArg -) -/*++ - -Routine Description: - -IO completion thread - -Arguments: - -None - -Return Value: - -Win32 error - ---*/ -{ - FILE_WATCHER * pFileMonitor; - BOOL fSuccess = FALSE; - DWORD cbCompletion = 0; - OVERLAPPED * pOverlapped = NULL; - DWORD dwErrorStatus; - ULONG_PTR completionKey; - - pFileMonitor = (FILE_WATCHER*)pvArg; - DBG_ASSERT(pFileMonitor != NULL); - - while (TRUE) - { - fSuccess = GetQueuedCompletionStatus( - pFileMonitor->m_hCompletionPort, - &cbCompletion, - &completionKey, - &pOverlapped, - INFINITE); - - DBG_ASSERT(fSuccess); - dwErrorStatus = fSuccess ? ERROR_SUCCESS : GetLastError(); - - if (completionKey == FILE_WATCHER_SHUTDOWN_KEY) - { - break; - } - - DBG_ASSERT(pOverlapped != NULL); - if (pOverlapped != NULL) - { - FileWatcherCompletionRoutine( - dwErrorStatus, - cbCompletion, - pOverlapped); - } - pOverlapped = NULL; - cbCompletion = 0; - } - - pFileMonitor->m_fThreadExit = TRUE; - ExitThread(0); -} - -VOID -WINAPI -FILE_WATCHER::FileWatcherCompletionRoutine( - DWORD dwCompletionStatus, - DWORD cbCompletion, - OVERLAPPED * pOverlapped -) -/*++ - -Routine Description: - -Called when ReadDirectoryChangesW() completes - -Arguments: - -dwCompletionStatus - Error of completion -cbCompletion - Bytes of completion -pOverlapped - State of completion - -Return Value: - -None - ---*/ -{ - FILE_WATCHER_ENTRY * pMonitorEntry; - pMonitorEntry = CONTAINING_RECORD(pOverlapped, FILE_WATCHER_ENTRY, _overlapped); - - DBG_ASSERT(pMonitorEntry != NULL); - - pMonitorEntry->HandleChangeCompletion(dwCompletionStatus, cbCompletion); - - if (pMonitorEntry->QueryIsValid()) - { - // - // Continue monitoring - // - pMonitorEntry->Monitor(); - } - // - // Deference the counter not matter whether the monitor is valid - // Valid: Monitor increases the counter, need to reduce one - // InValid: Reduce the counter to free the entry - // - pMonitorEntry->DereferenceFileWatcherEntry(); - -} - - -FILE_WATCHER_ENTRY::FILE_WATCHER_ENTRY(FILE_WATCHER * pFileMonitor) : - _pFileMonitor(pFileMonitor), - _hDirectory(INVALID_HANDLE_VALUE), - _hImpersonationToken(NULL), - _pApplicationInfo(NULL), - _lStopMonitorCalled(0), - _cRefs(1), - _fIsValid(TRUE) -{ - _dwSignature = FILE_WATCHER_ENTRY_SIGNATURE; - InitializeSRWLock(&_srwLock); -} - -FILE_WATCHER_ENTRY::~FILE_WATCHER_ENTRY() -{ - _dwSignature = FILE_WATCHER_ENTRY_SIGNATURE_FREE; - - if (_hDirectory != INVALID_HANDLE_VALUE) - { - CloseHandle(_hDirectory); - _hDirectory = INVALID_HANDLE_VALUE; - } - - if (_hImpersonationToken != NULL) - { - CloseHandle(_hImpersonationToken); - _hImpersonationToken = NULL; - } -} - -#pragma warning(disable:4100) - -HRESULT -FILE_WATCHER_ENTRY::HandleChangeCompletion( - _In_ DWORD dwCompletionStatus, - _In_ DWORD cbCompletion -) -/*++ - -Routine Description: - -Handle change notification (see if any of associated config files -need to be flushed) - -Arguments: - -dwCompletionStatus - Completion status -cbCompletion - Bytes of completion - -Return Value: - -HRESULT - ---*/ -{ - HRESULT hr = S_OK; - FILE_NOTIFY_INFORMATION * pNotificationInfo; - BOOL fFileChanged = FALSE; - - AcquireSRWLockExclusive(&_srwLock); - if (!_fIsValid) - { - goto Finished; - } - - // When directory handle is closed then HandleChangeCompletion - // happens with cbCompletion = 0 and dwCompletionStatus = 0 - // From documentation it is not clear if that combination - // of return values is specific to closing handles or whether - // it could also mean an error condition. Hence we will maintain - // explicit flag that will help us determine if entry - // is being shutdown (StopMonitor() called) - // - if (_lStopMonitorCalled) - { - goto Finished; - } - - // - // There could be a FCN overflow - // Let assume the file got changed instead of checking files - // Othersie we have to cache the file info - // - if (cbCompletion == 0) - { - fFileChanged = TRUE; - } - else - { - pNotificationInfo = (FILE_NOTIFY_INFORMATION*)_buffDirectoryChanges.QueryPtr(); - DBG_ASSERT(pNotificationInfo != NULL); - - while (pNotificationInfo != NULL) - { - // - // check whether the monitored file got changed - // - if (_wcsnicmp(pNotificationInfo->FileName, - _strFileName.QueryStr(), - pNotificationInfo->FileNameLength / sizeof(WCHAR)) == 0) - { - fFileChanged = TRUE; - break; - } - // - // Advance to next notification - // - if (pNotificationInfo->NextEntryOffset == 0) - { - pNotificationInfo = NULL; - } - else - { - pNotificationInfo = (FILE_NOTIFY_INFORMATION*) - ((PBYTE)pNotificationInfo + - pNotificationInfo->NextEntryOffset); - } - } - } - - if (fFileChanged) - { - // - // so far we only monitoring app_offline - // - _pApplicationInfo->UpdateAppOfflineFileHandle(); - } - -Finished: - ReleaseSRWLockExclusive(&_srwLock); - return hr; -} - -#pragma warning( error : 4100 ) - -HRESULT -FILE_WATCHER_ENTRY::Monitor(VOID) -{ - HRESULT hr = S_OK; - DWORD cbRead; - - AcquireSRWLockExclusive(&_srwLock); - ReferenceFileWatcherEntry(); - ZeroMemory(&_overlapped, sizeof(_overlapped)); - - if (!ReadDirectoryChangesW(_hDirectory, - _buffDirectoryChanges.QueryPtr(), - _buffDirectoryChanges.QuerySize(), - FALSE, // Watching sub dirs. Set to False now as only monitoring app_offline - FILE_NOTIFY_VALID_MASK & ~FILE_NOTIFY_CHANGE_LAST_ACCESS, - &cbRead, - &_overlapped, - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - DereferenceFileWatcherEntry(); - } - - ReleaseSRWLockExclusive(&_srwLock); - return hr; -} - -VOID -FILE_WATCHER_ENTRY::StopMonitor(VOID) -{ - // - // Flag that monitoring is being stopped so that - // we know that HandleChangeCompletion() call - // can be ignored - // - InterlockedExchange(&_lStopMonitorCalled, 1); - - if (_hDirectory != INVALID_HANDLE_VALUE) - { - AcquireSRWLockExclusive(&_srwLock); - if (_hDirectory != INVALID_HANDLE_VALUE) - { - CloseHandle(_hDirectory); - _hDirectory = INVALID_HANDLE_VALUE; - DereferenceFileWatcherEntry(); - } - ReleaseSRWLockExclusive(&_srwLock); - } -} - -HRESULT -FILE_WATCHER_ENTRY::Create( - _In_ PCWSTR pszDirectoryToMonitor, - _In_ PCWSTR pszFileNameToMonitor, - _In_ APPLICATION_INFO* pApplicationInfo, - _In_ HANDLE hImpersonationToken -) -{ - HRESULT hr = S_OK; - BOOL fRet = FALSE; - - if (pszDirectoryToMonitor == NULL || - pszFileNameToMonitor == NULL || - pApplicationInfo == NULL) - { - DBG_ASSERT(FALSE); - hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - goto Finished; - } - - // - //remember the application - // - _pApplicationInfo = pApplicationInfo; - - if (FAILED(hr = _strFileName.Copy(pszFileNameToMonitor))) - { - goto Finished; - } - - if (FAILED(hr = _strDirectoryName.Copy(pszDirectoryToMonitor))) - { - goto Finished; - } - - // - // Resize change buffer to something "reasonable" - // - if (!_buffDirectoryChanges.Resize(FILE_WATCHER_ENTRY_BUFFER_SIZE)) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - goto Finished; - } - - if (hImpersonationToken != NULL) - { - fRet = DuplicateHandle(GetCurrentProcess(), - hImpersonationToken, - GetCurrentProcess(), - &_hImpersonationToken, - 0, - FALSE, - DUPLICATE_SAME_ACCESS); - - if (!fRet) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - else - { - if (_hImpersonationToken != NULL) - { - CloseHandle(_hImpersonationToken); - _hImpersonationToken = NULL; - } - } - - _hDirectory = CreateFileW( - _strDirectoryName.QueryStr(), - FILE_LIST_DIRECTORY, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, - NULL); - - if (_hDirectory == INVALID_HANDLE_VALUE) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (CreateIoCompletionPort( - _hDirectory, - _pFileMonitor->QueryCompletionPort(), - NULL, - 0) == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // - // Start monitoring - // - hr = Monitor(); - -Finished: - - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/globalmodule.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/globalmodule.cpp deleted file mode 100644 index f4c6257bb486..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/globalmodule.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "precomp.hxx" - -ASPNET_CORE_GLOBAL_MODULE::ASPNET_CORE_GLOBAL_MODULE( - APPLICATION_MANAGER* pApplicationManager) -{ - m_pApplicationManager = pApplicationManager; -} - -// -// Is called when IIS decided to terminate worker process -// Shut down all core apps -// -GLOBAL_NOTIFICATION_STATUS -ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening( - _In_ IGlobalStopListeningProvider * pProvider -) -{ - UNREFERENCED_PARAMETER(pProvider); - - if (g_fInShutdown) - { - // Avoid receiving two shutudown notifications. - return GL_NOTIFICATION_CONTINUE; - } - - DBG_ASSERT(m_pApplicationManager); - // we should let application manager to shutdown all allication - // and dereference it as some requests may still reference to application manager - m_pApplicationManager->ShutDown(); - m_pApplicationManager = NULL; - - // Return processing to the pipeline. - return GL_NOTIFICATION_CONTINUE; -} - -// -// Is called when configuration changed -// Recycled the corresponding core app if its configuration changed -// -GLOBAL_NOTIFICATION_STATUS -ASPNET_CORE_GLOBAL_MODULE::OnGlobalConfigurationChange( - _In_ IGlobalConfigurationChangeProvider * pProvider -) -{ - if (g_fInShutdown) - { - return GL_NOTIFICATION_CONTINUE; - } - // Retrieve the path that has changed. - PCWSTR pwszChangePath = pProvider->GetChangePath(); - - // Test for an error. - if (NULL != pwszChangePath && - _wcsicmp(pwszChangePath, L"MACHINE") != 0 && - _wcsicmp(pwszChangePath, L"MACHINE/WEBROOT") != 0) - { - if (m_pApplicationManager != NULL) - { - m_pApplicationManager->RecycleApplicationFromManager(pwszChangePath); - } - } - - // Return processing to the pipeline. - return GL_NOTIFICATION_CONTINUE; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/precomp.hxx b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/precomp.hxx deleted file mode 100644 index 574244ba356c..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/precomp.hxx +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#pragma warning( disable : 4091) - -// -// System related headers -// -#define _WINSOCKAPI_ - -#define NTDDI_VERSION 0x06010000 -#define WINVER 0x0601 -#define _WIN32_WINNT 0x0601 - -#include -#include -#include - -//#include -#include -#include - -// This should remove our issue of compiling for win7 without header files. -// We force the Windows 8 version check logic in iiswebsocket.h to succeed even though we're compiling for Windows 7. -// Then, we set the version defines back to Windows 7 to for the remainder of the compilation. -#undef NTDDI_VERSION -#undef WINVER -#undef _WIN32_WINNT -#define NTDDI_VERSION 0x06020000 -#define WINVER 0x0602 -#define _WIN32_WINNT 0x0602 -#include -#undef NTDDI_VERSION -#undef WINVER -#undef _WIN32_WINNT - -#define NTDDI_VERSION 0x06010000 -#define WINVER 0x0601 -#define _WIN32_WINNT 0x0601 - -#include -#include - -#include -#include -#include - -// -// Option available starting Windows 8. -// 111 is the value in SDK on May 15, 2012. -// -#ifndef WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS -#define WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS 111 -#endif - -#ifdef max -#undef max -template inline T max(T a, T b) -{ - return a > b ? a : b; -} -#endif - -#ifdef min -#undef min -template inline T min(T a, T b) -{ - return a < b ? a : b; -} -#endif - -inline bool IsSpace(char ch) -{ - switch(ch) - { - case 32: // ' ' - case 9: // '\t' - case 10: // '\n' - case 13: // '\r' - case 11: // '\v' - case 12: // '\f' - return true; - default: - return false; - } -} - -#include -#include -#include "stringa.h" -#include "stringu.h" -#include "dbgutil.h" -#include "ahutil.h" -#include "multisz.h" -#include "multisza.h" -#include "base64.h" -#include -#include -#include -#include -#include - -#include "..\..\CommonLib\environmentvariablehash.h" -#include "..\..\CommonLib\aspnetcoreconfig.h" -#include "..\..\CommonLib\hostfxr_utility.h" -#include "..\..\CommonLib\application.h" -#include "..\..\CommonLib\utility.h" -#include "..\..\CommonLib\debugutil.h" -#include "..\..\CommonLib\requesthandler.h" -#include "..\..\CommonLib\resources.h" -#include "..\..\CommonLib\aspnetcore_msg.h" -//#include "aspnetcore_event.h" -#include "appoffline.h" -#include "filewatcher.h" -#include "applicationinfo.h" -#include "applicationmanager.h" -#include "globalmodule.h" -#include "proxymodule.h" -#include "applicationinfo.h" - - -FORCEINLINE -DWORD -WIN32_FROM_HRESULT( - HRESULT hr -) -{ - if ((FAILED(hr)) && - (HRESULT_FACILITY(hr) == FACILITY_WIN32)) - { - return HRESULT_CODE(hr); - } - return hr; -} - -FORCEINLINE -HRESULT -HRESULT_FROM_GETLASTERROR() -{ - return ( GetLastError() != NO_ERROR ) - ? HRESULT_FROM_WIN32( GetLastError() ) - : E_FAIL; -} - -extern PVOID g_pModuleId; -extern BOOL g_fAspnetcoreRHAssemblyLoaded; -extern BOOL g_fAspnetcoreRHLoadedError; -extern BOOL g_fInShutdown; -extern BOOL g_fEnableReferenceCountTracing; -extern DWORD g_dwActiveServerProcesses; -extern HINSTANCE g_hModule; -extern HMODULE g_hAspnetCoreRH; -extern SRWLOCK g_srwLock; -extern PCWSTR g_pwzAspnetcoreRequestHandlerName; -extern HANDLE g_hEventLog; -extern PFN_ASPNETCORE_CREATE_APPLICATION g_pfnAspNetCoreCreateApplication; -extern PFN_ASPNETCORE_CREATE_REQUEST_HANDLER g_pfnAspNetCoreCreateRequestHandler; -#pragma warning( error : 4091) diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/proxymodule.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/proxymodule.cxx deleted file mode 100644 index 8ab880339a8f..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/AspNetCore/src/proxymodule.cxx +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.hxx" - -__override -HRESULT -ASPNET_CORE_PROXY_MODULE_FACTORY::GetHttpModule( - CHttpModule ** ppModule, - IModuleAllocator * pAllocator -) -{ - ASPNET_CORE_PROXY_MODULE *pModule = new (pAllocator) ASPNET_CORE_PROXY_MODULE(); - if (pModule == NULL) - { - return E_OUTOFMEMORY; - } - - *ppModule = pModule; - return S_OK; -} - -__override -VOID -ASPNET_CORE_PROXY_MODULE_FACTORY::Terminate( - VOID -) -/*++ - -Routine description: - - Function called by IIS for global (non-request-specific) notifications - -Arguments: - - None. - -Return value: - - None - ---*/ -{ - /* FORWARDING_HANDLER::StaticTerminate(); - - WEBSOCKET_HANDLER::StaticTerminate();*/ - - ALLOC_CACHE_HANDLER::StaticTerminate(); - - delete this; -} - -ASPNET_CORE_PROXY_MODULE::ASPNET_CORE_PROXY_MODULE( -) : m_pApplicationInfo(NULL), m_pHandler(NULL) -{ -} - -ASPNET_CORE_PROXY_MODULE::~ASPNET_CORE_PROXY_MODULE() -{ - if (m_pApplicationInfo != NULL) - { - m_pApplicationInfo->DereferenceApplicationInfo(); - m_pApplicationInfo = NULL; - } - - if (m_pHandler != NULL) - { - m_pHandler->DereferenceRequestHandler(); - m_pHandler = NULL; - } -} - -__override -REQUEST_NOTIFICATION_STATUS -ASPNET_CORE_PROXY_MODULE::OnExecuteRequestHandler( - IHttpContext * pHttpContext, - IHttpEventProvider * -) -{ - HRESULT hr = S_OK; - ASPNETCORE_CONFIG *pConfig = NULL; - APPLICATION_MANAGER *pApplicationManager = NULL; - REQUEST_NOTIFICATION_STATUS retVal = RQ_NOTIFICATION_CONTINUE; - APPLICATION* pApplication = NULL; - STACK_STRU(struFileName, 256); - if (g_fInShutdown) - { - hr = HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS); - goto Finished; - } - - hr = ASPNETCORE_CONFIG::GetConfig(g_pHttpServer, g_pModuleId, pHttpContext, g_hEventLog, &pConfig); - if (FAILED(hr)) - { - goto Finished; - } - - pApplicationManager = APPLICATION_MANAGER::GetInstance(); - if (pApplicationManager == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pApplicationManager->GetOrCreateApplicationInfo( - g_pHttpServer, - pConfig, - &m_pApplicationInfo); - if (FAILED(hr)) - { - goto Finished; - } - - // app_offline check to avoid loading aspnetcorerh.dll unnecessarily - if (m_pApplicationInfo->AppOfflineFound()) - { - // servicing app_offline - HTTP_DATA_CHUNK DataChunk; - IHttpResponse *pResponse = NULL; - APP_OFFLINE_HTM *pAppOfflineHtm = NULL; - - pResponse = pHttpContext->GetResponse(); - pAppOfflineHtm = m_pApplicationInfo->QueryAppOfflineHtm(); - DBG_ASSERT(pAppOfflineHtm); - DBG_ASSERT(pResponse); - - // Ignore failure hresults as nothing we can do - // Set fTrySkipCustomErrors to true as we want client see the offline content - pResponse->SetStatus(503, "Service Unavailable", 0, hr, NULL, TRUE); - pResponse->SetHeader("Content-Type", - "text/html", - (USHORT)strlen("text/html"), - FALSE - ); - - DataChunk.DataChunkType = HttpDataChunkFromMemory; - DataChunk.FromMemory.pBuffer = (PVOID)pAppOfflineHtm->m_Contents.QueryStr(); - DataChunk.FromMemory.BufferLength = pAppOfflineHtm->m_Contents.QueryCB(); - pResponse->WriteEntityChunkByReference(&DataChunk); - - retVal = RQ_NOTIFICATION_FINISH_REQUEST; - goto Finished; - } - - // make sure assmebly is loaded and application is created - hr = m_pApplicationInfo->EnsureApplicationCreated(); - if (FAILED(hr)) - { - goto Finished; - } - - m_pApplicationInfo->ExtractApplication(&pApplication); - - // make sure application is in running state - // cannot recreate the application as we cannot reload clr for inprocess - if (pApplication != NULL && - pApplication->QueryStatus() != APPLICATION_STATUS::RUNNING && - pApplication->QueryStatus() != APPLICATION_STATUS::STARTING) - { - hr = HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED); - goto Finished; - } - - // Create RequestHandler and process the request - hr = m_pApplicationInfo->QueryCreateRequestHandler()(pHttpContext, - (HTTP_MODULE_ID*) &g_pModuleId, - pApplication, - &m_pHandler); - - if (FAILED(hr)) - { - goto Finished; - } - - retVal = m_pHandler->OnExecuteRequestHandler(); - -Finished: - if (FAILED(hr)) - { - retVal = RQ_NOTIFICATION_FINISH_REQUEST; - if (hr == HRESULT_FROM_WIN32(ERROR_SERVER_SHUTDOWN_IN_PROGRESS)) - { - pHttpContext->GetResponse()->SetStatus(503, "Service Unavailable", 0, hr); - } - else - { - pHttpContext->GetResponse()->SetStatus(500, "Internal Server Error", 0, hr); - } - } - - if (pApplication != NULL) - { - pApplication->DereferenceApplication(); - } - return retVal; -} - -__override -REQUEST_NOTIFICATION_STATUS -ASPNET_CORE_PROXY_MODULE::OnAsyncCompletion( - IHttpContext *, - DWORD, - BOOL, - IHttpEventProvider *, - IHttpCompletionInfo * pCompletionInfo -) -{ - return m_pHandler->OnAsyncCompletion( - pCompletionInfo->GetCompletionBytes(), - pCompletionInfo->GetCompletionStatus()); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj deleted file mode 100644 index 1ab1ef971c15..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {55494E58-E061-4C4C-A0A8-837008E72F85} - Win32Proj - NewCommon - 10.0.15063.0 - - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - false - Unicode - - - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - C:\AspNetCoreModule\src\IISLib;$(IncludePath) - - - - Use - Level4 - true - Disabled - false - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreadedDebug - false - ProgramDatabase - - - Windows - true - - - - - Use - Level4 - true - Disabled - false - _DEBUG;_LIB;%(PreprocessorDefinitions) - true - ProgramDatabase - false - MultiThreadedDebug - false - - - Windows - true - - - - - Use - Level4 - true - MaxSpeed - true - true - false - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreaded - false - - - Windows - true - true - true - - - - - Use - Level4 - true - MaxSpeed - true - true - false - NDEBUG;_LIB;%(PreprocessorDefinitions) - true - - - - - MultiThreaded - false - - - Windows - true - true - true - - - ..\iislib - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} - - - - - Document - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - mc %(FullPath) - Compiling Event Messages ... - %(Filename).rc;%(Filename).h;MSG0409.bin - - - - - - \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.cpp deleted file mode 100644 index 3fd0be51f44f..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "stdafx.h" -#include "SRWLockWrapper.h" - -SRWLockWrapper::SRWLockWrapper(const SRWLOCK& lock) - : m_lock(lock) -{ - AcquireSRWLockExclusive(const_cast(&m_lock)); -} - -SRWLockWrapper::~SRWLockWrapper() -{ - ReleaseSRWLockExclusive(const_cast(&m_lock)); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.h deleted file mode 100644 index 2ae57cb2f86e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/SRWLockWrapper.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -class SRWLockWrapper -{ -public: - SRWLockWrapper(const SRWLOCK& lock); - ~SRWLockWrapper(); -private: - const SRWLOCK& m_lock; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.cpp deleted file mode 100644 index b68c09326648..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "stdafx.h" - -APPLICATION::APPLICATION( - _In_ IHttpServer* pHttpServer, - _In_ ASPNETCORE_CONFIG* pConfig) : - m_cRefs(1), - m_pConfig(pConfig), - m_status(APPLICATION_STATUS::UNKNOWN) -{ - UNREFERENCED_PARAMETER(pHttpServer); -} - -APPLICATION::~APPLICATION() -{ -} - -APPLICATION_STATUS -APPLICATION::QueryStatus() -{ - return m_status; -} - -ASPNETCORE_CONFIG* -APPLICATION::QueryConfig() -{ - return m_pConfig; -} - -VOID -APPLICATION::ReferenceApplication() -const -{ - InterlockedIncrement(&m_cRefs); -} - -VOID -APPLICATION::DereferenceApplication() -const -{ - DBG_ASSERT(m_cRefs != 0); - - LONG cRefs = 0; - if ((cRefs = InterlockedDecrement(&m_cRefs)) == 0) - { - delete this; - } -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h deleted file mode 100644 index 43c9dafd0c5a..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/application.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -enum APPLICATION_STATUS -{ - UNKNOWN = 0, - STARTING, - RUNNING, - SHUTDOWN, - FAIL -}; - -class ASPNETCORE_CONFIG; - -class APPLICATION -{ -public: - APPLICATION( - _In_ IHttpServer* pHttpServer, - _In_ ASPNETCORE_CONFIG* pConfig); - - virtual - VOID - ShutDown() = 0; - - virtual - VOID - Recycle() = 0; - - virtual - ~APPLICATION(); - - APPLICATION_STATUS - QueryStatus(); - - ASPNETCORE_CONFIG* - QueryConfig(); - - VOID - ReferenceApplication() - const; - - VOID - DereferenceApplication() - const; - -protected: - mutable LONG m_cRefs; - volatile APPLICATION_STATUS m_status; - ASPNETCORE_CONFIG* m_pConfig; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc deleted file mode 100644 index 96cf5fec0c68..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.mc +++ /dev/null @@ -1,217 +0,0 @@ -;/*++ -; -; Copyright (c) .NET Foundation. All rights reserved. -; Licensed under the MIT License. See License.txt in the project root for license information. -; -;Module Name: -; -; aspnetcore_msg.mc -; -;Abstract: -; -; Asp.Net Core Module localizable messages. -; -;--*/ -; -; -;#ifndef _ASPNETCORE_MSG_H_ -;#define _ASPNETCORE_MSG_H_ -; - -SeverityNames=(Success=0x0 - Informational=0x1 - Warning=0x2 - Error=0x3 - ) - -MessageIdTypedef=DWORD - -Messageid=1000 -SymbolicName=ASPNETCORE_EVENT_PROCESS_START_ERROR -Language=English -%1 -. - -Messageid=1001 -SymbolicName=ASPNETCORE_EVENT_PROCESS_START_SUCCESS -Language=English -%1 -. - -Messageid=1002 -SymbolicName=ASPNETCORE_EVENT_PROCESS_CRASH -Language=English -%1 -. - -Messageid=1003 -SymbolicName=ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED -Language=English -%1 -. - -Messageid=1004 -SymbolicName=ASPNETCORE_EVENT_CONFIG_ERROR -Language=English -%1 -. - -Messageid=1005 -SymbolicName=ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE -Language=English -%1 -. - -Messageid=1006 -SymbolicName=ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST -Language=English -%1 -. - -Messageid=1007 -SymbolicName=ASPNETCORE_EVENT_LOAD_CLR_FALIURE -Language=English -%1 -. - -Messageid=1008 -SymbolicName=ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP -Language=English -%1 -. - -Messageid=1009 -SymbolicName=ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR -Language=English -%1 -. - -Messageid=1010 -SymbolicName=ASPNETCORE_EVENT_ADD_APPLICATION_ERROR -Language=English -%1 -. - -Messageid=1011 -SymbolicName=ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT -Language=English -%1 -. - -Messageid=1012 -SymbolicName=ASPNETCORE_EVENT_RECYCLE_APPOFFLINE -Language=English -%1 -. - -Messageid=1013 -SymbolicName=ASPNETCORE_EVENT_MODULE_DISABLED -Language=English -%1 -. - -Messageid=1014 -SymbolicName=ASPNETCORE_EVENT_INPROCESS_FULL_FRAMEWORK_APP -Language=English -%1 -. - -Messageid=1015 -SymbolicName=ASPNETCORE_EVENT_PORTABLE_APP_DOTNET_MISSING -Language=English -%1 -. - -Messageid=1016 -SymbolicName=ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND -Language=English -%1 -. - -Messageid=1017 -SymbolicName=ASPNETCORE_EVENT_HOSTFXR_DLL_NOT_FOUND -Language=English -%1 -. - -Messageid=1018 -SymbolicName=ASPNETCORE_EVENT_INPROCESS_THREAD_EXCEPTION -Language=English -%1 -. - -Messageid=1019 -SymbolicName=ASPNETCORE_EVENT_APPLICATION_EXE_NOT_FOUND -Language=English -%1 -. - -Messageid=1020 -SymbolicName=ASPNETCORE_EVENT_PROCESS_START_FAILURE -Language=English -%1 -. - -Messageid=1021 -SymbolicName=ASPNETCORE_EVENT_RECYCLE_CONFIGURATION -Language=English -%1 -. - -Messageid=1022 -SymbolicName=ASPNETCORE_EVENT_RECYCLE_APP_FAILURE -Language=English -%1 -. - -Messageid=1023 -SymbolicName=ASPNETCORE_EVENT_APP_IN_SHUTDOWN -Language=English -%1 -. - -Messageid=1024 -SymbolicName=ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED -Language=English -%1 -. - -Messageid=1025 -SymbolicName=ASPNETCORE_EVENT_GENERAL_INFO_MSG -Language=English -%1 -. - -Messageid=1026 -SymbolicName=ASPNETCORE_EVENT_GENERAL_WARNING_MSG -Language=English -%1 -. - -Messageid=1027 -SymbolicName=ASPNETCORE_EVENT_GENERAL_ERROR_MSG -Language=English -%1 -. - -Messageid=1028 -SymbolicName=ASPNETCORE_EVENT_INPROCESS_RH_MISSING -Language=English -%1 -. - -Messageid=1029 -SymbolicName=ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING -Language=English -%1 -. - -Messageid=1030 -SymbolicName=ASPNETCORE_EVENT_PROCESS_SHUTDOWN -Language=English -%1 -. - -; -;#endif // _ASPNETCORE_MODULE_MSG_H_ -; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.cxx deleted file mode 100644 index 97a7d0c63eb7..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.cxx +++ /dev/null @@ -1,609 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "stdafx.h" -#include "aspnetcoreconfig.h" -#include "debugutil.h" - -ASPNETCORE_CONFIG::~ASPNETCORE_CONFIG() -{ - if (m_ppStrArguments != NULL) - { - delete[] m_ppStrArguments; - m_ppStrArguments = NULL; - } - - if (m_pEnvironmentVariables != NULL) - { - m_pEnvironmentVariables->Clear(); - delete m_pEnvironmentVariables; - m_pEnvironmentVariables = NULL; - } -} - -VOID -ASPNETCORE_CONFIG::ReferenceConfiguration( - VOID -) const -{ - InterlockedIncrement(&m_cRefs); -} - -VOID -ASPNETCORE_CONFIG::DereferenceConfiguration( - VOID -) const -{ - DBG_ASSERT(m_cRefs != 0); - LONG cRefs = 0; - if ((cRefs = InterlockedDecrement(&m_cRefs)) == 0) - { - delete this; - } -} - -HRESULT -ASPNETCORE_CONFIG::GetConfig( - _In_ IHttpServer *pHttpServer, - _In_ HTTP_MODULE_ID pModuleId, - _In_ IHttpContext *pHttpContext, - _In_ HANDLE hEventLog, - _Out_ ASPNETCORE_CONFIG **ppAspNetCoreConfig -) -{ - HRESULT hr = S_OK; - IHttpApplication *pHttpApplication = pHttpContext->GetApplication(); - ASPNETCORE_CONFIG *pAspNetCoreConfig = NULL; - STRU struHostFxrDllLocation; - PWSTR* pwzArgv; - DWORD dwArgCount; - - if (ppAspNetCoreConfig == NULL) - { - hr = E_INVALIDARG; - goto Finished; - } - - *ppAspNetCoreConfig = NULL; - - // potential bug if user sepcific config at virtual dir level - pAspNetCoreConfig = (ASPNETCORE_CONFIG*) - pHttpApplication->GetModuleContextContainer()->GetModuleContext(pModuleId); - - if (pAspNetCoreConfig != NULL) - { - *ppAspNetCoreConfig = pAspNetCoreConfig; - pAspNetCoreConfig = NULL; - goto Finished; - } - - pAspNetCoreConfig = new ASPNETCORE_CONFIG; - if (pAspNetCoreConfig == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pAspNetCoreConfig->Populate(pHttpServer, pHttpContext); - if (FAILED(hr)) - { - goto Finished; - } - - // Modify config for inprocess. - if (pAspNetCoreConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) - { - if (FAILED(hr = HOSTFXR_UTILITY::GetHostFxrParameters( - hEventLog, - pAspNetCoreConfig->QueryProcessPath()->QueryStr(), - pAspNetCoreConfig->QueryApplicationPhysicalPath()->QueryStr(), - pAspNetCoreConfig->QueryArguments()->QueryStr(), - &struHostFxrDllLocation, - &dwArgCount, - &pwzArgv))) - { - goto Finished; - } - - if (FAILED(hr = pAspNetCoreConfig->SetHostFxrFullPath(struHostFxrDllLocation.QueryStr()))) - { - goto Finished; - } - - pAspNetCoreConfig->SetHostFxrArguments(dwArgCount, pwzArgv); - } - - hr = pHttpApplication->GetModuleContextContainer()-> - SetModuleContext(pAspNetCoreConfig, pModuleId); - if (FAILED(hr)) - { - if (hr == HRESULT_FROM_WIN32(ERROR_ALREADY_ASSIGNED)) - { - delete pAspNetCoreConfig; - - pAspNetCoreConfig = (ASPNETCORE_CONFIG*)pHttpApplication-> - GetModuleContextContainer()-> - GetModuleContext(pModuleId); - - _ASSERT(pAspNetCoreConfig != NULL); - - hr = S_OK; - } - else - { - goto Finished; - } - } - else - { - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "ASPNETCORE_CONFIG::GetConfig, set config to ModuleContext"); - // set appliction info here instead of inside Populate() - // as the destructor will delete the backend process - hr = pAspNetCoreConfig->QueryApplicationPath()->Copy(pHttpApplication->GetApplicationId()); - if (FAILED(hr)) - { - goto Finished; - } - } - - *ppAspNetCoreConfig = pAspNetCoreConfig; - pAspNetCoreConfig = NULL; - -Finished: - - if (pAspNetCoreConfig != NULL) - { - delete pAspNetCoreConfig; - pAspNetCoreConfig = NULL; - } - - return hr; -} - -HRESULT -ASPNETCORE_CONFIG::Populate( - IHttpServer *pHttpServer, - IHttpContext *pHttpContext -) -{ - STACK_STRU(strHostingModel, 300); - HRESULT hr = S_OK; - STRU strEnvName; - STRU strEnvValue; - STRU strExpandedEnvValue; - STRU strApplicationFullPath; - IAppHostAdminManager *pAdminManager = NULL; - IAppHostElement *pAspNetCoreElement = NULL; - IAppHostElement *pWindowsAuthenticationElement = NULL; - IAppHostElement *pBasicAuthenticationElement = NULL; - IAppHostElement *pAnonymousAuthenticationElement = NULL; - IAppHostElement *pWebSocketElement = NULL; - IAppHostElement *pEnvVarList = NULL; - IAppHostElement *pEnvVar = NULL; - IAppHostElementCollection *pEnvVarCollection = NULL; - ULONGLONG ullRawTimeSpan = 0; - ENUM_INDEX index; - ENVIRONMENT_VAR_ENTRY* pEntry = NULL; - DWORD dwCounter = 0; - DWORD dwPosition = 0; - WCHAR* pszPath = NULL; - BSTR bstrWindowAuthSection = NULL; - BSTR bstrBasicAuthSection = NULL; - BSTR bstrAnonymousAuthSection = NULL; - BSTR bstrAspNetCoreSection = NULL; - BSTR bstrWebsocketSection = NULL; - - m_pEnvironmentVariables = new ENVIRONMENT_VAR_HASH(); - if (m_pEnvironmentVariables == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - if (FAILED(hr = m_pEnvironmentVariables->Initialize(37 /*prime*/))) - { - delete m_pEnvironmentVariables; - m_pEnvironmentVariables = NULL; - goto Finished; - } - - pAdminManager = pHttpServer->GetAdminManager(); - hr = m_struConfigPath.Copy(pHttpContext->GetApplication()->GetAppConfigPath()); - if (FAILED(hr)) - { - goto Finished; - } - - hr = m_struApplicationPhysicalPath.Copy(pHttpContext->GetApplication()->GetApplicationPhysicalPath()); - if (FAILED(hr)) - { - goto Finished; - } - - pszPath = m_struConfigPath.QueryStr(); - while (pszPath[dwPosition] != NULL) - { - if (pszPath[dwPosition] == '/') - { - dwCounter++; - if (dwCounter == 4) - break; - } - dwPosition++; - } - - if (dwCounter == 4) - { - hr = m_struApplicationVirtualPath.Copy(pszPath + dwPosition); - } - else - { - hr = m_struApplicationVirtualPath.Copy(L"/"); - } - - // Will setup the application virtual path. - if (FAILED(hr)) - { - goto Finished; - } - - bstrWindowAuthSection = SysAllocString(CS_WINDOWS_AUTHENTICATION_SECTION); - if (bstrWindowAuthSection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pAdminManager->GetAdminSection(bstrWindowAuthSection, - m_struConfigPath.QueryStr(), - &pWindowsAuthenticationElement); - if (FAILED(hr)) - { - // assume the corresponding authen was not enabled - // as the section may get deleted by user in some HWC case - // ToDo: log a warning to event log - m_fWindowsAuthEnabled = FALSE; - } - else - { - hr = GetElementBoolProperty(pWindowsAuthenticationElement, - CS_ENABLED, - &m_fWindowsAuthEnabled); - if (FAILED(hr)) - { - goto Finished; - } - } - - bstrBasicAuthSection = SysAllocString(CS_BASIC_AUTHENTICATION_SECTION); - if (bstrBasicAuthSection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - hr = pAdminManager->GetAdminSection(bstrBasicAuthSection, - m_struConfigPath.QueryStr(), - &pBasicAuthenticationElement); - if (FAILED(hr)) - { - m_fBasicAuthEnabled = FALSE; - } - else - { - hr = GetElementBoolProperty(pBasicAuthenticationElement, - CS_ENABLED, - &m_fBasicAuthEnabled); - if (FAILED(hr)) - { - goto Finished; - } - } - bstrAnonymousAuthSection = SysAllocString(CS_ANONYMOUS_AUTHENTICATION_SECTION); - if (bstrAnonymousAuthSection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - hr = pAdminManager->GetAdminSection(bstrAnonymousAuthSection, - m_struConfigPath.QueryStr(), - &pAnonymousAuthenticationElement); - if (FAILED(hr)) - { - m_fAnonymousAuthEnabled = FALSE; - } - else - { - hr = GetElementBoolProperty(pAnonymousAuthenticationElement, - CS_ENABLED, - &m_fAnonymousAuthEnabled); - if (FAILED(hr)) - { - goto Finished; - } - } - - bstrWebsocketSection = SysAllocString(CS_WEBSOCKET_SECTION); - if (bstrWebsocketSection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = pAdminManager->GetAdminSection(bstrWebsocketSection, - m_struConfigPath.QueryStr(), - &pWebSocketElement); - if (FAILED(hr)) - { - m_fWebSocketEnabled = FALSE; - } - else - { - hr = GetElementBoolProperty(pWebSocketElement, - CS_ENABLED, - &m_fWebSocketEnabled); - if (FAILED(hr)) - { - goto Finished; - } - } - - bstrAspNetCoreSection = SysAllocString(CS_ASPNETCORE_SECTION); - if (bstrAspNetCoreSection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - hr = pAdminManager->GetAdminSection(bstrAspNetCoreSection, - m_struConfigPath.QueryStr(), - &pAspNetCoreElement); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementStringProperty(pAspNetCoreElement, - CS_ASPNETCORE_PROCESS_EXE_PATH, - &m_struProcessPath); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementStringProperty(pAspNetCoreElement, - CS_ASPNETCORE_HOSTING_MODEL, - &strHostingModel); - if (FAILED(hr)) - { - // Swallow this error for backward compatability - // Use default behavior for empty string - hr = S_OK; - } - - if (strHostingModel.IsEmpty() || strHostingModel.Equals(L"outofprocess", TRUE)) - { - m_hostingModel = HOSTING_OUT_PROCESS; - } - else if (strHostingModel.Equals(L"inprocess", TRUE)) - { - m_hostingModel = HOSTING_IN_PROCESS; - } - else - { - // block unknown hosting value - hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); - goto Finished; - } - - hr = GetElementStringProperty(pAspNetCoreElement, - CS_ASPNETCORE_PROCESS_ARGUMENTS, - &m_struArguments); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementDWORDProperty(pAspNetCoreElement, - CS_ASPNETCORE_RAPID_FAILS_PER_MINUTE, - &m_dwRapidFailsPerMinute); - if (FAILED(hr)) - { - goto Finished; - } - - // - // rapidFailsPerMinute cannot be greater than 100. - // - if (m_dwRapidFailsPerMinute > MAX_RAPID_FAILS_PER_MINUTE) - { - m_dwRapidFailsPerMinute = MAX_RAPID_FAILS_PER_MINUTE; - } - - hr = GetElementDWORDProperty(pAspNetCoreElement, - CS_ASPNETCORE_PROCESSES_PER_APPLICATION, - &m_dwProcessesPerApplication); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementDWORDProperty( - pAspNetCoreElement, - CS_ASPNETCORE_PROCESS_STARTUP_TIME_LIMIT, - &m_dwStartupTimeLimitInMS - ); - if (FAILED(hr)) - { - goto Finished; - } - - m_dwStartupTimeLimitInMS *= MILLISECONDS_IN_ONE_SECOND; - - hr = GetElementDWORDProperty( - pAspNetCoreElement, - CS_ASPNETCORE_PROCESS_SHUTDOWN_TIME_LIMIT, - &m_dwShutdownTimeLimitInMS - ); - if (FAILED(hr)) - { - goto Finished; - } - m_dwShutdownTimeLimitInMS *= MILLISECONDS_IN_ONE_SECOND; - - hr = GetElementBoolProperty(pAspNetCoreElement, - CS_ASPNETCORE_FORWARD_WINDOWS_AUTH_TOKEN, - &m_fForwardWindowsAuthToken); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementBoolProperty(pAspNetCoreElement, - CS_ASPNETCORE_DISABLE_START_UP_ERROR_PAGE, - &m_fDisableStartUpErrorPage); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementRawTimeSpanProperty( - pAspNetCoreElement, - CS_ASPNETCORE_WINHTTP_REQUEST_TIMEOUT, - &ullRawTimeSpan - ); - if (FAILED(hr)) - { - goto Finished; - } - - m_dwRequestTimeoutInMS = (DWORD)TIMESPAN_IN_MILLISECONDS(ullRawTimeSpan); - - hr = GetElementBoolProperty(pAspNetCoreElement, - CS_ASPNETCORE_STDOUT_LOG_ENABLED, - &m_fStdoutLogEnabled); - if (FAILED(hr)) - { - goto Finished; - } - hr = GetElementStringProperty(pAspNetCoreElement, - CS_ASPNETCORE_STDOUT_LOG_FILE, - &m_struStdoutLogFile); - if (FAILED(hr)) - { - goto Finished; - } - - hr = GetElementChildByName(pAspNetCoreElement, - CS_ASPNETCORE_ENVIRONMENT_VARIABLES, - &pEnvVarList); - if (FAILED(hr)) - { - goto Finished; - } - - hr = pEnvVarList->get_Collection(&pEnvVarCollection); - if (FAILED(hr)) - { - goto Finished; - } - - for (hr = FindFirstElement(pEnvVarCollection, &index, &pEnvVar); - SUCCEEDED(hr); - hr = FindNextElement(pEnvVarCollection, &index, &pEnvVar)) - { - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - if (FAILED(hr = GetElementStringProperty(pEnvVar, - CS_ASPNETCORE_ENVIRONMENT_VARIABLE_NAME, - &strEnvName)) || - FAILED(hr = GetElementStringProperty(pEnvVar, - CS_ASPNETCORE_ENVIRONMENT_VARIABLE_VALUE, - &strEnvValue)) || - FAILED(hr = strEnvName.Append(L"=")) || - FAILED(hr = STRU::ExpandEnvironmentVariables(strEnvValue.QueryStr(), &strExpandedEnvValue))) - { - goto Finished; - } - - pEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if (FAILED(hr = pEntry->Initialize(strEnvName.QueryStr(), strExpandedEnvValue.QueryStr())) || - FAILED(hr = m_pEnvironmentVariables->InsertRecord(pEntry))) - { - goto Finished; - } - strEnvName.Reset(); - strEnvValue.Reset(); - strExpandedEnvValue.Reset(); - pEnvVar->Release(); - pEnvVar = NULL; - pEntry->Dereference(); - pEntry = NULL; - } - -Finished: - - if (pAspNetCoreElement != NULL) - { - pAspNetCoreElement->Release(); - pAspNetCoreElement = NULL; - } - - if (pWebSocketElement != NULL) - { - pWebSocketElement->Release(); - pWebSocketElement = NULL; - } - - if (pWindowsAuthenticationElement != NULL) - { - pWindowsAuthenticationElement->Release(); - pWindowsAuthenticationElement = NULL; - } - - if (pAnonymousAuthenticationElement != NULL) - { - pAnonymousAuthenticationElement->Release(); - pAnonymousAuthenticationElement = NULL; - } - - if (pBasicAuthenticationElement != NULL) - { - pBasicAuthenticationElement->Release(); - pBasicAuthenticationElement = NULL; - } - - if (pEnvVarList != NULL) - { - pEnvVarList->Release(); - pEnvVarList = NULL; - } - - if (pEnvVar != NULL) - { - pEnvVar->Release(); - pEnvVar = NULL; - } - - if (pEnvVarCollection != NULL) - { - pEnvVarCollection->Release(); - pEnvVarCollection = NULL; - } - - if (pEntry != NULL) - { - pEntry->Dereference(); - pEntry = NULL; - } - - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.h deleted file mode 100644 index 655dcdc38567..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcoreconfig.h +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#define CS_ROOTWEB_CONFIG L"MACHINE/WEBROOT/APPHOST/" -#define CS_ROOTWEB_CONFIG_LEN _countof(CS_ROOTWEB_CONFIG)-1 -#define CS_ASPNETCORE_SECTION L"system.webServer/aspNetCore" -#define CS_WINDOWS_AUTHENTICATION_SECTION L"system.webServer/security/authentication/windowsAuthentication" -#define CS_BASIC_AUTHENTICATION_SECTION L"system.webServer/security/authentication/basicAuthentication" -#define CS_ANONYMOUS_AUTHENTICATION_SECTION L"system.webServer/security/authentication/anonymousAuthentication" -#define CS_WEBSOCKET_SECTION L"system.webServer/webSocket" -#define CS_ENABLED L"enabled" -#define CS_ASPNETCORE_PROCESS_EXE_PATH L"processPath" -#define CS_ASPNETCORE_PROCESS_ARGUMENTS L"arguments" -#define CS_ASPNETCORE_PROCESS_STARTUP_TIME_LIMIT L"startupTimeLimit" -#define CS_ASPNETCORE_PROCESS_SHUTDOWN_TIME_LIMIT L"shutdownTimeLimit" -#define CS_ASPNETCORE_WINHTTP_REQUEST_TIMEOUT L"requestTimeout" -#define CS_ASPNETCORE_RAPID_FAILS_PER_MINUTE L"rapidFailsPerMinute" -#define CS_ASPNETCORE_STDOUT_LOG_ENABLED L"stdoutLogEnabled" -#define CS_ASPNETCORE_STDOUT_LOG_FILE L"stdoutLogFile" -#define CS_ASPNETCORE_ENVIRONMENT_VARIABLES L"environmentVariables" -#define CS_ASPNETCORE_ENVIRONMENT_VARIABLE L"environmentVariable" -#define CS_ASPNETCORE_ENVIRONMENT_VARIABLE_NAME L"name" -#define CS_ASPNETCORE_ENVIRONMENT_VARIABLE_VALUE L"value" -#define CS_ASPNETCORE_PROCESSES_PER_APPLICATION L"processesPerApplication" -#define CS_ASPNETCORE_FORWARD_WINDOWS_AUTH_TOKEN L"forwardWindowsAuthToken" -#define CS_ASPNETCORE_DISABLE_START_UP_ERROR_PAGE L"disableStartUpErrorPage" -#define CS_ASPNETCORE_RECYCLE_ON_FILE_CHANGE L"recycleOnFileChange" -#define CS_ASPNETCORE_RECYCLE_ON_FILE_CHANGE_FILE L"file" -#define CS_ASPNETCORE_RECYCLE_ON_FILE_CHANGE_FILE_PATH L"path" -#define CS_ASPNETCORE_HOSTING_MODEL L"hostingModel" - -#define MAX_RAPID_FAILS_PER_MINUTE 100 -#define MILLISECONDS_IN_ONE_SECOND 1000 -#define MIN_PORT 1025 -#define MAX_PORT 48000 - -#define TIMESPAN_IN_MILLISECONDS(x) ((x)/((LONGLONG)(10000))) -#define TIMESPAN_IN_SECONDS(x) ((TIMESPAN_IN_MILLISECONDS(x))/((LONGLONG)(1000))) -#define TIMESPAN_IN_MINUTES(x) ((TIMESPAN_IN_SECONDS(x))/((LONGLONG)(60))) - -//#define HEX_TO_ASCII(c) ((CHAR)(((c) < 10) ? ((c) + '0') : ((c) + 'a' - 10))) - -#include "stdafx.h" - -enum APP_HOSTING_MODEL -{ - HOSTING_UNKNOWN = 0, - HOSTING_IN_PROCESS, - HOSTING_OUT_PROCESS -}; - -class ASPNETCORE_CONFIG : IHttpStoredContext -{ -public: - - virtual - ~ASPNETCORE_CONFIG(); - - VOID - CleanupStoredContext() - { - DereferenceConfiguration(); - } - - static - HRESULT - GetConfig( - _In_ IHttpServer *pHttpServer, - _In_ HTTP_MODULE_ID pModuleId, - _In_ IHttpContext *pHttpContext, - _In_ HANDLE hEventLog, - _Out_ ASPNETCORE_CONFIG **ppAspNetCoreConfig - ); - - ENVIRONMENT_VAR_HASH* - QueryEnvironmentVariables( - VOID - ) - { - return m_pEnvironmentVariables; - } - - DWORD - QueryRapidFailsPerMinute( - VOID - ) - { - return m_dwRapidFailsPerMinute; - } - - DWORD - QueryStartupTimeLimitInMS( - VOID - ) - { - return m_dwStartupTimeLimitInMS; - } - - DWORD - QueryShutdownTimeLimitInMS( - VOID - ) - { - return m_dwShutdownTimeLimitInMS; - } - - DWORD - QueryProcessesPerApplication( - VOID - ) - { - return m_dwProcessesPerApplication; - } - - DWORD - QueryRequestTimeoutInMS( - VOID - ) - { - return m_dwRequestTimeoutInMS; - } - - STRU* - QueryArguments( - VOID - ) - { - return &m_struArguments; - } - - STRU* - QueryApplicationPath( - VOID - ) - { - return &m_struApplication; - } - - STRU* - QueryApplicationPhysicalPath( - VOID - ) - { - return &m_struApplicationPhysicalPath; - } - - STRU* - QueryApplicationVirtualPath( - VOID - ) - { - return &m_struApplicationVirtualPath; - } - - STRU* - QueryProcessPath( - VOID - ) - { - return &m_struProcessPath; - } - - APP_HOSTING_MODEL - QueryHostingModel( - VOID - ) - { - return m_hostingModel; - } - - BOOL - QueryStdoutLogEnabled() - { - return m_fStdoutLogEnabled; - } - - BOOL - QueryWebSocketEnabled() - { - return m_fWebSocketEnabled; - } - - BOOL - QueryForwardWindowsAuthToken() - { - return m_fForwardWindowsAuthToken; - } - - BOOL - QueryWindowsAuthEnabled() - { - return m_fWindowsAuthEnabled; - } - - BOOL - QueryBasicAuthEnabled() - { - return m_fBasicAuthEnabled; - } - - BOOL - QueryAnonymousAuthEnabled() - { - return m_fAnonymousAuthEnabled; - } - - BOOL - QueryDisableStartUpErrorPage() - { - return m_fDisableStartUpErrorPage; - } - - STRU* - QueryStdoutLogFile() - { - return &m_struStdoutLogFile; - } - - STRU* - QueryConfigPath() - { - return &m_struConfigPath; - } - - CONST - PCWSTR* - QueryHostFxrArguments( - VOID - ) - { - return m_ppStrArguments; - } - - CONST - DWORD - QueryHostFxrArgCount( - VOID - ) - { - return m_dwArgc; - } - - CONST - PCWSTR - QueryHostFxrFullPath( - VOID - ) - { - return m_struHostFxrLocation.QueryStr(); - } - - HRESULT - SetHostFxrFullPath( - PCWSTR pStrHostFxrFullPath - ) - { - return m_struHostFxrLocation.Copy(pStrHostFxrFullPath); - } - - VOID - SetHostFxrArguments( - DWORD dwArgc, - PWSTR* ppStrArguments - ) - { - if (m_ppStrArguments != NULL) - { - delete[] m_ppStrArguments; - } - - m_dwArgc = dwArgc; - m_ppStrArguments = ppStrArguments; - } - - VOID - ReferenceConfiguration( - VOID - ) const; - - VOID - DereferenceConfiguration( - VOID - ) const; - -private: - - // - // private constructor - // - ASPNETCORE_CONFIG(): - m_fStdoutLogEnabled( FALSE ), - m_pEnvironmentVariables( NULL ), - m_cRefs( 1 ), - m_hostingModel( HOSTING_UNKNOWN ), - m_ppStrArguments(NULL) - { - } - - HRESULT - Populate( - IHttpServer *pHttpServer, - IHttpContext *pHttpContext - ); - - mutable LONG m_cRefs; - - DWORD m_dwRequestTimeoutInMS; - DWORD m_dwStartupTimeLimitInMS; - DWORD m_dwShutdownTimeLimitInMS; - DWORD m_dwRapidFailsPerMinute; - DWORD m_dwProcessesPerApplication; - STRU m_struArguments; - STRU m_struProcessPath; - STRU m_struStdoutLogFile; - STRU m_struApplication; - STRU m_struApplicationPhysicalPath; - STRU m_struApplicationVirtualPath; - STRU m_struConfigPath; - BOOL m_fStdoutLogEnabled; - BOOL m_fForwardWindowsAuthToken; - BOOL m_fDisableStartUpErrorPage; - BOOL m_fWindowsAuthEnabled; - BOOL m_fBasicAuthEnabled; - BOOL m_fAnonymousAuthEnabled; - BOOL m_fWebSocketEnabled; - APP_HOSTING_MODEL m_hostingModel; - ENVIRONMENT_VAR_HASH* m_pEnvironmentVariables; - STRU m_struHostFxrLocation; - PWSTR* m_ppStrArguments; - DWORD m_dwArgc; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h deleted file mode 100644 index 16fce88edd52..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/debugutil.h +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#define ASPNETCORE_DEBUG_FLAG_INFO 0x00000001 -#define ASPNETCORE_DEBUG_FLAG_WARNING 0x00000002 -#define ASPNETCORE_DEBUG_FLAG_ERROR 0x00000004 - -extern DWORD g_dwAspNetCoreDebugFlags; - -static -BOOL -IfDebug( - DWORD dwFlag - ) -{ - return ( dwFlag & g_dwAspNetCoreDebugFlags ); -} - -static -VOID -DebugPrint( - DWORD dwFlag, - LPCSTR szString - ) -{ - STACK_STRA (strOutput, 256); - HRESULT hr = S_OK; - - if ( IfDebug( dwFlag ) ) - { - hr = strOutput.SafeSnprintf( - "[aspnetcore.dll] %s\r\n", - szString ); - - if (FAILED (hr)) - { - goto Finished; - } - - OutputDebugStringA( strOutput.QueryStr() ); - } - -Finished: - - return; -} - -static -VOID -DebugPrintf( -DWORD dwFlag, -LPCSTR szFormat, -... -) -{ - STACK_STRA (strCooked,256); - - va_list args; - HRESULT hr = S_OK; - - if ( IfDebug( dwFlag ) ) - { - va_start( args, szFormat ); - - hr = strCooked.SafeVsnprintf(szFormat, args ); - - va_end( args ); - - if (FAILED (hr)) - { - goto Finished; - } - - DebugPrint( dwFlag, strCooked.QueryStr() ); - } - -Finished: - return; -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/environmentvariablehash.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/environmentvariablehash.h deleted file mode 100644 index 8fa054f2a9a9..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/environmentvariablehash.h +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define HOSTING_STARTUP_ASSEMBLIES_ENV_STR L"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" -#define HOSTING_STARTUP_ASSEMBLIES_NAME L"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=" -#define HOSTING_STARTUP_ASSEMBLIES_VALUE L"Microsoft.AspNetCore.Server.IISIntegration" -#define ASPNETCORE_IIS_AUTH_ENV_STR L"ASPNETCORE_IIS_HTTPAUTH=" -#define ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED_ENV_STR L"ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED=" -#define ASPNETCORE_IIS_AUTH_WINDOWS L"windows;" -#define ASPNETCORE_IIS_AUTH_BASIC L"basic;" -#define ASPNETCORE_IIS_AUTH_ANONYMOUS L"anonymous;" -#define ASPNETCORE_IIS_AUTH_NONE L"none" - -// -// The key used for hash-table lookups, consists of the port on which the http process is created. -// - -class ENVIRONMENT_VAR_ENTRY -{ -public: - ENVIRONMENT_VAR_ENTRY(): - _cRefs(1) - { - } - - HRESULT - Initialize( - PCWSTR pszName, - PCWSTR pszValue - ) - { - HRESULT hr = S_OK; - if (FAILED(hr = _strName.Copy(pszName)) || - FAILED(hr = _strValue.Copy(pszValue))) - { - } - return hr; - } - - VOID - Reference() const - { - InterlockedIncrement(&_cRefs); - } - - VOID - Dereference() const - { - if (InterlockedDecrement(&_cRefs) == 0) - { - delete this; - } - } - - PWSTR const - QueryName() - { - return _strName.QueryStr(); - } - - PWSTR const - QueryValue() - { - return _strValue.QueryStr(); - } - -private: - ~ENVIRONMENT_VAR_ENTRY() - { - } - - STRU _strName; - STRU _strValue; - mutable LONG _cRefs; -}; - -class ENVIRONMENT_VAR_HASH : public HASH_TABLE -{ -public: - ENVIRONMENT_VAR_HASH() - { - } - - PWSTR - ExtractKey( - ENVIRONMENT_VAR_ENTRY * pEntry - ) - { - return pEntry->QueryName(); - } - - DWORD - CalcKeyHash( - PWSTR pszName - ) - { - return HashStringNoCase(pszName); - } - - BOOL - EqualKeys( - PWSTR pszName1, - PWSTR pszName2 - ) - { - return (_wcsicmp(pszName1, pszName2) == 0); - } - - VOID - ReferenceRecord( - ENVIRONMENT_VAR_ENTRY * pEntry - ) - { - pEntry->Reference(); - } - - VOID - DereferenceRecord( - ENVIRONMENT_VAR_ENTRY * pEntry - ) - { - pEntry->Dereference(); - } - - -private: - ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &); - void operator=(const ENVIRONMENT_VAR_HASH &); -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cxx deleted file mode 100644 index 7aeb0999c018..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.cxx +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#include "stdafx.h" - -fx_ver_t::fx_ver_t(int major, int minor, int patch, const std::wstring& pre, const std::wstring& build) - : m_major(major) - , m_minor(minor) - , m_patch(patch) - , m_pre(pre) - , m_build(build) -{ -} - -fx_ver_t::fx_ver_t(int major, int minor, int patch, const std::wstring& pre) - : fx_ver_t(major, minor, patch, pre, TEXT("")) -{ -} - -fx_ver_t::fx_ver_t(int major, int minor, int patch) - : fx_ver_t(major, minor, patch, TEXT(""), TEXT("")) -{ -} - -bool fx_ver_t::operator ==(const fx_ver_t& b) const -{ - return compare(*this, b) == 0; -} - -bool fx_ver_t::operator !=(const fx_ver_t& b) const -{ - return !operator ==(b); -} - -bool fx_ver_t::operator <(const fx_ver_t& b) const -{ - return compare(*this, b) < 0; -} - -bool fx_ver_t::operator >(const fx_ver_t& b) const -{ - return compare(*this, b) > 0; -} - -bool fx_ver_t::operator <=(const fx_ver_t& b) const -{ - return compare(*this, b) <= 0; -} - -bool fx_ver_t::operator >=(const fx_ver_t& b) const -{ - return compare(*this, b) >= 0; -} - -std::wstring fx_ver_t::as_str() const -{ - std::wstringstream stream; - stream << m_major << TEXT(".") << m_minor << TEXT(".") << m_patch; - if (!m_pre.empty()) - { - stream << m_pre; - } - if (!m_build.empty()) - { - stream << TEXT("+") << m_build; - } - return stream.str(); -} - -/* static */ -int fx_ver_t::compare(const fx_ver_t&a, const fx_ver_t& b) -{ - // compare(u.v.w-p+b, x.y.z-q+c) - if (a.m_major != b.m_major) - { - return (a.m_major > b.m_major) ? 1 : -1; - } - - if (a.m_minor != b.m_minor) - { - return (a.m_minor > b.m_minor) ? 1 : -1; - } - - if (a.m_patch != b.m_patch) - { - return (a.m_patch > b.m_patch) ? 1 : -1; - } - - if (a.m_pre.empty() != b.m_pre.empty()) - { - // Either a is empty or b is empty - return a.m_pre.empty() ? 1 : -1; - } - - // Either both are empty or both are non-empty (may be equal) - int pre_cmp = a.m_pre.compare(b.m_pre); - if (pre_cmp != 0) - { - return pre_cmp; - } - - return a.m_build.compare(b.m_build); -} - -bool try_stou(const std::wstring& str, unsigned* num) -{ - if (str.empty()) - { - return false; - } - if (str.find_first_not_of(TEXT("0123456789")) != std::wstring::npos) - { - return false; - } - *num = (unsigned)std::stoul(str); - return true; -} - -bool parse_internal(const std::wstring& ver, fx_ver_t* fx_ver, bool parse_only_production) -{ - size_t maj_start = 0; - size_t maj_sep = ver.find(TEXT('.')); - if (maj_sep == std::wstring::npos) - { - return false; - } - unsigned major = 0; - if (!try_stou(ver.substr(maj_start, maj_sep), &major)) - { - return false; - } - - size_t min_start = maj_sep + 1; - size_t min_sep = ver.find(TEXT('.'), min_start); - if (min_sep == std::wstring::npos) - { - return false; - } - - unsigned minor = 0; - if (!try_stou(ver.substr(min_start, min_sep - min_start), &minor)) - { - return false; - } - - unsigned patch = 0; - size_t pat_start = min_sep + 1; - size_t pat_sep = ver.find_first_not_of(TEXT("0123456789"), pat_start); - if (pat_sep == std::wstring::npos) - { - if (!try_stou(ver.substr(pat_start), &patch)) - { - return false; - } - - *fx_ver = fx_ver_t(major, minor, patch); - return true; - } - - if (parse_only_production) - { - // This is a prerelease or has build suffix. - return false; - } - - if (!try_stou(ver.substr(pat_start, pat_sep - pat_start), &patch)) - { - return false; - } - - size_t pre_start = pat_sep; - size_t pre_sep = ver.find(TEXT('+'), pre_start); - if (pre_sep == std::wstring::npos) - { - *fx_ver = fx_ver_t(major, minor, patch, ver.substr(pre_start)); - return true; - } - else - { - size_t build_start = pre_sep + 1; - *fx_ver = fx_ver_t(major, minor, patch, ver.substr(pre_start, pre_sep - pre_start), ver.substr(build_start)); - return true; - } -} - -/* static */ -bool fx_ver_t::parse(const std::wstring& ver, fx_ver_t* fx_ver, bool parse_only_production) -{ - bool valid = parse_internal(ver, fx_ver, parse_only_production); - assert(!valid || fx_ver->as_str() == ver); - return valid; -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h deleted file mode 100644 index 1626b2697cc0..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/fx_ver.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#pragma once - -// Note: This is not SemVer (esp., in comparing pre-release part, fx_ver_t does not -// compare multiple dot separated identifiers individually.) ex: 1.0.0-beta.2 vs. 1.0.0-beta.11 -struct fx_ver_t -{ - fx_ver_t(int major, int minor, int patch); - fx_ver_t(int major, int minor, int patch, const std::wstring& pre); - fx_ver_t(int major, int minor, int patch, const std::wstring& pre, const std::wstring& build); - - int get_major() const { return m_major; } - int get_minor() const { return m_minor; } - int get_patch() const { return m_patch; } - - void set_major(int m) { m_major = m; } - void set_minor(int m) { m_minor = m; } - void set_patch(int p) { m_patch = p; } - - bool is_prerelease() const { return !m_pre.empty(); } - - std::wstring as_str() const; - std::wstring prerelease_glob() const; - std::wstring patch_glob() const; - - bool operator ==(const fx_ver_t& b) const; - bool operator !=(const fx_ver_t& b) const; - bool operator <(const fx_ver_t& b) const; - bool operator >(const fx_ver_t& b) const; - bool operator <=(const fx_ver_t& b) const; - bool operator >=(const fx_ver_t& b) const; - - static bool parse(const std::wstring& ver, fx_ver_t* fx_ver, bool parse_only_production = false); - -private: - int m_major; - int m_minor; - int m_patch; - std::wstring m_pre; - std::wstring m_build; - - static int compare(const fx_ver_t&a, const fx_ver_t& b); -}; - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp deleted file mode 100644 index 1ad02feba2ab..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp +++ /dev/null @@ -1,807 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "stdafx.h" - -HOSTFXR_UTILITY::HOSTFXR_UTILITY() -{ -} - -HOSTFXR_UTILITY::~HOSTFXR_UTILITY() -{ -} - -// -// Runs a standalone appliction. -// The folder structure looks like this: -// Application/ -// hostfxr.dll -// Application.exe -// Application.dll -// etc. -// We get the full path to hostfxr.dll and Application.dll and run hostfxr_main, -// passing in Application.dll. -// Assuming we don't need Application.exe as the dll is the actual application. -// -HRESULT -HOSTFXR_UTILITY::GetStandaloneHostfxrParameters( - PCWSTR pwzExeAbsolutePath, // includes .exe file extension. - PCWSTR pcwzApplicationPhysicalPath, - PCWSTR pcwzArguments, - HANDLE hEventLog, - _Inout_ STRU* struHostFxrDllLocation, - _Out_ DWORD* pdwArgCount, - _Out_ PWSTR** ppwzArgv -) -{ - HRESULT hr = S_OK; - STRU struDllPath; - STRU struArguments; - STRU struHostFxrPath; - STRU struRuntimeConfigLocation; - DWORD dwPosition; - - // Obtain the app name from the processPath section. - if ( FAILED( hr = struDllPath.Copy( pwzExeAbsolutePath ) ) ) - { - goto Finished; - } - - dwPosition = struDllPath.LastIndexOf( L'.', 0 ); - if ( dwPosition == -1 ) - { - hr = E_FAIL; - goto Finished; - } - - hr = UTILITY::ConvertPathToFullPath( L".\\hostfxr.dll", pcwzApplicationPhysicalPath, &struHostFxrPath ); - if ( FAILED( hr ) ) - { - goto Finished; - } - - struDllPath.QueryStr()[dwPosition] = L'\0'; - if (FAILED(hr = struDllPath.SyncWithBuffer())) - { - goto Finished; - } - - if ( !UTILITY::CheckIfFileExists( struHostFxrPath.QueryStr() ) ) - { - // Most likely a full framework app. - // Check that the runtime config file doesn't exist in the folder as another heuristic. - if (FAILED(hr = struRuntimeConfigLocation.Copy(struDllPath)) || - FAILED(hr = struRuntimeConfigLocation.Append( L".runtimeconfig.json" ))) - { - goto Finished; - } - if (!UTILITY::CheckIfFileExists(struRuntimeConfigLocation.QueryStr())) - { - - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_INPROCESS_FULL_FRAMEWORK_APP, - ASPNETCORE_EVENT_INPROCESS_FULL_FRAMEWORK_APP_MSG, - pcwzApplicationPhysicalPath, - hr); - } - else - { - // If a runtime config file does exist, report a file not found on the app.exe - hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_APPLICATION_EXE_NOT_FOUND, - ASPNETCORE_EVENT_APPLICATION_EXE_NOT_FOUND_MSG, - pcwzApplicationPhysicalPath, - hr); - } - - goto Finished; - } - - if (FAILED(hr = struHostFxrDllLocation->Copy(struHostFxrPath))) - { - goto Finished; - } - - - if (FAILED(hr = struDllPath.Append(L".dll"))) - { - goto Finished; - } - - if (!UTILITY::CheckIfFileExists(struDllPath.QueryStr())) - { - // Treat access issue as File not found - hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); - goto Finished; - } - - if (FAILED(hr = struArguments.Copy(struDllPath)) || - FAILED(hr = struArguments.Append(L" ")) || - FAILED(hr = struArguments.Append(pcwzArguments))) - { - goto Finished; - } - - if (FAILED(hr = ParseHostfxrArguments( - struArguments.QueryStr(), - pwzExeAbsolutePath, - pcwzApplicationPhysicalPath, - hEventLog, - pdwArgCount, - ppwzArgv))) - { - goto Finished; - } - -Finished: - - return hr; -} - -HRESULT -HOSTFXR_UTILITY::GetHostFxrParameters( - HANDLE hEventLog, - PCWSTR pcwzProcessPath, - PCWSTR pcwzApplicationPhysicalPath, - PCWSTR pcwzArguments, - _Inout_ STRU* struHostFxrDllLocation, - _Out_ DWORD* pdwArgCount, - _Out_ BSTR** pbstrArgv -) -{ - HRESULT hr = S_OK; - STRU struSystemPathVariable; - STRU struAbsolutePathToHostFxr; - STRU struAbsolutePathToDotnet; - STRU struEventMsg; - STACK_STRU(struExpandedProcessPath, MAX_PATH); - STACK_STRU(struExpandedArguments, MAX_PATH); - - // Copy and Expand the processPath and Arguments. - if (FAILED(hr = struExpandedProcessPath.CopyAndExpandEnvironmentStrings(pcwzProcessPath)) - || FAILED(hr = struExpandedArguments.CopyAndExpandEnvironmentStrings(pcwzArguments))) - { - goto Finished; - } - - // Convert the process path an absolute path to our current application directory. - // If the path is already an absolute path, it will be unchanged. - hr = UTILITY::ConvertPathToFullPath( - struExpandedProcessPath.QueryStr(), - pcwzApplicationPhysicalPath, - &struAbsolutePathToDotnet - ); - - if (FAILED(hr)) - { - goto Finished; - } - - // Check if the absolute path is to dotnet or not. - if (struAbsolutePathToDotnet.EndsWith(L"dotnet.exe") || struAbsolutePathToDotnet.EndsWith(L"dotnet")) - { - // - // The processPath ends with dotnet.exe or dotnet - // like: C:\Program Files\dotnet\dotnet.exe, C:\Program Files\dotnet\dotnet, dotnet.exe, or dotnet. - // Get the absolute path to dotnet. If the path is already an absolute path, it will return that path - // - if (FAILED(hr = HOSTFXR_UTILITY::GetAbsolutePathToDotnet(&struAbsolutePathToDotnet))) // Make sure to append the dotnet.exe path correctly here (pass in regular path)? - { - goto Finished; - } - - if (FAILED(hr = GetAbsolutePathToHostFxr(&struAbsolutePathToDotnet, hEventLog, &struAbsolutePathToHostFxr))) - { - goto Finished; - } - - if (FAILED(hr = ParseHostfxrArguments( - struExpandedArguments.QueryStr(), - struAbsolutePathToDotnet.QueryStr(), - pcwzApplicationPhysicalPath, - hEventLog, - pdwArgCount, - pbstrArgv))) - { - goto Finished; - } - - if (FAILED(hr = struHostFxrDllLocation->Copy(struAbsolutePathToHostFxr))) - { - goto Finished; - } - } - else - { - // - // The processPath is a path to the application executable - // like: C:\test\MyApp.Exe or MyApp.Exe - // Check if the file exists, and if it does, get the parameters for a standalone application - // - if (UTILITY::CheckIfFileExists(struAbsolutePathToDotnet.QueryStr())) - { - hr = GetStandaloneHostfxrParameters( - struAbsolutePathToDotnet.QueryStr(), - pcwzApplicationPhysicalPath, - struExpandedArguments.QueryStr(), - hEventLog, - struHostFxrDllLocation, - pdwArgCount, - pbstrArgv); - } - else - { - // - // If the processPath file does not exist and it doesn't include dotnet.exe or dotnet - // then it is an invalid argument. - // - hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);; - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_GENERAL_ERROR_MSG, - ASPNETCORE_EVENT_INVALID_PROCESS_PATH_MSG, - struExpandedProcessPath.QueryStr(), - hr); - } - } - -Finished: - - return hr; -} - -// -// Forms the argument list in HOSTFXR_PARAMETERS. -// Sets the ArgCount and Arguments. -// Arg structure: -// argv[0] = Path to exe activating hostfxr. -// argv[1] = L"exec" -// argv[2] = absolute path to dll. -// -HRESULT -HOSTFXR_UTILITY::ParseHostfxrArguments( - PCWSTR pwzArgumentsFromConfig, - PCWSTR pwzExePath, - PCWSTR pcwzApplicationPhysicalPath, - HANDLE hEventLog, - _Out_ DWORD* pdwArgCount, - _Out_ BSTR** pbstrArgv -) -{ - UNREFERENCED_PARAMETER( hEventLog ); // TODO use event log to set errors. - - DBG_ASSERT(dwArgCount != NULL); - DBG_ASSERT(pwzArgv != NULL); - - HRESULT hr = S_OK; - INT argc = 0; - BSTR* argv = NULL; - LPWSTR* pwzArgs = NULL; - STRU struTempPath; - INT intArgsProcessed = 0; - - // If we call CommandLineToArgvW with an empty string, argc is 5 for some interesting reason. - // Protectively guard against this by check if the string is null or empty. - if (pwzArgumentsFromConfig == NULL || wcscmp(pwzArgumentsFromConfig, L"") == 0) - { - hr = E_INVALIDARG; - goto Finished; - } - - pwzArgs = CommandLineToArgvW(pwzArgumentsFromConfig, &argc); - - if (pwzArgs == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - - argv = new BSTR[argc + 1]; - if (argv == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - - argv[0] = SysAllocString(pwzExePath); - - if (argv[0] == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - - // Try to convert the application dll from a relative to an absolute path - // Don't record this failure as pwzArgs[0] may already be an absolute path to the dll. - for (intArgsProcessed = 0; intArgsProcessed < argc; intArgsProcessed++) - { - struTempPath.Copy(pwzArgs[intArgsProcessed]); - if (struTempPath.EndsWith(L".dll")) - { - if (SUCCEEDED(UTILITY::ConvertPathToFullPath(pwzArgs[intArgsProcessed], pcwzApplicationPhysicalPath, &struTempPath))) - { - argv[intArgsProcessed + 1] = SysAllocString(struTempPath.QueryStr()); - } - else - { - argv[intArgsProcessed + 1] = SysAllocString(pwzArgs[intArgsProcessed]); - } - if (argv[intArgsProcessed + 1] == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - } - else - { - argv[intArgsProcessed + 1] = SysAllocString(pwzArgs[intArgsProcessed]); - if (argv[intArgsProcessed + 1] == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - } - } - - *pbstrArgv = argv; - *pdwArgCount = argc + 1; - - goto Finished; - -Failure: - if (argv != NULL) - { - // intArgsProcess - 1 here as if we fail to allocated the ith string - // we don't want to free it. - for (INT i = 0; i < intArgsProcessed - 1; i++) - { - SysFreeString(argv[i]); - } - } - - delete[] argv; - -Finished: - if (pwzArgs != NULL) - { - LocalFree(pwzArgs); - DBG_ASSERT(pwzArgs == NULL); - } - return hr; -} - -HRESULT -HOSTFXR_UTILITY::GetAbsolutePathToDotnet( - _Inout_ STRU* pStruAbsolutePathToDotnet -) -{ - HRESULT hr = S_OK; - - // - // If we are given an absolute path to dotnet.exe, we are done - // - if (UTILITY::CheckIfFileExists(pStruAbsolutePathToDotnet->QueryStr())) - { - goto Finished; - } - - // - // If the path was C:\Program Files\dotnet\dotnet - // We need to try appending .exe and check if the file exists too. - // - if (FAILED(hr = pStruAbsolutePathToDotnet->Append(L".exe"))) - { - goto Finished; - } - - if (UTILITY::CheckIfFileExists(pStruAbsolutePathToDotnet->QueryStr())) - { - goto Finished; - } - - // At this point, we are calling where.exe to find dotnet. - // If we encounter any failures, try getting dotnet.exe from the - // backup location. - if (!InvokeWhereToFindDotnet(pStruAbsolutePathToDotnet)) - { - hr = GetAbsolutePathToDotnetFromProgramFiles(pStruAbsolutePathToDotnet); - } - -Finished: - - return hr; -} - -HRESULT -HOSTFXR_UTILITY::GetAbsolutePathToHostFxr( - STRU* pStruAbsolutePathToDotnet, - HANDLE hEventLog, - STRU* pStruAbsolutePathToHostfxr -) -{ - HRESULT hr = S_OK; - STRU struHostFxrPath; - STRU struHostFxrSearchExpression; - STRU struHighestDotnetVersion; - STRU struEventMsg; - std::vector vVersionFolders; - DWORD dwPosition = 0; - - if (FAILED(hr = struHostFxrPath.Copy(pStruAbsolutePathToDotnet))) - { - goto Finished; - } - - dwPosition = struHostFxrPath.LastIndexOf(L'\\', 0); - if (dwPosition == -1) - { - hr = E_FAIL; - goto Finished; - } - - struHostFxrPath.QueryStr()[dwPosition] = L'\0'; - - if (FAILED(hr = struHostFxrPath.SyncWithBuffer()) || - FAILED(hr = struHostFxrPath.Append(L"\\"))) - { - goto Finished; - } - - hr = struHostFxrPath.Append(L"host\\fxr"); - if (FAILED(hr)) - { - goto Finished; - } - - if (!UTILITY::DirectoryExists(&struHostFxrPath)) - { - hr = ERROR_BAD_ENVIRONMENT; - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND, - struEventMsg.QueryStr(), - ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND_MSG, - struHostFxrPath.QueryStr(), - hr); - goto Finished; - } - - // Find all folders under host\\fxr\\ for version numbers. - hr = struHostFxrSearchExpression.Copy(struHostFxrPath); - if (FAILED(hr)) - { - goto Finished; - } - - hr = struHostFxrSearchExpression.Append(L"\\*"); - if (FAILED(hr)) - { - goto Finished; - } - - // As we use the logic from core-setup, we are opting to use std here. - UTILITY::FindDotNetFolders(struHostFxrSearchExpression.QueryStr(), &vVersionFolders); - - if (vVersionFolders.size() == 0) - { - hr = HRESULT_FROM_WIN32(ERROR_BAD_ENVIRONMENT); - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND, - ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND_MSG, - struHostFxrPath.QueryStr(), - hr); - goto Finished; - } - - hr = UTILITY::FindHighestDotNetVersion(vVersionFolders, &struHighestDotnetVersion); - if (FAILED(hr)) - { - goto Finished; - } - - if (FAILED(hr = struHostFxrPath.Append(L"\\")) - || FAILED(hr = struHostFxrPath.Append(struHighestDotnetVersion.QueryStr())) - || FAILED(hr = struHostFxrPath.Append(L"\\hostfxr.dll"))) - { - goto Finished; - } - - if (!UTILITY::CheckIfFileExists(struHostFxrPath.QueryStr())) - { - // ASPNETCORE_EVENT_HOSTFXR_DLL_NOT_FOUND_MSG - hr = HRESULT_FROM_WIN32(ERROR_FILE_INVALID); - UTILITY::LogEventF(hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_HOSTFXR_DLL_NOT_FOUND, - ASPNETCORE_EVENT_HOSTFXR_DLL_NOT_FOUND_MSG, - struHostFxrPath.QueryStr(), - hr); - goto Finished; - } - - if (FAILED(hr = pStruAbsolutePathToHostfxr->Copy(struHostFxrPath))) - { - goto Finished; - } - -Finished: - return hr; -} - -// -// Tries to call where.exe to find the location of dotnet.exe. -// Will check that the bitness of dotnet matches the current -// worker process bitness. -// Returns true if a valid dotnet was found, else false. -// -BOOL -HOSTFXR_UTILITY::InvokeWhereToFindDotnet( - _Inout_ STRU* pStruAbsolutePathToDotnet -) -{ - HRESULT hr = S_OK; - // Arguments to call where.exe - STARTUPINFOW startupInfo = { 0 }; - PROCESS_INFORMATION processInformation = { 0 }; - SECURITY_ATTRIBUTES securityAttributes; - - CHAR pzFileContents[READ_BUFFER_SIZE]; - HANDLE hStdOutReadPipe = INVALID_HANDLE_VALUE; - HANDLE hStdOutWritePipe = INVALID_HANDLE_VALUE; - LPWSTR pwzDotnetName = NULL; - DWORD dwFilePointer; - BOOL fIsWow64Process; - BOOL fIsCurrentProcess64Bit; - DWORD dwExitCode; - STRU struDotnetSubstring; - STRU struDotnetLocationsString; - DWORD dwNumBytesRead; - DWORD dwBinaryType; - INT index = 0; - INT prevIndex = 0; - BOOL fProcessCreationResult = FALSE; - BOOL fResult = FALSE; - - // Set the security attributes for the read/write pipe - securityAttributes.nLength = sizeof(securityAttributes); - securityAttributes.lpSecurityDescriptor = NULL; - securityAttributes.bInheritHandle = TRUE; - - // Reset the path to dotnet as we will be using whether the string is - // empty or not as state - pStruAbsolutePathToDotnet->Reset(); - - // Create a read/write pipe that will be used for reading the result of where.exe - if (!CreatePipe(&hStdOutReadPipe, &hStdOutWritePipe, &securityAttributes, 0)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - if (!SetHandleInformation(hStdOutReadPipe, HANDLE_FLAG_INHERIT, 0)) - { - hr = ERROR_FILE_INVALID; - goto Finished; - } - - // Set the stdout and err pipe to the write pipes. - startupInfo.cb = sizeof(startupInfo); - startupInfo.dwFlags |= STARTF_USESTDHANDLES; - startupInfo.hStdOutput = hStdOutWritePipe; - startupInfo.hStdError = hStdOutWritePipe; - - // CreateProcess requires a mutable string to be passed to commandline - // See https://blogs.msdn.microsoft.com/oldnewthing/20090601-00/?p=18083/ - pwzDotnetName = SysAllocString(L"\"where.exe\" dotnet.exe"); - if (pwzDotnetName == NULL) - { - goto Finished; - } - - // Create a process to invoke where.exe - fProcessCreationResult = CreateProcessW(NULL, - pwzDotnetName, - NULL, - NULL, - TRUE, - CREATE_NO_WINDOW, - NULL, - NULL, - &startupInfo, - &processInformation - ); - - if (!fProcessCreationResult) - { - goto Finished; - } - - // Wait for where.exe to return, waiting 2 seconds. - if (WaitForSingleObject(processInformation.hProcess, 2000) != WAIT_OBJECT_0) - { - // Timeout occured, terminate the where.exe process and return. - TerminateProcess(processInformation.hProcess, 2); - hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT); - goto Finished; - } - - // - // where.exe will return 0 on success, 1 if the file is not found - // and 2 if there was an error. Check if the exit code is 1 and set - // a new hr result saying it couldn't find dotnet.exe - // - if (!GetExitCodeProcess(processInformation.hProcess, &dwExitCode)) - { - goto Finished; - } - - // - // In this block, if anything fails, we will goto our fallback of - // looking in C:/Program Files/ - // - if (dwExitCode != 0) - { - goto Finished; - } - - // Where succeeded. - // Reset file pointer to the beginning of the file. - dwFilePointer = SetFilePointer(hStdOutReadPipe, 0, NULL, FILE_BEGIN); - if (dwFilePointer == INVALID_SET_FILE_POINTER) - { - goto Finished; - } - - // - // As the call to where.exe succeeded (dotnet.exe was found), ReadFile should not hang. - // TODO consider putting ReadFile in a separate thread with a timeout to guarantee it doesn't block. - // - if (!ReadFile(hStdOutReadPipe, pzFileContents, READ_BUFFER_SIZE, &dwNumBytesRead, NULL)) - { - goto Finished; - } - - if (dwNumBytesRead >= READ_BUFFER_SIZE) - { - // This shouldn't ever be this large. We could continue to call ReadFile in a loop, - // however if someone had this many dotnet.exes on their machine. - goto Finished; - } - - hr = HRESULT_FROM_WIN32(GetLastError()); - if (FAILED(hr = struDotnetLocationsString.CopyA(pzFileContents, dwNumBytesRead))) - { - goto Finished; - } - - // Check the bitness of the currently running process - // matches the dotnet.exe found. - if (!IsWow64Process(GetCurrentProcess(), &fIsWow64Process)) - { - // Calling IsWow64Process failed - goto Finished; - } - if (fIsWow64Process) - { - // 32 bit mode - fIsCurrentProcess64Bit = FALSE; - } - else - { - // Check the SystemInfo to see if we are currently 32 or 64 bit. - SYSTEM_INFO systemInfo; - GetNativeSystemInfo(&systemInfo); - fIsCurrentProcess64Bit = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64; - } - - while (TRUE) - { - index = struDotnetLocationsString.IndexOf(L"\r\n", prevIndex); - if (index == -1) - { - break; - } - if (FAILED(hr = struDotnetSubstring.Copy(&struDotnetLocationsString.QueryStr()[prevIndex], index - prevIndex))) - { - goto Finished; - } - // \r\n is two wchars, so add 2 here. - prevIndex = index + 2; - - if (GetBinaryTypeW(struDotnetSubstring.QueryStr(), &dwBinaryType) && - fIsCurrentProcess64Bit == (dwBinaryType == SCS_64BIT_BINARY)) - { - // The bitness of dotnet matched with the current worker process bitness. - if (FAILED(hr = pStruAbsolutePathToDotnet->Copy(struDotnetSubstring))) - { - goto Finished; - } - fResult = TRUE; - break; - } - } - -Finished: - - if (hStdOutReadPipe != INVALID_HANDLE_VALUE) - { - CloseHandle(hStdOutReadPipe); - } - if (hStdOutWritePipe != INVALID_HANDLE_VALUE) - { - CloseHandle(hStdOutWritePipe); - } - if (processInformation.hProcess != INVALID_HANDLE_VALUE) - { - CloseHandle(processInformation.hProcess); - } - if (processInformation.hThread != INVALID_HANDLE_VALUE) - { - CloseHandle(processInformation.hThread); - } - if (pwzDotnetName != NULL) - { - SysFreeString(pwzDotnetName); - } - - return fResult; -} - - -HRESULT -HOSTFXR_UTILITY::GetAbsolutePathToDotnetFromProgramFiles( - _Inout_ STRU* pStruAbsolutePathToDotnet -) -{ - HRESULT hr = S_OK; - BOOL fFound = FALSE; - DWORD dwNumBytesRead = 0; - DWORD dwPathSize = MAX_PATH; - STRU struDotnetSubstring; - - while (!fFound) - { - if (FAILED(hr = struDotnetSubstring.Resize(dwPathSize))) - { - goto Finished; - } - - dwNumBytesRead = GetEnvironmentVariable(L"ProgramFiles", struDotnetSubstring.QueryStr(), dwPathSize); - if (dwNumBytesRead == 0) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - else if (dwNumBytesRead >= dwPathSize) - { - // - // The path to ProgramFiles should never be this long, but resize and try again. - dwPathSize *= 2 + 30; // for dotnet substring - } - else - { - if (FAILED(hr = struDotnetSubstring.SyncWithBuffer()) || - FAILED(hr = struDotnetSubstring.Append(L"\\dotnet\\dotnet.exe"))) - { - goto Finished; - } - if (!UTILITY::CheckIfFileExists(struDotnetSubstring.QueryStr())) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - if (FAILED(hr = pStruAbsolutePathToDotnet->Copy(struDotnetSubstring))) - { - goto Finished; - } - fFound = TRUE; - } - } - -Finished: - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h deleted file mode 100644 index e7703c5bfa30..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -typedef INT(*hostfxr_get_native_search_directories_fn) (CONST INT argc, CONST PCWSTR* argv, PWSTR buffer, DWORD buffer_size, DWORD* required_buffer_size); -typedef INT(*hostfxr_main_fn) (CONST DWORD argc, CONST PCWSTR argv[]); - -#define READ_BUFFER_SIZE 4096 - -class HOSTFXR_UTILITY -{ -public: - HOSTFXR_UTILITY(); - ~HOSTFXR_UTILITY(); - - static - HRESULT - GetHostFxrParameters( - HANDLE hEventLog, - PCWSTR pcwzProcessPath, - PCWSTR pcwzApplicationPhysicalPath, - PCWSTR pcwzArguments, - _Inout_ STRU* pStruHostFxrDllLocation, - _Out_ DWORD* pdwArgCount, - _Out_ BSTR** ppwzArgv - ); - - static - HRESULT - GetStandaloneHostfxrParameters( - PCWSTR pwzExeAbsolutePath, // includes .exe file extension. - PCWSTR pcwzApplicationPhysicalPath, - PCWSTR pcwzArguments, - HANDLE hEventLog, - _Inout_ STRU* pStruHostFxrDllLocation, - _Out_ DWORD* pdwArgCount, - _Out_ BSTR** ppwzArgv - ); - - static - HRESULT - ParseHostfxrArguments( - PCWSTR pwzArgumentsFromConfig, - PCWSTR pwzExePath, - PCWSTR pcwzApplicationPhysicalPath, - HANDLE hEventLog, - _Out_ DWORD* pdwArgCount, - _Out_ BSTR** ppwzArgv - ); - - static - HRESULT - GetAbsolutePathToDotnet( - STRU* pStruAbsolutePathToDotnet - ); - - static - HRESULT - GetAbsolutePathToHostFxr( - _In_ STRU* pStruAbsolutePathToDotnet, - _In_ HANDLE hEventLog, - _Out_ STRU* pStruAbsolutePathToHostfxr - ); - - static - BOOL - InvokeWhereToFindDotnet( - _Inout_ STRU* pStruAbsolutePathToDotnet - ); - - static - HRESULT - GetAbsolutePathToDotnetFromProgramFiles( - _Inout_ STRU* pStruAbsolutePathToDotnet - ); -}; - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.cxx deleted file mode 100644 index bcf1887d3543..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.cxx +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "stdafx.h" - -REQUEST_HANDLER::REQUEST_HANDLER( - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication) - : m_cRefs(1) -{ - m_pW3Context = pW3Context; - m_pApplication = pApplication; - m_pModuleId = *pModuleId; -} - - -REQUEST_HANDLER::~REQUEST_HANDLER() -{ -} - -VOID -REQUEST_HANDLER::ReferenceRequestHandler( - VOID -) const -{ - InterlockedIncrement(&m_cRefs); -} - - -VOID -REQUEST_HANDLER::DereferenceRequestHandler( - VOID -) const -{ - DBG_ASSERT(m_cRefs != 0); - - LONG cRefs = 0; - if ((cRefs = InterlockedDecrement(&m_cRefs)) == 0) - { - delete this; - } - -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h deleted file mode 100644 index 28f4fb725eec..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/requesthandler.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "stdafx.h" -#include "application.h" - -// -// Abstract class -// -class REQUEST_HANDLER -{ -public: - REQUEST_HANDLER( - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication - ); - - virtual - REQUEST_NOTIFICATION_STATUS - OnExecuteRequestHandler() = 0; - - virtual - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus - ) = 0; - - virtual - VOID - TerminateRequest( - bool fClientInitiated - ) = 0; - - virtual - ~REQUEST_HANDLER( - VOID - ); - - VOID - ReferenceRequestHandler( - VOID - ) const; - - virtual - VOID - DereferenceRequestHandler( - VOID - ) const; - -protected: - mutable LONG m_cRefs; - IHttpContext* m_pW3Context; - APPLICATION* m_pApplication; - HTTP_MODULE_ID m_pModuleId; -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h deleted file mode 100644 index 140a573f3f5f..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/resources.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define IDS_INVALID_PROPERTY 1000 -#define IDS_SERVER_ERROR 1001 - -#define ASPNETCORE_EVENT_PROVIDER L"IIS AspNetCore Module" -#define ASPNETCORE_IISEXPRESS_EVENT_PROVIDER L"IIS Express AspNetCore Module" - -#define ASPNETCORE_EVENT_MSG_BUFFER_SIZE 256 -#define ASPNETCORE_EVENT_PROCESS_START_SUCCESS_MSG L"Application '%s' started process '%d' successfully and process '%d' is listening on port '%d'." -#define ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG L"Maximum rapid fail count per minute of '%d' exceeded." -#define ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s' at stage '%s', ErrorCode = '0x%x', assigned port %d, retryCounter '%d'." -#define ASPNETCORE_EVENT_PROCESS_START_FAILURE_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s' with multiple retries. The last try of listening port is '%d'. See pervious warnings for details." -#define ASPNETCORE_EVENT_PROCESS_START_STATUS_ERROR_MSG L"Application '%s' with physical root '%s' failed to start process with commandline '%s' , ErrorCode = '0x%x', processId '%d', processStatus '%d'." -#define ASPNETCORE_EVENT_PROCESS_START_PORTSETUP_ERROR_MSG L"Application '%s' with physical root '%s' failed to choose listen port '%d' given port rang '%d - %d', EorrorCode = '0x%x'. If environment variable 'ASPNETCORE_PORT' was set, try removing it such that a random port is selected instead." -#define ASPNETCORE_EVENT_PROCESS_START_WRONGPORT_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but failed to listen on the given port '%d'" -#define ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG L"Application '%s' with physical root '%s' created process with commandline '%s' but either crashed or did not respond or did not listen on the given port '%d', ErrorCode = '0x%x'" -#define ASPNETCORE_EVENT_PROCESS_SHUTDOWN_MSG L"Application '%s' with physical root '%s' shut down process with Id '%d' listening on port '%d'" -#define ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG L"Warning: Could not create stdoutLogFile %s, ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE_MSG L"Failed to gracefully shutdown process '%d'." -#define ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST_MSG L"Sent shutdown HTTP message to process '%d' and received http status '%d'." -#define ASPNETCORE_EVENT_APP_SHUTDOWN_FAILURE_MSG L"Failed to gracefully shutdown application '%s'." -#define ASPNETCORE_EVENT_LOAD_CLR_FALIURE_MSG L"Application '%s' with physical root '%s' failed to load clr and managed application, ErrorCode = '0x%x." -#define ASPNETCORE_EVENT_DUPLICATED_INPROCESS_APP_MSG L"Only one inprocess application is allowed per IIS application pool. Please assign the application '%s' to a different IIS application pool." -#define ASPNETCORE_EVENT_MIXED_HOSTING_MODEL_ERROR_MSG L"Mixed hosting model is not supported. Application '%s' configured with different hostingModel value '%d' other than the one of running application(s)." -#define ASPNETCORE_EVENT_ADD_APPLICATION_ERROR_MSG L"Failed to start application '%s', ErrorCode '0x%x'." -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_STDERR_MSG L"Application '%s' with physical root '%s' hit unexpected managed background thread exit, ErrorCode = '0x%x. First 4KB characters of captured stderr logs on startup:\r\n%s" -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_STDOUT_MSG L"Application '%s' with physical root '%s' hit unexpected managed background thread exit, ErrorCode = '0x%x. Last 4KB characters of captured stdout and stderr logs:\r\n%s" -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG L"Application '%s' with physical root '%s' hit unexpected managed background thread exit, ErrorCode = '0x%x. Please check the stderr logs for more information." -#define ASPNETCORE_EVENT_APP_IN_SHUTDOWN_MSG L"Application shutting down." -#define ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_MSG L"Application '%s' was recycled after detecting the app_offline file." -#define ASPNETCORE_EVENT_RECYCLE_APPOFFLINE_REMOVED_MSG L"App_offline.htm has been removed from the application. Application will be recycled." -#define ASPNETCORE_EVENT_RECYCLE_CONFIGURATION_MSG L"Application '%s' was recycled due to configuration change" -#define ASPNETCORE_EVENT_RECYCLE_FAILURE_CONFIGURATION_MSG L"Failed to recycle application due to a configuration change at '%s'. Recycling worker process." -#define ASPNETCORE_EVENT_MODULE_DISABLED_MSG L"AspNetCore Module is disabled" -#define ASPNETCORE_EVENT_INPROCESS_FULL_FRAMEWORK_APP_MSG L"Application '%s' was compiled for .NET Framework. Please compile for .NET core to run the inprocess application or change the process mode to out of process. ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_PORTABLE_APP_DOTNET_MISSING_MSG L"Could not find dotnet.exe on the system PATH environment variable for portable application '%s'. Check that a valid path to dotnet is on the PATH and the bitness of dotnet matches the bitness of the IIS worker process. ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_HOSTFXR_DIRECTORY_NOT_FOUND_MSG L"Could not find the hostfxr directory '%s' in the dotnet directory. ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_HOSTFXR_DLL_NOT_FOUND_MSG L"Could not find hostfxr.dll in '%s'. ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_APPLICATION_EXE_NOT_FOUND_MSG L"Could not find application executable in '%s'. ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_INPROCESS_THREAD_EXCEPTION_MSG L"Application '%s' with physical root '%s' hit unexpected managed exception, ErrorCode = '0x%x. Please check the stderr logs for more information." -#define ASPNETCORE_EVENT_INVALID_PROCESS_PATH_MSG L"Invalid or unknown processPath provided in web.config: processPath = %s, ErrorCode = '0x%x'." -#define ASPNETCORE_EVENT_INPROCESS_RH_MISSING_MSG L"Could not find the aspnetcorerh.dll for in-process application. Please confirm the Microsoft.AspNetCore.Server.IIS package is referenced in your application." -#define ASPNETCORE_EVENT_OUT_OF_PROCESS_RH_MISSING_MSG L"Could not find the aspnetcorerh.dll for out-of-process application. Please confirm the aspnetcorerh.dll is installed in installed globally for IIS or IISExpress." diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp deleted file mode 100644 index 0351feb240df..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.cpp +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "stdafx.h" diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h deleted file mode 100644 index 69ad058f1f65..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/stdafx.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers - -#include -#include -#include -#include -#include -#include -#include "Shlwapi.h" -#include "..\IISLib\hashtable.h" -#include "..\IISLib\stringu.h" -#include "..\IISLib\stringa.h" -#include "..\IISLib\multisz.h" -#include "..\IISLib\dbgutil.h" -#include "..\IISLib\ahutil.h" -#include "..\IISLib\hashfn.h" -#include "SRWLockWrapper.h" -#include "environmentvariablehash.h" -#include "utility.h" -#include "aspnetcoreconfig.h" -#include "application.h" -#include "requesthandler.h" -#include "fx_ver.h" -#include "hostfxr_utility.h" -#include "resources.h" -#include "aspnetcore_msg.h" - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h deleted file mode 100644 index 5b1f29cad0ce..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/targetver.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.cxx deleted file mode 100644 index cb762f21bc7b..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.cxx +++ /dev/null @@ -1,656 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include"stdafx.h" - -// static -HRESULT -UTILITY::SplitUrl( - PCWSTR pszDestinationUrl, - BOOL *pfSecure, - STRU *pstrDestination, - STRU *pstrUrl -) -/*++ - -Routine Description: - - Split the URL specified for forwarding into its specific components - The format of the URL looks like - http[s]://destination[:port]/path - when port is omitted, the default port for that specific protocol is used - when host is omitted, it gets the same value as the destination - -Arguments: - - pszDestinationUrl - the url to be split up - pfSecure - SSL to be used in forwarding? - pstrDestination - destination - pDestinationPort - port - pstrUrl - URL - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr; - - // - // First determine if the target is secure - // - if (_wcsnicmp(pszDestinationUrl, L"http://", 7) == 0) - { - *pfSecure = FALSE; - pszDestinationUrl += 7; - } - else if (_wcsnicmp(pszDestinationUrl, L"https://", 8) == 0) - { - *pfSecure = TRUE; - pszDestinationUrl += 8; - } - else - { - return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); - } - - if (*pszDestinationUrl == L'\0') - { - return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); - } - - // - // Find the 3rd slash corresponding to the url - // - LPCWSTR pszSlash = wcschr(pszDestinationUrl, L'/'); - if (pszSlash == NULL) - { - if (FAILED(hr = pstrUrl->Copy(L"/", 1)) || - FAILED(hr = pstrDestination->Copy(pszDestinationUrl))) - { - return hr; - } - } - else - { - if (FAILED(hr = pstrUrl->Copy(pszSlash)) || - FAILED(hr = pstrDestination->Copy(pszDestinationUrl, - (DWORD)(pszSlash - pszDestinationUrl)))) - { - return hr; - } - } - - return S_OK; -} - -// Change a hexadecimal digit to its numerical equivalent -#define TOHEX( ch ) \ - ((ch) > L'9' ? \ - (ch) >= L'a' ? \ - (ch) - L'a' + 10 : \ - (ch) - L'A' + 10 \ - : (ch) - L'0') - -// static -HRESULT -UTILITY::UnEscapeUrl( - PCWSTR pszUrl, - DWORD cchUrl, - bool fCopyQuery, - STRA * pstrResult -) -{ - HRESULT hr; - CHAR pch[2]; - pch[1] = '\0'; - DWORD cchStart = 0; - DWORD index = 0; - - while (index < cchUrl && - (fCopyQuery || pszUrl[index] != L'?')) - { - switch (pszUrl[index]) - { - case L'%': - if (iswxdigit(pszUrl[index+1]) && iswxdigit(pszUrl[index+2])) - { - if (index > cchStart && - FAILED(hr = pstrResult->AppendW(pszUrl + cchStart, - index - cchStart))) - { - return hr; - } - cchStart = index+3; - - pch[0] = static_cast(TOHEX(pszUrl[index+1]) * 16 + - TOHEX(pszUrl[index+2])); - if (FAILED(hr = pstrResult->Append(pch, 1))) - { - return hr; - } - index += 3; - break; - } - - __fallthrough; - default: - index++; - } - } - - if (index > cchStart) - { - return pstrResult->AppendW(pszUrl + cchStart, - index - cchStart); - } - - return S_OK; -} - -// static -HRESULT -UTILITY::UnEscapeUrl( - PCWSTR pszUrl, - DWORD cchUrl, - STRU * pstrResult -) -{ - HRESULT hr; - WCHAR pch[2]; - pch[1] = L'\0'; - DWORD cchStart = 0; - DWORD index = 0; - bool fInQuery = FALSE; - - while (index < cchUrl) - { - switch (pszUrl[index]) - { - case L'%': - if (iswxdigit(pszUrl[index+1]) && iswxdigit(pszUrl[index+2])) - { - if (index > cchStart && - FAILED(hr = pstrResult->Append(pszUrl + cchStart, - index - cchStart))) - { - return hr; - } - cchStart = index+3; - - pch[0] = static_cast(TOHEX(pszUrl[index+1]) * 16 + - TOHEX(pszUrl[index+2])); - if (FAILED(hr = pstrResult->Append(pch, 1))) - { - return hr; - } - index += 3; - if (pch[0] == L'?') - { - fInQuery = TRUE; - } - break; - } - - index++; - break; - - case L'/': - if (fInQuery) - { - if (index > cchStart && - FAILED(hr = pstrResult->Append(pszUrl + cchStart, - index - cchStart))) - { - return hr; - } - cchStart = index+1; - - if (FAILED(hr = pstrResult->Append(L"\\", 1))) - { - return hr; - } - index += 1; - break; - } - - __fallthrough; - default: - index++; - } - } - - if (index > cchStart) - { - return pstrResult->Append(pszUrl + cchStart, - index - cchStart); - } - - return S_OK; -} - -HRESULT -UTILITY::EscapeAbsPath( - IHttpRequest * pRequest, - STRU * strEscapedUrl -) -{ - HRESULT hr = S_OK; - STRU strAbsPath; - LPCWSTR pszAbsPath = NULL; - LPCWSTR pszFindStr = NULL; - - hr = strAbsPath.Copy( pRequest->GetRawHttpRequest()->CookedUrl.pAbsPath, - pRequest->GetRawHttpRequest()->CookedUrl.AbsPathLength / sizeof(WCHAR) ); - if(FAILED(hr)) - { - goto Finished; - } - - pszAbsPath = strAbsPath.QueryStr(); - pszFindStr = wcschr(pszAbsPath, L'?'); - - while(pszFindStr != NULL) - { - strEscapedUrl->Append( pszAbsPath, pszFindStr - pszAbsPath); - strEscapedUrl->Append(L"%3F"); - pszAbsPath = pszFindStr + 1; - pszFindStr = wcschr(pszAbsPath, L'?'); - } - - strEscapedUrl->Append(pszAbsPath); - strEscapedUrl->Append(pRequest->GetRawHttpRequest()->CookedUrl.pQueryString, - pRequest->GetRawHttpRequest()->CookedUrl.QueryStringLength / sizeof(WCHAR)); - -Finished: - return hr; -} - -// static -bool -UTILITY::IsValidAttributeNameChar( - WCHAR ch -) -{ - // - // Values based on ASP.NET rendering for cookie names. RFC 2965 is not clear - // what the non-special characters are. - // - return ch == L'\t' || (ch > 31 && ch < 127); -} - -// static -bool -UTILITY::FindInMultiString( - PCWSTR pszMultiString, - PCWSTR pszStringToFind -) -{ - while (*pszMultiString != L'\0') - { - if (wcscmp(pszMultiString, pszStringToFind) == 0) - { - return TRUE; - } - pszMultiString += wcslen(pszMultiString) + 1; - } - - return FALSE; -} - -// static -bool -UTILITY::IsValidQueryStringName( - PCWSTR pszName -) -{ - while (*pszName != L'\0') - { - WCHAR c = *pszName; - if (c != L'-' && c != L'_' && c != L'+' && - c != L'.' && c != L'*' && c != L'$' && c != L'%' && c != L',' && - !iswalnum(c)) - { - return FALSE; - } - pszName++; - } - - return TRUE; -} - -// static -bool -UTILITY::IsValidHeaderName( - PCWSTR pszName -) -{ - while (*pszName != L'\0') - { - WCHAR c = *pszName; - if (c != L'-' && c != L'_' && c != L'+' && - c != L'.' && c != L'*' && c != L'$' && c != L'%' - && !iswalnum(c)) - { - return FALSE; - } - pszName++; - } - - return TRUE; -} - -HRESULT -UTILITY::IsPathUnc( - __in LPCWSTR pszPath, - __out BOOL * pfIsUnc -) -{ - HRESULT hr = S_OK; - STRU strTempPath; - - if ( pszPath == NULL || pfIsUnc == NULL ) - { - hr = E_INVALIDARG; - goto Finished; - } - - hr = MakePathCanonicalizationProof( (LPWSTR) pszPath, &strTempPath ); - if ( FAILED(hr) ) - { - goto Finished; - } - - // - // MakePathCanonicalizationProof will map \\?\UNC, \\.\UNC and \\ to \\?\UNC - // - (*pfIsUnc) = ( _wcsnicmp( strTempPath.QueryStr(), L"\\\\?\\UNC\\", 8 /* sizeof \\?\UNC\ */) == 0 ); - -Finished: - - return hr; -} - -HRESULT -UTILITY::ConvertPathToFullPath( - _In_ LPCWSTR pszPath, - _In_ LPCWSTR pszRootPath, - _Out_ STRU* pStruFullPath -) -{ - HRESULT hr = S_OK; - STRU strFileFullPath; - LPWSTR pszFullPath = NULL; - - // if relative path, prefix with root path and then convert to absolute path. - if ( PathIsRelative(pszPath) ) - { - hr = strFileFullPath.Copy(pszRootPath); - if(FAILED(hr)) - { - goto Finished; - } - - if(!strFileFullPath.EndsWith(L"\\")) - { - hr = strFileFullPath.Append(L"\\"); - if(FAILED(hr)) - { - goto Finished; - } - } - } - - hr = strFileFullPath.Append( pszPath ); - if (FAILED(hr)) - { - goto Finished; - } - - pszFullPath = new WCHAR[ strFileFullPath.QueryCCH() + 1]; - if ( pszFullPath == NULL ) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if(_wfullpath( pszFullPath, - strFileFullPath.QueryStr(), - strFileFullPath.QueryCCH() + 1 ) == NULL ) - { - hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - goto Finished; - } - - // convert to canonical path - hr = MakePathCanonicalizationProof( pszFullPath, pStruFullPath ); - if (FAILED(hr)) - { - goto Finished; - } - -Finished: - - if ( pszFullPath != NULL ) - { - delete[] pszFullPath; - pszFullPath = NULL; - } - - return hr; -} - -HRESULT -UTILITY::EnsureDirectoryPathExist( - _In_ LPCWSTR pszPath -) -{ - HRESULT hr = S_OK; - STRU struPath; - DWORD dwPosition = 0; - BOOL fDone = FALSE; - BOOL fUnc = FALSE; - - struPath.Copy(pszPath); - hr = IsPathUnc(pszPath, &fUnc); - if (FAILED(hr)) - { - goto Finished; - } - if (fUnc) - { - // "\\?\UNC\" - dwPosition = 8; - } - else if (struPath.IndexOf(L'?', 0) != -1) - { - // sceanrio "\\?\" - dwPosition = 4; - } - while (!fDone) - { - dwPosition = struPath.IndexOf(L'\\', dwPosition + 1); - if (dwPosition == -1) - { - // not found '/' - fDone = TRUE; - goto Finished; - } - else if (dwPosition ==0) - { - hr = ERROR_INTERNAL_ERROR; - goto Finished; - } - else if (struPath.QueryStr()[dwPosition-1] == L':') - { - // skip volume case - continue; - } - else - { - struPath.QueryStr()[dwPosition] = L'\0'; - } - - if (!CreateDirectory(struPath.QueryStr(), NULL) && - ERROR_ALREADY_EXISTS != GetLastError()) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - fDone = TRUE; - goto Finished; - } - struPath.QueryStr()[dwPosition] = L'\\'; - } - -Finished: - return hr; -} - -HRESULT -UTILITY::FindHighestDotNetVersion( - _In_ std::vector vFolders, - _Out_ STRU *pstrResult -) -{ - HRESULT hr = S_OK; - fx_ver_t max_ver(-1, -1, -1); - for (const auto& dir : vFolders) - { - fx_ver_t fx_ver(-1, -1, -1); - if (fx_ver_t::parse(dir, &fx_ver, false)) - { - // TODO using max instead of std::max works - max_ver = max(max_ver, fx_ver); - } - } - - hr = pstrResult->Copy(max_ver.as_str().c_str()); - - // we check FAILED(hr) outside of function - return hr; -} - -BOOL -UTILITY::DirectoryExists( - _In_ STRU *pstrPath -) -{ - WIN32_FILE_ATTRIBUTE_DATA data; - - if (pstrPath->IsEmpty()) - { - return false; - } - - return GetFileAttributesExW(pstrPath->QueryStr(), GetFileExInfoStandard, &data); -} - -VOID -UTILITY::FindDotNetFolders( - _In_ PCWSTR pszPath, - _Out_ std::vector *pvFolders -) -{ - HANDLE handle = NULL; - WIN32_FIND_DATAW data = { 0 }; - - handle = FindFirstFileExW(pszPath, FindExInfoStandard, &data, FindExSearchNameMatch, NULL, 0); - if (handle == INVALID_HANDLE_VALUE) - { - return; - } - - do - { - std::wstring folder(data.cFileName); - pvFolders->push_back(folder); - } while (FindNextFileW(handle, &data)); - - FindClose(handle); -} - -BOOL -UTILITY::CheckIfFileExists( - _In_ PCWSTR pszFilePath -) -{ - HANDLE hFileHandle = INVALID_HANDLE_VALUE; - SECURITY_ATTRIBUTES saAttr; - BOOL fFileExists = FALSE; - - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - hFileHandle = CreateFile(pszFilePath, - GENERIC_READ, - FILE_SHARE_READ, - &saAttr, - OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, - NULL); - - fFileExists = hFileHandle != INVALID_HANDLE_VALUE || GetLastError() == ERROR_SHARING_VIOLATION; - - if (fFileExists) - { - CloseHandle(hFileHandle); - } - - return fFileExists; -} - -VOID -UTILITY::LogEvent( - _In_ HANDLE hEventLog, - _In_ WORD dwEventInfoType, - _In_ DWORD dwEventId, - _In_ LPCWSTR pstrMsg -) -{ - if (hEventLog != NULL) - { - ReportEventW(hEventLog, - dwEventInfoType, - 0, // wCategory - dwEventId, - NULL, // lpUserSid - 1, // wNumStrings - 0, // dwDataSize, - &pstrMsg, - NULL // lpRawData - ); - } - - if (dwEventInfoType == EVENTLOG_ERROR_TYPE) - { - fwprintf(stderr, L"ERROR: %s\n", pstrMsg); - } -} - -VOID -UTILITY::LogEventF( - _In_ HANDLE hEventLog, - _In_ WORD dwEventInfoType, - _In_ DWORD dwEventId, - _In_ LPCWSTR pstrMsg, - ... -) -{ - va_list argsList; - va_start(argsList, pstrMsg); - - STACK_STRU ( strEventMsg, 256 ); - - if (SUCCEEDED(strEventMsg.SafeVsnwprintf( - pstrMsg, - argsList))) - { - UTILITY::LogEvent(hEventLog, - dwEventInfoType, - dwEventId, - strEventMsg.QueryStr()); - } - - va_end( argsList ); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.h b/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.h deleted file mode 100644 index 830c2a061323..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/utility.h +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -class UTILITY -{ -public: - - static - HRESULT - SplitUrl( - PCWSTR pszDestinationUrl, - BOOL *pfSecure, - STRU *pstrDestination, - STRU *pstrUrl - ); - - static - HRESULT - UnEscapeUrl( - PCWSTR pszUrl, - DWORD cchUrl, - bool fCopyQuery, - STRA * pstrResult - ); - - static - HRESULT - UnEscapeUrl( - PCWSTR pszUrl, - DWORD cchUrl, - STRU * pstrResult - ); - - static HRESULT - EscapeAbsPath( - IHttpRequest * pRequest, - STRU * strEscapedUrl - ); - - static - bool - IsValidAttributeNameChar( - WCHAR ch - ); - - static - bool - IsValidQueryStringName( - PCWSTR pszName - ); - - static - bool - IsValidHeaderName( - PCWSTR pszName - ); - - static - bool - FindInMultiString( - PCWSTR pszMultiString, - PCWSTR pszStringToFind - ); - - static - HRESULT - IsPathUnc( - __in LPCWSTR pszPath, - __out BOOL * pfIsUnc - ); - - static - HRESULT - ConvertPathToFullPath( - _In_ LPCWSTR pszPath, - _In_ LPCWSTR pszRootPath, - _Out_ STRU* pStrFullPath - ); - - static - HRESULT - EnsureDirectoryPathExist( - _In_ LPCWSTR pszPath - ); - - static - BOOL - DirectoryExists( - _In_ STRU *pstrPath - ); - - static - VOID - FindDotNetFolders( - _In_ PCWSTR pszPath, - _Out_ std::vector *pvFolders - ); - - static - HRESULT - FindHighestDotNetVersion( - _In_ std::vector vFolders, - _Out_ STRU *pstrResult - ); - - static - BOOL - CheckIfFileExists( - PCWSTR pszFilePath - ); - - static - VOID - LogEvent( - _In_ HANDLE hEventLog, - _In_ WORD dwEventInfoType, - _In_ DWORD dwEventId, - _In_ LPCWSTR pstrMsg - ); - - static - VOID - LogEventF( - _In_ HANDLE hEventLog, - _In_ WORD dwEventInfoType, - _In_ DWORD dwEventId, - __in PCWSTR pstrMsg, - ... - ); - -private: - - UTILITY() {} - ~UTILITY() {} -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj deleted file mode 100644 index 7c0cca66266e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/IISLib.vcxproj +++ /dev/null @@ -1,201 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {09D9D1D6-2951-4E14-BC35-76A23CF9391A} - Win32Proj - IISLib - IISLib - 10.0.15063.0 - - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ - - - $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ - - - $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ - - - $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - ProgramDatabase - MultiThreadedDebug - false - true - - - Windows - true - - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - ProgramDatabase - MultiThreadedDebug - false - true - - - Windows - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreaded - false - true - - - Windows - true - true - true - - - - - Level3 - - - MaxSpeed - true - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - MultiThreaded - false - true - - - Windows - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cxx deleted file mode 100644 index d68813edbc92..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.cxx +++ /dev/null @@ -1,443 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.h" - -LONG ALLOC_CACHE_HANDLER::sm_nFillPattern = 0xACA50000; -HANDLE ALLOC_CACHE_HANDLER::sm_hHeap; - -// -// This class is used to implement the free list. We cast the free'd -// memory block to a FREE_LIST_HEADER*. The signature is used to guard against -// double deletion. We also fill memory with a pattern. -// -class FREE_LIST_HEADER -{ -public: - SLIST_ENTRY ListEntry; - DWORD dwSignature; - - enum - { - FREE_SIGNATURE = (('A') | ('C' << 8) | ('a' << 16) | (('$' << 24) | 0x80)), - }; -}; - -ALLOC_CACHE_HANDLER::ALLOC_CACHE_HANDLER( - VOID -) : m_nThreshold(0), - m_cbSize(0), - m_pFreeLists(NULL), - m_nTotal(0) -{ -} - -ALLOC_CACHE_HANDLER::~ALLOC_CACHE_HANDLER( - VOID -) -{ - if (m_pFreeLists != NULL) - { - CleanupLookaside(); - m_pFreeLists->Dispose(); - m_pFreeLists = NULL; - } -} - -HRESULT -ALLOC_CACHE_HANDLER::Initialize( - DWORD cbSize, - LONG nThreshold -) -{ - HRESULT hr = S_OK; - - m_nThreshold = nThreshold; - if ( m_nThreshold > 0xffff) - { - // - // This will be compared against QueryDepthSList return value (USHORT). - // - m_nThreshold = 0xffff; - } - - if ( IsPageheapEnabled() ) - { - // - // Disable acache. - // - m_nThreshold = 0; - } - - // - // Make sure the block is big enough to hold a FREE_LIST_HEADER. - // - m_cbSize = cbSize; - m_cbSize = max(m_cbSize, sizeof(FREE_LIST_HEADER)); - - // - // Round up the block size to a multiple of the size of a LONG (for - // the fill pattern in Free()). - // - m_cbSize = (m_cbSize + sizeof(LONG) - 1) & ~(sizeof(LONG) - 1); - -#if defined(_MSC_VER) && _MSC_VER >= 1600 // VC10 - auto Init = [] (SLIST_HEADER* pHead) - { - InitializeSListHead(pHead); - }; -#else - class Functor - { - public: - void operator()(SLIST_HEADER* pHead) - { - InitializeSListHead(pHead); - } - } Init; -#endif - - hr = PER_CPU::Create(Init, - &m_pFreeLists ); - if (FAILED(hr)) - { - goto Finished; - } - - m_nFillPattern = InterlockedIncrement(&sm_nFillPattern); - -Finished: - - return hr; -} - -// static -HRESULT -ALLOC_CACHE_HANDLER::StaticInitialize( - VOID -) -{ - // - // Since the memory allocated is fixed size, - // a heap is not really needed, allocations can be done - // using VirtualAllocEx[Numa]. For now use Windows Heap. - // - // Be aware that creating one private heap consumes more - // virtual address space for the worker process. - // - sm_hHeap = GetProcessHeap(); - return S_OK; -} - - -// static -VOID -ALLOC_CACHE_HANDLER::StaticTerminate( - VOID -) -{ - sm_hHeap = NULL; -} - -VOID -ALLOC_CACHE_HANDLER::CleanupLookaside( - VOID -) -/*++ - Description: - This function cleans up the lookaside list by removing storage space. - - Arguments: - None. - - Returns: - None ---*/ -{ - // - // Free up all the entries in the list. - // Don't use InterlockedFlushSList, in order to work - // memory must be 16 bytes aligned and currently it is 64. - // - -#if defined(_MSC_VER) && _MSC_VER >= 1600 // VC10 - auto Predicate = [=] (SLIST_HEADER * pListHeader) - { - PSLIST_ENTRY pl; - LONG NodesToDelete = QueryDepthSList( pListHeader ); - - pl = InterlockedPopEntrySList( pListHeader ); - while ( pl != NULL && --NodesToDelete >= 0 ) - { - InterlockedDecrement( &m_nTotal); - - ::HeapFree( sm_hHeap, 0, pl ); - - pl = InterlockedPopEntrySList(pListHeader); - } - }; -#else - class Functor - { - public: - explicit Functor(ALLOC_CACHE_HANDLER * pThis) : _pThis(pThis) - { - } - void operator()(SLIST_HEADER * pListHeader) - { - PSLIST_ENTRY pl; - LONG NodesToDelete = QueryDepthSList( pListHeader ); - - pl = InterlockedPopEntrySList( pListHeader ); - while ( pl != NULL && --NodesToDelete >= 0 ) - { - InterlockedDecrement( &_pThis->m_nTotal); - - ::HeapFree( sm_hHeap, 0, pl ); - - pl = InterlockedPopEntrySList(pListHeader); - } - } - private: - ALLOC_CACHE_HANDLER * _pThis; - } Predicate(this); -#endif - - m_pFreeLists ->ForEach(Predicate); -} - -LPVOID -ALLOC_CACHE_HANDLER::Alloc( - VOID -) -{ - LPVOID pMemory = NULL; - - if ( m_nThreshold > 0 ) - { - SLIST_HEADER * pListHeader = m_pFreeLists ->GetLocal(); - pMemory = (LPVOID) InterlockedPopEntrySList(pListHeader); // get the real object - - if (pMemory != NULL) - { - FREE_LIST_HEADER* pfl = (FREE_LIST_HEADER*) pMemory; - // - // If the signature is wrong then somebody's been scribbling - // on memory that they've freed. - // - DBG_ASSERT(pfl->dwSignature == FREE_LIST_HEADER::FREE_SIGNATURE); - } - } - - if ( pMemory == NULL ) - { - // - // No free entry. Need to alloc a new object. - // - pMemory = (LPVOID) ::HeapAlloc( sm_hHeap, - 0, - m_cbSize ); - - if ( pMemory != NULL ) - { - // - // Update counters. - // - m_nTotal++; - } - } - - if ( pMemory == NULL ) - { - SetLastError( ERROR_NOT_ENOUGH_MEMORY ); - } - else - { - FREE_LIST_HEADER* pfl = (FREE_LIST_HEADER*) pMemory; - pfl->dwSignature = 0; // clear; just in case caller never overwrites - } - - return pMemory; -} - -VOID -ALLOC_CACHE_HANDLER::Free( - __in LPVOID pMemory -) -{ - // - // Assume that this is allocated using the Alloc() function. - // - DBG_ASSERT(NULL != pMemory); - - // - // Use a signature to check against double deletions. - // - FREE_LIST_HEADER* pfl = (FREE_LIST_HEADER*) pMemory; - DBG_ASSERT(pfl->dwSignature != FREE_LIST_HEADER::FREE_SIGNATURE); - - // - // Start filling the space beyond the portion overlaid by the initial - // FREE_LIST_HEADER. Fill at most 6 DWORDS. - // - LONG* pl = (LONG*) (pfl+1); - - for (LONG cb = (LONG)min(6 * sizeof(LONG),m_cbSize) - sizeof(FREE_LIST_HEADER); - cb > 0; - cb -= sizeof(LONG)) - { - *pl++ = m_nFillPattern; - } - - // - // Now, set the signature. - // - pfl->dwSignature = FREE_LIST_HEADER::FREE_SIGNATURE; - - // - // Store the items in the alloc cache. - // - SLIST_HEADER * pListHeader = m_pFreeLists ->GetLocal(); - - if ( QueryDepthSList(pListHeader) >= m_nThreshold ) - { - // - // Threshold for free entries is exceeded. Free the object to - // process pool. - // - ::HeapFree( sm_hHeap, 0, pMemory ); - } - else - { - // - // Store the given pointer in the single linear list - // - InterlockedPushEntrySList(pListHeader, &pfl->ListEntry); - } -} - -DWORD -ALLOC_CACHE_HANDLER::QueryDepthForAllSLists( - VOID -) -/*++ - -Description: - - Aggregates the total count of elements in all lists. - -Arguments: - - None. - -Return Value: - - Total count (snapshot). - ---*/ -{ - DWORD Count = 0; - - if (m_pFreeLists != NULL) - { -#if defined(_MSC_VER) && _MSC_VER >= 1600 // VC10 - auto Predicate = [&Count] (SLIST_HEADER * pListHeader) - { - Count += QueryDepthSList(pListHeader); - }; -#else - class Functor - { - public: - explicit Functor(DWORD& Count) : _Count(Count) - { - } - void operator()(SLIST_HEADER * pListHeader) - { - _Count += QueryDepthSList(pListHeader); - } - private: - DWORD& _Count; - } Predicate(Count); -#endif - // - // [&Count] means that the method can modify local variable Count. - // - m_pFreeLists ->ForEach(Predicate); - } - - return Count; -} - -// static -BOOL -ALLOC_CACHE_HANDLER::IsPageheapEnabled( - VOID -) -{ - BOOL fRet = FALSE; - BOOL fLockedHeap = FALSE; - HMODULE hModule = NULL; - HANDLE hHeap = NULL; - PROCESS_HEAP_ENTRY heapEntry = {0}; - - // - // If verifier.dll is loaded - we are running under app verifier == pageheap is enabled - // - hModule = GetModuleHandle( L"verifier.dll" ); - if ( hModule != NULL ) - { - hModule = NULL; - fRet = TRUE; - goto Finished; - } - - // - // Create a heap for calling heapwalk - // otherwise HeapWalk turns off lookasides for a useful heap - // - hHeap = ::HeapCreate( 0, 0, 0 ); - if ( hHeap == NULL ) - { - fRet = FALSE; - goto Finished; - } - - fRet = ::HeapLock( hHeap ); - if ( !fRet ) - { - goto Finished; - } - fLockedHeap = TRUE; - - // - // If HeapWalk is unsupported -> then running page heap - // - fRet = ::HeapWalk( hHeap, &heapEntry ); - if ( !fRet ) - { - if ( GetLastError() == ERROR_INVALID_FUNCTION ) - { - fRet = TRUE; - goto Finished; - } - } - - fRet = FALSE; - -Finished: - - if ( fLockedHeap ) - { - fLockedHeap = FALSE; - DBG_REQUIRE( ::HeapUnlock( hHeap ) ); - } - - if ( hHeap ) - { - DBG_REQUIRE( ::HeapDestroy( hHeap ) ); - hHeap = NULL; - } - - return fRet; -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h deleted file mode 100644 index 048df2b507d6..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/acache.h +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "percpu.h" - -class ALLOC_CACHE_HANDLER -{ -public: - - ALLOC_CACHE_HANDLER( - VOID - ); - - ~ALLOC_CACHE_HANDLER( - VOID - ); - - HRESULT - Initialize( - DWORD cbSize, - LONG nThreshold - ); - - LPVOID - Alloc( - VOID - ); - - VOID - Free( - __in LPVOID pMemory - ); - - -private: - - VOID - CleanupLookaside( - VOID - ); - - DWORD - QueryDepthForAllSLists( - VOID - ); - - LONG m_nThreshold; - DWORD m_cbSize; - - PER_CPU * m_pFreeLists; - - // - // Total heap allocations done over the lifetime. - // Note that this is not interlocked, it is just a hint for debugging. - // - volatile LONG m_nTotal; - - LONG m_nFillPattern; - -public: - - static - HRESULT - StaticInitialize( - VOID - ); - - static - VOID - StaticTerminate( - VOID - ); - - static - BOOL - IsPageheapEnabled(); - -private: - - static LONG sm_nFillPattern; - static HANDLE sm_hHeap; -}; - - -// You can use ALLOC_CACHE_HANDLER as a per-class allocator -// in your C++ classes. Add the following to your class definition: -// -// protected: -// static ALLOC_CACHE_HANDLER* sm_palloc; -// public: -// static void* operator new(size_t s) -// { -// IRTLASSERT(s == sizeof(C)); -// IRTLASSERT(sm_palloc != NULL); -// return sm_palloc->Alloc(); -// } -// static void operator delete(void* pv) -// { -// IRTLASSERT(pv != NULL); -// if (sm_palloc != NULL) -// sm_palloc->Free(pv); -// } -// -// Obviously, you must initialize sm_palloc before you can allocate -// any objects of this class. -// -// Note that if you derive a class from this base class, the derived class -// must also provide its own operator new and operator delete. If not, the -// base class's allocator will be called, but the size of the derived -// object will almost certainly be larger than that of the base object. -// Furthermore, the allocator will not be used for arrays of objects -// (override operator new[] and operator delete[]), but this is a -// harder problem since the allocator works with one fixed size. diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp deleted file mode 100644 index dae2027f3356..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.cpp +++ /dev/null @@ -1,1671 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.h" - -HRESULT -SetElementProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - IN CONST VARIANT * varPropValue - ) -{ - HRESULT hr = NOERROR; - - CComPtr pPropElement; - - BSTR bstrPropName = SysAllocString( szPropName ); - - if( !bstrPropName ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR( hr ); - goto exit; - } - - hr = pElement->GetPropertyByName( bstrPropName, - &pPropElement ); - if( FAILED(hr) ) - { - DBGERROR_HR( hr ); - goto exit; - } - - hr = pPropElement->put_Value( *varPropValue ); - if( FAILED(hr) ) - { - DBGERROR_HR( hr ); - goto exit; - } - -exit: - - if( bstrPropName ) - { - SysFreeString( bstrPropName ); - bstrPropName = NULL; - } - - return hr; -} - -HRESULT -SetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - IN CONST WCHAR * szPropValue - ) -{ - HRESULT hr; - VARIANT varPropValue; - VariantInit(&varPropValue); - - hr = VariantAssign(&varPropValue, szPropValue); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = SetElementProperty(pElement, szPropName, &varPropValue); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - -exit: - - VariantClear(&varPropValue); - return hr; -} - -HRESULT -GetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - OUT BSTR * pbstrPropValue - ) -{ - HRESULT hr = S_OK; - BSTR bstrPropName = SysAllocString( szPropName ); - IAppHostProperty* pProperty = NULL; - - *pbstrPropValue = NULL; - - if (!bstrPropName) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR( hr ); - goto exit; - } - - hr = pElement->GetPropertyByName( bstrPropName, &pProperty ); - if (FAILED(hr)) - { - DBGERROR_HR( hr ); - goto exit; - } - - hr = pProperty->get_StringValue( pbstrPropValue ); - if (FAILED(hr)) - { - DBGERROR_HR( hr ); - goto exit; - } - -exit: - - if (pProperty) - { - pProperty->Release(); - } - - if (bstrPropName) - { - SysFreeString( bstrPropName ); - } - - return hr; -} - - -HRESULT -GetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - OUT STRU * pstrPropValue - ) -{ - HRESULT hr = S_OK; - BSTR bstrPropName = SysAllocString( szPropName ); - IAppHostProperty* pProperty = NULL; - BSTR bstrPropValue = NULL; - - if (!bstrPropName) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR( hr ); - goto exit; - } - - hr = pElement->GetPropertyByName( bstrPropName, &pProperty ); - if (FAILED(hr)) - { - DBGERROR_HR( hr ); - goto exit; - } - - hr = pProperty->get_StringValue( &bstrPropValue ); - if (FAILED(hr)) - { - DBGERROR_HR( hr ); - goto exit; - } - - hr = pstrPropValue->Copy(bstrPropValue); - if (FAILED(hr)) - { - DBGERROR_HR( hr ); - goto exit; - } - -exit: - - if (pProperty) - { - pProperty->Release(); - } - - if (bstrPropValue) - { - SysFreeString( bstrPropValue ); - } - - if (bstrPropName) - { - SysFreeString( bstrPropName ); - } - - return hr; -} - -HRESULT -GetElementChildByName( - IN IAppHostElement * pElement, - IN LPCWSTR pszElementName, - OUT IAppHostElement ** ppChildElement -) -{ - BSTR bstrElementName = SysAllocString(pszElementName); - if (bstrElementName == NULL) - { - return E_OUTOFMEMORY; - } - HRESULT hr = pElement->GetElementByName(bstrElementName, - ppChildElement); - SysFreeString(bstrElementName); - return hr; -} - -HRESULT -GetElementBoolProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT bool * pBool -) -{ - BOOL fValue; - HRESULT hr = GetElementBoolProperty(pElement, - pszPropertyName, - &fValue); - if (SUCCEEDED(hr)) - { - *pBool = !!fValue; - } - return hr; -} - -HRESULT -GetElementBoolProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT BOOL * pBool -) -{ - HRESULT hr = S_OK; - BSTR bstrPropertyName = NULL; - IAppHostProperty * pProperty = NULL; - VARIANT varValue; - - VariantInit( &varValue ); - - bstrPropertyName = SysAllocString( pszPropertyName ); - if ( bstrPropertyName == NULL ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - // Now ask for the property and if it succeeds it is returned directly back. - hr = pElement->GetPropertyByName( bstrPropertyName, &pProperty ); - if ( FAILED ( hr ) ) - { - goto exit; - } - - // Now let's get the property and then extract it from the Variant. - hr = pProperty->get_Value( &varValue ); - if ( FAILED ( hr ) ) - { - goto exit; - } - - hr = VariantChangeType( &varValue, &varValue, 0, VT_BOOL ); - if ( FAILED ( hr ) ) - { - goto exit; - } - - // extract the value - *pBool = ( V_BOOL( &varValue ) == VARIANT_TRUE ); - -exit: - - VariantClear( &varValue ); - - if ( bstrPropertyName != NULL ) - { - SysFreeString( bstrPropertyName ); - bstrPropertyName = NULL; - } - - if ( pProperty != NULL ) - { - pProperty->Release(); - pProperty = NULL; - } - - return hr; - -} - -HRESULT -GetElementDWORDProperty( - IN IAppHostElement * pSitesCollectionEntry, - IN LPCWSTR pwszName, - OUT DWORD * pdwValue -) -{ - HRESULT hr = S_OK; - IAppHostProperty * pProperty = NULL; - BSTR bstrName = NULL; - VARIANT varValue; - - VariantInit( &varValue ); - - bstrName = SysAllocString( pwszName ); - if ( bstrName == NULL ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto error; - } - - hr = pSitesCollectionEntry->GetPropertyByName( bstrName, - &pProperty ); - if ( FAILED ( hr ) ) - { - goto error; - } - - hr = pProperty->get_Value( &varValue ); - if ( FAILED ( hr ) ) - { - goto error; - } - - hr = VariantChangeType( &varValue, &varValue, 0, VT_UI4 ); - if ( FAILED ( hr ) ) - { - goto error; - } - - // extract the value - *pdwValue = varValue.ulVal; - -error: - - VariantClear( &varValue ); - - if ( pProperty != NULL ) - { - pProperty->Release(); - pProperty = NULL; - } - - if ( bstrName != NULL ) - { - SysFreeString( bstrName ); - bstrName = NULL; - } - - return hr; -} - -HRESULT -GetElementLONGLONGProperty( - IN IAppHostElement * pSitesCollectionEntry, - IN LPCWSTR pwszName, - OUT LONGLONG * pllValue -) -{ - HRESULT hr = S_OK; - IAppHostProperty * pProperty = NULL; - BSTR bstrName = NULL; - VARIANT varValue; - - VariantInit( &varValue ); - - bstrName = SysAllocString( pwszName ); - if ( bstrName == NULL ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto error; - } - - hr = pSitesCollectionEntry->GetPropertyByName( bstrName, - &pProperty ); - if ( FAILED ( hr ) ) - { - goto error; - } - - hr = pProperty->get_Value( &varValue ); - if ( FAILED ( hr ) ) - { - goto error; - } - - hr = VariantChangeType( &varValue, &varValue, 0, VT_I8 ); - if ( FAILED ( hr ) ) - { - goto error; - } - - // extract the value - *pllValue = varValue.ulVal; - -error: - - VariantClear( &varValue ); - - if ( pProperty != NULL ) - { - pProperty->Release(); - pProperty = NULL; - } - - if ( bstrName != NULL ) - { - SysFreeString( bstrName ); - bstrName = NULL; - } - - return hr; -} - -HRESULT -GetElementRawTimeSpanProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT ULONGLONG * pulonglong -) -{ - HRESULT hr = S_OK; - BSTR bstrPropertyName = NULL; - IAppHostProperty * pProperty = NULL; - VARIANT varValue; - - VariantInit( &varValue ); - - bstrPropertyName = SysAllocString( pszPropertyName ); - if ( bstrPropertyName == NULL ) - { - hr = HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY ); - goto Finished; - } - - // Now ask for the property and if it succeeds it is returned directly back - hr = pElement->GetPropertyByName( bstrPropertyName, &pProperty ); - if ( FAILED ( hr ) ) - { - goto Finished; - } - - // Now let's get the property and then extract it from the Variant. - hr = pProperty->get_Value( &varValue ); - if ( FAILED ( hr ) ) - { - goto Finished; - } - - hr = VariantChangeType( &varValue, &varValue, 0, VT_UI8 ); - if ( FAILED ( hr ) ) - { - goto Finished; - } - - // extract the value - *pulonglong = varValue.ullVal; - - -Finished: - - VariantClear( &varValue ); - - if ( bstrPropertyName != NULL ) - { - SysFreeString( bstrPropertyName ); - bstrPropertyName = NULL; - } - - if ( pProperty != NULL ) - { - pProperty->Release(); - pProperty = NULL; - } - - return hr; - -} // end of Config_GetRawTimeSpanProperty - -HRESULT -DeleteElementFromCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - BOOL * pfDeleted - ) -{ - HRESULT hr = NOERROR; - ULONG index; - - VARIANT varIndex; - VariantInit( &varIndex ); - - *pfDeleted = FALSE; - - hr = FindElementInCollection( - pCollection, - szKeyName, - szKeyValue, - BehaviorFlags, - &index - ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - if (hr == S_FALSE) - { - // - // Not found. - // - - goto exit; - } - - varIndex.vt = VT_UI4; - varIndex.ulVal = index; - - hr = pCollection->DeleteElement( varIndex ); - - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - *pfDeleted = TRUE; - -exit: - - return hr; -} - -HRESULT -DeleteAllElementsFromCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - UINT * pNumDeleted - ) -{ - HRESULT hr = S_OK; - UINT numDeleted = 0; - BOOL fDeleted = TRUE; - - while (fDeleted) - { - hr = DeleteElementFromCollection( - pCollection, - szKeyName, - szKeyValue, - BehaviorFlags, - &fDeleted - ); - - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - break; - } - - if (fDeleted) - { - numDeleted++; - } - } - - *pNumDeleted = numDeleted; - return hr; -} - -BOOL -FindCompareCaseSensitive( - CONST WCHAR * szLookupValue, - CONST WCHAR * szKeyValue - ) -{ - return !wcscmp(szLookupValue, szKeyValue); -} - -BOOL -FindCompareCaseInsensitive( - CONST WCHAR * szLookupValue, - CONST WCHAR * szKeyValue - ) -{ - return !_wcsicmp(szLookupValue, szKeyValue); -} - -typedef -BOOL -(*PFN_FIND_COMPARE_PROC)( - CONST WCHAR *szLookupValue, - CONST WCHAR *szKeyValue - ); - -HRESULT -FindElementInCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - OUT ULONG * pIndex - ) -{ - HRESULT hr = NOERROR; - - CComPtr pElement; - CComPtr pKeyProperty; - - VARIANT varIndex; - VariantInit( &varIndex ); - - VARIANT varKeyValue; - VariantInit( &varKeyValue ); - - DWORD count; - DWORD i; - - BSTR bstrKeyName = NULL; - PFN_FIND_COMPARE_PROC compareProc; - - compareProc = (BehaviorFlags & FIND_ELEMENT_CASE_INSENSITIVE) - ? &FindCompareCaseInsensitive - : &FindCompareCaseSensitive; - - bstrKeyName = SysAllocString( szKeyName ); - if( !bstrKeyName ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - hr = pCollection->get_Count( &count ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - for( i = 0; i < count; i++ ) - { - varIndex.vt = VT_UI4; - varIndex.ulVal = i; - - hr = pCollection->get_Item( varIndex, - &pElement ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto tryNext; - } - - hr = pElement->GetPropertyByName( bstrKeyName, - &pKeyProperty ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto tryNext; - } - - hr = pKeyProperty->get_Value( &varKeyValue ); - - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto tryNext; - } - - if ((compareProc)(szKeyValue, varKeyValue.bstrVal)) - { - *pIndex = i; - break; - } - -tryNext: - - pElement.Release(); - pKeyProperty.Release(); - - VariantClear( &varKeyValue ); - } - - if (i >= count) - { - hr = S_FALSE; - } - -exit: - - SysFreeString( bstrKeyName ); - VariantClear( &varKeyValue ); - - return hr; -} - -HRESULT -VariantAssign( - IN OUT VARIANT * pv, - IN CONST WCHAR * sz - ) -{ - if( !pv || !sz ) - { - return E_INVALIDARG; - } - - HRESULT hr = NOERROR; - - BSTR bstr = SysAllocString( sz ); - if( !bstr ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR( hr ); - goto exit; - } - - hr = VariantClear( pv ); - if( FAILED(hr) ) - { - DBGERROR_HR( hr ); - goto exit; - } - - pv->vt = VT_BSTR; - pv->bstrVal = bstr; - bstr = NULL; - -exit: - - SysFreeString( bstr ); - - return hr; -} - -HRESULT -GetLocationFromFile( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szLocationPath, - OUT IAppHostConfigLocation ** ppLocation, - OUT BOOL * pFound - ) -{ - HRESULT hr = NOERROR; - - CComPtr pLocationCollection; - CComPtr pLocation; - - BSTR bstrLocationPath = NULL; - - *ppLocation = NULL; - *pFound = FALSE; - - hr = GetLocationCollection( pAdminMgr, - szConfigPath, - &pLocationCollection ); - - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - DWORD count; - DWORD i; - VARIANT varIndex; - VariantInit( &varIndex ); - - hr = pLocationCollection->get_Count( &count ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - for( i = 0; i < count; i++ ) - { - varIndex.vt = VT_UI4; - varIndex.ulVal = i; - - hr = pLocationCollection->get_Item( varIndex, - &pLocation ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pLocation->get_Path( &bstrLocationPath ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - if( 0 == wcscmp ( szLocationPath, bstrLocationPath ) ) - { - *pFound = TRUE; - *ppLocation = pLocation.Detach(); - break; - } - - - pLocation.Release(); - - SysFreeString( bstrLocationPath ); - bstrLocationPath = NULL; - } - -exit: - - SysFreeString( bstrLocationPath ); - - return hr; -} - -HRESULT -GetSectionFromLocation( - IN IAppHostConfigLocation * pLocation, - IN CONST WCHAR * szSectionName, - OUT IAppHostElement ** ppSectionElement, - OUT BOOL * pFound - ) -{ - HRESULT hr = NOERROR; - - CComPtr pSectionElement; - - DWORD count; - DWORD i; - - VARIANT varIndex; - VariantInit( &varIndex ); - - BSTR bstrSectionName = NULL; - - *pFound = FALSE; - *ppSectionElement = NULL; - - hr = pLocation->get_Count( &count ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - for( i = 0; i < count; i++ ) - { - varIndex.vt = VT_UI4; - varIndex.ulVal = i; - - - hr = pLocation->get_Item( varIndex, - &pSectionElement ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pSectionElement->get_Name( &bstrSectionName ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - if( 0 == wcscmp ( szSectionName, bstrSectionName ) ) - { - *pFound = TRUE; - *ppSectionElement = pSectionElement.Detach(); - break; - } - - pSectionElement.Release(); - - SysFreeString( bstrSectionName ); - bstrSectionName = NULL; - } - -exit: - - SysFreeString( bstrSectionName ); - - return hr; -} - - -HRESULT -GetAdminElement( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName, - OUT IAppHostElement ** pElement -) -{ - HRESULT hr = S_OK; - BSTR bstrConfigPath = NULL; - BSTR bstrElementName = NULL; - - bstrConfigPath = SysAllocString(szConfigPath); - bstrElementName = SysAllocString(szElementName); - - if (bstrConfigPath == NULL || bstrElementName == NULL) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - hr = pAdminMgr->GetAdminSection( bstrElementName, - bstrConfigPath, - pElement ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - -exit: - - if ( bstrElementName != NULL ) - { - SysFreeString(bstrElementName); - bstrElementName = NULL; - } - if ( bstrConfigPath != NULL ) - { - SysFreeString(bstrConfigPath); - bstrConfigPath = NULL; - } - - return hr; -} - - -HRESULT -ClearAdminElement( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ) -{ - HRESULT hr; - CComPtr pElement; - - hr = GetAdminElement( - pAdminMgr, - szConfigPath, - szElementName, - &pElement - ); - - if (FAILED(hr)) - { - if (hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) - { - hr = S_OK; - } - else - { - DBGERROR_HR(hr); - } - - goto exit; - } - - hr = pElement->Clear(); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - -exit: - - return hr; -} - - -HRESULT -ClearElementFromAllSites( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ) -{ - HRESULT hr; - CComPtr pSitesCollection; - CComPtr pSiteElement; - CComPtr pChildCollection; - ENUM_INDEX index; - BOOL found; - - // - // Enumerate the sites, remove the specified elements. - // - - hr = GetSitesCollection( - pAdminMgr, - szConfigPath, - &pSitesCollection - ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - for (hr = FindFirstElement(pSitesCollection, &index, &pSiteElement) ; - SUCCEEDED(hr) ; - hr = FindNextElement(pSitesCollection, &index, &pSiteElement)) - { - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - hr = pSiteElement->get_ChildElements(&pChildCollection); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - if (pChildCollection) - { - hr = ClearChildElementsByName( - pChildCollection, - szElementName, - &found - ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - } - - pSiteElement.Release(); - } - -exit: - - return hr; - -} - - -HRESULT -ClearElementFromAllLocations( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ) -{ - HRESULT hr; - CComPtr pLocationCollection; - CComPtr pLocation; - CComPtr pChildCollection; - ENUM_INDEX index; - - // - // Enum the tags, remove the specified elements. - // - - hr = GetLocationCollection( - pAdminMgr, - szConfigPath, - &pLocationCollection - ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - for (hr = FindFirstLocation(pLocationCollection, &index, &pLocation) ; - SUCCEEDED(hr) ; - hr = FindNextLocation(pLocationCollection, &index, &pLocation)) - { - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - hr = ClearLocationElements(pLocation, szElementName); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - pLocation.Release(); - } - -exit: - - return hr; - -} - -HRESULT -ClearLocationElements( - IN IAppHostConfigLocation * pLocation, - IN CONST WCHAR * szElementName - ) -{ - HRESULT hr; - CComPtr pElement; - ENUM_INDEX index; - BOOL matched; - - for (hr = FindFirstLocationElement(pLocation, &index, &pElement) ; - SUCCEEDED(hr) ; - hr = FindNextLocationElement(pLocation, &index, &pElement)) - { - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - hr = CompareElementName(pElement, szElementName, &matched); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - if (matched) - { - pElement->Clear(); - } - - pElement.Release(); - } - -exit: - - return hr; -} - -HRESULT -CompareElementName( - IN IAppHostElement * pElement, - IN CONST WCHAR * szNameToMatch, - OUT BOOL * pMatched - ) -{ - HRESULT hr; - BSTR bstrElementName = NULL; - - *pMatched = FALSE; // until proven otherwise - - hr = pElement->get_Name(&bstrElementName); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - if( 0 == wcscmp ( szNameToMatch, bstrElementName ) ) - { - *pMatched = TRUE; - } - -exit: - - SysFreeString(bstrElementName); - return hr; -} - - -HRESULT -ClearChildElementsByName( - IN IAppHostChildElementCollection * pCollection, - IN CONST WCHAR * szElementName, - OUT BOOL * pFound - ) -{ - HRESULT hr; - CComPtr pElement; - ENUM_INDEX index; - BOOL matched; - - *pFound = FALSE; - - for (hr = FindFirstChildElement(pCollection, &index, &pElement) ; - SUCCEEDED(hr) ; - hr = FindNextChildElement(pCollection, &index, &pElement)) - { - if (hr == S_FALSE) - { - hr = S_OK; - break; - } - - hr = CompareElementName(pElement, szElementName, &matched); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - if (matched) - { - hr = pElement->Clear(); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - *pFound = TRUE; - } - - pElement.Release(); - } - -exit: - - return hr; -} - - -HRESULT -GetSitesCollection( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - OUT IAppHostElementCollection ** pSitesCollection - ) -{ - HRESULT hr; - CComPtr pSitesElement; - BSTR bstrConfigPath; - BSTR bstrSitesSectionName; - - bstrConfigPath = SysAllocString(szConfigPath); - bstrSitesSectionName = SysAllocString(L"system.applicationHost/sites"); - *pSitesCollection = NULL; - - if (bstrConfigPath == NULL || bstrSitesSectionName == NULL) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - // - // Chase down the sites collection. - // - - hr = pAdminMgr->GetAdminSection( bstrSitesSectionName, - bstrConfigPath, - &pSitesElement ); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pSitesElement->get_Collection(pSitesCollection); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - -exit: - - SysFreeString(bstrSitesSectionName); - SysFreeString(bstrConfigPath); - return hr; -} - - -HRESULT -GetLocationCollection( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - OUT IAppHostConfigLocationCollection ** pLocationCollection - ) -{ - HRESULT hr; - BSTR bstrConfigPath; - CComPtr pConfigMgr; - CComPtr pConfigFile; - - bstrConfigPath = SysAllocString(szConfigPath); - *pLocationCollection = NULL; - - if (bstrConfigPath == NULL) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - hr = pAdminMgr->get_ConfigManager(&pConfigMgr); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pConfigMgr->GetConfigFile(bstrConfigPath, &pConfigFile); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pConfigFile->get_Locations(pLocationCollection); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - goto exit; - } - -exit: - - SysFreeString(bstrConfigPath); - return hr; -} - - -HRESULT -FindFirstElement( - IN IAppHostElementCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - hr = pCollection->get_Count(&pIndex->Count); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - return hr; - } - - VariantInit(&pIndex->Index); - pIndex->Index.vt = VT_UI4; - pIndex->Index.ulVal = 0; - - return FindNextElement(pCollection, pIndex, pElement); -} - -HRESULT -FindNextElement( - IN IAppHostElementCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - *pElement = NULL; - - if (pIndex->Index.ulVal >= pIndex->Count) - { - return S_FALSE; - } - - hr = pCollection->get_Item(pIndex->Index, pElement); - - if (SUCCEEDED(hr)) - { - pIndex->Index.ulVal++; - } - - return hr; -} - -HRESULT -FindFirstChildElement( - IN IAppHostChildElementCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - hr = pCollection->get_Count(&pIndex->Count); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - return hr; - } - - VariantInit(&pIndex->Index); - pIndex->Index.vt = VT_UI4; - pIndex->Index.ulVal = 0; - - return FindNextChildElement(pCollection, pIndex, pElement); -} - -HRESULT -FindNextChildElement( - IN IAppHostChildElementCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - *pElement = NULL; - - if (pIndex->Index.ulVal >= pIndex->Count) - { - return S_FALSE; - } - - hr = pCollection->get_Item(pIndex->Index, pElement); - - if (SUCCEEDED(hr)) - { - pIndex->Index.ulVal++; - } - - return hr; -} - -HRESULT -FindFirstLocation( - IN IAppHostConfigLocationCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostConfigLocation ** pLocation - ) -{ - HRESULT hr; - - hr = pCollection->get_Count(&pIndex->Count); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - return hr; - } - - VariantInit(&pIndex->Index); - pIndex->Index.vt = VT_UI4; - pIndex->Index.ulVal = 0; - - return FindNextLocation(pCollection, pIndex, pLocation); -} - -HRESULT -FindNextLocation( - IN IAppHostConfigLocationCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostConfigLocation ** pLocation - ) -{ - HRESULT hr; - - *pLocation = NULL; - - if (pIndex->Index.ulVal >= pIndex->Count) - { - return S_FALSE; - } - - hr = pCollection->get_Item(pIndex->Index, pLocation); - - if (SUCCEEDED(hr)) - { - pIndex->Index.ulVal++; - } - - return hr; -} - -HRESULT -FindFirstLocationElement( - IN IAppHostConfigLocation * pLocation, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - hr = pLocation->get_Count(&pIndex->Count); - - if (FAILED(hr)) - { - DBGERROR_HR(hr); - return hr; - } - - VariantInit(&pIndex->Index); - pIndex->Index.vt = VT_UI4; - pIndex->Index.ulVal = 0; - - return FindNextLocationElement(pLocation, pIndex, pElement); -} - -HRESULT -FindNextLocationElement( - IN IAppHostConfigLocation * pLocation, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ) -{ - HRESULT hr; - - *pElement = NULL; - - if (pIndex->Index.ulVal >= pIndex->Count) - { - return S_FALSE; - } - - hr = pLocation->get_Item(pIndex->Index, pElement); - - if (SUCCEEDED(hr)) - { - pIndex->Index.ulVal++; - } - - return hr; -} - -HRESULT -GetSharedConfigEnabled( - BOOL * pfIsSharedConfig -) -/*++ - -Routine Description: - Search the configuration for the shared configuration property. - -Arguments: - - pfIsSharedConfig - true if shared configuration is enabled - -Return Value: - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - IAppHostAdminManager *pAdminManager = NULL; - - BSTR bstrSectionName = NULL; - BSTR bstrConfigPath = NULL; - - IAppHostElement * pConfigRedirSection = NULL; - - - bstrSectionName = SysAllocString( L"configurationRedirection" ); - - if ( bstrSectionName == NULL ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - bstrConfigPath = SysAllocString( L"MACHINE/REDIRECTION" ); - if ( bstrConfigPath == NULL ) - { - hr = E_OUTOFMEMORY; - DBGERROR_HR(hr); - goto exit; - } - - hr = CoCreateInstance( CLSID_AppHostAdminManager, - NULL, - CLSCTX_INPROC_SERVER, - IID_IAppHostAdminManager, - (VOID **)&pAdminManager ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = pAdminManager->GetAdminSection( bstrSectionName, - bstrConfigPath, - &pConfigRedirSection ); - if( FAILED(hr) ) - { - DBGERROR_HR(hr); - goto exit; - } - - hr = GetElementBoolProperty( pConfigRedirSection, - L"enabled", - pfIsSharedConfig ); - - if ( FAILED( hr ) ) - { - DBGERROR_HR(hr); - goto exit; - } - - pConfigRedirSection->Release(); - pConfigRedirSection = NULL; - - -exit: - - // - // dump config exception to setup log file (if available) - // - - if ( pConfigRedirSection != NULL ) - { - pConfigRedirSection->Release(); - } - - if ( pAdminManager != NULL ) - { - pAdminManager->Release(); - } - - if ( bstrConfigPath != NULL ) - { - SysFreeString( bstrConfigPath ); - } - - if ( bstrSectionName != NULL ) - { - SysFreeString( bstrSectionName ); - } - - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h deleted file mode 100644 index 5694b21b7ec2..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ahutil.h +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#include - -HRESULT -SetElementProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - IN CONST VARIANT * varPropValue - ); - -HRESULT -SetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - IN CONST WCHAR * szPropValue - ); - -HRESULT -GetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - OUT BSTR * pbstrPropValue - ); - -HRESULT -GetElementStringProperty( - IN IAppHostElement * pElement, - IN CONST WCHAR * szPropName, - OUT STRU * pstrPropValue - ); - -HRESULT -GetElementBoolProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT BOOL * pBool - ); - -HRESULT -GetElementBoolProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT bool * pBool - ); - -HRESULT -GetElementChildByName( - IN IAppHostElement * pElement, - IN LPCWSTR pszElementName, - OUT IAppHostElement ** ppChildElement - ); - -HRESULT -GetElementDWORDProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT DWORD * pdwValue - ); - -HRESULT -GetElementLONGLONGProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT LONGLONG * pllValue -); - - -HRESULT -GetElementRawTimeSpanProperty( - IN IAppHostElement * pElement, - IN LPCWSTR pszPropertyName, - OUT ULONGLONG * pulonglong - ); - -#define FIND_ELEMENT_CASE_SENSITIVE 0x00000000 -#define FIND_ELEMENT_CASE_INSENSITIVE 0x00000001 - -HRESULT -DeleteElementFromCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - BOOL * pfDeleted - ); - -HRESULT -DeleteAllElementsFromCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - UINT * pNumDeleted - ); - -HRESULT -FindElementInCollection( - IAppHostElementCollection *pCollection, - CONST WCHAR * szKeyName, - CONST WCHAR * szKeyValue, - ULONG BehaviorFlags, - OUT ULONG * pIndex - ); - -HRESULT -VariantAssign( - IN OUT VARIANT * pv, - IN CONST WCHAR * sz - ); - -HRESULT -GetLocationFromFile( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szLocationPath, - OUT IAppHostConfigLocation ** ppLocation, - OUT BOOL * pFound - ); - -HRESULT -GetSectionFromLocation( - IN IAppHostConfigLocation * pLocation, - IN CONST WCHAR * szSectionName, - OUT IAppHostElement ** ppSectionElement, - OUT BOOL * pFound - ); - -HRESULT -GetAdminElement( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName, - OUT IAppHostElement ** pElement - ); - -HRESULT -ClearAdminElement( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ); - -HRESULT -ClearElementFromAllSites( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ); - -HRESULT -ClearElementFromAllLocations( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - IN CONST WCHAR * szElementName - ); - -HRESULT -ClearLocationElements( - IN IAppHostConfigLocation * pLocation, - IN CONST WCHAR * szElementName - ); - -HRESULT -CompareElementName( - IN IAppHostElement * pElement, - IN CONST WCHAR * szNameToMatch, - OUT BOOL * pMatched - ); - -HRESULT -ClearChildElementsByName( - IN IAppHostChildElementCollection * pCollection, - IN CONST WCHAR * szElementName, - OUT BOOL * pFound - ); - -HRESULT -GetSitesCollection( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - OUT IAppHostElementCollection ** pSitesCollection - ); - -HRESULT -GetLocationCollection( - IN IAppHostAdminManager * pAdminMgr, - IN CONST WCHAR * szConfigPath, - OUT IAppHostConfigLocationCollection ** pLocationCollection - ); - -struct ENUM_INDEX -{ - VARIANT Index; - ULONG Count; -}; - -HRESULT -FindFirstElement( - IN IAppHostElementCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT -FindNextElement( - IN IAppHostElementCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT -FindFirstChildElement( - IN IAppHostChildElementCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT -FindNextChildElement( - IN IAppHostChildElementCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT -FindFirstLocation( - IN IAppHostConfigLocationCollection * pCollection, - OUT ENUM_INDEX * pIndex, - OUT IAppHostConfigLocation ** pLocation - ); - -HRESULT -FindNextLocation( - IN IAppHostConfigLocationCollection * pCollection, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostConfigLocation ** pLocation - ); - -HRESULT -FindFirstLocationElement( - IN IAppHostConfigLocation * pLocation, - OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT -FindNextLocationElement( - IN IAppHostConfigLocation * pLocation, - IN OUT ENUM_INDEX * pIndex, - OUT IAppHostElement ** pElement - ); - -HRESULT GetSharedConfigEnabled( - BOOL * pfIsSharedConfig -); \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp deleted file mode 100644 index b8b6a0bf742e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.cpp +++ /dev/null @@ -1,482 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.h" - -DWORD -Base64Encode( - __in_bcount(cbDecodedBufferSize) VOID * pDecodedBuffer, - IN DWORD cbDecodedBufferSize, - __out_ecount_opt(cchEncodedStringSize) PWSTR pszEncodedString, - IN DWORD cchEncodedStringSize, - __out_opt DWORD * pcchEncoded - ) -/*++ - -Routine Description: - - Decode a base64-encoded string. - -Arguments: - - pDecodedBuffer (IN) - buffer to encode. - cbDecodedBufferSize (IN) - size of buffer to encode. - cchEncodedStringSize (IN) - size of the buffer for the encoded string. - pszEncodedString (OUT) = the encoded string. - pcchEncoded (OUT) - size in characters of the encoded string. - -Return Values: - - 0 - success. - E_OUTOFMEMORY - ---*/ -{ - static WCHAR rgchEncodeTable[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' - }; - - DWORD ib; - DWORD ich; - DWORD cchEncoded; - BYTE b0, b1, b2; - BYTE * pbDecodedBuffer = (BYTE *) pDecodedBuffer; - - // Calculate encoded string size. - cchEncoded = 1 + (cbDecodedBufferSize + 2) / 3 * 4; - - if (NULL != pcchEncoded) { - *pcchEncoded = cchEncoded; - } - - if (cchEncodedStringSize == 0 && pszEncodedString == NULL) { - return ERROR_SUCCESS; - } - - if (cchEncodedStringSize < cchEncoded) { - // Given buffer is too small to hold encoded string. - return ERROR_INSUFFICIENT_BUFFER; - } - - // Encode data byte triplets into four-byte clusters. - ib = ich = 0; - while (ib < cbDecodedBufferSize) { - b0 = pbDecodedBuffer[ib++]; - b1 = (ib < cbDecodedBufferSize) ? pbDecodedBuffer[ib++] : 0; - b2 = (ib < cbDecodedBufferSize) ? pbDecodedBuffer[ib++] : 0; - - // - // The checks below for buffer overflow seems redundant to me. - // But it's the only way I can find to keep OACR quiet so it - // will have to do. - // - - pszEncodedString[ich++] = rgchEncodeTable[b0 >> 2]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[((b0 << 4) & 0x30) | ((b1 >> 4) & 0x0f)]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[((b1 << 2) & 0x3c) | ((b2 >> 6) & 0x03)]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[b2 & 0x3f]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - } - - // Pad the last cluster as necessary to indicate the number of data bytes - // it represents. - switch (cbDecodedBufferSize % 3) { - case 0: - break; - case 1: - pszEncodedString[ich - 2] = '='; - __fallthrough; - case 2: - pszEncodedString[ich - 1] = '='; - break; - } - - // Null-terminate the encoded string. - pszEncodedString[ich++] = '\0'; - - DBG_ASSERT(ich == cchEncoded); - - return ERROR_SUCCESS; -} - - -DWORD -Base64Decode( - __in PCWSTR pszEncodedString, - __out_opt VOID * pDecodeBuffer, - __in DWORD cbDecodeBufferSize, - __out_opt DWORD * pcbDecoded - ) -/*++ - -Routine Description: - - Decode a base64-encoded string. - -Arguments: - - pszEncodedString (IN) - base64-encoded string to decode. - cbDecodeBufferSize (IN) - size in bytes of the decode buffer. - pbDecodeBuffer (OUT) - holds the decoded data. - pcbDecoded (OUT) - number of data bytes in the decoded data (if success or - STATUS_BUFFER_TOO_SMALL). - -Return Values: - - 0 - success. - E_OUTOFMEMORY - E_INVALIDARG - ---*/ -{ -#define NA (255) -#define DECODE(x) (((ULONG)(x) < sizeof(rgbDecodeTable)) ? rgbDecodeTable[x] : NA) - - static BYTE rgbDecodeTable[128] = { - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, // 0-15 - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, // 16-31 - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 62, NA, NA, NA, 63, // 32-47 - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, NA, NA, NA, 0, NA, NA, // 48-63 - NA, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 64-79 - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, NA, NA, NA, NA, NA, // 80-95 - NA, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 96-111 - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NA, NA, NA, NA, NA, // 112-127 - }; - - DWORD cbDecoded; - DWORD cchEncodedSize; - DWORD ich; - DWORD ib; - BYTE b0, b1, b2, b3; - BYTE * pbDecodeBuffer = (BYTE *) pDecodeBuffer; - - cchEncodedSize = (DWORD)wcslen(pszEncodedString); - if (NULL != pcbDecoded) { - *pcbDecoded = 0; - } - - if ((0 == cchEncodedSize) || (0 != (cchEncodedSize % 4))) { - // Input string is not sized correctly to be base64. - return ERROR_INVALID_PARAMETER; - } - - // Calculate decoded buffer size. - cbDecoded = (cchEncodedSize + 3) / 4 * 3; - if (pszEncodedString[cchEncodedSize-1] == '=') { - if (pszEncodedString[cchEncodedSize-2] == '=') { - // Only one data byte is encoded in the last cluster. - cbDecoded -= 2; - } - else { - // Only two data bytes are encoded in the last cluster. - cbDecoded -= 1; - } - } - - if (NULL != pcbDecoded) { - *pcbDecoded = cbDecoded; - } - - if (cbDecodeBufferSize == 0 && pDecodeBuffer == NULL) { - return ERROR_SUCCESS; - } - - if (cbDecoded > cbDecodeBufferSize) { - // Supplied buffer is too small. - return ERROR_INSUFFICIENT_BUFFER; - } - - // Decode each four-byte cluster into the corresponding three data bytes. - ich = ib = 0; - while (ich < cchEncodedSize) { - b0 = DECODE(pszEncodedString[ich]); ich++; - b1 = DECODE(pszEncodedString[ich]); ich++; - b2 = DECODE(pszEncodedString[ich]); ich++; - b3 = DECODE(pszEncodedString[ich]); ich++; - - if ((NA == b0) || (NA == b1) || (NA == b2) || (NA == b3)) { - // Contents of input string are not base64. - return ERROR_INVALID_PARAMETER; - } - - pbDecodeBuffer[ib++] = (b0 << 2) | (b1 >> 4); - - if (ib < cbDecoded) { - pbDecodeBuffer[ib++] = (b1 << 4) | (b2 >> 2); - - if (ib < cbDecoded) { - pbDecodeBuffer[ib++] = (b2 << 6) | b3; - } - } - } - - DBG_ASSERT(ib == cbDecoded); - - return ERROR_SUCCESS; -} - - -DWORD -Base64Encode( - __in_bcount(cbDecodedBufferSize) VOID * pDecodedBuffer, - IN DWORD cbDecodedBufferSize, - __out_ecount_opt(cchEncodedStringSize) PSTR pszEncodedString, - IN DWORD cchEncodedStringSize, - __out_opt DWORD * pcchEncoded - ) -/*++ - -Routine Description: - - Decode a base64-encoded string. - -Arguments: - - pDecodedBuffer (IN) - buffer to encode. - cbDecodedBufferSize (IN) - size of buffer to encode. - cchEncodedStringSize (IN) - size of the buffer for the encoded string. - pszEncodedString (OUT) = the encoded string. - pcchEncoded (OUT) - size in characters of the encoded string. - -Return Values: - - 0 - success. - E_OUTOFMEMORY - ---*/ -{ - static CHAR rgchEncodeTable[64] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' - }; - - DWORD ib; - DWORD ich; - DWORD cchEncoded; - BYTE b0, b1, b2; - BYTE * pbDecodedBuffer = (BYTE *) pDecodedBuffer; - - // Calculate encoded string size. - cchEncoded = 1 + (cbDecodedBufferSize + 2) / 3 * 4; - - if (NULL != pcchEncoded) { - *pcchEncoded = cchEncoded; - } - - if (cchEncodedStringSize == 0 && pszEncodedString == NULL) { - return ERROR_SUCCESS; - } - - if (cchEncodedStringSize < cchEncoded) { - // Given buffer is too small to hold encoded string. - return ERROR_INSUFFICIENT_BUFFER; - } - - // Encode data byte triplets into four-byte clusters. - ib = ich = 0; - while (ib < cbDecodedBufferSize) { - b0 = pbDecodedBuffer[ib++]; - b1 = (ib < cbDecodedBufferSize) ? pbDecodedBuffer[ib++] : 0; - b2 = (ib < cbDecodedBufferSize) ? pbDecodedBuffer[ib++] : 0; - - // - // The checks below for buffer overflow seems redundant to me. - // But it's the only way I can find to keep OACR quiet so it - // will have to do. - // - - pszEncodedString[ich++] = rgchEncodeTable[b0 >> 2]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[((b0 << 4) & 0x30) | ((b1 >> 4) & 0x0f)]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[((b1 << 2) & 0x3c) | ((b2 >> 6) & 0x03)]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - - pszEncodedString[ich++] = rgchEncodeTable[b2 & 0x3f]; - if ( ich >= cchEncodedStringSize ) - { - DBG_ASSERT( FALSE ); - return ERROR_BUFFER_OVERFLOW; - } - } - - // Pad the last cluster as necessary to indicate the number of data bytes - // it represents. - switch (cbDecodedBufferSize % 3) { - case 0: - break; - case 1: - pszEncodedString[ich - 2] = '='; - __fallthrough; - case 2: - pszEncodedString[ich - 1] = '='; - break; - } - - // Null-terminate the encoded string. - pszEncodedString[ich++] = '\0'; - - DBG_ASSERT(ich == cchEncoded); - - return ERROR_SUCCESS; -} - - -DWORD -Base64Decode( - __in PCSTR pszEncodedString, - __out_opt VOID * pDecodeBuffer, - __in DWORD cbDecodeBufferSize, - __out_opt DWORD * pcbDecoded - ) -/*++ - -Routine Description: - - Decode a base64-encoded string. - -Arguments: - - pszEncodedString (IN) - base64-encoded string to decode. - cbDecodeBufferSize (IN) - size in bytes of the decode buffer. - pbDecodeBuffer (OUT) - holds the decoded data. - pcbDecoded (OUT) - number of data bytes in the decoded data (if success or - STATUS_BUFFER_TOO_SMALL). - -Return Values: - - 0 - success. - E_OUTOFMEMORY - E_INVALIDARG - ---*/ -{ -#define NA (255) -#define DECODE(x) (((ULONG)(x) < sizeof(rgbDecodeTable)) ? rgbDecodeTable[x] : NA) - - static BYTE rgbDecodeTable[128] = { - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, // 0-15 - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, // 16-31 - NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 62, NA, NA, NA, 63, // 32-47 - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, NA, NA, NA, 0, NA, NA, // 48-63 - NA, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, // 64-79 - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, NA, NA, NA, NA, NA, // 80-95 - NA, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 96-111 - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, NA, NA, NA, NA, NA, // 112-127 - }; - - DWORD cbDecoded; - DWORD cchEncodedSize; - DWORD ich; - DWORD ib; - BYTE b0, b1, b2, b3; - BYTE * pbDecodeBuffer = (BYTE *) pDecodeBuffer; - - cchEncodedSize = (DWORD)strlen(pszEncodedString); - if (NULL != pcbDecoded) { - *pcbDecoded = 0; - } - - if ((0 == cchEncodedSize) || (0 != (cchEncodedSize % 4))) { - // Input string is not sized correctly to be base64. - return ERROR_INVALID_PARAMETER; - } - - // Calculate decoded buffer size. - cbDecoded = (cchEncodedSize + 3) / 4 * 3; - if (pszEncodedString[cchEncodedSize-1] == '=') { - if (pszEncodedString[cchEncodedSize-2] == '=') { - // Only one data byte is encoded in the last cluster. - cbDecoded -= 2; - } - else { - // Only two data bytes are encoded in the last cluster. - cbDecoded -= 1; - } - } - - if (NULL != pcbDecoded) { - *pcbDecoded = cbDecoded; - } - - if (cbDecodeBufferSize == 0 && pDecodeBuffer == NULL) { - return ERROR_SUCCESS; - } - - if (cbDecoded > cbDecodeBufferSize) { - // Supplied buffer is too small. - return ERROR_INSUFFICIENT_BUFFER; - } - - // Decode each four-byte cluster into the corresponding three data bytes. - ich = ib = 0; - while (ich < cchEncodedSize) { - b0 = DECODE(pszEncodedString[ich]); ich++; - b1 = DECODE(pszEncodedString[ich]); ich++; - b2 = DECODE(pszEncodedString[ich]); ich++; - b3 = DECODE(pszEncodedString[ich]); ich++; - - if ((NA == b0) || (NA == b1) || (NA == b2) || (NA == b3)) { - // Contents of input string are not base64. - return ERROR_INVALID_PARAMETER; - } - - pbDecodeBuffer[ib++] = (b0 << 2) | (b1 >> 4); - - if (ib < cbDecoded) { - pbDecodeBuffer[ib++] = (b1 << 4) | (b2 >> 2); - - if (ib < cbDecoded) { - pbDecodeBuffer[ib++] = (b2 << 6) | b3; - } - } - } - - DBG_ASSERT(ib == cbDecoded); - - return ERROR_SUCCESS; -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h deleted file mode 100644 index 469b074d73cd..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/base64.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _BASE64_H_ -#define _BASE64_H_ - -DWORD -Base64Encode( - __in_bcount( cbDecodedBufferSize ) VOID * pDecodedBuffer, - IN DWORD cbDecodedBufferSize, - __out_ecount_opt( cchEncodedStringSize ) PWSTR pszEncodedString, - IN DWORD cchEncodedStringSize, - __out_opt DWORD * pcchEncoded - ); - -DWORD -Base64Decode( - __in PCWSTR pszEncodedString, - __out_opt VOID * pDecodeBuffer, - __in DWORD cbDecodeBufferSize, - __out_opt DWORD * pcbDecoded - ); - -DWORD -Base64Encode( - __in_bcount( cbDecodedBufferSize ) VOID * pDecodedBuffer, - IN DWORD cbDecodedBufferSize, - __out_ecount_opt( cchEncodedStringSize ) PSTR pszEncodedString, - IN DWORD cchEncodedStringSize, - __out_opt DWORD * pcchEncoded - ); - -DWORD -Base64Decode( - __in PCSTR pszEncodedString, - __out_opt VOID * pDecodeBuffer, - __in DWORD cbDecodeBufferSize, - __out_opt DWORD * pcbDecoded - ); - -#endif // _BASE64_HXX_ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h deleted file mode 100644 index 1d68155387be..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/buffer.h +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include - - -// -// BUFFER_T class shouldn't be used directly. Use BUFFER specialization class instead. -// The only BUFFER_T partners are STRU and STRA classes. -// BUFFER_T cannot hold other but primitive types since it doesn't call -// constructor and destructor. -// -// Note: Size is in bytes. -// -template -class BUFFER_T -{ -public: - - BUFFER_T() - : m_cbBuffer( sizeof(m_rgBuffer) ), - m_fHeapAllocated( false ), - m_pBuffer(m_rgBuffer) - /*++ - Description: - - Default constructor where the inline buffer is used. - - Arguments: - - None. - - Returns: - - None. - - --*/ - { - } - - BUFFER_T( - __inout_bcount(cbInit) T* pbInit, - __in DWORD cbInit - ) : m_pBuffer( pbInit ), - m_cbBuffer( cbInit ), - m_fHeapAllocated( false ) - /*++ - Description: - - Instantiate BUFFER, initially using pbInit as buffer - This is useful for stack-buffers and inline-buffer class members - (see STACK_BUFFER and INLINE_BUFFER_INIT below) - - BUFFER does not free pbInit. - - Arguments: - - pbInit - Initial buffer to use. - cbInit - Size of pbInit in bytes (not in elements). - - Returns: - - None. - - --*/ - { - _ASSERTE( NULL != pbInit ); - _ASSERTE( cbInit > 0 ); - } - - ~BUFFER_T() - { - if( IsHeapAllocated() ) - { - _ASSERTE( NULL != m_pBuffer ); - HeapFree( GetProcessHeap(), 0, m_pBuffer ); - m_pBuffer = NULL; - m_cbBuffer = 0; - m_fHeapAllocated = false; - } - } - - T* - QueryPtr( - VOID - ) const - { - // - // Return pointer to data buffer. - // - return m_pBuffer; - } - - DWORD - QuerySize( - VOID - ) const - { - // - // Return number of bytes. - // - return m_cbBuffer; - } - - __success(return == true) - bool - Resize( - const SIZE_T cbNewSize, - const bool fZeroMemoryBeyondOldSize = false - ) - /*++ - Description: - - Resizes the buffer. - - Arguments: - - cbNewSize - Size in bytes to grow to. - fZeroMemoryBeyondOldSize - - Whether to zero the region of memory of the - new buffer beyond the original size. - - Returns: - - TRUE on success, FALSE on failure. - - --*/ - { - PVOID pNewMem; - - if ( cbNewSize <= m_cbBuffer ) - { - return true; - } - - if ( cbNewSize > MAXDWORD ) - { - SetLastError( ERROR_INVALID_PARAMETER ); - return false; - } - - DWORD dwHeapAllocFlags = fZeroMemoryBeyondOldSize ? HEAP_ZERO_MEMORY : 0; - - if( IsHeapAllocated() ) - { - pNewMem = HeapReAlloc( GetProcessHeap(), dwHeapAllocFlags, m_pBuffer, cbNewSize ); - } - else - { - pNewMem = HeapAlloc( GetProcessHeap(), dwHeapAllocFlags, cbNewSize ); - } - - if( pNewMem == NULL ) - { - SetLastError( ERROR_NOT_ENOUGH_MEMORY ); - return false; - } - - if( !IsHeapAllocated() ) - { - // - // First time this block is allocated. Copy over old contents. - // - memcpy_s( pNewMem, static_cast(cbNewSize), m_pBuffer, m_cbBuffer ); - m_fHeapAllocated = true; - } - - m_pBuffer = reinterpret_cast(pNewMem); - m_cbBuffer = static_cast(cbNewSize); - - _ASSERTE( m_pBuffer != NULL ); - - return true; - } - -private: - - bool - IsHeapAllocated( - VOID - ) const - { - return m_fHeapAllocated; - } - - // - // The default inline buffer. - // This member should be at the beginning for alignment purposes. - // - T m_rgBuffer[LENGTH]; - - // - // Is m_pBuffer dynamically allocated? - // - bool m_fHeapAllocated; - - // - // Size of the buffer as requested by client in bytes. - // - DWORD m_cbBuffer; - - // - // Pointer to buffer. - // - __field_bcount_full(m_cbBuffer) - T* m_pBuffer; -}; - -// -// Resizes the buffer by 2 if the ideal size is bigger -// than the buffer length. That give us lg(n) allocations. -// -// Use template inferring like: -// -// BUFFER buff; -// hr = ResizeBufferByTwo(buff, 100); -// -template -HRESULT -ResizeBufferByTwo( - BUFFER_T& Buffer, - SIZE_T cbIdealSize, - bool fZeroMemoryBeyondOldSize = false -) -{ - if (cbIdealSize > Buffer.QuerySize()) - { - if (!Buffer.Resize(max(cbIdealSize, static_cast(Buffer.QuerySize() * 2)), - fZeroMemoryBeyondOldSize)) - { - return E_OUTOFMEMORY; - } - } - return S_OK; -} - - -// -// -// Lots of code uses BUFFER class to store a bunch of different -// structures, so m_rgBuffer needs to be 8 byte aligned when it is used -// as an opaque buffer. -// -#define INLINED_BUFFER_LEN 32 -typedef BUFFER_T BUFFER; - -// -// Assumption of macros below for pointer alignment purposes -// -C_ASSERT( sizeof(VOID*) <= sizeof(ULONGLONG) ); - -// -// Declare a BUFFER that will use stack memory of -// bytes. If the buffer overflows then a heap buffer will be allocated. -// -#define STACK_BUFFER( _name, _size ) \ - ULONGLONG __aqw##_name[ ( ( (_size) + sizeof(ULONGLONG) - 1 ) / sizeof(ULONGLONG) ) ]; \ - BUFFER _name( (BYTE*)__aqw##_name, sizeof(__aqw##_name) ) - -// -// Macros for declaring and initializing a BUFFER that will use inline memory -// of bytes as a member of an object. -// -#define INLINE_BUFFER( _name, _size ) \ - ULONGLONG __aqw##_name[ ( ( (_size) + sizeof(ULONGLONG) - 1 ) / sizeof(ULONGLONG) ) ]; \ - BUFFER _name; - -#define INLINE_BUFFER_INIT( _name ) \ - _name( (BYTE*)__aqw##_name, sizeof( __aqw##_name ) ) diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h deleted file mode 100644 index fd09b7a6a06b..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/datetime.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _DATETIME_H_ -#define _DATETIME_H_ - -BOOL -StringTimeToFileTime( - PCSTR pszTime, - ULONGLONG * pulTime -); - -#endif - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h deleted file mode 100644 index 45c26777a91c..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/dbgutil.h +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _DBGUTIL_H_ -#define _DBGUTIL_H_ - -#include - -// -// TODO -// Using _CrtDbg implementation. If hooking is desired -// wrappers should be provided here so that we can reimplement -// if neecessary. -// -// IF_DEBUG/DEBUG FLAGS -// -// registry configuration -// - -// -// Debug error levels for DEBUG_FLAGS_VAR. -// - -#define DEBUG_FLAG_INFO 0x00000001 -#define DEBUG_FLAG_WARN 0x00000002 -#define DEBUG_FLAG_ERROR 0x00000004 - -// -// Predefined error level values. These are backwards from the -// windows definitions. -// - -#define DEBUG_FLAGS_INFO (DEBUG_FLAG_ERROR | DEBUG_FLAG_WARN | DEBUG_FLAG_INFO) -#define DEBUG_FLAGS_WARN (DEBUG_FLAG_ERROR | DEBUG_FLAG_WARN) -#define DEBUG_FLAGS_ERROR (DEBUG_FLAG_ERROR) -#define DEBUG_FLAGS_ANY (DEBUG_FLAG_INFO | DEBUG_FLAG_WARN | DEBUG_FLAG_ERROR) - -// -// Global variables to control tracing. Generally per module -// - -#ifndef DEBUG_FLAGS_VAR -#define DEBUG_FLAGS_VAR g_dwDebugFlags -#endif - -#ifndef DEBUG_LABEL_VAR -#define DEBUG_LABEL_VAR g_szDebugLabel -#endif - -extern PCSTR DEBUG_LABEL_VAR; -extern DWORD DEBUG_FLAGS_VAR; - -// -// Module should make this declaration globally. -// - -#define DECLARE_DEBUG_PRINT_OBJECT( _pszLabel_ ) \ - PCSTR DEBUG_LABEL_VAR = _pszLabel_; \ - DWORD DEBUG_FLAGS_VAR = DEBUG_FLAGS_ANY; \ - -#define DECLARE_DEBUG_PRINT_OBJECT2( _pszLabel_, _dwLevel_ ) \ - PCSTR DEBUG_LABEL_VAR = _pszLabel_; \ - DWORD DEBUG_FLAGS_VAR = _dwLevel_; \ - -// -// This doesn't do anything now. Should be safe to call in dll main. -// - -#define CREATE_DEBUG_PRINT_OBJECT - -// -// Trace macros -// - -#define DBG_CONTEXT _CRT_WARN, __FILE__, __LINE__, DEBUG_LABEL_VAR - -#ifdef DEBUG -#define DBGINFO(args) \ -{if (DEBUG_FLAGS_VAR & DEBUG_FLAG_INFO) { _CrtDbgReport args; }} -#define DBGWARN(args) \ -{if (DEBUG_FLAGS_VAR & DEBUG_FLAG_WARN) { _CrtDbgReport args; }} -#define DBGERROR(args) \ -{if (DEBUG_FLAGS_VAR & DEBUG_FLAG_ERROR) { _CrtDbgReport args; }} -#else -#define DBGINFO -#define DBGWARN -#define DBGERROR -#endif - -#define DBGPRINTF DBGINFO - -// -// Simple error traces -// - -#define DBGERROR_HR( _hr_ ) \ - DBGERROR((DBG_CONTEXT, "hr=0x%x\n", _hr_)) - -#define DBGERROR_STATUS( _status_ ) \ - DBGERROR((DBG_CONTEXT, "status=%d\n", _status_)) - -#endif diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h deleted file mode 100644 index a7bfeda2cfad..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashfn.h +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef __HASHFN_H__ -#define __HASHFN_H__ - - -// Produce a scrambled, randomish number in the range 0 to RANDOM_PRIME-1. -// Applying this to the results of the other hash functions is likely to -// produce a much better distribution, especially for the identity hash -// functions such as Hash(char c), where records will tend to cluster at -// the low end of the hashtable otherwise. LKRhash applies this internally -// to all hash signatures for exactly this reason. - -inline DWORD -HashScramble(DWORD dwHash) -{ - // Here are 10 primes slightly greater than 10^9 - // 1000000007, 1000000009, 1000000021, 1000000033, 1000000087, - // 1000000093, 1000000097, 1000000103, 1000000123, 1000000181. - - // default value for "scrambling constant" - const DWORD RANDOM_CONSTANT = 314159269UL; - // large prime number, also used for scrambling - const DWORD RANDOM_PRIME = 1000000007UL; - - return (RANDOM_CONSTANT * dwHash) % RANDOM_PRIME ; -} - - -// Faster scrambling function suggested by Eric Jacobsen - -inline DWORD -HashRandomizeBits(DWORD dw) -{ - return (((dw * 1103515245 + 12345) >> 16) - | ((dw * 69069 + 1) & 0xffff0000)); -} - - -// Small prime number used as a multiplier in the supplied hash functions -const DWORD HASH_MULTIPLIER = 101; - -#undef HASH_SHIFT_MULTIPLY - -#ifdef HASH_SHIFT_MULTIPLY -# define HASH_MULTIPLY(dw) (((dw) << 7) - (dw)) -#else -# define HASH_MULTIPLY(dw) ((dw) * HASH_MULTIPLIER) -#endif - -// Fast, simple hash function that tends to give a good distribution. -// Apply HashScramble to the result if you're using this for something -// other than LKRhash. - -inline DWORD -HashString( - const char* psz, - DWORD dwHash = 0) -{ - // force compiler to use unsigned arithmetic - const unsigned char* upsz = (const unsigned char*) psz; - - for ( ; *upsz; ++upsz) - dwHash = HASH_MULTIPLY(dwHash) + *upsz; - - return dwHash; -} - -inline DWORD -HashString( - __in_ecount(cch) const char* psz, - __in DWORD cch, - __in DWORD dwHash -) -{ - // force compiler to use unsigned arithmetic - const unsigned char* upsz = (const unsigned char*) psz; - - for (DWORD Index = 0; - Index < cch; - ++Index, ++upsz) - { - dwHash = HASH_MULTIPLY(dwHash) + *upsz; - } - - return dwHash; -} - - -// Unicode version of above - -inline DWORD -HashString( - const wchar_t* pwsz, - DWORD dwHash = 0) -{ - for ( ; *pwsz; ++pwsz) - dwHash = HASH_MULTIPLY(dwHash) + *pwsz; - - return dwHash; -} - -// Based on length of the string instead of null-terminating character - -inline DWORD -HashString( - __in_ecount(cch) const wchar_t* pwsz, - __in DWORD cch, - __in DWORD dwHash -) -{ - for (DWORD Index = 0; - Index < cch; - ++Index, ++pwsz) - { - dwHash = HASH_MULTIPLY(dwHash) + *pwsz; - } - - return dwHash; -} - - -// Quick-'n'-dirty case-insensitive string hash function. -// Make sure that you follow up with _stricmp or _mbsicmp. You should -// also cache the length of strings and check those first. Caching -// an uppercase version of a string can help too. -// Again, apply HashScramble to the result if using with something other -// than LKRhash. -// Note: this is not really adequate for MBCS strings. - -inline DWORD -HashStringNoCase( - const char* psz, - DWORD dwHash = 0) -{ - const unsigned char* upsz = (const unsigned char*) psz; - - for ( ; *upsz; ++upsz) - dwHash = HASH_MULTIPLY(dwHash) - + (*upsz & 0xDF); // strip off lowercase bit - - return dwHash; -} - -inline DWORD -HashStringNoCase( - __in_ecount(cch) - const char* psz, - SIZE_T cch, - DWORD dwHash) -{ - const unsigned char* upsz = (const unsigned char*) psz; - - for (SIZE_T Index = 0; - Index < cch; - ++Index, ++upsz) - { - dwHash = HASH_MULTIPLY(dwHash) - + (*upsz & 0xDF); // strip off lowercase bit - } - return dwHash; -} - - -// Unicode version of above - -inline DWORD -HashStringNoCase( - const wchar_t* pwsz, - DWORD dwHash = 0) -{ - for ( ; *pwsz; ++pwsz) - dwHash = HASH_MULTIPLY(dwHash) + (*pwsz & 0xFFDF); - - return dwHash; -} - -// Unicode version of above with length - -inline DWORD -HashStringNoCase( - __in_ecount(cch) - const wchar_t* pwsz, - SIZE_T cch, - DWORD dwHash) -{ - for (SIZE_T Index = 0; - Index < cch; - ++Index, ++pwsz) - { - dwHash = HASH_MULTIPLY(dwHash) + (*pwsz & 0xFFDF); - } - return dwHash; -} - - -// HashBlob returns the hash of a blob of arbitrary binary data. -// -// Warning: HashBlob is generally not the right way to hash a class object. -// Consider: -// class CFoo { -// public: -// char m_ch; -// double m_d; -// char* m_psz; -// }; -// -// inline DWORD Hash(const CFoo& rFoo) -// { return HashBlob(&rFoo, sizeof(CFoo)); } -// -// This is the wrong way to hash a CFoo for two reasons: (a) there will be -// a 7-byte gap between m_ch and m_d imposed by the alignment restrictions -// of doubles, which will be filled with random data (usually non-zero for -// stack variables), and (b) it hashes the address (rather than the -// contents) of the string m_psz. Similarly, -// -// bool operator==(const CFoo& rFoo1, const CFoo& rFoo2) -// { return memcmp(&rFoo1, &rFoo2, sizeof(CFoo)) == 0; } -// -// does the wrong thing. Much better to do this: -// -// DWORD Hash(const CFoo& rFoo) -// { -// return HashString(rFoo.m_psz, -// HASH_MULTIPLIER * Hash(rFoo.m_ch) -// + Hash(rFoo.m_d)); -// } -// -// Again, apply HashScramble if using with something other than LKRhash. - -inline DWORD -HashBlob( - const void* pv, - size_t cb, - DWORD dwHash = 0) -{ - const BYTE * pb = static_cast(pv); - - while (cb-- > 0) - dwHash = HASH_MULTIPLY(dwHash) + *pb++; - - return dwHash; -} - - - -// -// Overloaded hash functions for all the major builtin types. -// Again, apply HashScramble to result if using with something other than -// LKRhash. -// - -inline DWORD Hash(const char* psz) -{ return HashString(psz); } - -inline DWORD Hash(const unsigned char* pusz) -{ return HashString(reinterpret_cast(pusz)); } - -inline DWORD Hash(const signed char* pssz) -{ return HashString(reinterpret_cast(pssz)); } - -inline DWORD Hash(const wchar_t* pwsz) -{ return HashString(pwsz); } - -inline DWORD -Hash( - const GUID* pguid, - DWORD dwHash = 0) -{ - - return * reinterpret_cast(const_cast(pguid)) + dwHash; -} - -// Identity hash functions: scalar values map to themselves -inline DWORD Hash(char c) -{ return c; } - -inline DWORD Hash(unsigned char uc) -{ return uc; } - -inline DWORD Hash(signed char sc) -{ return sc; } - -inline DWORD Hash(short sh) -{ return sh; } - -inline DWORD Hash(unsigned short ush) -{ return ush; } - -inline DWORD Hash(int i) -{ return i; } - -inline DWORD Hash(unsigned int u) -{ return u; } - -inline DWORD Hash(long l) -{ return l; } - -inline DWORD Hash(unsigned long ul) -{ return ul; } - -inline DWORD Hash(float f) -{ - // be careful of rounding errors when computing keys - union { - float f; - DWORD dw; - } u; - u.f = f; - return u.dw; -} - -inline DWORD Hash(double dbl) -{ - // be careful of rounding errors when computing keys - union { - double dbl; - DWORD dw[2]; - } u; - u.dbl = dbl; - return u.dw[0] * HASH_MULTIPLIER + u.dw[1]; -} - -#endif // __HASHFN_H__ diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h deleted file mode 100644 index 9319e5643d34..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/hashtable.h +++ /dev/null @@ -1,666 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include -#include "rwlock.h" -#include "prime.h" - -template -class HASH_NODE -{ - template - friend class HASH_TABLE; - - HASH_NODE( - _Record * pRecord, - DWORD dwHash - ) : _pNext (NULL), - _pRecord (pRecord), - _dwHash (dwHash) - {} - - ~HASH_NODE() - { - _ASSERTE(_pRecord == NULL); - } - - private: - // Next node in the hash table look-aside - HASH_NODE<_Record> *_pNext; - - // actual record - _Record * _pRecord; - - // hash value - DWORD _dwHash; -}; - -template -class HASH_TABLE -{ -protected: - typedef BOOL - (PFN_DELETE_IF)( - _Record * pRecord, - PVOID pvContext - ); - - typedef VOID - (PFN_APPLY)( - _Record * pRecord, - PVOID pvContext - ); - -public: - HASH_TABLE( - VOID - ) - : _ppBuckets( NULL ), - _nBuckets( 0 ), - _nItems( 0 ) - { - } - - virtual - ~HASH_TABLE(); - - virtual - VOID - ReferenceRecord( - _Record * pRecord - ) = 0; - - virtual - VOID - DereferenceRecord( - _Record * pRecord - ) = 0; - - virtual - _Key - ExtractKey( - _Record * pRecord - ) = 0; - - virtual - DWORD - CalcKeyHash( - _Key key - ) = 0; - - virtual - BOOL - EqualKeys( - _Key key1, - _Key key2 - ) = 0; - - DWORD - Count( - VOID - ) const; - - bool - IsInitialized( - VOID - ) const; - - virtual - VOID - Clear(); - - HRESULT - Initialize( - DWORD nBucketSize - ); - - virtual - VOID - FindKey( - _Key key, - _Record ** ppRecord - ); - - virtual - HRESULT - InsertRecord( - _Record * pRecord - ); - - virtual - VOID - DeleteKey( - _Key key - ); - - virtual - VOID - DeleteIf( - PFN_DELETE_IF pfnDeleteIf, - PVOID pvContext - ); - - VOID - Apply( - PFN_APPLY pfnApply, - PVOID pvContext - ); - -private: - - __success(*ppNode != NULL && return != FALSE) - BOOL - FindNodeInternal( - _Key key, - DWORD dwHash, - __deref_out - HASH_NODE<_Record> ** ppNode, - __deref_opt_out - HASH_NODE<_Record> *** pppPreviousNodeNextPointer = NULL - ); - - VOID - DeleteNode( - HASH_NODE<_Record> * pNode - ) - { - if (pNode->_pRecord != NULL) - { - DereferenceRecord(pNode->_pRecord); - pNode->_pRecord = NULL; - } - - delete pNode; - } - - VOID - RehashTableIfNeeded( - VOID - ); - - HASH_NODE<_Record> ** _ppBuckets; - DWORD _nBuckets; - DWORD _nItems; - // - // Allow to use lock object in const methods. - // - mutable - CWSDRWLock _tableLock; -}; - -template -HRESULT -HASH_TABLE<_Record,_Key>::Initialize( - DWORD nBuckets -) -{ - HRESULT hr = S_OK; - - if ( nBuckets == 0 ) - { - hr = E_INVALIDARG; - goto Failed; - } - - if (nBuckets >= MAXDWORD/sizeof(HASH_NODE<_Record> *)) - { - hr = E_INVALIDARG; - goto Failed; - } - - _ASSERTE(_ppBuckets == NULL ); - if ( _ppBuckets != NULL ) - { - hr = E_INVALIDARG; - goto Failed; - } - - hr = _tableLock.Init(); - if ( FAILED( hr ) ) - { - goto Failed; - } - - _ppBuckets = (HASH_NODE<_Record> **)HeapAlloc( - GetProcessHeap(), - HEAP_ZERO_MEMORY, - nBuckets*sizeof(HASH_NODE<_Record> *)); - if (_ppBuckets == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - goto Failed; - } - _nBuckets = nBuckets; - - return S_OK; - -Failed: - - if (_ppBuckets) - { - HeapFree(GetProcessHeap(), - 0, - _ppBuckets); - _ppBuckets = NULL; - } - - return hr; -} - - -template -HASH_TABLE<_Record,_Key>::~HASH_TABLE() -{ - if (_ppBuckets == NULL) - { - return; - } - - _ASSERTE(_nItems == 0); - - HeapFree(GetProcessHeap(), - 0, - _ppBuckets); - _ppBuckets = NULL; - _nBuckets = 0; -} - -template< class _Record, class _Key> -DWORD -HASH_TABLE<_Record,_Key>::Count() const -{ - return _nItems; -} - -template< class _Record, class _Key> -bool -HASH_TABLE<_Record,_Key>::IsInitialized( - VOID -) const -{ - return _ppBuckets != NULL; -} - - -template -VOID -HASH_TABLE<_Record,_Key>::Clear() -{ - HASH_NODE<_Record> *pCurrent; - HASH_NODE<_Record> *pNext; - - // This is here in the off cases where someone instantiates a hashtable - // and then does an automatic "clear" before its destruction WITHOUT - // ever initializing it. - if ( ! _tableLock.QueryInited() ) - { - return; - } - - _tableLock.ExclusiveAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - pCurrent = _ppBuckets[i]; - _ppBuckets[i] = NULL; - while (pCurrent != NULL) - { - pNext = pCurrent->_pNext; - DeleteNode(pCurrent); - pCurrent = pNext; - } - } - - _nItems = 0; - _tableLock.ExclusiveRelease(); -} - -template -__success(*ppNode != NULL && return != FALSE) -BOOL -HASH_TABLE<_Record,_Key>::FindNodeInternal( - _Key key, - DWORD dwHash, - __deref_out - HASH_NODE<_Record> ** ppNode, - __deref_opt_out - HASH_NODE<_Record> *** pppPreviousNodeNextPointer -) -/*++ - Return value indicates whether the item is found - key, dwHash - key and hash for the node to find - ppNode - on successful return, the node found, on failed return, the first - node with hash value greater than the node to be found - pppPreviousNodeNextPointer - the pointer to previous node's _pNext - - This routine may be called under either read or write lock ---*/ -{ - HASH_NODE<_Record> **ppPreviousNodeNextPointer; - HASH_NODE<_Record> *pNode; - BOOL fFound = FALSE; - - ppPreviousNodeNextPointer = _ppBuckets + (dwHash % _nBuckets); - pNode = *ppPreviousNodeNextPointer; - while (pNode != NULL) - { - if (pNode->_dwHash == dwHash) - { - if (EqualKeys(key, - ExtractKey(pNode->_pRecord))) - { - fFound = TRUE; - break; - } - } - else if (pNode->_dwHash > dwHash) - { - break; - } - - ppPreviousNodeNextPointer = &(pNode->_pNext); - pNode = *ppPreviousNodeNextPointer; - } - - __analysis_assume( (pNode == NULL && fFound == FALSE) || - (pNode != NULL && fFound == TRUE ) ); - *ppNode = pNode; - if (pppPreviousNodeNextPointer != NULL) - { - *pppPreviousNodeNextPointer = ppPreviousNodeNextPointer; - } - return fFound; -} - -template -VOID -HASH_TABLE<_Record,_Key>::FindKey( - _Key key, - _Record ** ppRecord -) -{ - HASH_NODE<_Record> *pNode; - - *ppRecord = NULL; - - DWORD dwHash = CalcKeyHash(key); - - _tableLock.SharedAcquire(); - - if (FindNodeInternal(key, dwHash, &pNode) && - pNode->_pRecord != NULL) - { - ReferenceRecord(pNode->_pRecord); - *ppRecord = pNode->_pRecord; - } - - _tableLock.SharedRelease(); -} - -template -HRESULT -HASH_TABLE<_Record,_Key>::InsertRecord( - _Record * pRecord -) -/*++ - This method inserts a node for this record and also empty nodes for paths - in the heirarchy leading upto this path - - The insert is done under only a read-lock - this is possible by keeping - the hashes in a bucket in increasing order and using interlocked operations - to actually insert the item in the hash-bucket lookaside list and the parent - children list - - Returns HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) if the record already exists. - Never leak this error to the end user because "*file* already exists" may be confusing. ---*/ -{ - BOOL fLocked = FALSE; - _Key key = ExtractKey(pRecord); - DWORD dwHash = CalcKeyHash(key); - HRESULT hr = S_OK; - HASH_NODE<_Record> * pNewNode; - HASH_NODE<_Record> * pNextNode; - HASH_NODE<_Record> ** ppPreviousNodeNextPointer; - - // - // Ownership of pRecord is not transferred to pNewNode yet, so remember - // to either set it to null before deleting pNewNode or add an extra - // reference later - this is to make sure we do not do an extra ref/deref - // which users may view as getting flushed out of the hash-table - // - pNewNode = new HASH_NODE<_Record>(pRecord, dwHash); - if (pNewNode == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - goto Finished; - } - - _tableLock.SharedAcquire(); - fLocked = TRUE; - - do - { - // - // Find the right place to add this node - // - if (FindNodeInternal(key, dwHash, &pNextNode, &ppPreviousNodeNextPointer)) - { - // - // If node already there, return error - // - pNewNode->_pRecord = NULL; - DeleteNode(pNewNode); - - // - // We should never leak this error to the end user - // because "file already exists" may be confusing. - // - hr = HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS); - goto Finished; - } - - // - // If another node got inserted in between, we will have to retry - // - pNewNode->_pNext = pNextNode; - } while (InterlockedCompareExchangePointer((PVOID *)ppPreviousNodeNextPointer, - pNewNode, - pNextNode) != pNextNode); - // pass ownership of pRecord now - if (pRecord != NULL) - { - ReferenceRecord(pRecord); - pRecord = NULL; - } - InterlockedIncrement((LONG *)&_nItems); - -Finished: - - if (fLocked) - { - _tableLock.SharedRelease(); - } - - if (SUCCEEDED(hr)) - { - RehashTableIfNeeded(); - } - - return hr; -} - -template -VOID -HASH_TABLE<_Record,_Key>::DeleteKey( - _Key key -) -{ - HASH_NODE<_Record> *pNode; - HASH_NODE<_Record> **ppPreviousNodeNextPointer; - - DWORD dwHash = CalcKeyHash(key); - - _tableLock.ExclusiveAcquire(); - - if (FindNodeInternal(key, dwHash, &pNode, &ppPreviousNodeNextPointer)) - { - *ppPreviousNodeNextPointer = pNode->_pNext; - DeleteNode(pNode); - _nItems--; - } - - _tableLock.ExclusiveRelease(); -} - -template -VOID -HASH_TABLE<_Record,_Key>::DeleteIf( - PFN_DELETE_IF pfnDeleteIf, - PVOID pvContext -) -{ - HASH_NODE<_Record> *pNode; - HASH_NODE<_Record> **ppPreviousNodeNextPointer; - - _tableLock.ExclusiveAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - ppPreviousNodeNextPointer = _ppBuckets + i; - pNode = *ppPreviousNodeNextPointer; - while (pNode != NULL) - { - // - // Non empty nodes deleted based on DeleteIf, empty nodes deleted - // if they have no children - // - if (pfnDeleteIf(pNode->_pRecord, pvContext)) - { - *ppPreviousNodeNextPointer = pNode->_pNext; - DeleteNode(pNode); - _nItems--; - } - else - { - ppPreviousNodeNextPointer = &pNode->_pNext; - } - - pNode = *ppPreviousNodeNextPointer; - } - } - - _tableLock.ExclusiveRelease(); -} - -template -VOID -HASH_TABLE<_Record,_Key>::Apply( - PFN_APPLY pfnApply, - PVOID pvContext -) -{ - HASH_NODE<_Record> *pNode; - - _tableLock.SharedAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - pNode = _ppBuckets[i]; - while (pNode != NULL) - { - if (pNode->_pRecord != NULL) - { - pfnApply(pNode->_pRecord, pvContext); - } - - pNode = pNode->_pNext; - } - } - - _tableLock.SharedRelease(); -} - -template -VOID -HASH_TABLE<_Record,_Key>::RehashTableIfNeeded( - VOID -) -{ - HASH_NODE<_Record> **ppBuckets; - DWORD nBuckets; - HASH_NODE<_Record> *pNode; - HASH_NODE<_Record> *pNextNode; - HASH_NODE<_Record> **ppNextPointer; - HASH_NODE<_Record> *pNewNextNode; - DWORD nNewBuckets; - - // - // If number of items has become too many, we will double the hash table - // size (we never reduce it however) - // - if (_nItems <= PRIME::GetPrime(2*_nBuckets)) - { - return; - } - - _tableLock.ExclusiveAcquire(); - - nNewBuckets = PRIME::GetPrime(2*_nBuckets); - - if (_nItems <= nNewBuckets) - { - goto Finished; - } - - nBuckets = nNewBuckets; - if (nBuckets >= 0xffffffff/sizeof(HASH_NODE<_Record> *)) - { - goto Finished; - } - ppBuckets = (HASH_NODE<_Record> **)HeapAlloc( - GetProcessHeap(), - HEAP_ZERO_MEMORY, - nBuckets*sizeof(HASH_NODE<_Record> *)); - if (ppBuckets == NULL) - { - goto Finished; - } - - // - // Take out nodes from the old hash table and insert in the new one, make - // sure to keep the hashes in increasing order - // - for (DWORD i=0; i<_nBuckets; i++) - { - pNode = _ppBuckets[i]; - while (pNode != NULL) - { - pNextNode = pNode->_pNext; - - ppNextPointer = ppBuckets + (pNode->_dwHash % nBuckets); - pNewNextNode = *ppNextPointer; - while (pNewNextNode != NULL && - pNewNextNode->_dwHash <= pNode->_dwHash) - { - ppNextPointer = &pNewNextNode->_pNext; - pNewNextNode = pNewNextNode->_pNext; - } - pNode->_pNext = pNewNextNode; - *ppNextPointer = pNode; - - pNode = pNextNode; - } - } - - HeapFree(GetProcessHeap(), 0, _ppBuckets); - _ppBuckets = ppBuckets; - _nBuckets = nBuckets; - ppBuckets = NULL; - -Finished: - - _tableLock.ExclusiveRelease(); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h deleted file mode 100644 index 80b70e97a937..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/listentry.h +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#ifndef _LIST_ENTRY_H -#define _LIST_ENTRY_H - -// -// Doubly-linked list manipulation routines. -// - - -#define InitializeListHead32(ListHead) (\ - (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead))) - - -FORCEINLINE -VOID -InitializeListHead( - IN PLIST_ENTRY ListHead - ) -{ - ListHead->Flink = ListHead->Blink = ListHead; -} - -FORCEINLINE -BOOLEAN -IsListEmpty( - IN const LIST_ENTRY * ListHead - ) -{ - return (BOOLEAN)(ListHead->Flink == ListHead); -} - -FORCEINLINE -BOOLEAN -RemoveEntryList( - IN PLIST_ENTRY Entry - ) -{ - PLIST_ENTRY Blink; - PLIST_ENTRY Flink; - - Flink = Entry->Flink; - Blink = Entry->Blink; - Blink->Flink = Flink; - Flink->Blink = Blink; - return (BOOLEAN)(Flink == Blink); -} - -FORCEINLINE -PLIST_ENTRY -RemoveHeadList( - IN PLIST_ENTRY ListHead - ) -{ - PLIST_ENTRY Flink; - PLIST_ENTRY Entry; - - Entry = ListHead->Flink; - Flink = Entry->Flink; - ListHead->Flink = Flink; - Flink->Blink = ListHead; - return Entry; -} - - - -FORCEINLINE -PLIST_ENTRY -RemoveTailList( - IN PLIST_ENTRY ListHead - ) -{ - PLIST_ENTRY Blink; - PLIST_ENTRY Entry; - - Entry = ListHead->Blink; - Blink = Entry->Blink; - ListHead->Blink = Blink; - Blink->Flink = ListHead; - return Entry; -} - - -FORCEINLINE -VOID -InsertTailList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY Entry - ) -{ - PLIST_ENTRY Blink; - - Blink = ListHead->Blink; - Entry->Flink = ListHead; - Entry->Blink = Blink; - Blink->Flink = Entry; - ListHead->Blink = Entry; -} - - -FORCEINLINE -VOID -InsertHeadList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY Entry - ) -{ - PLIST_ENTRY Flink; - - Flink = ListHead->Flink; - Entry->Flink = Flink; - Entry->Blink = ListHead; - Flink->Blink = Entry; - ListHead->Flink = Entry; -} - -FORCEINLINE -VOID -AppendTailList( - IN PLIST_ENTRY ListHead, - IN PLIST_ENTRY ListToAppend - ) -{ - PLIST_ENTRY ListEnd = ListHead->Blink; - - ListHead->Blink->Flink = ListToAppend; - ListHead->Blink = ListToAppend->Blink; - ListToAppend->Blink->Flink = ListHead; - ListToAppend->Blink = ListEnd; -} - -FORCEINLINE -PSINGLE_LIST_ENTRY -PopEntryList( - PSINGLE_LIST_ENTRY ListHead - ) -{ - PSINGLE_LIST_ENTRY FirstEntry; - FirstEntry = ListHead->Next; - if (FirstEntry != NULL) { - ListHead->Next = FirstEntry->Next; - } - - return FirstEntry; -} - - -FORCEINLINE -VOID -PushEntryList( - PSINGLE_LIST_ENTRY ListHead, - PSINGLE_LIST_ENTRY Entry - ) -{ - Entry->Next = ListHead->Next; - ListHead->Next = Entry; -} - - -#endif diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h deleted file mode 100644 index 960f663a98c1..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/macros.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _MACROS_H -#define _MACROS_H - -// -// The DIFF macro should be used around an expression involving pointer -// subtraction. The expression passed to DIFF is cast to a size_t type, -// allowing the result to be easily assigned to any 32-bit variable or -// passed to a function expecting a 32-bit argument. -// - -#define DIFF(x) ((size_t)(x)) - -// Change a hexadecimal digit to its numerical equivalent -#define TOHEX( ch ) \ - ((ch) > L'9' ? \ - (ch) >= L'a' ? \ - (ch) - L'a' + 10 : \ - (ch) - L'A' + 10 \ - : (ch) - L'0') - - -// Change a number to its Hexadecimal equivalent - -#define TODIGIT( nDigit ) \ - (CHAR)((nDigit) > 9 ? \ - (nDigit) - 10 + 'A' \ - : (nDigit) + '0') - - -inline int -SAFEIsSpace(UCHAR c) -{ - return isspace( c ); -} - -inline int -SAFEIsAlNum(UCHAR c) -{ - return isalnum( c ); -} - -inline int -SAFEIsAlpha(UCHAR c) -{ - return isalpha( c ); -} - -inline int -SAFEIsXDigit(UCHAR c) -{ - return isxdigit( c ); -} - -inline int -SAFEIsDigit(UCHAR c) -{ - return isdigit( c ); -} - -#endif // _MACROS_H diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp deleted file mode 100644 index 775ec4cd0c96..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.cpp +++ /dev/null @@ -1,474 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - - -#pragma warning (disable : 4267) - -#include "precomp.h" -#include "multisz.h" -#include - -// -// Private Definitions -// - -#define MAXULONG 4294967295 -#define ISWHITE( ch ) ((ch) == L' ' || (ch) == L'\t' || (ch) == L'\r') - -// -// When appending data, this is the extra amount we request to avoid -// reallocations -// -#define STR_SLOP 128 - - -DWORD -MULTISZ::CalcLength( const WCHAR * str, - LPDWORD pcStrings ) -{ - DWORD count = 0; - DWORD total = 1; - DWORD len; - - while( *str ) { - len = ::wcslen( str ) + 1; - total += len; - str += len; - count++; - } - - if( pcStrings != NULL ) { - *pcStrings = count; - } - - return total; - -} // MULTISZ::CalcLength - - -BOOL -MULTISZ::FindString( const WCHAR * str ) -{ - - WCHAR * multisz; - - // - // Sanity check. - // - - DBG_ASSERT( QueryStr() != NULL ); - DBG_ASSERT( str != NULL ); - DBG_ASSERT( *str != '\0' ); - - // - // Scan it. - // - - multisz = QueryStr(); - - while( *multisz != '\0' ) { - - if( !::wcscmp( multisz, str ) ) { - - return TRUE; - - } - - multisz += ::wcslen( multisz ) + 1; - - } - - return FALSE; - -} // MULTISZ::FindString - - -BOOL -MULTISZ::FindStringNoCase( const WCHAR * str ) -{ - - WCHAR * multisz; - - // - // Sanity check. - // - - DBG_ASSERT( QueryStr() != NULL ); - DBG_ASSERT( str != NULL ); - DBG_ASSERT( *str != '\0' ); - - // - // Scan it. - // - - multisz = QueryStr(); - - while( *multisz != '\0' ) { - - if( !_wcsicmp( multisz, str ) ) { - - return TRUE; - - } - - multisz += wcslen( multisz ) + 1; - - } - - return FALSE; - -} // MULTISZ::FindStringNoCase - - -VOID -MULTISZ::AuxInit( const WCHAR * pInit ) -{ - BOOL fRet; - - if ( pInit ) - { - DWORD cStrings; - int cbCopy = CalcLength( pInit, &cStrings ) * sizeof(WCHAR); - fRet = Resize( cbCopy ); - - if ( fRet ) { - CopyMemory( QueryPtr(), pInit, cbCopy ); - m_cchLen = (cbCopy)/sizeof(WCHAR); - m_cStrings = cStrings; - } else { -// BUFFER::SetValid( FALSE); - } - - } else { - - Reset(); - - } - -} // MULTISZ::AuxInit() - - -/******************************************************************* - - NAME: MULTISZ::AuxAppend - - SYNOPSIS: Appends the string onto the multisz. - - ENTRY: Object to append -********************************************************************/ - -BOOL MULTISZ::AuxAppend( const WCHAR * pStr, UINT cbStr, BOOL fAddSlop ) -{ - DBG_ASSERT( pStr != NULL ); - - UINT cbThis = QueryCB(); - - DBG_ASSERT( cbThis >= 2 ); - - if( cbThis == 4 ) { - - // - // It's empty, so start at the beginning. - // - - cbThis = 0; - - } else { - - // - // It's not empty, so back up over the final terminating NULL. - // - - cbThis -= sizeof(WCHAR); - - } - - // - // Only resize when we have to. When we do resize, we tack on - // some extra space to avoid extra reallocations. - // - // Note: QuerySize returns the requested size of the string buffer, - // *not* the strlen of the buffer - // - - //AcIncrement( CacMultiszAppend); - - // - // Check for the arithmetic overflow - // - // ( 2 * sizeof( WCHAR ) ) is for the double terminator - // - ULONGLONG cb64Required = (ULONGLONG)cbThis + cbStr + 2 * sizeof(WCHAR); - if ( cb64Required > MAXULONG ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return FALSE; - } - if ( QuerySize() < (DWORD) cb64Required ) - { - ULONGLONG cb64AllocSize = cb64Required + (fAddSlop ? STR_SLOP : 0 ); - // - // Check for the arithmetic overflow - // - if ( cb64AllocSize > MAXULONG ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return FALSE; - } - if ( !Resize( (DWORD) cb64AllocSize ) ) - return FALSE; - } - - // copy the exact string and tack on the double terminator - memcpy( (BYTE *) QueryPtr() + cbThis, - pStr, - cbStr); - *(WCHAR *)((BYTE *)QueryPtr() + cbThis + cbStr) = L'\0'; - *(WCHAR *)((BYTE *)QueryPtr() + cbThis + cbStr + sizeof(WCHAR) ) = L'\0'; - - m_cchLen = CalcLength( (const WCHAR *)QueryPtr(), &m_cStrings ); - return TRUE; - -} // MULTISZ::AuxAppend() - - -#if 0 - -BOOL -MULTISZ::CopyToBuffer( WCHAR * lpszBuffer, LPDWORD lpcch) const -/*++ - Description: - Copies the string into the WCHAR buffer passed in if the buffer - is sufficient to hold the translated string. - If the buffer is small, the function returns small and sets *lpcch - to contain the required number of characters. - - Arguments: - lpszBuffer pointer to WCHAR buffer which on return contains - the UNICODE version of string on success. - lpcch pointer to DWORD containing the length of the buffer. - If *lpcch == 0 then the function returns TRUE with - the count of characters required stored in *lpcch. - Also in this case lpszBuffer is not affected. - Returns: - TRUE on success. - FALSE on failure. Use GetLastError() for further details. ---*/ -{ - BOOL fReturn = TRUE; - - if ( lpcch == NULL) { - SetLastError( ERROR_INVALID_PARAMETER); - return ( FALSE); - } - - if ( *lpcch == 0) { - - // - // Inquiring the size of buffer alone - // - *lpcch = QueryCCH() + 1; // add one character for terminating null - } else { - - // - // Copy after conversion from ANSI to Unicode - // - int iRet; - iRet = MultiByteToWideChar( CP_ACP, - MB_PRECOMPOSED | MB_ERR_INVALID_CHARS, - QueryStrA(), QueryCCH() + 1, - lpszBuffer, (int )*lpcch); - - if ( iRet == 0 || iRet != (int ) *lpcch) { - - // - // Error in conversion. - // - fReturn = FALSE; - } - } - - return ( fReturn); -} // MULTISZ::CopyToBuffer() -#endif - -BOOL -MULTISZ::CopyToBuffer( __out_ecount_opt(*lpcch) WCHAR * lpszBuffer, LPDWORD lpcch) const -/*++ - Description: - Copies the string into the WCHAR buffer passed in if the buffer - is sufficient to hold the translated string. - If the buffer is small, the function returns small and sets *lpcch - to contain the required number of characters. - - Arguments: - lpszBuffer pointer to WCHAR buffer which on return contains - the string on success. - lpcch pointer to DWORD containing the length of the buffer. - If *lpcch == 0 then the function returns TRUE with - the count of characters required stored in lpcch. - Also in this case lpszBuffer is not affected. - Returns: - TRUE on success. - FALSE on failure. Use GetLastError() for further details. ---*/ -{ - BOOL fReturn = TRUE; - - if ( lpcch == NULL) { - SetLastError( ERROR_INVALID_PARAMETER); - return ( FALSE); - } - - register DWORD cch = QueryCCH(); - - if ( *lpcch >= cch) { - - DBG_ASSERT( lpszBuffer); - memcpy( lpszBuffer, QueryStr(), cch * sizeof(WCHAR)); - } else { - DBG_ASSERT( *lpcch < cch); - SetLastError( ERROR_INSUFFICIENT_BUFFER); - fReturn = FALSE; - } - - *lpcch = cch; - - return ( fReturn); -} // MULTISZ::CopyToBuffer() - -BOOL -MULTISZ::Equals( - MULTISZ* pmszRhs -) -// -// Compares this to pmszRhs, returns TRUE if equal -// -{ - DBG_ASSERT( NULL != pmszRhs ); - - PCWSTR pszLhs = First( ); - PCWSTR pszRhs = pmszRhs->First( ); - - if( m_cStrings != pmszRhs->m_cStrings ) - { - return FALSE; - } - - while( NULL != pszLhs ) - { - DBG_ASSERT( NULL != pszRhs ); - - if( 0 != wcscmp( pszLhs, pszRhs ) ) - { - return FALSE; - } - - pszLhs = Next( pszLhs ); - pszRhs = pmszRhs->Next( pszRhs ); - } - - return TRUE; -} - -HRESULT -SplitCommaDelimitedString( - PCWSTR pszList, - BOOL fTrimEntries, - BOOL fRemoveEmptyEntries, - MULTISZ * pmszList -) -/*++ - -Routine Description: - - Split comma delimited string into a multisz. Additional leading empty - entries after the first are discarded. - -Arguments: - - pszList - List to split up - fTrimEntries - Whether each entry should be trimmed before added to multisz - fRemoveEmptyEntries - Whether empty entires should be discarded - pmszList - Filled with MULTISZ list - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - - if ( pszList == NULL || - pmszList == NULL ) - { - DBG_ASSERT( FALSE ); - hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - goto Finished; - } - - pmszList->Reset(); - - /* - pszCurrent: start of the current entry which may be the comma that - precedes the next entry if the entry is empty - - pszNext: the comma that precedes the next entry. If - pszCurrent == pszNext, then the entry is empty - - pszEnd: just past the end of the current entry - */ - - for ( PCWSTR pszCurrent = pszList, - pszNext = wcschr( pszCurrent, L',' ) - ; - ; - pszCurrent = pszNext + 1, - pszNext = wcschr( pszCurrent, L',' ) ) - { - PCWSTR pszEnd = NULL; - - if ( pszNext != NULL ) - { - pszEnd = pszNext; - } - else - { - pszEnd = pszCurrent + wcslen( pszCurrent ); - } - - if ( fTrimEntries ) - { - while ( pszCurrent < pszEnd && ISWHITE( pszCurrent[ 0 ] ) ) - { - pszCurrent++; - } - - while ( pszEnd > pszCurrent && ISWHITE( pszEnd[ -1 ] ) ) - { - pszEnd--; - } - } - - if ( pszCurrent != pszEnd || !fRemoveEmptyEntries ) - { - if ( !pmszList->Append( pszCurrent, (DWORD) ( pszEnd - pszCurrent ) ) ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - } - - if ( pszNext == NULL ) - { - break; - } - } - -Finished: - - return hr; -} - -#pragma warning(default:4267) \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h deleted file mode 100644 index f65c151d4ff0..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisz.h +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _MULTISZ_H_ -#define _MULTISZ_H_ - -#include "stringu.h" -#include "ntassert.h" - -/*++ - class MULTISZ: - - Intention: - A light-weight multi-string class supporting encapsulated string class. - - This object is derived from BUFFER class. - It maintains following state: - - m_fValid - whether this object is valid - - used only by MULTISZ() init functions - * NYI: I need to kill this someday * - m_cchLen - string length cached when we update the string. - m_cStrings - number of strings. - - Member Functions: - There are two categories of functions: - 1) Safe Functions - which do integrity checking of state - 2) UnSafe Functions - which do not do integrity checking, but - enable writing to the data stream freely. - (someday this will be enabled as Safe versions without - problem for users) - ---*/ -class MULTISZ : public BUFFER -{ -public: - - MULTISZ() - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { Reset(); } - - // creates a stack version of the MULTISZ object - uses passed in stack buffer - // MULTISZ does not free this pbInit on its own. - MULTISZ( __in_bcount(cbInit) WCHAR * pbInit, DWORD cbInit) - : BUFFER( (BYTE *) pbInit, cbInit), - m_cchLen (0), - m_cStrings(0) - {} - - MULTISZ( const WCHAR * pchInit ) - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { AuxInit(pchInit); } - - MULTISZ( const MULTISZ & str ) - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { AuxInit( str.QueryStr()); } - -// BOOL IsValid(VOID) const { return ( BUFFER::IsValid()) ; } - // - // Checks and returns TRUE if this string has no valid data else FALSE - // - BOOL IsEmpty( VOID) const { return ( *QueryStr() == L'\0'); } - - BOOL Append( const WCHAR * pchInit ) { - return ((pchInit != NULL) ? (AuxAppend( pchInit, - (DWORD) (::wcslen(pchInit)) * sizeof(WCHAR) - )) : - TRUE); - } - - - BOOL Append( const WCHAR * pchInit, DWORD cchLen ) { - return ((pchInit != NULL) ? (AuxAppend( pchInit, - cchLen * sizeof(WCHAR))) : - TRUE); - } - - BOOL Append( STRU & str ) - { return AuxAppend( str.QueryStr(), - (str.QueryCCH()) * sizeof(WCHAR)); } - - // Resets the internal string to be NULL string. Buffer remains cached. - VOID Reset( VOID) - { DBG_ASSERT( QueryPtr() != NULL); - QueryStr()[0] = L'\0'; - QueryStr()[1] = L'\0'; - m_cchLen = 2; - m_cStrings = 0; - } - - BOOL Copy( const WCHAR * pchInit, IN DWORD cbLen ) { - if ( QueryPtr() ) { Reset(); } - return ( (pchInit != NULL) ? - AuxAppend( pchInit, cbLen, FALSE ): - TRUE); - } - - BOOL Copy( const MULTISZ & str ) - { return ( Copy(str.QueryStr(), str.QueryCB())); } - - // - // Returns the number of bytes in the string including the terminating - // NULLs - // - UINT QueryCB( VOID ) const - { return ( m_cchLen * sizeof(WCHAR)); } - - // - // Returns # of characters in the string including the terminating NULLs - // - UINT QueryCCH( VOID ) const { return (m_cchLen); } - - // - // Returns # of strings in the multisz. - // - - DWORD QueryStringCount( VOID ) const { return m_cStrings; } - - // - // Makes a copy of the stored string in given buffer - // - BOOL CopyToBuffer( __out_ecount_opt(*lpcch) WCHAR * lpszBuffer, LPDWORD lpcch) const; - - // - // Return the string buffer - // - WCHAR * QueryStrA( VOID ) const { return ( QueryStr()); } - WCHAR * QueryStr( VOID ) const { return ((WCHAR *) QueryPtr()); } - - // - // Makes a clone of the current string in the string pointer passed in. - // - BOOL - Clone( OUT MULTISZ * pstrClone) const - { - return ((pstrClone == NULL) ? - (SetLastError(ERROR_INVALID_PARAMETER), FALSE) : - (pstrClone->Copy( *this)) - ); - } // MULTISZ::Clone() - - // - // Recalculates the length of *this because we've modified the buffers - // directly - // - - VOID RecalcLen( VOID ) - { m_cchLen = MULTISZ::CalcLength( QueryStr(), &m_cStrings ); } - - // - // Calculate total character length of a MULTI_SZ, including the - // terminating NULLs. - // - - static DWORD CalcLength( const WCHAR * str, - LPDWORD pcStrings = NULL ); - - // - // Determine if the MULTISZ contains a specific string. - // - - BOOL FindString( const WCHAR * str ); - - BOOL FindString( STRU & str ) - { return FindString( str.QueryStr() ); } - - // - // Determine if the MULTISZ contains a specific string - case-insensitive - // - - BOOL FindStringNoCase( const WCHAR * str ); - - BOOL FindStringNoCase( STRU & str ) - { return FindStringNoCase( str.QueryStr() ); } - - // - // Used for scanning a multisz. - // - - const WCHAR * First( VOID ) const - { return *QueryStr() == L'\0' ? NULL : QueryStr(); } - - const WCHAR * Next( const WCHAR * Current ) const - { Current += ::wcslen( Current ) + 1; - return *Current == L'\0' ? NULL : Current; } - - BOOL - Equals( - MULTISZ* pmszRhs - ); - -private: - - DWORD m_cchLen; - DWORD m_cStrings; - VOID AuxInit( const WCHAR * pInit ); - BOOL AuxAppend( const WCHAR * pInit, - UINT cbStr, BOOL fAddSlop = TRUE ); - -}; - -// -// Quick macro for declaring a MULTISZ that will use stack memory of -// bytes. If the buffer overflows then a heap buffer will be allocated -// - -#define STACK_MULTISZ( name, size ) WCHAR __ach##name[size]; \ - MULTISZ name( __ach##name, sizeof( __ach##name )) - -HRESULT -SplitCommaDelimitedString( - PCWSTR pszList, - BOOL fTrimEntries, - BOOL fRemoveEmptyEntries, - MULTISZ * pmszList -); - -#endif // !_MULTISZ_HXX_ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp deleted file mode 100644 index 54717edf0528..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.cpp +++ /dev/null @@ -1,408 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma warning (disable : 4267) -#include "precomp.h" -#include "multisza.h" -#include - -// -// Private Definitions -// - -#define MAXULONG 4294967295 -#define ISWHITE( ch ) ((ch) == L' ' || (ch) == L'\t' || (ch) == L'\r') - -// -// When appending data, this is the extra amount we request to avoid -// reallocations -// -#define STR_SLOP 128 - - -DWORD -MULTISZA::CalcLength( const CHAR * str, - LPDWORD pcStrings ) -{ - DWORD count = 0; - DWORD total = 1; - DWORD len; - - while( *str ) { - len = ::strlen( str ) + 1; - total += len; - str += len; - count++; - } - - if( pcStrings != NULL ) { - *pcStrings = count; - } - - return total; - -} // MULTISZA::CalcLength - - -BOOL -MULTISZA::FindString( const CHAR * str ) -{ - - CHAR * multisz; - - // - // Sanity check. - // - - DBG_ASSERT( QueryStr() != NULL ); - DBG_ASSERT( str != NULL ); - DBG_ASSERT( *str != '\0' ); - - // - // Scan it. - // - - multisz = QueryStr(); - - while( *multisz != '\0' ) { - - if( !::strcmp( multisz, str ) ) { - - return TRUE; - - } - - multisz += ::strlen( multisz ) + 1; - - } - - return FALSE; - -} // MULTISZA::FindString - - -BOOL -MULTISZA::FindStringNoCase( const CHAR * str ) -{ - - CHAR * multisz; - - // - // Sanity check. - // - - DBG_ASSERT( QueryStr() != NULL ); - DBG_ASSERT( str != NULL ); - DBG_ASSERT( *str != '\0' ); - - // - // Scan it. - // - - multisz = QueryStr(); - - while( *multisz != '\0' ) { - - if( !_stricmp( multisz, str ) ) { - - return TRUE; - - } - - multisz += strlen( multisz ) + 1; - - } - - return FALSE; - -} // MULTISZA::FindStringNoCase - - -VOID -MULTISZA::AuxInit( const CHAR * pInit ) -{ - BOOL fRet; - - if ( pInit ) - { - DWORD cStrings; - int cbCopy = CalcLength( pInit, &cStrings ) * sizeof(CHAR); - fRet = Resize( cbCopy ); - - if ( fRet ) { - CopyMemory( QueryPtr(), pInit, cbCopy ); - m_cchLen = (cbCopy)/sizeof(CHAR); - m_cStrings = cStrings; - } else { -// BUFFER::SetValid( FALSE); - } - - } else { - - Reset(); - - } - -} // MULTISZA::AuxInit() - - -/******************************************************************* - - NAME: MULTISZA::AuxAppend - - SYNOPSIS: Appends the string onto the MULTISZA. - - ENTRY: Object to append -********************************************************************/ - -BOOL MULTISZA::AuxAppend( const CHAR * pStr, UINT cbStr, BOOL fAddSlop ) -{ - DBG_ASSERT( pStr != NULL ); - - UINT cbThis = QueryCB(); - - if( cbThis == 2 ) { - - // - // It's empty, so start at the beginning. - // - - cbThis = 0; - - } else { - - // - // It's not empty, so back up over the final terminating NULL. - // - - cbThis -= sizeof(CHAR); - - } - - // - // Only resize when we have to. When we do resize, we tack on - // some extra space to avoid extra reallocations. - // - // Note: QuerySize returns the requested size of the string buffer, - // *not* the strlen of the buffer - // - - //AcIncrement( CacMultiszAppend); - - // - // Check for the arithmetic overflow - // - // ( 2 * sizeof( CHAR ) ) is for the double terminator - // - ULONGLONG cb64Required = (ULONGLONG)cbThis + cbStr + 2 * sizeof(CHAR); - if ( cb64Required > MAXULONG ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return FALSE; - } - if ( QuerySize() < (DWORD) cb64Required ) - { - ULONGLONG cb64AllocSize = cb64Required + (fAddSlop ? STR_SLOP : 0 ); - // - // Check for the arithmetic overflow - // - if ( cb64AllocSize > MAXULONG ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return FALSE; - } - if ( !Resize( (DWORD) cb64AllocSize ) ) - return FALSE; - } - - // copy the exact string and tack on the double terminator - memcpy( (BYTE *) QueryPtr() + cbThis, - pStr, - cbStr); - *(CHAR *)((BYTE *)QueryPtr() + cbThis + cbStr) = L'\0'; - *(CHAR *)((BYTE *)QueryPtr() + cbThis + cbStr + sizeof(CHAR) ) = L'\0'; - - m_cchLen = CalcLength( (const CHAR *)QueryPtr(), &m_cStrings ); - return TRUE; - -} // MULTISZA::AuxAppend() - -BOOL -MULTISZA::CopyToBuffer( __out_ecount_opt(*lpcch) CHAR * lpszBuffer, LPDWORD lpcch) const -/*++ - Description: - Copies the string into the CHAR buffer passed in if the buffer - is sufficient to hold the translated string. - If the buffer is small, the function returns small and sets *lpcch - to contain the required number of characters. - - Arguments: - lpszBuffer pointer to CHAR buffer which on return contains - the string on success. - lpcch pointer to DWORD containing the length of the buffer. - If *lpcch == 0 then the function returns TRUE with - the count of characters required stored in lpcch. - Also in this case lpszBuffer is not affected. - Returns: - TRUE on success. - FALSE on failure. Use GetLastError() for further details. ---*/ -{ - BOOL fReturn = TRUE; - - if ( lpcch == NULL) { - SetLastError( ERROR_INVALID_PARAMETER); - return ( FALSE); - } - - register DWORD cch = QueryCCH(); - - if ( *lpcch >= cch) { - - DBG_ASSERT( lpszBuffer); - memcpy( lpszBuffer, QueryStr(), cch * sizeof(CHAR)); - } else { - DBG_ASSERT( *lpcch < cch); - SetLastError( ERROR_INSUFFICIENT_BUFFER); - fReturn = FALSE; - } - - *lpcch = cch; - - return ( fReturn); -} // MULTISZA::CopyToBuffer() - -BOOL -MULTISZA::Equals( - MULTISZA* pmszRhs -) -// -// Compares this to pmszRhs, returns TRUE if equal -// -{ - DBG_ASSERT( NULL != pmszRhs ); - - PCSTR pszLhs = First( ); - PCSTR pszRhs = pmszRhs->First( ); - - if( m_cStrings != pmszRhs->m_cStrings ) - { - return FALSE; - } - - while( NULL != pszLhs ) - { - DBG_ASSERT( NULL != pszRhs ); - - if( 0 != strcmp( pszLhs, pszRhs ) ) - { - return FALSE; - } - - pszLhs = Next( pszLhs ); - pszRhs = pmszRhs->Next( pszRhs ); - } - - return TRUE; -} - -HRESULT -SplitCommaDelimitedString( - PCSTR pszList, - BOOL fTrimEntries, - BOOL fRemoveEmptyEntries, - MULTISZA * pmszList -) -/*++ - -Routine Description: - - Split comma delimited string into a MULTISZA. Additional leading empty - entries after the first are discarded. - -Arguments: - - pszList - List to split up - fTrimEntries - Whether each entry should be trimmed before added to MULTISZA - fRemoveEmptyEntries - Whether empty entires should be discarded - pmszList - Filled with MULTISZA list - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - - if ( pszList == NULL || - pmszList == NULL ) - { - DBG_ASSERT( FALSE ); - hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - goto Finished; - } - - pmszList->Reset(); - - /* - pszCurrent: start of the current entry which may be the comma that - precedes the next entry if the entry is empty - - pszNext: the comma that precedes the next entry. If - pszCurrent == pszNext, then the entry is empty - - pszEnd: just past the end of the current entry - */ - - for ( PCSTR pszCurrent = pszList, - pszNext = strchr( pszCurrent, L',' ) - ; - ; - pszCurrent = pszNext + 1, - pszNext = strchr( pszCurrent, L',' ) ) - { - PCSTR pszEnd = NULL; - - if ( pszNext != NULL ) - { - pszEnd = pszNext; - } - else - { - pszEnd = pszCurrent + strlen( pszCurrent ); - } - - if ( fTrimEntries ) - { - while ( pszCurrent < pszEnd && ISWHITE( pszCurrent[ 0 ] ) ) - { - pszCurrent++; - } - - while ( pszEnd > pszCurrent && ISWHITE( pszEnd[ -1 ] ) ) - { - pszEnd--; - } - } - - if ( pszCurrent != pszEnd || !fRemoveEmptyEntries ) - { - if ( !pmszList->Append( pszCurrent, (DWORD) ( pszEnd - pszCurrent ) ) ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - } - - if ( pszNext == NULL ) - { - break; - } - } - -Finished: - - return hr; -} -#pragma warning(default:4267) \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h deleted file mode 100644 index d575ec94239b..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/multisza.h +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _MULTISZA_H_ -#define _MULTISZA_H_ - -#include -#include "stringa.h" - - -/*++ - class MULTISZ: - - Intention: - A light-weight multi-string class supporting encapsulated string class. - - This object is derived from BUFFER class. - It maintains following state: - - m_fValid - whether this object is valid - - used only by MULTISZ() init functions - * NYI: I need to kill this someday * - m_cchLen - string length cached when we update the string. - m_cStrings - number of strings. - - Member Functions: - There are two categories of functions: - 1) Safe Functions - which do integrity checking of state - 2) UnSafe Functions - which do not do integrity checking, but - enable writing to the data stream freely. - (someday this will be enabled as Safe versions without - problem for users) - ---*/ -class MULTISZA : public BUFFER -{ -public: - - MULTISZA() - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { Reset(); } - - // creates a stack version of the MULTISZA object - uses passed in stack buffer - // MULTISZA does not free this pbInit on its own. - MULTISZA( __in_bcount(cbInit) CHAR * pbInit, DWORD cbInit) - : BUFFER( (BYTE *) pbInit, cbInit), - m_cchLen (0), - m_cStrings(0) - {} - - MULTISZA( const CHAR * pchInit ) - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { AuxInit(pchInit); } - - MULTISZA( const MULTISZA & str ) - : BUFFER (), - m_cchLen ( 0), - m_cStrings(0) - { AuxInit( str.QueryStr()); } - -// BOOL IsValid(VOID) const { return ( BUFFER::IsValid()) ; } - // - // Checks and returns TRUE if this string has no valid data else FALSE - // - BOOL IsEmpty( VOID) const { return ( *QueryStr() == L'\0'); } - - BOOL Append( const CHAR * pchInit ) { - return ((pchInit != NULL) ? (AuxAppend( pchInit, - (DWORD) (::strlen(pchInit)) * sizeof(CHAR) - )) : - TRUE); - } - - - BOOL Append( const CHAR * pchInit, DWORD cchLen ) { - return ((pchInit != NULL) ? (AuxAppend( pchInit, - cchLen * sizeof(CHAR))) : - TRUE); - } - - BOOL Append( STRA & str ) - { return AuxAppend( str.QueryStr(), - (str.QueryCCH()) * sizeof(CHAR)); } - - // Resets the internal string to be NULL string. Buffer remains cached. - VOID Reset( VOID) - { DBG_ASSERT( QueryPtr() != NULL); - QueryStr()[0] = L'\0'; - QueryStr()[1] = L'\0'; - m_cchLen = 2; - m_cStrings = 0; - } - - BOOL Copy( const CHAR * pchInit, IN DWORD cbLen ) { - if ( QueryPtr() ) { Reset(); } - return ( (pchInit != NULL) ? - AuxAppend( pchInit, cbLen, FALSE ): - TRUE); - } - - BOOL Copy( const MULTISZA & str ) - { return ( Copy(str.QueryStr(), str.QueryCB())); } - - // - // Returns the number of bytes in the string including the terminating - // NULLs - // - UINT QueryCB( VOID ) const - { return ( m_cchLen * sizeof(CHAR)); } - - // - // Returns # of characters in the string including the terminating NULLs - // - UINT QueryCCH( VOID ) const { return (m_cchLen); } - - // - // Returns # of strings in the MULTISZA. - // - - DWORD QueryStringCount( VOID ) const { return m_cStrings; } - - // - // Makes a copy of the stored string in given buffer - // - BOOL CopyToBuffer( __out_ecount_opt(*lpcch) CHAR * lpszBuffer, LPDWORD lpcch) const; - - // - // Return the string buffer - // - CHAR * QueryStrA( VOID ) const { return ( QueryStr()); } - CHAR * QueryStr( VOID ) const { return ((CHAR *) QueryPtr()); } - - // - // Makes a clone of the current string in the string pointer passed in. - // - BOOL - Clone( OUT MULTISZA * pstrClone) const - { - return ((pstrClone == NULL) ? - (SetLastError(ERROR_INVALID_PARAMETER), FALSE) : - (pstrClone->Copy( *this)) - ); - } // MULTISZA::Clone() - - // - // Recalculates the length of *this because we've modified the buffers - // directly - // - - VOID RecalcLen( VOID ) - { m_cchLen = MULTISZA::CalcLength( QueryStr(), &m_cStrings ); } - - // - // Calculate total character length of a MULTI_SZ, including the - // terminating NULLs. - // - - static DWORD CalcLength( const CHAR * str, - LPDWORD pcStrings = NULL ); - - // - // Determine if the MULTISZA contains a specific string. - // - - BOOL FindString( const CHAR * str ); - - BOOL FindString( STRA & str ) - { return FindString( str.QueryStr() ); } - - // - // Determine if the MULTISZA contains a specific string - case-insensitive - // - - BOOL FindStringNoCase( const CHAR * str ); - - BOOL FindStringNoCase( STRA & str ) - { return FindStringNoCase( str.QueryStr() ); } - - // - // Used for scanning a MULTISZA. - // - - const CHAR * First( VOID ) const - { return *QueryStr() == L'\0' ? NULL : QueryStr(); } - - const CHAR * Next( const CHAR * Current ) const - { Current += ::strlen( Current ) + 1; - return *Current == L'\0' ? NULL : Current; } - - BOOL - Equals( - MULTISZA* pmszRhs - ); - -private: - - DWORD m_cchLen; - DWORD m_cStrings; - VOID AuxInit( const CHAR * pInit ); - BOOL AuxAppend( const CHAR * pInit, - UINT cbStr, BOOL fAddSlop = TRUE ); - -}; - -// -// Quick macro for declaring a MULTISZA that will use stack memory of -// bytes. If the buffer overflows then a heap buffer will be allocated -// - -#define STACK_MULTISZA( name, size ) CHAR __ach##name[size]; \ - MULTISZA name( __ach##name, sizeof( __ach##name )) - -HRESULT -SplitCommaDelimitedString( - PCSTR pszList, - BOOL fTrimEntries, - BOOL fRemoveEmptyEntries, - MULTISZA * pmszList -); - -#endif // !_MULTISZA_HXX_ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h deleted file mode 100644 index 6d2f3b9a300d..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/ntassert.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#ifdef _ASSERTE - #undef _ASSERTE -#endif - -#ifdef ASSERT - #undef ASSERT -#endif - -#if defined( DBG ) && DBG - #define SX_ASSERT( _x ) ( (VOID)( ( ( _x ) ) ? TRUE : ( __annotation( L"Debug", L"AssertFail", L#_x ), DbgRaiseAssertionFailure(), FALSE ) ) ) - #define SX_ASSERTMSG( _m, _x ) ( (VOID)( ( ( _x ) ) ? TRUE : ( __annotation( L"Debug", L"AssertFail", L##_m ), DbgRaiseAssertionFailure(), FALSE ) ) ) - #define SX_VERIFY( _x ) SX_ASSERT( _x ) - #define _ASSERTE( _x ) SX_ASSERT( _x ) - #define ASSERT( _x ) SX_ASSERT( _x ) - #define assert( _x ) SX_ASSERT( _x ) - #define DBG_ASSERT( _x ) SX_ASSERT( _x ) - #define DBG_REQUIRE( _x ) SX_ASSERT( _x ) -#else - #define SX_ASSERT( _x ) ( (VOID)0 ) - #define SX_ASSERTMSG( _m, _x ) ( (VOID)0 ) - #define SX_VERIFY( _x ) ( (VOID)( ( _x ) ? TRUE : FALSE ) ) - #define _ASSERTE( _x ) ( (VOID)0 ) - #define assert( _x ) ( (VOID)0 ) - #define DBG_ASSERT( _x ) ( (VOID)0 ) - #define DBG_REQUIRE( _x ) ((VOID)(_x)) -#endif - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h deleted file mode 100644 index 5d3c56393520..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/percpu.h +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -template -class PER_CPU -{ -public: - - template - inline - static - HRESULT - Create( - FunctionInitializer Initializer, - __deref_out PER_CPU ** ppInstance - ); - - inline - T * - GetLocal( - VOID - ); - - template - inline - VOID - ForEach( - FunctionForEach Function - ); - - inline - VOID - Dispose( - VOID - ); - -private: - - PER_CPU( - VOID - ) - { - // - // Don't perform any operation during constructor. - // Constructor will never be called. - // - } - - ~PER_CPU( - VOID - ) - { - // - // Don't perform any operation during destructor. - // Constructor will never be called. - // - } - - template - HRESULT - Initialize( - FunctionInitializer Initializer, - DWORD NumberOfVariables, - DWORD Alignment - ); - - T * - GetObject( - DWORD Index - ); - - static - HRESULT - GetProcessorInformation( - __out DWORD * pCacheLineSize, - __out DWORD * pNumberOfProcessors - ); - - // - // Pointer to the begining of the inlined array. - // - PVOID m_pVariables; - SIZE_T m_Alignment; - SIZE_T m_VariablesCount; -}; - -template -template -inline -// static -HRESULT -PER_CPU::Create( - FunctionInitializer Initializer, - __deref_out PER_CPU ** ppInstance -) -{ - HRESULT hr = S_OK; - DWORD CacheLineSize = 0; - DWORD ObjectCacheLineSize = 0; - DWORD NumberOfProcessors = 0; - PER_CPU * pInstance = NULL; - - hr = GetProcessorInformation(&CacheLineSize, - &NumberOfProcessors); - if (FAILED(hr)) - { - goto Finished; - } - - if (sizeof(T) > CacheLineSize) - { - // - // Round to the next multiple of the cache line size. - // - ObjectCacheLineSize = (sizeof(T) + CacheLineSize-1) & (CacheLineSize-1); - } - else - { - ObjectCacheLineSize = CacheLineSize; - } - - // - // Calculate the size of the PER_CPU object, including the array. - // The first cache line is for the member variables and the array - // starts in the next cache line. - // - SIZE_T Size = CacheLineSize + NumberOfProcessors * ObjectCacheLineSize; - - pInstance = (PER_CPU*) _aligned_malloc(Size, CacheLineSize); - if (pInstance == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - ZeroMemory(pInstance, Size); - - // - // The array start in the 2nd cache line. - // - pInstance->m_pVariables = reinterpret_cast(pInstance) + CacheLineSize; - - // - // Pass a disposer for disposing initialized items in case of failure. - // - hr = pInstance->Initialize(Initializer, - NumberOfProcessors, - ObjectCacheLineSize); - if (FAILED(hr)) - { - goto Finished; - } - - *ppInstance = pInstance; - pInstance = NULL; - -Finished: - - if (pInstance != NULL) - { - // - // Free the instance without disposing it. - // - pInstance->Dispose(); - pInstance = NULL; - } - - return hr; -} - -template -inline -T * -PER_CPU::GetLocal( - VOID -) -{ - // Use GetCurrentProcessorNumber (up to 64 logical processors) instead of - // GetCurrentProcessorNumberEx (more than 64 logical processors) because - // the number of processors are not densely packed per group. - // The idea of distributing variables per CPU is to have - // a scalability multiplier (could be NUMA node instead). - // - // Make sure the index don't go beyond the array size, if that happens, - // there won't be even distribution, but still better - // than one single variable. - // - return GetObject(GetCurrentProcessorNumber()); -} - -template -inline -T * -PER_CPU::GetObject( - DWORD Index -) -{ - return reinterpret_cast(static_cast(m_pVariables) + Index * m_Alignment); -} - -template -template -inline -VOID -PER_CPU::ForEach( - FunctionForEach Function -) -{ - for(DWORD Index = 0; Index < m_VariablesCount; ++Index) - { - T * pObject = GetObject(Index); - Function(pObject); - } -} - -template -VOID -PER_CPU::Dispose( - VOID -) -{ - _aligned_free(this); -} - -template -template -inline -HRESULT -PER_CPU::Initialize( - FunctionInitializer Initializer, - DWORD NumberOfVariables, - DWORD Alignment -) -/*++ - -Routine Description: - - Initialize each object using the initializer function. - If initialization for any object fails, it dispose the - objects that were successfully initialized. - -Arguments: - - Initializer - Function for initialize one object. - Signature: HRESULT Func(T*) - Dispose - Function for disposing initialized objects in case of failure. - Signature: void Func(T*) - NumberOfVariables - The length of the array of variables. - Alignment - Alignment to use for avoiding false sharing. - -Return: - - HRESULT - E_OUTOFMEMORY - ---*/ -{ - HRESULT hr = S_OK; - DWORD Index = 0; - - m_VariablesCount = NumberOfVariables; - m_Alignment = Alignment; - - for (; Index < m_VariablesCount; ++Index) - { - T * pObject = GetObject(Index); - Initializer(pObject); - } - - return hr; -} - -template -// static -HRESULT -PER_CPU::GetProcessorInformation( - __out DWORD * pCacheLineSize, - __out DWORD * pNumberOfProcessors -) -/*++ - -Routine Description: - - Gets the CPU cache-line size for the current system. - This information is used for avoiding CPU false sharing. - -Arguments: - - pCacheLineSize - The processor cache-line size. - pNumberOfProcessors - Maximum number of processors per group. - -Return: - - HRESULT - E_OUTOFMEMORY - ---*/ -{ - SYSTEM_INFO SystemInfo = { }; - - GetSystemInfo(&SystemInfo); - *pNumberOfProcessors = SystemInfo.dwNumberOfProcessors; - *pCacheLineSize = SYSTEM_CACHE_ALIGNMENT_SIZE; - - return S_OK; -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h deleted file mode 100644 index 9cccea404557..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/precomp.h +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include -#include -#pragma warning( disable:4127 ) -#include -#include -#include -#include -#include -#include - -#include "macros.h" -#include "stringu.h" -#include "stringa.h" -#include "dbgutil.h" -#include "ntassert.h" -#include "ahutil.h" -#include "acache.h" -//#include "base64.hxx" - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h deleted file mode 100644 index 6a6a88ed780e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/prime.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include -#include - -// -// Pre-calculated prime numbers (up to 10,049,369). -// -extern __declspec(selectany) const DWORD g_Primes [] = { - 3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, 631, - 761, 919, 1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419, 10103, - 12143, 14591, 17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431, 90523, 108631, - 130363, 156437, 187751, 225307, 270371, 324449, 389357, 467237, 560689, 672827, 807403, - 968897, 1162687, 1395263, 1674319, 2009191, 2411033, 2893249, 3471899, 4166287, 4999559, - 5999471, 7199369, 7849369, 8649369, 9249369, 10049369 -}; - -class PRIME -{ -public: - - static - DWORD - GetPrime( - DWORD dwMinimum - ) - { - // - // Try to use the precalculated numbers. - // - for ( DWORD Index = 0; Index < _countof( g_Primes ); Index++ ) - { - DWORD dwCandidate = g_Primes[Index]; - if ( dwCandidate >= dwMinimum ) - { - return dwCandidate; - } - } - - // - // Do calculation. - // - for ( DWORD dwCandidate = dwMinimum | 1; - dwCandidate < MAXDWORD; - dwCandidate += 2 ) - { - if ( IsPrime( dwCandidate ) ) - { - return dwCandidate; - } - } - return dwMinimum; - } - -private: - - static - BOOL - IsPrime( - DWORD dwCandidate - ) - { - if ((dwCandidate & 1) == 0) - { - return ( dwCandidate == 2 ); - } - - DWORD dwMax = static_cast(sqrt(static_cast(dwCandidate))); - - for ( DWORD Index = 3; Index <= dwMax; Index += 2 ) - { - if ( (dwCandidate % Index) == 0 ) - { - return FALSE; - } - } - return TRUE; - } - - PRIME() {} - ~PRIME() {} -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/pudebug.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/pudebug.h deleted file mode 100644 index 7b0e35da0f17..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/pudebug.h +++ /dev/null @@ -1,736 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -# ifndef _PUDEBUG_H_ -# define _PUDEBUG_H_ - -#ifndef _NO_TRACING_ -# define _NO_TRACING_ -#endif // _NO_TRACING_ - -/************************************************************ - * Include Headers - ************************************************************/ - -# ifdef __cplusplus -extern "C" { -# endif // __cplusplus - -# include - -# ifndef dllexp -# define dllexp __declspec( dllexport) -# endif // dllexp - -#include - -#ifndef IN_OUT -#define IN_OUT __inout -#endif - -/*********************************************************** - * Macros - ************************************************************/ - -enum PRINT_REASONS { - PrintNone = 0x0, // Nothing to be printed - PrintError = 0x1, // An error message - PrintWarning = 0x2, // A warning message - PrintLog = 0x3, // Just logging. Indicates a trace of where ... - PrintMsg = 0x4, // Echo input message - PrintCritical = 0x5, // Print and Exit - PrintAssertion= 0x6 // Printing for an assertion failure - }; - - -enum DEBUG_OUTPUT_FLAGS { - DbgOutputNone = 0x0, // None - DbgOutputKdb = 0x1, // Output to Kernel Debugger - DbgOutputLogFile = 0x2, // Output to LogFile - DbgOutputTruncate = 0x4, // Truncate Log File if necessary - DbgOutputStderr = 0x8, // Send output to std error - DbgOutputBackup = 0x10, // Make backup of debug file ? - DbgOutputMemory = 0x20, // Dump to memory buffer - DbgOutputAll = 0xFFFFFFFF // All the bits set. - }; - - -# define MAX_LABEL_LENGTH ( 100) - - -// The following flags are used internally to track what level of tracing we -// are currently using. Bitmapped for extensibility. -#define DEBUG_FLAG_ODS 0x00000001 -//#define DEBUG_FLAG_INFO 0x00000002 -//#define DEBUG_FLAG_WARN 0x00000004 -//#define DEBUG_FLAG_ERROR 0x00000008 -// The following are used internally to determine whether to log or not based -// on what the current state is -//#define DEBUG_FLAGS_INFO (DEBUG_FLAG_ODS | DEBUG_FLAG_INFO) -//#define DEBUG_FLAGS_WARN (DEBUG_FLAG_ODS | DEBUG_FLAG_INFO | DEBUG_FLAG_WARN) -//#define DEBUG_FLAGS_ERROR (DEBUG_FLAG_ODS | DEBUG_FLAG_INFO | DEBUG_FLAG_WARN | DEBUG_FLAG_ERROR) - -#define DEBUG_FLAGS_ANY (DEBUG_FLAG_INFO | DEBUG_FLAG_WARN | DEBUG_FLAG_ERROR) - -// -// user of DEBUG infrastructure may choose unique variable name for DEBUG_FLAGS -// that's specially useful for cases where DEBUG infrastructure is used within -// static library (static library may prefer to maintain it's own DebugFlags independent -// on the main program it links to -// -#ifndef DEBUG_FLAGS_VAR -#define DEBUG_FLAGS_VAR g_dwDebugFlags -#endif - -extern -#ifdef __cplusplus -"C" -# endif // _cplusplus - DWORD DEBUG_FLAGS_VAR ; // Debugging Flags - -# define DECLARE_DEBUG_VARIABLE() - -# define SET_DEBUG_FLAGS( dwFlags) DEBUG_FLAGS_VAR = dwFlags -# define GET_DEBUG_FLAGS() ( DEBUG_FLAGS_VAR ) - -# define LOAD_DEBUG_FLAGS_FROM_REG(hkey, dwDefault) \ - DEBUG_FLAGS_VAR = PuLoadDebugFlagsFromReg((hkey), (dwDefault)) - -# define LOAD_DEBUG_FLAGS_FROM_REG_STR(pszRegKey, dwDefault) \ - DEBUG_FLAGS_VAR = PuLoadDebugFlagsFromRegStr((pszRegKey), (dwDefault)) - -# define SAVE_DEBUG_FLAGS_IN_REG(hkey, dwDbg) \ - PuSaveDebugFlagsInReg((hkey), (dwDbg)) - -# define DEBUG_IF( arg, s) if ( DEBUG_ ## arg & GET_DEBUG_FLAGS()) { \ - s \ - } else {} - -# define IF_DEBUG( arg) if ( DEBUG_## arg & GET_DEBUG_FLAGS()) - - -/*++ - class DEBUG_PRINTS - - This class is responsible for printing messages to log file / kernel debugger - - Currently the class supports only member functions for char. - ( not unicode-strings). - ---*/ - - -typedef struct _DEBUG_PRINTS { - - CHAR m_rgchLabel[MAX_LABEL_LENGTH]; - CHAR m_rgchLogFilePath[MAX_PATH]; - CHAR m_rgchLogFileName[MAX_PATH]; - HANDLE m_LogFileHandle; - HANDLE m_StdErrHandle; - BOOL m_fInitialized; - BOOL m_fBreakOnAssert; - DWORD m_dwOutputFlags; - VOID *m_pMemoryLog; -} DEBUG_PRINTS, FAR * LPDEBUG_PRINTS; - - -LPDEBUG_PRINTS -PuCreateDebugPrintsObject( - IN const char * pszPrintLabel, - IN DWORD dwOutputFlags); - -// -// frees the debug prints object and closes any file if necessary. -// Returns NULL on success or returns pDebugPrints on failure. -// -LPDEBUG_PRINTS -PuDeleteDebugPrintsObject( - IN_OUT LPDEBUG_PRINTS pDebugPrints); - - -VOID -PuDbgPrint( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN const char * pszFormat, - ...); - // arglist -VOID -PuDbgPrintW( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN const WCHAR * pszFormat, - ...); // arglist - -// PuDbgPrintError is similar to PuDbgPrint() but allows -// one to print error code in friendly manner -VOID -PuDbgPrintError( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN DWORD dwError, - IN const char * pszFormat, - ...); // arglist - -/*++ - PuDbgDump() does not do any formatting of output. - It just dumps the given message onto the debug destinations. ---*/ -VOID -PuDbgDump( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN const char * pszDump - ); - -// -// PuDbgAssertFailed() *must* be __cdecl to properly capture the -// thread context at the time of the failure. -// - -INT -__cdecl -PuDbgAssertFailed( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN const char * pszExpression, - IN const char * pszMessage); - -INT -WINAPI -PuDbgPrintAssertFailed( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName, - IN const char * pszExpression, - IN const char * pszMessage); - -VOID -PuDbgCaptureContext ( - OUT PCONTEXT ContextRecord - ); - -VOID -PuDbgPrintCurrentTime( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFilePath, - IN int nLineNum, - IN const char * pszFunctionName - ); - -VOID -PuSetDbgOutputFlags( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN DWORD dwFlags); - -DWORD -PuGetDbgOutputFlags( - IN const LPDEBUG_PRINTS pDebugPrints); - - -// -// Following functions return Win32 error codes. -// NO_ERROR if success -// - -DWORD -PuOpenDbgPrintFile( - IN_OUT LPDEBUG_PRINTS pDebugPrints, - IN const char * pszFileName, - IN const char * pszPathForFile); - -DWORD -PuReOpenDbgPrintFile( - IN_OUT LPDEBUG_PRINTS pDebugPrints); - -DWORD -PuCloseDbgPrintFile( - IN_OUT LPDEBUG_PRINTS pDebugPrints); - -DWORD -PuOpenDbgMemoryLog( - IN_OUT LPDEBUG_PRINTS pDebugPrints); - -DWORD -PuCloseDbgMemoryLog( - IN_OUT LPDEBUG_PRINTS pDebugPrints); - -DWORD -PuLoadDebugFlagsFromReg(IN HKEY hkey, IN DWORD dwDefault); - -DWORD -PuLoadDebugFlagsFromRegStr(IN LPCSTR pszRegKey, IN DWORD dwDefault); - -DWORD -PuSaveDebugFlagsInReg(IN HKEY hkey, IN DWORD dwDbg); - - -# define PuPrintToKdb( pszOutput) \ - if ( pszOutput != NULL) { \ - OutputDebugString( pszOutput); \ - } else {} - - - -# ifdef __cplusplus -}; -# endif // __cplusplus - -// begin_user_unmodifiable - - - -/*********************************************************** - * Macros - ************************************************************/ - - -extern -#ifdef __cplusplus -"C" -# endif // _cplusplus -DEBUG_PRINTS * g_pDebug; // define a global debug variable - -# if DBG - -// For the CHK build we want ODS enabled. For an explanation of these flags see -// the comment just after the definition of DBG_CONTEXT -# define DECLARE_DEBUG_PRINTS_OBJECT() \ - DEBUG_PRINTS * g_pDebug = NULL; \ - DWORD DEBUG_FLAGS_VAR = DEBUG_FLAG_ERROR; - -#else // !DBG - -# define DECLARE_DEBUG_PRINTS_OBJECT() \ - DEBUG_PRINTS * g_pDebug = NULL; \ - DWORD DEBUG_FLAGS_VAR = 0; - -#endif // !DBG - - -// -// Call the following macro as part of your initialization for program -// planning to use the debugging class. -// -/** DEBUGDEBUG -# define CREATE_DEBUG_PRINT_OBJECT( pszLabel) \ - g_pDebug = PuCreateDebugPrintsObject( pszLabel, DEFAULT_OUTPUT_FLAGS);\ - if ( g_pDebug == NULL) { \ - OutputDebugStringA( "Unable to Create Debug Print Object \n"); \ - } -*/ - -// -// Call the following macro once as part of the termination of program -// which uses the debugging class. -// -# define DELETE_DEBUG_PRINT_OBJECT( ) \ - g_pDebug = PuDeleteDebugPrintsObject( g_pDebug); - - -# define VALID_DEBUG_PRINT_OBJECT() \ - ( ( g_pDebug != NULL) && g_pDebug->m_fInitialized) - - -// -// Use the DBG_CONTEXT without any surrounding braces. -// This is used to pass the values for global DebugPrintObject -// and File/Line information -// -//# define DBG_CONTEXT g_pDebug, __FILE__, __LINE__, __FUNCTION__ - -// The 3 main tracing macros, each one corresponds to a different level of -// tracing - -// The 3 main tracing macros, each one corresponds to a different level of -// tracing -//# define DBGINFO(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_INFO) { PuDbgPrint args; }} -//# define DBGWARN(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_WARN) { PuDbgPrint args; }} -//# define DBGERROR(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_ERROR) { PuDbgPrint args; }} - -# define DBGINFOW(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_INFO) { PuDbgPrintW args; }} -# define DBGWARNW(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_WARN) { PuDbgPrintW args; }} -# define DBGERRORW(args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_ERROR) { PuDbgPrintW args; }} - - -// -// DBGPRINTF() is printing function ( much like printf) but always called -// with the DBG_CONTEXT as follows -// DBGPRINTF( ( DBG_CONTEXT, format-string, arguments for format list)); -// -# define DBGPRINTF DBGINFO - -// -// DPERROR() is printing function ( much like printf) but always called -// with the DBG_CONTEXT as follows -// DPERROR( ( DBG_CONTEXT, error, format-string, -// arguments for format list)); -// -# define DPERROR( args) {if (DEBUG_FLAGS_VAR & DEBUG_FLAGS_ERROR) { PuDbgPrintError args; }} - -# if DBG - -# define DBG_CODE(s) s /* echoes code in debugging mode */ - -// The same 3 main tracing macros however in this case the macros are only compiled -// into the CHK build. This is necessary because some tracing info used functions or -// variables which are not compiled into the FRE build. -# define CHKINFO(args) { PuDbgPrint args; } -# define CHKWARN(args) { PuDbgPrint args; } -# define CHKERROR(args) { PuDbgPrint args; } - -# define CHKINFOW(args) { PuDbgPrintW args; } -# define CHKWARNW(args) { PuDbgPrintW args; } -# define CHKERRORW(args) { PuDbgPrintW args; } - - -#ifndef DBG_ASSERT -# ifdef _PREFAST_ -# define DBG_ASSERT(exp) ((void)0) /* Do Nothing */ -# define DBG_ASSERT_MSG(exp, pszMsg) ((void)0) /* Do Nothing */ -# define DBG_REQUIRE( exp) ((void) (exp)) -# else // !_PREFAST_ -# define DBG_ASSERT( exp ) \ - ( (VOID)( ( exp ) || ( DebugBreak(), \ - PuDbgPrintAssertFailed( DBG_CONTEXT, #exp, "" ) ) ) ) - -# define DBG_ASSERT_MSG( exp, pszMsg) \ - ( (VOID)( ( exp ) || ( DebugBreak(), \ - PuDbgPrintAssertFailed( DBG_CONTEXT, #exp, pszMsg ) ) ) ) - -# define DBG_REQUIRE( exp ) \ - DBG_ASSERT( exp ) -# endif // !_PREFAST_ -#endif - - -# define DBG_LOG() PuDbgPrint( DBG_CONTEXT, "\n" ) - -# define DBG_OPEN_LOG_FILE( pszFile, pszPath ) \ - PuOpenDbgPrintFile( g_pDebug, (pszFile), (pszPath) ) - -# define DBG_CLOSE_LOG_FILE( ) \ - PuCloseDbgPrintFile( g_pDebug ) - -# define DBG_OPEN_MEMORY_LOG( ) \ - PuOpenDbgMemoryLog( g_pDebug ) - - -# define DBGDUMP( args ) PuDbgDump args - -# define DBGPRINT_CURRENT_TIME() PuDbgPrintCurrentTime( DBG_CONTEXT ) - -# else // !DBG - -# define DBG_CODE(s) ((void)0) /* Do Nothing */ - -# define CHKINFO(args) ((void)0) /* Do Nothing */ -# define CHKWARN(args) ((void)0) /* Do Nothing */ -# define CHKERROR(args) ((void)0) /* Do Nothing */ - -# define CHKINFOW(args) ((void)0) /* Do Nothing */ -# define CHKWARNW(args) ((void)0) /* Do Nothing */ -# define CHKERRORW(args) ((void)0) /* Do Nothing */ - -#ifndef DBG_ASSERT -# define DBG_ASSERT(exp) ((void)0) /* Do Nothing */ - -# define DBG_ASSERT_MSG(exp, pszMsg) ((void)0) /* Do Nothing */ - -# define DBG_REQUIRE( exp) ((void) (exp)) -#endif // !DBG_ASSERT - -# define DBGDUMP( args) ((void)0) /* Do nothing */ - -# define DBG_LOG() ((void)0) /* Do Nothing */ - -# define DBG_OPEN_LOG_FILE( pszFile, pszPath) ((void)0) /* Do Nothing */ - -# define DBG_OPEN_MEMORY_LOG() ((void)0) /* Do Nothing */ - -# define DBG_CLOSE_LOG_FILE() ((void)0) /* Do Nothing */ - -# define DBGPRINT_CURRENT_TIME() ((void)0) /* Do Nothing */ - -# endif // !DBG - - -// end_user_unmodifiable - -// begin_user_unmodifiable - - -#ifdef ASSERT -# undef ASSERT -#endif - - -# define ASSERT( exp) DBG_ASSERT( exp) - - -// end_user_unmodifiable - -// begin_user_modifiable - -// -// Debugging constants consist of two pieces. -// All constants in the range 0x0 to 0x8000 are reserved -// User extensions may include additional constants (bit flags) -// - -# define DEBUG_API_ENTRY 0x00000001L -# define DEBUG_API_EXIT 0x00000002L -# define DEBUG_INIT_CLEAN 0x00000004L -# define DEBUG_ERROR 0x00000008L - - // End of Reserved Range -# define DEBUG_RESERVED 0x00000FFFL - -// end_user_modifiable - - - -/*********************************************************** - * Platform Type related variables and macros - ************************************************************/ - -// -// Enum for product types -// - -typedef enum _PLATFORM_TYPE { - - PtInvalid = 0, // Invalid - PtNtWorkstation = 1, // NT Workstation - PtNtServer = 2, // NT Server - -} PLATFORM_TYPE; - -// -// IISGetPlatformType is the function used to the platform type -// - -extern -#ifdef __cplusplus -"C" -# endif // _cplusplus -PLATFORM_TYPE -IISGetPlatformType( - VOID - ); - -// -// External Macros -// - -#define InetIsNtServer( _pt ) ((_pt) == PtNtServer) -#define InetIsNtWksta( _pt ) ((_pt) == PtNtWorkstation) -#define InetIsValidPT(_pt) ((_pt) != PtInvalid) - -extern -#ifdef __cplusplus -"C" -# endif // _cplusplus -PLATFORM_TYPE g_PlatformType; - - -// Use the DECLARE_PLATFORM_TYPE macro to declare the platform type -#define DECLARE_PLATFORM_TYPE() \ - PLATFORM_TYPE g_PlatformType = PtInvalid; - -// Use the INITIALIZE_PLATFORM_TYPE to init the platform type -// This should typically go inside the DLLInit or equivalent place. -#define INITIALIZE_PLATFORM_TYPE() \ - g_PlatformType = IISGetPlatformType(); - -// -// Additional Macros to use the Platform Type -// - -#define TsIsNtServer( ) InetIsNtServer(g_PlatformType) -#define TsIsNtWksta( ) InetIsNtWksta(g_PlatformType) -#define IISIsValidPlatform() InetIsValidPT(g_PlatformType) -#define IISPlatformType() (g_PlatformType) - - -/*********************************************************** - * Some utility functions for Critical Sections - ************************************************************/ - -// -// IISSetCriticalSectionSpinCount() provides a thunk for the -// original NT4.0sp3 API SetCriticalSectionSpinCount() for CS with Spin counts -// Users of this function should definitely dynlink with kernel32.dll, -// Otherwise errors will surface to a large extent -// -extern -# ifdef __cplusplus -"C" -# endif // _cplusplus -DWORD -IISSetCriticalSectionSpinCount( - LPCRITICAL_SECTION lpCriticalSection, - DWORD dwSpinCount -); - - -// -// Macro for the calls to SetCriticalSectionSpinCount() -// -# define SET_CRITICAL_SECTION_SPIN_COUNT( lpCS, dwSpins) \ - IISSetCriticalSectionSpinCount( (lpCS), (dwSpins)) - -// -// IIS_DEFAULT_CS_SPIN_COUNT is the default value of spins used by -// Critical sections defined within IIS. -// NYI: We should have to switch the individual values based on experiments! -// Current value is an arbitrary choice -// -# define IIS_DEFAULT_CS_SPIN_COUNT (1000) - -// -// Initializes a critical section and sets its spin count -// to IIS_DEFAULT_CS_SPIN_COUNT. Equivalent to -// InitializeCriticalSectionAndSpinCount(lpCS, IIS_DEFAULT_CS_SPIN_COUNT), -// but provides a safe thunking layer for older systems that don't provide -// this API. -// -extern -# ifdef __cplusplus -"C" -# endif // _cplusplus -BOOL -IISInitializeCriticalSection( - LPCRITICAL_SECTION lpCriticalSection -); - -// -// Macro for the calls to InitializeCriticalSection() -// -# define INITIALIZE_CRITICAL_SECTION(lpCS) IISInitializeCriticalSection(lpCS) - -# endif /* _DEBUG_HXX_ */ - -// -// The following macros allow the automatic naming of certain Win32 objects. -// See IIS\SVCS\IISRTL\WIN32OBJ.C for details on the naming convention. -// -// Set IIS_NAMED_WIN32_OBJECTS to a non-zero value to enable named events, -// semaphores, and mutexes. -// - -#if DBG -#define IIS_NAMED_WIN32_OBJECTS 1 -#else -#define IIS_NAMED_WIN32_OBJECTS 0 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -HANDLE -PuDbgCreateEvent( - __in LPSTR FileName, - IN ULONG LineNumber, - __in LPSTR MemberName, - IN PVOID Address, - IN BOOL ManualReset, - IN BOOL InitialState - ); - -HANDLE -PuDbgCreateSemaphore( - __in LPSTR FileName, - IN ULONG LineNumber, - __in LPSTR MemberName, - IN PVOID Address, - IN LONG InitialCount, - IN LONG MaximumCount - ); - -HANDLE -PuDbgCreateMutex( - __in LPSTR FileName, - IN ULONG LineNumber, - __in LPSTR MemberName, - IN PVOID Address, - IN BOOL InitialOwner - ); - -#ifdef __cplusplus -} // extern "C" -#endif - -#if IIS_NAMED_WIN32_OBJECTS - -#define IIS_CREATE_EVENT( membername, address, manual, state ) \ - PuDbgCreateEvent( \ - (LPSTR)__FILE__, \ - (ULONG)__LINE__, \ - (membername), \ - (PVOID)(address), \ - (manual), \ - (state) \ - ) - -#define IIS_CREATE_SEMAPHORE( membername, address, initial, maximum ) \ - PuDbgCreateSemaphore( \ - (LPSTR)__FILE__, \ - (ULONG)__LINE__, \ - (membername), \ - (PVOID)(address), \ - (initial), \ - (maximum) \ - ) - -#define IIS_CREATE_MUTEX( membername, address, initial ) \ - PuDbgCreateMutex( \ - (LPSTR)__FILE__, \ - (ULONG)__LINE__, \ - (membername), \ - (PVOID)(address), \ - (initial) \ - ) - -#else // !IIS_NAMED_WIN32_OBJECTS - -#define IIS_CREATE_EVENT( membername, address, manual, state ) \ - CreateEventA( \ - NULL, \ - (manual), \ - (state), \ - NULL \ - ) - -#define IIS_CREATE_SEMAPHORE( membername, address, initial, maximum ) \ - CreateSemaphoreA( \ - NULL, \ - (initial), \ - (maximum), \ - NULL \ - ) - -#define IIS_CREATE_MUTEX( membername, address, initial ) \ - CreateMutexA( \ - NULL, \ - (initial), \ - NULL \ - ) - -#endif // IIS_NAMED_WIN32_OBJECTS - - -/************************ End of File ***********************/ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c deleted file mode 100644 index c1b2e13a6ede..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.c +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include -#include "dbgutil.h" -#include "pudebug.h" -#include "reftrace.h" - - -PTRACE_LOG -CreateRefTraceLog( - IN LONG LogSize, - IN LONG ExtraBytesInHeader - ) -/*++ - -Routine Description: - - Creates a new (empty) ref count trace log buffer. - -Arguments: - - LogSize - The number of entries in the log. - - ExtraBytesInHeader - The number of extra bytes to include in the - log header. This is useful for adding application-specific - data to the log. - -Return Value: - - PTRACE_LOG - Pointer to the newly created log if successful, - NULL otherwise. - ---*/ -{ - - return CreateTraceLog( - LogSize, - ExtraBytesInHeader, - sizeof(REF_TRACE_LOG_ENTRY) - ); - -} // CreateRefTraceLog - - -VOID -DestroyRefTraceLog( - IN PTRACE_LOG Log - ) -/*++ - -Routine Description: - - Destroys a ref count trace log buffer created with CreateRefTraceLog(). - -Arguments: - - Log - The ref count trace log buffer to destroy. - -Return Value: - - None. - ---*/ -{ - - DestroyTraceLog( Log ); - -} // DestroyRefTraceLog - - -// -// N.B. For RtlCaptureBacktrace() to work properly, the calling function -// *must* be __cdecl, and must have a "normal" stack frame. So, we decorate -// WriteRefTraceLog[Ex]() with the __cdecl modifier and disable the frame -// pointer omission (FPO) optimization. -// - -//#pragma optimize( "y", off ) // disable frame pointer omission (FPO) -#pragma optimize( "", off ) // disable frame pointer omission (FPO) - -LONG -__cdecl -WriteRefTraceLog( - IN PTRACE_LOG Log, - IN LONG NewRefCount, - IN CONST VOID * Context - ) -/*++ - -Routine Description: - - Writes a new entry to the specified ref count trace log. The entry - written contains the updated reference count and a stack backtrace - leading up to the current caller. - -Arguments: - - Log - The log to write to. - - NewRefCount - The updated reference count. - - Context - An uninterpreted context to associate with the log entry. - -Return Value: - - Index of entry in log. - ---*/ -{ - - return WriteRefTraceLogEx( - Log, - NewRefCount, - Context, - REF_TRACE_EMPTY_CONTEXT, // suppress use of optional extra contexts - REF_TRACE_EMPTY_CONTEXT, - REF_TRACE_EMPTY_CONTEXT - ); - -} // WriteRefTraceLog - - - - -LONG -__cdecl -WriteRefTraceLogEx( - IN PTRACE_LOG Log, - IN LONG NewRefCount, - IN CONST VOID * Context, - IN CONST VOID * Context1, // optional extra context - IN CONST VOID * Context2, // optional extra context - IN CONST VOID * Context3 // optional extra context - ) -/*++ - -Routine Description: - - Writes a new "extended" entry to the specified ref count trace log. - The entry written contains the updated reference count, stack backtrace - leading up to the current caller and extra context information. - -Arguments: - - Log - The log to write to. - - NewRefCount - The updated reference count. - - Context - An uninterpreted context to associate with the log entry. - Context1 - An uninterpreted context to associate with the log entry. - Context2 - An uninterpreted context to associate with the log entry. - Context3 - An uninterpreted context to associate with the log entry. - - NOTE Context1/2/3 are "optional" in that the caller may suppress - debug display of these values by passing REF_TRACE_EMPTY_CONTEXT - for each of them. - -Return Value: - - Index of entry in log. - ---*/ -{ - - REF_TRACE_LOG_ENTRY entry; - ULONG hash; - DWORD cStackFramesSkipped; - - // - // Initialize the entry. - // - - RtlZeroMemory( - &entry, - sizeof(entry) - ); - - // - // Set log entry members. - // - - entry.NewRefCount = NewRefCount; - entry.Context = Context; - entry.Thread = GetCurrentThreadId(); - entry.Context1 = Context1; - entry.Context2 = Context2; - entry.Context3 = Context3; - - // - // Capture the stack backtrace. Normally, we skip two stack frames: - // one for this routine, and one for RtlCaptureBacktrace() itself. - // For non-Ex callers who come in via WriteRefTraceLog, - // we skip three stack frames. - // - - if ( entry.Context1 == REF_TRACE_EMPTY_CONTEXT - && entry.Context2 == REF_TRACE_EMPTY_CONTEXT - && entry.Context3 == REF_TRACE_EMPTY_CONTEXT - ) { - - cStackFramesSkipped = 2; - - } else { - - cStackFramesSkipped = 1; - - } - - RtlCaptureStackBackTrace( - cStackFramesSkipped, - REF_TRACE_LOG_STACK_DEPTH, - entry.Stack, - &hash - ); - - // - // Write it to the log. - // - - return WriteTraceLog( - Log, - &entry - ); - -} // WriteRefTraceLogEx - -#pragma optimize( "", on ) // restore frame pointer omission (FPO) - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h deleted file mode 100644 index e90ca0444a71..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/reftrace.h +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _REFTRACE_H_ -#define _REFTRACE_H_ - - -#if defined(__cplusplus) -extern "C" { -#endif // __cplusplus - -#include -#include "tracelog.h" - -// -// This is the number of stack backtrace values captured in each -// trace log entry. This value is chosen to make the log entry -// exactly twelve dwords long, making it a bit easier to interpret -// from within the debugger without the debugger extension. -// - -#define REF_TRACE_LOG_STACK_DEPTH 9 - -// No-op value for the Context1,2,3 parameters of WriteRefTraceLogEx -//#define REF_TRACE_EMPTY_CONTEXT ((PVOID) -1) -#define REF_TRACE_EMPTY_CONTEXT NULL - - -// -// This defines the entry written to the trace log. -// - -typedef struct _REF_TRACE_LOG_ENTRY { - - LONG NewRefCount; - CONST VOID * Context; - CONST VOID * Context1; - CONST VOID * Context2; - CONST VOID * Context3; - DWORD Thread; - PVOID Stack[REF_TRACE_LOG_STACK_DEPTH]; - -} REF_TRACE_LOG_ENTRY, *PREF_TRACE_LOG_ENTRY; - - -// -// Manipulators. -// - -PTRACE_LOG -CreateRefTraceLog( - IN LONG LogSize, - IN LONG ExtraBytesInHeader - ); - -VOID -DestroyRefTraceLog( - IN PTRACE_LOG Log - ); - -LONG -__cdecl -WriteRefTraceLog( - IN PTRACE_LOG Log, - IN LONG NewRefCount, - IN CONST VOID * Context - ); - -LONG -__cdecl -WriteRefTraceLogEx( - IN PTRACE_LOG Log, - IN LONG NewRefCount, - IN CONST VOID * Context, - IN CONST VOID * Context1, - IN CONST VOID * Context2, - IN CONST VOID * Context3 - ); - - -#if defined(__cplusplus) -} // extern "C" -#endif // __cplusplus - - -#endif // _REFTRACE_H_ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h deleted file mode 100644 index dc7ccf834bef..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/rwlock.h +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#if (_WIN32_WINNT < 0x600) - -// -// XP implementation. -// -class CWSDRWLock -{ -public: - - CWSDRWLock() - : m_bInited(FALSE) - { - } - - ~CWSDRWLock() - { - if (m_bInited) - { - DeleteCriticalSection(&m_rwLock.critsec); - CloseHandle(m_rwLock.ReadersDoneEvent); - } - } - - BOOL QueryInited() const - { - return m_bInited; - } - - HRESULT Init() - { - HRESULT hr = S_OK; - - if (FALSE == m_bInited) - { - m_rwLock.fWriterWaiting = FALSE; - m_rwLock.LockCount = 0; - if ( !InitializeCriticalSectionAndSpinCount( &m_rwLock.critsec, 0 )) - { - DWORD dwError = GetLastError(); - hr = HRESULT_FROM_WIN32(dwError); - return hr; - } - - m_rwLock.ReadersDoneEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - if( NULL == m_rwLock.ReadersDoneEvent ) - { - DWORD dwError = GetLastError(); - hr = HRESULT_FROM_WIN32(dwError); - DeleteCriticalSection(&m_rwLock.critsec); - return hr; - } - m_bInited = TRUE; - } - - return hr; - } - - void SharedAcquire() - { - EnterCriticalSection(&m_rwLock.critsec); - InterlockedIncrement(&m_rwLock.LockCount); - LeaveCriticalSection(&m_rwLock.critsec); - } - - void SharedRelease() - { - ReleaseRWLock(); - } - - void ExclusiveAcquire() - { - EnterCriticalSection( &m_rwLock.critsec ); - - m_rwLock.fWriterWaiting = TRUE; - - // check if there are any readers active - if ( InterlockedExchangeAdd( &m_rwLock.LockCount, 0 ) > 0 ) - { - // - // Wait for all the readers to get done.. - // - WaitForSingleObject( m_rwLock.ReadersDoneEvent, INFINITE ); - } - m_rwLock.LockCount = -1; - } - - void ExclusiveRelease() - { - ReleaseRWLock(); - } - -private: - - BOOL m_bInited; - - typedef struct _RW_LOCK - { - BOOL fWriterWaiting; // Is a writer waiting on the lock? - LONG LockCount; - CRITICAL_SECTION critsec; - HANDLE ReadersDoneEvent; - } RW_LOCK, *PRW_LOCK; - - RW_LOCK m_rwLock; - -private: - - void ReleaseRWLock() - { - LONG Count = InterlockedDecrement( &m_rwLock.LockCount ); - - if ( 0 <= Count ) - { - // releasing a read lock - if (( m_rwLock.fWriterWaiting ) && ( 0 == Count )) - { - SetEvent( m_rwLock.ReadersDoneEvent ); - } - } - else - { - // Releasing a write lock - m_rwLock.LockCount = 0; - m_rwLock.fWriterWaiting = FALSE; - LeaveCriticalSection(&m_rwLock.critsec); - } - } -}; - -#else - -// -// Implementation for Windows Vista or greater. -// -class CWSDRWLock -{ -public: - - CWSDRWLock() - { - InitializeSRWLock(&m_rwLock); - } - - BOOL QueryInited() - { - return TRUE; - } - - - HRESULT Init() - { - // - // Method defined to keep compatibility with CWSDRWLock class for XP. - // - return S_OK; - } - - void SharedAcquire() - { - AcquireSRWLockShared(&m_rwLock); - } - - void SharedRelease() - { - ReleaseSRWLockShared(&m_rwLock); - } - - void ExclusiveAcquire() - { - AcquireSRWLockExclusive(&m_rwLock); - } - - void ExclusiveRelease() - { - ReleaseSRWLockExclusive(&m_rwLock); - } - -private: - - SRWLOCK m_rwLock; -}; - -#endif - -// -// Rename the lock class to a more clear name. -// -typedef CWSDRWLock READ_WRITE_LOCK; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp deleted file mode 100644 index 29da773bcab8..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.cpp +++ /dev/null @@ -1,1767 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.h" - -STRA::STRA( - VOID -) : m_cchLen( 0 ) -{ - *( QueryStr() ) = '\0'; -} - -STRA::STRA( - __inout_ecount(cchInit) CHAR* pbInit, - __in DWORD cchInit -) : m_Buff( pbInit, cchInit * sizeof( CHAR ) ), - m_cchLen(0) -/*++ - Description: - - Used by STACK_STRA. Initially populates underlying buffer with pbInit. - - pbInit is not freed. - - Arguments: - - pbInit - initial memory to use - cchInit - count, in characters, of pbInit - - Returns: - - None. - ---*/ -{ - _ASSERTE( NULL != pbInit ); - _ASSERTE( cchInit > 0 ); - _ASSERTE( pbInit[0] == '\0' ); -} - -BOOL -STRA::IsEmpty( - VOID -) const -{ - return ( m_cchLen == 0 ); -} - -BOOL -STRA::Equals( - __in PCSTR pszRhs, - __in BOOL fIgnoreCase /*= FALSE*/ -) const -{ - _ASSERTE( NULL != pszRhs ); - - if( fIgnoreCase ) - { - return ( 0 == _stricmp( QueryStr(), pszRhs ) ); - } - - return ( 0 == strcmp( QueryStr(), pszRhs ) ); -} - -BOOL -STRA::Equals( - __in const STRA * pstrRhs, - __in BOOL fIgnoreCase /*= FALSE*/ -) const -{ - _ASSERTE( NULL != pstrRhs ); - return Equals( pstrRhs->QueryStr(), fIgnoreCase ); -} - -BOOL -STRA::Equals( - __in const STRA & strRhs, - __in BOOL fIgnoreCase /*= FALSE*/ -) const -{ - return Equals( strRhs.QueryStr(), fIgnoreCase ); -} - -DWORD -STRA::QueryCB( - VOID -) const -// -// Returns the number of bytes in the string excluding the terminating NULL -// -{ - return m_cchLen * sizeof( CHAR ); -} - -DWORD -STRA::QueryCCH( - VOID -) const -// -// Returns the number of characters in the string excluding the terminating NULL -// -{ - return m_cchLen; -} - -DWORD -STRA::QuerySizeCCH( - VOID -) const -// -// Returns size of the underlying storage buffer, in characters -// -{ - return m_Buff.QuerySize() / sizeof( CHAR ); -} - -DWORD -STRA::QuerySize( - VOID -) const -// -// Returns the size of the storage buffer in bytes -// -{ - return m_Buff.QuerySize(); -} - -__nullterminated -__bcount(this->m_cchLen) -CHAR * -STRA::QueryStr( - VOID -) const -// -// Return the string buffer -// -{ - return m_Buff.QueryPtr(); -} - -VOID -STRA::Reset( - VOID -) -// -// Resets the internal string to be NULL string. Buffer remains cached. -// -{ - _ASSERTE( QueryStr() != NULL ); - *(QueryStr()) = '\0'; - m_cchLen = 0; -} - -HRESULT -STRA::Resize( - __in DWORD cchSize -) -{ - if( !m_Buff.Resize( cchSize * sizeof( CHAR ) ) ) - { - return E_OUTOFMEMORY; - } - - return S_OK; -} - -HRESULT -STRA::SyncWithBuffer( - VOID -) -// -// Recalculate the length of the string, etc. because we've modified -// the buffer directly. -// -{ - HRESULT hr; - size_t size; - hr = StringCchLengthA( QueryStr(), - QuerySizeCCH(), - &size ); - if ( SUCCEEDED( hr ) ) - { - m_cchLen = static_cast(size); - } - return hr; -} - -HRESULT -STRA::Copy( - __in PCSTR pszCopy -) -{ - HRESULT hr; - size_t cbLen; - hr = StringCbLengthA( pszCopy, - STRSAFE_MAX_CCH, - &cbLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return Copy( pszCopy, cbLen ); -} - - -HRESULT -STRA::Copy( - __in_ecount(cchLen) - PCSTR pszCopy, - __in SIZE_T cbLen -) -// -// Copy the contents of another string to this one -// -{ - _ASSERTE( cbLen <= MAXDWORD ); - - return AuxAppend( - pszCopy, - static_cast(cbLen), - 0 - ); -} - -HRESULT -STRA::Copy( - __in const STRA * pstrRhs -) -{ - _ASSERTE( pstrRhs != NULL ); - return Copy( pstrRhs->QueryStr(), pstrRhs->QueryCCH() ); -} - -HRESULT -STRA::Copy( - __in const STRA & strRhs -) -{ - return Copy( strRhs.QueryStr(), strRhs.QueryCCH() ); -} - -HRESULT -STRA::CopyW( - __in PCWSTR pszCopyW -) -{ - HRESULT hr; - size_t cchLen; - hr = StringCchLengthW( pszCopyW, - STRSAFE_MAX_CCH, - &cchLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return CopyW( pszCopyW, cchLen ); -} - -HRESULT -STRA::CopyWTruncate( - __in PCWSTR pszCopyWTruncate -) -{ - HRESULT hr; - size_t cchLen; - hr = StringCchLengthW( pszCopyWTruncate, - STRSAFE_MAX_CCH, - &cchLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return CopyWTruncate( pszCopyWTruncate, cchLen ); -} - -HRESULT -STRA::CopyWTruncate( - __in_ecount(cchLen) - PCWSTR pszCopyWTruncate, - __in SIZE_T cchLen -) -// -// The "Truncate" methods do not do proper conversion. They do a (CHAR) caste -// -{ - _ASSERTE( cchLen <= MAXDWORD ); - - return AuxAppendWTruncate( - pszCopyWTruncate, - static_cast(cchLen), - 0 - ); -} - -HRESULT -STRA::Append( - __in PCSTR pszAppend -) -{ - HRESULT hr; - size_t cbLen; - hr = StringCbLengthA( pszAppend, - STRSAFE_MAX_CCH, - &cbLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return Append( pszAppend, cbLen ); -} - -HRESULT -STRA::Append( - __in_ecount(cchLen) - PCSTR pszAppend, - __in SIZE_T cbLen -) -{ - _ASSERTE( cbLen <= MAXDWORD ); - if ( cbLen == 0 ) - { - return S_OK; - } - return AuxAppend( - pszAppend, - static_cast(cbLen), - QueryCB() - ); -} - -HRESULT -STRA::Append( - __in const STRA * pstrRhs -) -{ - _ASSERTE( pstrRhs != NULL ); - return Append( pstrRhs->QueryStr(), pstrRhs->QueryCCH() ); -} - -HRESULT -STRA::Append( - __in const STRA & strRhs -) -{ - return Append( strRhs.QueryStr(), strRhs.QueryCCH() ); -} - -HRESULT -STRA::AppendWTruncate( - __in PCWSTR pszAppendWTruncate -) -{ - HRESULT hr; - size_t cchLen; - hr = StringCchLengthW( pszAppendWTruncate, - STRSAFE_MAX_CCH, - &cchLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return AppendWTruncate( pszAppendWTruncate, cchLen ); -} - -HRESULT -STRA::AppendWTruncate( - __in_ecount(cchLen) - PCWSTR pszAppendWTruncate, - __in SIZE_T cchLen -) -// -// The "Truncate" methods do not do proper conversion. They do a (CHAR) caste -// -{ - _ASSERTE( cchLen <= MAXDWORD ); - if ( cchLen == 0 ) - { - return S_OK; - } - return AuxAppendWTruncate( - pszAppendWTruncate, - static_cast(cchLen), - QueryCB() - ); -} - -HRESULT -STRA::CopyToBuffer( - __out_bcount(*pcb) CHAR* pszBuffer, - __inout DWORD * pcb -) const -// -// Makes a copy of the stored string into the given buffer -// -{ - _ASSERTE( NULL != pszBuffer ); - _ASSERTE( NULL != pcb ); - - HRESULT hr = S_OK; - DWORD cbNeeded = QueryCB() + sizeof( CHAR ); - - if( *pcb < cbNeeded ) - { - hr = HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER ); - goto Finished; - } - - memcpy( pszBuffer, QueryStr(), cbNeeded ); - -Finished: - - *pcb = cbNeeded; - - return hr; -} - -HRESULT -STRA::SetLen( - __in DWORD cchLen -) -/*++ - * -Routine Description: - - Set the length of the string and null terminate, if there - is sufficient buffer already allocated. Will not reallocate. - -Arguments: - - cchLen - The number of characters in the new string. - -Return Value: - - HRESULT - ---*/ -{ - if( cchLen >= QuerySizeCCH() ) - { - return HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - } - - *( QueryStr() + cchLen ) = '\0'; - m_cchLen = cchLen; - - return S_OK; -} - - -HRESULT -STRA::SafeSnprintf( - __in __format_string - PCSTR pszFormatString, - ... -) -/*++ - -Routine Description: - - Writes to a STRA, growing it as needed. It arbitrarily caps growth at 64k chars. - -Arguments: - - pszFormatString - printf format - ... - printf args - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - va_list argsList; - va_start( argsList, pszFormatString ); - - hr = SafeVsnprintf(pszFormatString, argsList); - - va_end( argsList ); - return hr; -} - -HRESULT -STRA::SafeVsnprintf( - __in __format_string - PCSTR pszFormatString, - va_list argsList -) -/*++ - -Routine Description: - - Writes to a STRA, growing it as needed. It arbitrarily caps growth at 64k chars. - -Arguments: - - pszFormatString - printf format - argsList - printf va_list - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - int cchOutput; - int cchNeeded; - - // - // Format the incoming message using vsnprintf() - // so that the overflows are captured - // - cchOutput = _vsnprintf_s( - QueryStr(), - QuerySizeCCH(), - QuerySizeCCH() - 1, - pszFormatString, - argsList - ); - - if( cchOutput == -1 ) - { - // - // Couldn't fit this in the original STRU size. - // - cchNeeded = _vscprintf( pszFormatString, argsList ); - if( cchNeeded > 64 * 1024 ) - { - // - // If we're trying to produce a string > 64k chars, then - // there is probably a problem - // - hr = HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); - goto Finished; - } - - // - // _vscprintf doesn't include terminating null character - // - cchNeeded++; - - hr = Resize( cchNeeded ); - if( FAILED( hr ) ) - { - goto Finished; - } - - cchOutput = _vsnprintf_s( - QueryStr(), - QuerySizeCCH(), - QuerySizeCCH() - 1, - pszFormatString, - argsList - ); - if( -1 == cchOutput ) - { - // - // This should never happen, cause we should already have correctly sized memory - // - _ASSERTE( FALSE ); - - hr = HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); - goto Finished; - } - } - - // - // always null terminate at the last WCHAR - // - QueryStr()[ QuerySizeCCH() - 1 ] = L'\0'; - - // - // we directly touched the buffer - therefore: - // - hr = SyncWithBuffer(); - if( FAILED( hr ) ) - { - goto Finished; - } - -Finished: - - if( FAILED( hr ) ) - { - Reset(); - } - - return hr; -} - -bool -FShouldEscapeUtf8( - BYTE ch - ) -{ - if ( ( ch >= 128 ) ) - { - return true; - } - - return false; -} - -bool -FShouldEscapeUrl( - BYTE ch - ) -{ - if ( ( ch >= 128 || - ch <= 32 || - ch == '<' || - ch == '>' || - ch == '%' || - ch == '?' || - ch == '#' ) && - !( ch == '\n' || ch == '\r' ) ) - { - return true; - } - - return false; -} - -HRESULT -STRA::Escape( - VOID -) -/*++ - -Routine Description: - - Escapes a STRA - -Arguments: - - None - -Return Value: - - None - ---*/ -{ - return EscapeInternal( FShouldEscapeUrl ); -} - -HRESULT -STRA::EscapeUtf8( - VOID -) -/*++ - -Routine Description: - - Escapes the high-bit chars in a STRA. LWS, CR, LF & controls are untouched. - -Arguments: - - None - -Return Value: - - None - ---*/ -{ - return EscapeInternal( FShouldEscapeUtf8 ); -} - - -HRESULT -STRA::EscapeInternal( - PFN_F_SHOULD_ESCAPE pfnFShouldEscape -) -/*++ - -Routine Description: - - Escapes a STRA according to the predicate function passed in - -Arguments: - - None - -Return Value: - - None - ---*/ -{ - LPCSTR pch = QueryStr(); - __analysis_assume( pch != NULL ); - int i = 0; - BYTE ch; - HRESULT hr = S_OK; - BOOL fRet = FALSE; - SIZE_T NewSize = 0; - - // Set to true if any % escaping occurs - BOOL fEscapingDone = FALSE; - - // - // If there are any characters that need to be escaped we copy the entire string - // character by character into straTemp, escaping as we go, then at the end - // copy all of straTemp over. Don't modify InlineBuffer directly. - // - CHAR InlineBuffer[512]; - InlineBuffer[0] = '\0'; - STRA straTemp(InlineBuffer, sizeof(InlineBuffer)/sizeof(*InlineBuffer)); - - _ASSERTE( pch ); - - while (ch = pch[i]) - { - // - // Escape characters that are in the non-printable range - // but ignore CR and LF - // - - if ( pfnFShouldEscape( ch ) ) - { - if (FALSE == fEscapingDone) - { - // first character in the string that needed escaping - fEscapingDone = TRUE; - - // guess that the size needs to be larger than - // what we used to have times two - NewSize = QueryCCH() * 2; - if ( NewSize > MAXDWORD ) - { - hr = HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - return hr; - } - - hr = straTemp.Resize( static_cast(NewSize) ); - - if (FAILED(hr)) - { - return hr; - } - - // Copy all of the previous buffer into buffTemp, only if it is not the first character: - - if ( i > 0) - { - hr = straTemp.Copy(QueryStr(), - i * sizeof(CHAR)); - if (FAILED(hr)) - { - return hr; - } - } - } - - // resize the temporary (if needed) with the slop of the entire buffer length - // this fixes constant reallocation if the entire string needs to be escaped - NewSize = QueryCCH() + 2 * sizeof(CHAR) + 1 * sizeof(CHAR); - if ( NewSize > MAXDWORD ) - { - hr = HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - return hr; - } - - fRet = straTemp.m_Buff.Resize( NewSize ); - if ( !fRet ) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - return hr; - } - - // - // Create the string to append for the current character - // - - CHAR chHex[3]; - chHex[0] = '%'; - - // - // Convert the low then the high character to hex - // - - UINT nLowDigit = (UINT)(ch % 16); - chHex[2] = TODIGIT( nLowDigit ); - - ch /= 16; - - UINT nHighDigit = (UINT)(ch % 16); - - chHex[1] = TODIGIT( nHighDigit ); - - // - // Actually append the converted character to the end of the temporary - // - hr = straTemp.Append(chHex, 3); - if (FAILED(hr)) - { - return hr; - } - } - else - { - // if no escaping done, no need to copy - if (fEscapingDone) - { - // if ANY escaping done, copy current character into new buffer - straTemp.Append(&pch[i], 1); - } - } - - // inspect the next character in the string - i++; - } - - if (fEscapingDone) - { - // the escaped string is now in straTemp - hr = Copy(straTemp); - } - - return hr; - -} // EscapeInternal() - -VOID -STRA::Unescape( - VOID -) -/*++ - -Routine Description: - - Unescapes a STRA - - Supported escape sequences are: - %uxxxx unescapes Unicode character xxxx into system codepage - %xx unescapes character xx - % without following hex digits is ignored - -Arguments: - - None - -Return Value: - - None - ---*/ -{ - CHAR *pScan; - CHAR *pDest; - CHAR *pNextScan; - WCHAR wch; - DWORD dwLen; - BOOL fChanged = FALSE; - - // - // Now take care of any escape characters - // - pDest = pScan = strchr(QueryStr(), '%'); - - while (pScan) - { - if ((pScan[1] == 'u' || pScan[1] == 'U') && - SAFEIsXDigit(pScan[2]) && - SAFEIsXDigit(pScan[3]) && - SAFEIsXDigit(pScan[4]) && - SAFEIsXDigit(pScan[5])) - { - wch = TOHEX(pScan[2]) * 4096 + TOHEX(pScan[3]) * 256 - + TOHEX(pScan[4]) * 16 + TOHEX(pScan[5]); - - dwLen = WideCharToMultiByte(CP_ACP, - WC_NO_BEST_FIT_CHARS, - &wch, - 1, - (LPSTR) pDest, - 6, - NULL, - NULL); - - pDest += dwLen; - pScan += 6; - fChanged = TRUE; - } - else if (SAFEIsXDigit(pScan[1]) && SAFEIsXDigit(pScan[2])) - { - *pDest = TOHEX(pScan[1]) * 16 + TOHEX(pScan[2]); - - pDest ++; - pScan += 3; - fChanged = TRUE; - } - else // Not an escaped char, just a '%' - { - if (fChanged) - { - *pDest = *pScan; - } - - pDest++; - pScan++; - } - - // - // Copy all the information between this and the next escaped char - // - pNextScan = strchr(pScan, '%'); - - if (fChanged) // pScan!=pDest, so we have to copy the char's - { - if (!pNextScan) // That was the last '%' in the string - { - memmove(pDest, - pScan, - QueryCCH() - DIFF(pScan - QueryStr()) + 1); - } - else - { - // There is another '%', move intermediate chars - if ((dwLen = (DWORD)DIFF(pNextScan - pScan)) != 0) - { - memmove(pDest, - pScan, - dwLen); - pDest += dwLen; - } - } - } - - pScan = pNextScan; - } - - if (fChanged) - { - m_cchLen = (DWORD)strlen(QueryStr()); // for safety recalc the length - } - - return; -} - -HRESULT -STRA::CopyWToUTF8Unescaped( - __in LPCWSTR cpchStr -) -{ - return STRA::CopyWToUTF8Unescaped(cpchStr, (DWORD) wcslen(cpchStr)); -} - -HRESULT -STRA::CopyWToUTF8Unescaped( - __in_ecount(cch) - LPCWSTR cpchStr, - __in DWORD cch -) -{ - HRESULT hr = S_OK; - int iRet; - - if (cch == 0) - { - Reset(); - return S_OK; - } - - iRet = ConvertUnicodeToUTF8(cpchStr, - &m_Buff, - cch); - if (-1 == iRet) - { - // could not convert - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - m_cchLen = iRet; - - _ASSERTE(strlen(m_Buff.QueryPtr()) == m_cchLen); -Finished: - return hr; -} - -HRESULT -STRA::CopyWToUTF8Escaped( - __in LPCWSTR cpchStr -) -{ - return STRA::CopyWToUTF8Escaped(cpchStr, (DWORD) wcslen(cpchStr)); -} - -HRESULT -STRA::CopyWToUTF8Escaped( - __in_ecount(cch) - LPCWSTR cpchStr, - __in DWORD cch -) -{ - HRESULT hr = S_OK; - - hr = CopyWToUTF8Unescaped(cpchStr, cch); - if (FAILED(hr)) - { - goto Finished; - } - - hr = Escape(); - if (FAILED(hr)) - { - goto Finished; - } - - hr = S_OK; -Finished: - return hr; -} - -HRESULT -STRA::AuxAppend( - __in_ecount(cbLen) - LPCSTR pStr, - __in DWORD cbLen, - __in DWORD cbOffset -) -{ - _ASSERTE( NULL != pStr ); - _ASSERTE( cbOffset <= QueryCB() ); - - ULONGLONG cb64NewSize = (ULONGLONG)cbOffset + cbLen + sizeof( CHAR ); - if( cb64NewSize > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - - if( m_Buff.QuerySize() < cb64NewSize ) - { - if( !m_Buff.Resize( static_cast(cb64NewSize) ) ) - { - return E_OUTOFMEMORY; - } - } - - memcpy( reinterpret_cast(m_Buff.QueryPtr()) + cbOffset, pStr, cbLen ); - - m_cchLen = cbLen + cbOffset; - - *( QueryStr() + m_cchLen ) = '\0'; - - return S_OK; -} - -HRESULT -STRA::AuxAppendW( - __in_ecount(cchAppendW) - PCWSTR pszAppendW, - __in DWORD cchAppendW, - __in DWORD cbOffset, - __in UINT CodePage, - __in BOOL fFailIfNoTranslation, - __in DWORD dwFlags -) -{ - HRESULT hr = S_OK; - DWORD cbAvailable = 0; - DWORD cbRet = 0; - - // - // There are only two expect places to append - // - _ASSERTE( 0 == cbOffset || QueryCB() == cbOffset ); - - if ( cchAppendW == 0 ) - { - goto Finished; - } - - // - // start by assuming 1 char to 1 char will be enough space - // - if( !m_Buff.Resize( cbOffset + cchAppendW + sizeof( CHAR ) ) ) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - cbAvailable = m_Buff.QuerySize() - cbOffset; - - cbRet = WideCharToMultiByte( - CodePage, - dwFlags, - pszAppendW, - cchAppendW, - QueryStr() + cbOffset, - cbAvailable, - NULL, - NULL - ); - if( 0 != cbRet ) - { - if(!m_Buff.Resize(cbOffset + cbRet + 1)) - { - hr = E_OUTOFMEMORY; - } - - // - // not zero --> success, so we're done - // - goto Finished; - } - - // - // We only know how to handle ERROR_INSUFFICIENT_BUFFER - // - hr = HRESULT_FROM_WIN32( GetLastError() ); - if( hr != HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER ) ) - { - goto Finished; - } - - // - // Reset HResult because we need to get the number of bytes needed - // - hr = S_OK; - cbRet = WideCharToMultiByte( - CodePage, - dwFlags, - pszAppendW, - cchAppendW, - NULL, - 0, - NULL, - NULL - ); - if( 0 == cbRet ) - { - // - // no idea how we could ever reach here - // - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - - if( !m_Buff.Resize( cbOffset + cbRet + 1) ) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - cbAvailable = m_Buff.QuerySize() - cbOffset; - - cbRet = WideCharToMultiByte( - CodePage, - dwFlags, - pszAppendW, - cchAppendW, - QueryStr() + cbOffset, - cbAvailable, - NULL, - NULL - ); - if( 0 == cbRet ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - -Finished: - - if( SUCCEEDED( hr ) && 0 != cbRet ) - { - m_cchLen = cbRet + cbOffset; - } - - // - // ensure we're still NULL terminated in the right spot - // (regardless of success or failure) - // - QueryStr()[m_cchLen] = '\0'; - - return hr; -} - -HRESULT -STRA::AuxAppendWTruncate( - __in_ecount(cchAppendW) - __in PCWSTR pszAppendW, - __in DWORD cchAppendW, - __in DWORD cbOffset -) -// -// Cheesey WCHAR --> CHAR conversion -// -{ - HRESULT hr = S_OK; - CHAR* pszBuffer; - - _ASSERTE( NULL != pszAppendW ); - _ASSERTE( 0 == cbOffset || cbOffset == QueryCB() ); - - if( !pszAppendW ) - { - hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - goto Finished; - } - - ULONGLONG cbNeeded = (ULONGLONG)cbOffset + cchAppendW + sizeof( CHAR ); - if( cbNeeded > MAXDWORD ) - { - hr = HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - goto Finished; - } - - if( !m_Buff.Resize( static_cast(cbNeeded) ) ) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - // - // Copy/convert the UNICODE string over (by making two bytes into one) - // - pszBuffer = QueryStr() + cbOffset; - for( DWORD i = 0; i < cchAppendW; i++ ) - { - pszBuffer[i] = static_cast(pszAppendW[i]); - } - - m_cchLen = cchAppendW + cbOffset; - *( QueryStr() + m_cchLen ) = '\0'; - -Finished: - - return hr; -} - -// static -int -STRA::ConvertUnicodeToCodePage( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __inout BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen, - __in UINT uCodePage -) -{ - _ASSERTE(NULL != pszSrcUnicodeString); - _ASSERTE(NULL != pbufDstAnsiString); - - BOOL bTemp; - int iStrLen = 0; - DWORD dwFlags; - - if (uCodePage == CP_ACP) - { - dwFlags = WC_NO_BEST_FIT_CHARS; - } - else - { - dwFlags = 0; - } - - iStrLen = WideCharToMultiByte(uCodePage, - dwFlags, - pszSrcUnicodeString, - dwStringLen, - (LPSTR)pbufDstAnsiString->QueryPtr(), - (int)pbufDstAnsiString->QuerySize(), - NULL, - NULL); - if ((iStrLen == 0) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { - iStrLen = WideCharToMultiByte(uCodePage, - dwFlags, - pszSrcUnicodeString, - dwStringLen, - NULL, - 0, - NULL, - NULL); - if (iStrLen != 0) { - // add one just for the extra NULL - bTemp = pbufDstAnsiString->Resize(iStrLen + 1); - if (!bTemp) - { - iStrLen = 0; - } - else - { - iStrLen = WideCharToMultiByte(uCodePage, - dwFlags, - pszSrcUnicodeString, - dwStringLen, - (LPSTR)pbufDstAnsiString->QueryPtr(), - (int)pbufDstAnsiString->QuerySize(), - NULL, - NULL); - } - - } - } - - if (0 != iStrLen && - pbufDstAnsiString->Resize(iStrLen + 1)) - { - // insert a terminating NULL into buffer for the dwStringLen+1 in the case that the dwStringLen+1 was not a NULL. - ((CHAR*)pbufDstAnsiString->QueryPtr())[iStrLen] = '\0'; - } - else - { - iStrLen = -1; - } - - return iStrLen; -} - -// static -HRESULT -STRA::ConvertUnicodeToMultiByte( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __in BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen -) -{ - return ConvertUnicodeToCodePage( pszSrcUnicodeString, - pbufDstAnsiString, - dwStringLen, - CP_ACP ); -} - -// static -HRESULT -STRA::ConvertUnicodeToUTF8( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __in BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen -) -{ - return ConvertUnicodeToCodePage( pszSrcUnicodeString, - pbufDstAnsiString, - dwStringLen, - CP_UTF8 ); -} - -/*++ - -Routine Description: - - Removes leading and trailing whitespace - ---*/ - -VOID -STRA::Trim() -{ - PSTR pszString = QueryStr(); - DWORD cchNewLength = m_cchLen; - DWORD cchLeadingWhitespace = 0; - DWORD cchTempLength = 0; - - for (LONG ixString = m_cchLen - 1; ixString >= 0; ixString--) - { - if (isspace((unsigned char) pszString[ixString]) != 0) - { - pszString[ixString] = '\0'; - cchNewLength--; - } - else - { - break; - } - } - - cchTempLength = cchNewLength; - for (DWORD ixString = 0; ixString < cchTempLength; ixString++) - { - if (isspace((unsigned char) pszString[ixString]) != 0) - { - cchLeadingWhitespace++; - cchNewLength--; - } - else - { - break; - } - } - - if (cchNewLength == 0) - { - - Reset(); - } - else if (cchLeadingWhitespace > 0) - { - memmove(pszString, pszString + cchLeadingWhitespace, cchNewLength * sizeof(CHAR)); - pszString[cchNewLength] = '\0'; - } - - SyncWithBuffer(); -} - -/*++ - -Routine Description: - - Compares the string to the provided prefix to check for equality - -Arguments: - - pStraPrefix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if prefix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::StartsWith( - __in const STRA * pStraPrefix, - __in bool fIgnoreCase) const -{ - _ASSERTE( pStraPrefix != NULL ); - return StartsWith(pStraPrefix->QueryStr(), fIgnoreCase); -} - -/*++ - -Routine Description: - - Compares the string to the provided prefix to check for equality - -Arguments: - - straPrefix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if prefix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::StartsWith( - __in const STRA & straPrefix, - __in bool fIgnoreCase) const -{ - return StartsWith(straPrefix.QueryStr(), fIgnoreCase); -} - -/*++ - -Routine Description: - - Compares the string to the provided prefix to check for equality - -Arguments: - - pszPrefix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if prefix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::StartsWith( - __in PCSTR pszPrefix, - __in bool fIgnoreCase) const -{ - HRESULT hr = S_OK; - BOOL fMatch = FALSE; - size_t cchPrefix = 0; - - if (pszPrefix == NULL) - { - goto Finished; - } - - hr = StringCchLengthA( pszPrefix, - STRSAFE_MAX_CCH, - &cchPrefix ); - if (FAILED(hr)) - { - goto Finished; - } - - _ASSERTE( cchPrefix <= MAXDWORD ); - - if (cchPrefix > m_cchLen) - { - goto Finished; - } - - if( fIgnoreCase ) - { - fMatch = ( 0 == _strnicmp( QueryStr(), pszPrefix, cchPrefix ) ); - } - else - { - fMatch = ( 0 == strncmp( QueryStr(), pszPrefix, cchPrefix ) ); - } - - -Finished: - - return fMatch; -} - -/*++ - -Routine Description: - - Compares the string to the provided suffix to check for equality - -Arguments: - - pStraSuffix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if suffix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::EndsWith( - __in const STRA * pStraSuffix, - __in bool fIgnoreCase) const -{ - _ASSERTE( pStraSuffix != NULL ); - return EndsWith(pStraSuffix->QueryStr(), fIgnoreCase); -} - - -/*++ - -Routine Description: - - Compares the string to the provided suffix to check for equality - -Arguments: - - straSuffix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if suffix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::EndsWith( - __in const STRA & straSuffix, - __in bool fIgnoreCase) const -{ - return EndsWith(straSuffix.QueryStr(), fIgnoreCase); -} - - -/*++ - -Routine Description: - - Compares the string to the provided suffix to check for equality - -Arguments: - - pszSuffix - string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if suffix string matches with internal string, FALSE otherwise - ---*/ -BOOL -STRA::EndsWith( - __in PCSTR pszSuffix, - __in bool fIgnoreCase) const -{ - HRESULT hr = S_OK; - PSTR pszString = QueryStr(); - BOOL fMatch = FALSE; - size_t cchSuffix = 0; - ptrdiff_t ixOffset = 0; - - if (pszSuffix == NULL) - { - goto Finished; - } - - hr = StringCchLengthA( pszSuffix, - STRSAFE_MAX_CCH, - &cchSuffix ); - if (FAILED(hr)) - { - goto Finished; - } - - _ASSERTE( cchSuffix <= MAXDWORD ); - - if (cchSuffix > m_cchLen) - { - goto Finished; - } - - ixOffset = m_cchLen - cchSuffix; - _ASSERTE(ixOffset >= 0 && ixOffset <= MAXDWORD); - - if( fIgnoreCase ) - { - fMatch = ( 0 == _strnicmp( pszString + ixOffset, pszSuffix, cchSuffix ) ); - } - else - { - fMatch = ( 0 == strncmp( pszString + ixOffset, pszSuffix, cchSuffix ) ); - } - -Finished: - - return fMatch; -} - - -/*++ - -Routine Description: - - Searches the string for the first occurrence of the specified character. - -Arguments: - - charValue - character to find - dwStartIndex - the initial index. - -Return Value: - - The index for the first character occurence in the string. - - -1 if not found. - ---*/ -INT -STRA::IndexOf( - __in CHAR charValue, - __in DWORD dwStartIndex - ) const -{ - INT nIndex = -1; - - // Make sure that there are no buffer overruns. - if( dwStartIndex >= QueryCCH() ) - { - goto Finished; - } - - const CHAR* pChar = strchr( QueryStr() + dwStartIndex, charValue ); - - // Determine the index if found - if( pChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} - - -/*++ - -Routine Description: - - Searches the string for the first occurrence of the specified substring. - -Arguments: - - pszValue - substring to find - dwStartIndex - initial index. - -Return Value: - - The index for the first character occurence in the string. - - -1 if not found. - ---*/ -INT -STRA::IndexOf( - __in PCSTR pszValue, - __in DWORD dwStartIndex - ) const -{ - HRESULT hr = S_OK; - INT nIndex = -1; - SIZE_T cchValue = 0; - - // Validate input parameters - if( dwStartIndex >= QueryCCH() || !pszValue ) - { - goto Finished; - } - - const CHAR* pChar = strstr( QueryStr() + dwStartIndex, pszValue ); - - // Determine the index if found - if( pChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} - - -/*++ - -Routine Description: - - Searches the string for the last occurrence of the specified character. - -Arguments: - - charValue - character to find - dwStartIndex - initial index. - -Return Value: - - The index for the last character occurence in the string. - - -1 if not found. - ---*/ -INT -STRA::LastIndexOf( - __in CHAR charValue, - __in DWORD dwStartIndex - ) const -{ - INT nIndex = -1; - - // Make sure that there are no buffer overruns. - if( dwStartIndex >= QueryCCH() ) - { - goto Finished; - } - - const CHAR* pChar = strrchr( QueryStr() + dwStartIndex, charValue ); - - // Determine the index if found - if( pChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h deleted file mode 100644 index 39737f4a69d8..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringa.h +++ /dev/null @@ -1,515 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "buffer.h" -#include "macros.h" -#include - -class STRA -{ - -public: - - STRA( - VOID - ); - - STRA( - __inout_ecount(cchInit) CHAR* pbInit, - __in DWORD cchInit - ); - - BOOL - IsEmpty( - VOID - ) const; - - BOOL - Equals( - __in PCSTR pszRhs, - __in BOOL fIgnoreCase = FALSE - ) const; - - BOOL - Equals( - __in const STRA * pstrRhs, - __in BOOL fIgnoreCase = FALSE - ) const; - - BOOL - Equals( - __in const STRA & strRhs, - __in BOOL fIgnoreCase = FALSE - ) const; - - static - BOOL - Equals( - __in PCSTR pszLhs, - __in PCSTR pszRhs, - __in bool fIgnoreCase = false - ) - { - // Return FALSE if either or both strings are NULL. - if (!pszLhs || !pszRhs) return FALSE; - - if( fIgnoreCase ) - { - return ( 0 == _stricmp( pszLhs, pszRhs ) ); - } - - return ( 0 == strcmp( pszLhs, pszRhs ) ); - } - - VOID - Trim(); - - BOOL - StartsWith( - __in const STRA * pStraPrefix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - StartsWith( - __in const STRA & straPrefix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - StartsWith( - __in PCSTR pszPrefix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - EndsWith( - __in const STRA * pStraSuffix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - EndsWith( - __in const STRA & straSuffix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - EndsWith( - __in PCSTR pszSuffix, - __in bool fIgnoreCase = FALSE - ) const; - - INT - IndexOf( - __in CHAR charValue, - __in DWORD dwStartIndex = 0 - ) const; - - INT - IndexOf( - __in PCSTR pszValue, - __in DWORD dwStartIndex = 0 - ) const; - - INT - LastIndexOf( - __in CHAR charValue, - __in DWORD dwStartIndex = 0 - ) const; - - DWORD - QueryCB( - VOID - ) const; - - DWORD - QueryCCH( - VOID - ) const; - - DWORD - QuerySizeCCH( - VOID - ) const; - - DWORD - QuerySize( - VOID - ) const; - - __nullterminated - __bcount(this->m_cchLen) - CHAR * - QueryStr( - VOID - ) const; - - VOID - Reset( - VOID - ); - - HRESULT - Resize( - __in DWORD cchSize - ); - - HRESULT - SyncWithBuffer( - VOID - ); - - HRESULT - Copy( - __in PCSTR pszCopy - ); - - HRESULT - Copy( - __in_ecount(cbLen) - PCSTR pszCopy, - __in SIZE_T cbLen - ); - - HRESULT - Copy( - __in const STRA * pstrRhs - ); - - HRESULT - Copy( - __in const STRA & strRhs - ); - - HRESULT - CopyW( - __in PCWSTR pszCopyW - ); - - HRESULT - CopyW( - __in_ecount(cchLen) - PCWSTR pszCopyW, - __in SIZE_T cchLen, - __in UINT CodePage = CP_UTF8, - __in BOOL fFailIfNoTranslation = FALSE - ) - { - _ASSERTE( cchLen <= MAXDWORD ); - - return AuxAppendW( - pszCopyW, - static_cast(cchLen), - 0, - CodePage, - fFailIfNoTranslation - ); - } - - HRESULT - CopyWTruncate( - __in PCWSTR pszCopyWTruncate - ); - - HRESULT - CopyWTruncate( - __in_ecount(cchLen) - PCWSTR pszCopyWTruncate, - __in SIZE_T cchLen - ); - - HRESULT - Append( - __in PCSTR pszAppend - ); - - HRESULT - Append( - __in_ecount(cbLen) - PCSTR pszAppend, - __in SIZE_T cbLen - ); - - HRESULT - Append( - __in const STRA * pstrRhs - ); - - HRESULT - Append( - __in const STRA & strRhs - ); - - HRESULT - AppendW( - __in PCWSTR pszAppendW - ) - { - HRESULT hr; - size_t cchLen; - hr = StringCchLengthW( pszAppendW, - STRSAFE_MAX_CCH, - &cchLen ); - if ( FAILED( hr ) ) - { - return hr; - } - return AppendW( pszAppendW, cchLen ); - } - - HRESULT - AppendW( - __in_ecount(cchLen) - PCWSTR pszAppendW, - __in SIZE_T cchLen, - __in UINT CodePage = CP_UTF8, - __in BOOL fFailIfNoTranslation = FALSE - ) - { - _ASSERTE( cchLen <= MAXDWORD ); - if ( cchLen == 0 ) - { - return S_OK; - } - return AuxAppendW( - pszAppendW, - static_cast(cchLen), - QueryCB(), - CodePage, - fFailIfNoTranslation - ); - } - - HRESULT - AppendWTruncate( - __in PCWSTR pszAppendWTruncate - ); - - HRESULT - AppendWTruncate( - __in_ecount(cchLen) - PCWSTR pszAppendWTruncate, - __in SIZE_T cchLen - ); - - HRESULT - CopyToBuffer( - __out_bcount(*pcb) CHAR* pszBuffer, - __inout DWORD * pcb - ) const; - - HRESULT - SetLen( - __in DWORD cchLen - ); - - HRESULT - SafeSnprintf( - __in __format_string - PCSTR pszFormatString, - ... - ); - - HRESULT - SafeVsnprintf( - __in __format_string - PCSTR pszFormatString, - va_list argsList - ); - - HRESULT - Escape( - VOID - ); - - HRESULT - EscapeUtf8( - VOID - ); - - VOID - Unescape( - VOID - ); - - HRESULT - CopyWToUTF8Unescaped( - __in LPCWSTR cpchStr - ); - - HRESULT - CopyWToUTF8Unescaped( - __in_ecount(cch) - LPCWSTR cpchStr, - __in DWORD cch - ); - - HRESULT - CopyWToUTF8Escaped( - __in LPCWSTR cpchStr - ); - - HRESULT - CopyWToUTF8Escaped( - __in_ecount(cch) - LPCWSTR cpchStr, - __in DWORD cch - ); - -private: - - // - // Avoid C++ errors. This object should never go through a copy - // constructor, unintended cast or assignment. - // - STRA( const STRA &); - STRA & operator = (const STRA &); - - HRESULT - AuxAppend( - __in_ecount(cbLen) - LPCSTR pStr, - __in DWORD cbLen, - __in DWORD cbOffset - ); - - HRESULT - AuxAppendW( - __in_ecount(cchAppendW) - PCWSTR pszAppendW, - __in DWORD cchAppendW, - __in DWORD cbOffset, - __in UINT CodePage, - __in BOOL fFailIfNoTranslation - ) - { - DWORD dwFlags = 0; - - if( CP_ACP == CodePage ) - { - dwFlags = WC_NO_BEST_FIT_CHARS; - } - else if( fFailIfNoTranslation && CodePage == CP_UTF8 ) - { - // - // WC_ERR_INVALID_CHARS is only supported in Longhorn or greater. - // -#if defined( NTDDI_VERSION ) && NTDDI_VERSION >= NTDDI_LONGHORN - dwFlags |= WC_ERR_INVALID_CHARS; -#else - UNREFERENCED_PARAMETER(fFailIfNoTranslation); -#endif - } - - return AuxAppendW( pszAppendW, - cchAppendW, - cbOffset, - CodePage, - fFailIfNoTranslation, - dwFlags ); - } - - HRESULT - AuxAppendW( - __in_ecount(cchAppendW) - PCWSTR pszAppendW, - __in DWORD cchAppendW, - __in DWORD cbOffset, - __in UINT CodePage, - __in BOOL fFailIfNoTranslation, - __in DWORD dwFlags - ); - - HRESULT - AuxAppendWTruncate( - __in_ecount(cchAppendW) - __in PCWSTR pszAppendW, - __in DWORD cchAppendW, - __in DWORD cbOffset - ); - - static - int - ConvertUnicodeToCodePage( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __inout BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen, - __in UINT uCodePage - ); - - static - HRESULT - ConvertUnicodeToMultiByte( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __in BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen - ); - - static - HRESULT - ConvertUnicodeToUTF8( - __in_ecount(dwStringLen) - LPCWSTR pszSrcUnicodeString, - __in BUFFER_T * pbufDstAnsiString, - __in DWORD dwStringLen - ); - - typedef bool (* PFN_F_SHOULD_ESCAPE)(BYTE ch); - - HRESULT - EscapeInternal( - PFN_F_SHOULD_ESCAPE pfnFShouldEscape - ); - - // - // Buffer with an inline buffer of 1, - // enough to hold null-terminating character. - // - BUFFER_T m_Buff; - DWORD m_cchLen; -}; - -inline -HRESULT -AppendToString( - ULONGLONG Number, - STRA & String -) -{ - // prefast complains Append requires input - // to be null terminated, so zero initialize - // and pass the size of the buffer minus one - // to _ui64toa_s - CHAR chNumber[32] = {0}; - if (_ui64toa_s(Number, - chNumber, - sizeof(chNumber) - sizeof(CHAR), - 10) != 0) - { - return E_INVALIDARG; - } - return String.Append(chNumber); -} - -template -CHAR* InitHelper(__out CHAR (&psz)[size]) -{ - psz[0] = '\0'; - return psz; -} - -// -// Heap operation reduction macros -// -#define STACK_STRA(name, size) CHAR __ach##name[size];\ - STRA name(InitHelper(__ach##name), sizeof(__ach##name)) - -#define INLINE_STRA(name, size) CHAR __ach##name[size];\ - STRA name; - -#define INLINE_STRA_INIT(name) name(InitHelper(__ach##name), sizeof(__ach##name)) diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp deleted file mode 100644 index 15da79a7fe1d..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.cpp +++ /dev/null @@ -1,1271 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma warning (disable : 4267) - -#include "precomp.h" - -STRU::STRU( - VOID -) : m_cchLen( 0 ) -{ - *(QueryStr()) = L'\0'; -} - -STRU::STRU( - __inout_ecount(cchInit) WCHAR* pbInit, - __in DWORD cchInit -) : m_Buff( pbInit, cchInit * sizeof( WCHAR ) ), - m_cchLen( 0 ) -/*++ - Description: - - Used by STACK_STRU. Initially populates underlying buffer with pbInit. - - pbInit is not freed. - - Arguments: - - pbInit - initial memory to use - cchInit - count, in characters, of pbInit - - Returns: - - None. - ---*/ -{ - _ASSERTE( cchInit <= (MAXDWORD / sizeof( WCHAR )) ); - _ASSERTE( NULL != pbInit ); - _ASSERTE(cchInit > 0 ); - _ASSERTE(pbInit[0] == L'\0'); -} - -BOOL -STRU::IsEmpty( - VOID -) const -{ - return ( m_cchLen == 0 ); -} - -DWORD -STRU::QueryCB( - VOID -) const -// -// Returns the number of bytes in the string excluding the terminating NULL -// -{ - return m_cchLen * sizeof( WCHAR ); -} - -DWORD -STRU::QueryCCH( - VOID -) const -// -// Returns the number of characters in the string excluding the terminating NULL -// -{ - return m_cchLen; -} - -DWORD -STRU::QuerySizeCCH( - VOID -) const -// -// Returns size of the underlying storage buffer, in characters -// -{ - return m_Buff.QuerySize() / sizeof( WCHAR ); -} - -__nullterminated -__ecount(this->m_cchLen) -WCHAR* -STRU::QueryStr( - VOID -) const -// -// Return the string buffer -// -{ - return m_Buff.QueryPtr(); -} - -VOID -STRU::Reset( - VOID -) -// -// Resets the internal string to be NULL string. Buffer remains cached. -// -{ - _ASSERTE( QueryStr() != NULL ); - *(QueryStr()) = L'\0'; - m_cchLen = 0; -} - -HRESULT -STRU::Resize( - DWORD cchSize -) -{ - SIZE_T cbSize = cchSize * sizeof( WCHAR ); - if ( cbSize > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - if( !m_Buff.Resize( cbSize ) ) - { - return E_OUTOFMEMORY; - } - - return S_OK; -} - -HRESULT -STRU::SyncWithBuffer( - VOID -) -// -// Recalculate the length of the string, etc. because we've modified -// the buffer directly. -// -{ - HRESULT hr; - size_t size; - hr = StringCchLengthW( QueryStr(), - QuerySizeCCH(), - &size ); - if ( SUCCEEDED( hr ) ) - { - m_cchLen = static_cast(size); - } - return hr; -} - -HRESULT -STRU::Copy( - __in PCWSTR pszCopy -) -{ - HRESULT hr; - size_t cbStr; - - hr = StringCchLengthW( pszCopy, - STRSAFE_MAX_CCH, - &cbStr ); - if ( FAILED( hr ) ) - { - return hr; - } - - _ASSERTE( cbStr <= MAXDWORD ); - return Copy( pszCopy, - cbStr ); -} - -HRESULT -STRU::Copy( - __in_ecount(cchLen) - PCWSTR pszCopy, - SIZE_T cchLen -) -// -// Copy the contents of another string to this one -// -{ - return AuxAppend( pszCopy, - cchLen * sizeof(WCHAR), - 0); -} - -HRESULT -STRU::Copy( - __in const STRU * pstrRhs -) -{ - _ASSERTE( NULL != pstrRhs ); - return Copy( pstrRhs->QueryStr(), pstrRhs->QueryCCH() ); -} - -HRESULT -STRU::Copy( - __in const STRU & str -) -{ - return Copy( str.QueryStr(), str.QueryCCH() ); -} - -HRESULT -STRU::CopyAndExpandEnvironmentStrings( - __in PCWSTR pszSource -) -{ - HRESULT hr = S_OK; - DWORD cchDestReqBuff = 0; - - Reset(); - - cchDestReqBuff = ExpandEnvironmentStringsW( pszSource, - QueryStr(), - QuerySizeCCH() ); - if ( cchDestReqBuff == 0 ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - else if ( cchDestReqBuff > QuerySizeCCH() ) - { - hr = Resize( cchDestReqBuff ); - if ( FAILED( hr ) ) - { - goto Finished; - } - - cchDestReqBuff = ExpandEnvironmentStringsW( pszSource, - QueryStr(), - QuerySizeCCH() ); - - if ( cchDestReqBuff == 0 || cchDestReqBuff > QuerySizeCCH() ) - { - _ASSERTE( FALSE ); - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Finished; - } - } - - hr = SyncWithBuffer(); - if ( FAILED( hr ) ) - { - goto Finished; - } - -Finished: - - return hr; - -} - -HRESULT -STRU::CopyA( - __in PCSTR pszCopyA -) -{ - HRESULT hr; - size_t cbStr; - - hr = StringCbLengthA( pszCopyA, - STRSAFE_MAX_CCH, - &cbStr ); - if ( FAILED( hr ) ) - { - return hr; - } - - _ASSERTE( cbStr <= MAXDWORD ); - return CopyA( pszCopyA, - cbStr ); -} - -HRESULT -STRU::CopyA( - __in_bcount(cchLen) - PCSTR pszCopyA, - SIZE_T cchLen, - UINT CodePage /*= CP_UTF8*/ -) -{ - return AuxAppendA( - pszCopyA, - cchLen, - 0, - CodePage - ); -} - -HRESULT -STRU::Append( - __in PCWSTR pszAppend -) -{ - HRESULT hr; - size_t cbStr; - - hr = StringCchLengthW( pszAppend, - STRSAFE_MAX_CCH, - &cbStr ); - if ( FAILED( hr ) ) - { - return hr; - } - - _ASSERTE( cbStr <= MAXDWORD ); - return Append( pszAppend, - cbStr ); -} - -HRESULT -STRU::Append( - __in_ecount(cchLen) - PCWSTR pszAppend, - SIZE_T cchLen -) -// -// Append something to the end of the string -// -{ - if ( cchLen == 0 ) - { - return S_OK; - } - return AuxAppend( pszAppend, - cchLen * sizeof(WCHAR), - QueryCB() ); -} - -HRESULT -STRU::Append( - __in const STRU * pstrRhs -) -{ - _ASSERTE( NULL != pstrRhs ); - return Append( pstrRhs->QueryStr(), pstrRhs->QueryCCH() ); -} - -HRESULT -STRU::Append( - __in const STRU & strRhs -) -{ - return Append( strRhs.QueryStr(), strRhs.QueryCCH() ); -} - -HRESULT -STRU::AppendA( - __in PCSTR pszAppendA -) -{ - HRESULT hr; - size_t cbStr; - - hr = StringCbLengthA( pszAppendA, - STRSAFE_MAX_CCH, - &cbStr ); - if ( FAILED( hr ) ) - { - return hr; - } - - _ASSERTE( cbStr <= MAXDWORD ); - return AppendA( pszAppendA, - cbStr ); -} - -HRESULT -STRU::AppendA( - __in_bcount(cchLen) - PCSTR pszAppendA, - SIZE_T cchLen, - UINT CodePage /*= CP_UTF8*/ -) -{ - if ( cchLen == 0 ) - { - return S_OK; - } - return AuxAppendA( - pszAppendA, - cchLen, - QueryCB(), - CodePage - ); -} - -HRESULT -STRU::CopyToBuffer( - __out_bcount(*pcb) WCHAR* pszBuffer, - PDWORD pcb -) const -// -// Makes a copy of the stored string into the given buffer -// -{ - _ASSERTE( NULL != pszBuffer ); - _ASSERTE( NULL != pcb ); - - HRESULT hr = S_OK; - DWORD cbNeeded = QueryCB() + sizeof( WCHAR ); - - if( *pcb < cbNeeded ) - { - hr = HRESULT_FROM_WIN32( ERROR_INSUFFICIENT_BUFFER ); - goto Finished; - } - - // - // BUGBUG: StringCchCopy? - // - memcpy( pszBuffer, QueryStr(), cbNeeded ); - -Finished: - - *pcb = cbNeeded; - - return hr; -} - -HRESULT -STRU::SetLen( - __in DWORD cchLen -) -/*++ - * -Routine Description: - - Set the length of the string and null terminate, if there - is sufficient buffer already allocated. Will not reallocate. - -Arguments: - - cchLen - The number of characters in the new string. - -Return Value: - - HRESULT - ---*/ -{ - if( cchLen >= QuerySizeCCH() ) - { - return HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - } - - *( QueryStr() + cchLen ) = L'\0'; - m_cchLen = cchLen; - - return S_OK; -} - -HRESULT -STRU::SafeSnwprintf( - __in PCWSTR pwszFormatString, - ... -) -/*++ - -Routine Description: - - Writes to a STRU, growing it as needed. It arbitrarily caps growth at 64k chars. - -Arguments: - - pwszFormatString - printf format - ... - printf args - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - va_list argsList; - va_start( argsList, pwszFormatString ); - - hr = SafeVsnwprintf(pwszFormatString, argsList); - - va_end( argsList ); - return hr; -} - -HRESULT -STRU::SafeVsnwprintf( - __in PCWSTR pwszFormatString, - va_list argsList -) -/*++ - -Routine Description: - - Writes to a STRU, growing it as needed. It arbitrarily caps growth at 64k chars. - -Arguments: - - pwszFormatString - printf format - argsList - printf va_list - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - int cchOutput; - int cchNeeded; - - // - // Format the incoming message using vsnprintf() - // so that the overflows are captured - // - cchOutput = _vsnwprintf_s( - QueryStr(), - QuerySizeCCH(), - QuerySizeCCH() - 1, - pwszFormatString, - argsList - ); - - if( cchOutput == -1 ) - { - // - // Couldn't fit this in the original STRU size. - // - cchNeeded = _vscwprintf( pwszFormatString, argsList ); - if( cchNeeded > 64 * 1024 ) - { - // - // If we're trying to produce a string > 64k chars, then - // there is probably a problem - // - hr = HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); - goto Finished; - } - - // - // _vscprintf doesn't include terminating null character - // - cchNeeded++; - - hr = Resize( cchNeeded ); - if( FAILED( hr ) ) - { - goto Finished; - } - - cchOutput = _vsnwprintf_s( - QueryStr(), - QuerySizeCCH(), - QuerySizeCCH() - 1, - pwszFormatString, - argsList - ); - if( -1 == cchOutput ) - { - // - // This should never happen, cause we should already have correctly sized memory - // - _ASSERTE( FALSE ); - - hr = HRESULT_FROM_WIN32( ERROR_INVALID_DATA ); - goto Finished; - } - } - - // - // always null terminate at the last WCHAR - // - QueryStr()[ QuerySizeCCH() - 1 ] = L'\0'; - - // - // we directly touched the buffer - therefore: - // - hr = SyncWithBuffer(); - if ( FAILED( hr ) ) - { - goto Finished; - } - -Finished: - - if( FAILED( hr ) ) - { - Reset(); - } - - return hr; -} - -HRESULT -STRU::AuxAppend( - __in_ecount(cNumStrings) - PCWSTR const rgpszStrings[], - SIZE_T cNumStrings -) -/*++ - -Routine Description: - - Appends an array of strings of length cNumStrings - -Arguments: - - rgStrings - The array of strings to be appened - cNumStrings - The count of String - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - size_t cbStringsTotal = sizeof( WCHAR ); // Account for null-terminator - - // - // Compute total size of the string. - // Resize internal buffer - // Copy each array element one by one to backing buffer - // Update backing buffer string length - // - for ( SIZE_T i = 0; i < cNumStrings; i++ ) - { - _ASSERTE( rgpszStrings[ i ] != NULL ); - if ( NULL == rgpszStrings[ i ] ) - { - return E_INVALIDARG; - } - - size_t cbString = 0; - - hr = StringCbLengthW( rgpszStrings[ i ], - STRSAFE_MAX_CCH * sizeof( WCHAR ), - &cbString ); - if ( FAILED( hr ) ) - { - return hr; - } - - cbStringsTotal += cbString; - - if ( cbStringsTotal > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - } - - size_t cbBufSizeRequired = QueryCB() + cbStringsTotal; - if ( cbBufSizeRequired > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - - if( m_Buff.QuerySize() < cbBufSizeRequired ) - { - if( !m_Buff.Resize( cbBufSizeRequired ) ) - { - return E_OUTOFMEMORY; - } - } - - STRSAFE_LPWSTR pszStringEnd = QueryStr() + QueryCCH(); - size_t cchRemaining = QuerySizeCCH() - QueryCCH(); - for ( SIZE_T i = 0; i < cNumStrings; i++ ) - { - hr = StringCchCopyExW( pszStringEnd, // pszDest - cchRemaining, // cchDest - rgpszStrings[ i ], // pszSrc - &pszStringEnd, // ppszDestEnd - &cchRemaining, // pcchRemaining - 0 ); // dwFlags - if ( FAILED( hr ) ) - { - _ASSERTE( FALSE ); - HRESULT hr2 = SyncWithBuffer(); - if ( FAILED( hr2 ) ) - { - return hr2; - } - return hr; - } - } - - m_cchLen = static_cast< DWORD >( cbBufSizeRequired ) / sizeof( WCHAR ) - 1; - - return S_OK; -} - -HRESULT -STRU::AuxAppend( - __in_bcount(cbStr) - const WCHAR* pStr, - SIZE_T cbStr, - DWORD cbOffset -) -/*++ - -Routine Description: - - Appends to the string starting at the (byte) offset cbOffset. - -Arguments: - - pStr - A unicode string to be appended - cbStr - Length, in bytes, of pStr - cbOffset - Offset, in bytes, at which to begin the append - -Return Value: - - HRESULT - ---*/ -{ - _ASSERTE( NULL != pStr ); - _ASSERTE( 0 == cbStr % sizeof( WCHAR ) ); - _ASSERTE( cbOffset <= QueryCB() ); - _ASSERTE( 0 == cbOffset % sizeof( WCHAR ) ); - - ULONGLONG cb64NewSize = (ULONGLONG)cbOffset + cbStr + sizeof( WCHAR ); - if( cb64NewSize > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - - if( m_Buff.QuerySize() < cb64NewSize ) - { - if( !m_Buff.Resize( static_cast(cb64NewSize) ) ) - { - return E_OUTOFMEMORY; - } - } - - memcpy( reinterpret_cast(m_Buff.QueryPtr()) + cbOffset, pStr, cbStr ); - - m_cchLen = (static_cast(cbStr) + cbOffset) / sizeof(WCHAR); - - *( QueryStr() + m_cchLen ) = L'\0'; - - return S_OK; -} - -HRESULT -STRU::AuxAppendA( - __in_bcount(cbStr) - const CHAR* pStr, - SIZE_T cbStr, - DWORD cbOffset, - UINT CodePage -) -/*++ - -Routine Description: - - Convert and append an ANSI string to the string starting at - the (byte) offset cbOffset - -Arguments: - - pStr - An ANSI string to be appended - cbStr - Length, in bytes, of pStr - cbOffset - Offset, in bytes, at which to begin the append - CodePage - code page to use for conversion - -Return Value: - - HRESULT - ---*/ -{ - WCHAR* pszBuffer; - DWORD cchBuffer; - DWORD cchCharsCopied = 0; - - _ASSERTE( NULL != pStr ); - _ASSERTE( cbOffset <= QueryCB() ); - _ASSERTE( 0 == cbOffset % sizeof( WCHAR ) ); - - if ( NULL == pStr ) - { - return E_INVALIDARG; - } - - if( 0 == cbStr ) - { - return S_OK; - } - - // - // Only resize when we have to. When we do resize, we tack on - // some extra space to avoid extra reallocations. - // - if( m_Buff.QuerySize() < (ULONGLONG)cbOffset + (cbStr * sizeof( WCHAR )) + sizeof(WCHAR) ) - { - ULONGLONG cb64NewSize = (ULONGLONG)( cbOffset + cbStr * sizeof(WCHAR) + sizeof( WCHAR ) ); - - // - // Check for the arithmetic overflow - // - if( cb64NewSize > MAXDWORD ) - { - return HRESULT_FROM_WIN32( ERROR_ARITHMETIC_OVERFLOW ); - } - - if( !m_Buff.Resize( static_cast(cb64NewSize) ) ) - { - return E_OUTOFMEMORY; - } - } - - pszBuffer = reinterpret_cast(reinterpret_cast(m_Buff.QueryPtr()) + cbOffset); - cchBuffer = ( m_Buff.QuerySize() - cbOffset - sizeof( WCHAR ) ) / sizeof( WCHAR ); - - cchCharsCopied = MultiByteToWideChar( - CodePage, - MB_ERR_INVALID_CHARS, - pStr, - static_cast(cbStr), - pszBuffer, - cchBuffer - ); - if( 0 == cchCharsCopied ) - { - return HRESULT_FROM_WIN32( GetLastError() ); - } - - // - // set the new length - // - m_cchLen = cchCharsCopied + cbOffset/sizeof(WCHAR); - - // - // Must be less than, cause still need to add NULL - // - _ASSERTE( m_cchLen < QuerySizeCCH() ); - - // - // append NULL character - // - *(QueryStr() + m_cchLen) = L'\0'; - - return S_OK; -} - - -/*++ - -Routine Description: - - Removes leading and trailing whitespace - ---*/ - -VOID -STRU::Trim() -{ - PWSTR pwszString = QueryStr(); - DWORD cchNewLength = m_cchLen; - DWORD cchLeadingWhitespace = 0; - DWORD cchTempLength = 0; - - for (LONG ixString = m_cchLen - 1; ixString >= 0; ixString--) - { - if (iswspace(pwszString[ixString]) != 0) - { - pwszString[ixString] = L'\0'; - cchNewLength--; - } - else - { - break; - } - } - - cchTempLength = cchNewLength; - for (DWORD ixString = 0; ixString < cchTempLength; ixString++) - { - if (iswspace(pwszString[ixString]) != 0) - { - cchLeadingWhitespace++; - cchNewLength--; - } - else - { - break; - } - } - - if (cchNewLength == 0) - { - - Reset(); - } - else if (cchLeadingWhitespace > 0) - { - memmove(pwszString, pwszString + cchLeadingWhitespace, cchNewLength * sizeof(WCHAR)); - pwszString[cchNewLength] = L'\0'; - } - - SyncWithBuffer(); -} - -/*++ - -Routine Description: - - Compares the string to the provided prefix to check for equality - -Arguments: - - pwszPrefix - wide char string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if prefix string matches with internal string, FALSE otherwise - ---*/ - -BOOL -STRU::StartsWith( - __in PCWSTR pwszPrefix, - __in bool fIgnoreCase) const -{ - HRESULT hr = S_OK; - BOOL fMatch = FALSE; - size_t cchPrefix = 0; - - if (pwszPrefix == NULL) - { - goto Finished; - } - - hr = StringCchLengthW( pwszPrefix, - STRSAFE_MAX_CCH, - &cchPrefix ); - if (FAILED(hr)) - { - goto Finished; - } - - _ASSERTE( cchPrefix <= MAXDWORD ); - - if (cchPrefix > m_cchLen) - { - goto Finished; - } - - #if defined( NTDDI_VERSION ) && NTDDI_VERSION >= NTDDI_LONGHORN - - fMatch = ( CSTR_EQUAL == CompareStringOrdinal( QueryStr(), - cchPrefix, - pwszPrefix, - cchPrefix, - fIgnoreCase ) ); - #else - - if( fIgnoreCase ) - { - fMatch = ( 0 == _wcsnicmp( QueryStr(), pwszPrefix, cchPrefix ) ); - } - else - { - fMatch = ( 0 == wcsncmp( QueryStr(), pwszPrefix, cchPrefix ) ); - } - - #endif - -Finished: - - return fMatch; -} - -/*++ - -Routine Description: - - Compares the string to the provided suffix to check for equality - -Arguments: - - pwszSuffix - wide char string to compare with - fIgnoreCase - indicates whether the string comparison should be case-sensitive - -Return Value: - - TRUE if suffix string matches with internal string, FALSE otherwise - ---*/ - - -BOOL -STRU::EndsWith( - __in PCWSTR pwszSuffix, - __in bool fIgnoreCase) const -{ - HRESULT hr = S_OK; - PWSTR pwszString = QueryStr(); - BOOL fMatch = FALSE; - size_t cchSuffix = 0; - ptrdiff_t ixOffset = 0; - - if (pwszSuffix == NULL) - { - goto Finished; - } - - hr = StringCchLengthW( pwszSuffix, - STRSAFE_MAX_CCH, - &cchSuffix ); - if (FAILED(hr)) - { - goto Finished; - } - - _ASSERTE( cchSuffix <= MAXDWORD ); - - if (cchSuffix > m_cchLen) - { - goto Finished; - } - - ixOffset = m_cchLen - cchSuffix; - _ASSERTE(ixOffset >= 0 && ixOffset <= MAXDWORD); - - #if defined( NTDDI_VERSION ) && NTDDI_VERSION >= NTDDI_LONGHORN - - fMatch = ( CSTR_EQUAL == CompareStringOrdinal( pwszString + ixOffset, - cchSuffix, - pwszSuffix, - cchSuffix, - fIgnoreCase ) ); - #else - - if( fIgnoreCase ) - { - fMatch = ( 0 == _wcsnicmp( pwszString + ixOffset, pwszSuffix, cchSuffix ) ); - } - else - { - fMatch = ( 0 == wcsncmp( pwszString + ixOffset, pwszSuffix, cchSuffix ) ); - } - - #endif - -Finished: - - return fMatch; -} - -/*++ - -Routine Description: - - Searches the string for the first occurrence of the specified character. - -Arguments: - - charValue - character to find - dwStartIndex - the initial index. - -Return Value: - - The index for the first character occurence in the string. - - -1 if not found. - ---*/ -INT -STRU::IndexOf( - __in WCHAR charValue, - __in DWORD dwStartIndex - ) const -{ - INT nIndex = -1; - - // Make sure that there are no buffer overruns. - if( dwStartIndex >= QueryCCH() ) - { - goto Finished; - } - - const WCHAR* pwChar = wcschr( QueryStr() + dwStartIndex, charValue ); - - // Determine the index if found - if( pwChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pwChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} - - -/*++ - -Routine Description: - - Searches the string for the first occurrence of the specified substring. - -Arguments: - - pwszValue - substring to find - dwStartIndex - initial index. - -Return Value: - - The index for the first character occurence in the string. - - -1 if not found. - ---*/ -INT -STRU::IndexOf( - __in PCWSTR pwszValue, - __in DWORD dwStartIndex - ) const -{ - HRESULT hr = S_OK; - INT nIndex = -1; - SIZE_T cchValue = 0; - - // Validate input parameters - if( dwStartIndex >= QueryCCH() || !pwszValue ) - { - goto Finished; - } - - const WCHAR* pwChar = wcsstr( QueryStr() + dwStartIndex, pwszValue ); - - // Determine the index if found - if( pwChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pwChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} - - -/*++ - -Routine Description: - - Searches the string for the last occurrence of the specified character. - -Arguments: - - charValue - character to find - dwStartIndex - initial index. - -Return Value: - - The index for the last character occurence in the string. - - -1 if not found. - ---*/ -INT -STRU::LastIndexOf( - __in WCHAR charValue, - __in DWORD dwStartIndex - ) const -{ - INT nIndex = -1; - - // Make sure that there are no buffer overruns. - if( dwStartIndex >= QueryCCH() ) - { - goto Finished; - } - - const WCHAR* pwChar = wcsrchr( QueryStr() + dwStartIndex, charValue ); - - // Determine the index if found - if( pwChar ) - { - // nIndex will be set to -1 on failure. - (VOID)SizeTToInt( pwChar - QueryStr(), &nIndex ); - } - -Finished: - - return nIndex; -} - -//static -HRESULT -STRU::ExpandEnvironmentVariables( - __in PCWSTR pszString, - __out STRU * pstrExpandedString - ) -/*++ - -Routine Description: - - Expand the environment variables in a string - -Arguments: - - pszString - String with environment variables to expand - pstrExpandedString - Receives expanded string on success - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr = S_OK; - DWORD cchNewSize = 0; - - if ( pszString == NULL || - pstrExpandedString == NULL ) - { - DBG_ASSERT( FALSE ); - hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER ); - goto Exit; - } - - cchNewSize = ExpandEnvironmentStrings( pszString, - pstrExpandedString->QueryStr(), - pstrExpandedString->QuerySizeCCH() ); - if ( cchNewSize == 0 ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Exit; - } - - if ( cchNewSize > pstrExpandedString->QuerySizeCCH() ) - { - hr = pstrExpandedString->Resize( - ( cchNewSize + 1 ) * sizeof( WCHAR ) - ); - if ( FAILED( hr ) ) - { - goto Exit; - } - - cchNewSize = ExpandEnvironmentStrings( - pszString, - pstrExpandedString->QueryStr(), - pstrExpandedString->QuerySizeCCH() - ); - - if ( cchNewSize == 0 || - cchNewSize > pstrExpandedString->QuerySizeCCH() ) - { - hr = HRESULT_FROM_WIN32( GetLastError() ); - goto Exit; - } - } - - pstrExpandedString->SyncWithBuffer(); - - hr = S_OK; - -Exit: - - return hr; -} - -#pragma warning(default:4267) diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h deleted file mode 100644 index 6f27c5421dc5..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/stringu.h +++ /dev/null @@ -1,427 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "buffer.h" -#include - -class STRU -{ - -public: - - STRU( - VOID - ); - - STRU( - __inout_ecount(cchInit) WCHAR* pbInit, - __in DWORD cchInit - ); - - BOOL - IsEmpty( - VOID - ) const; - - BOOL - Equals( - __in const STRU * pstrRhs, - __in BOOL fIgnoreCase = FALSE - ) const - { - _ASSERTE( pstrRhs != NULL ); - return Equals( pstrRhs->QueryStr(), fIgnoreCase ); - } - - BOOL - Equals( - __in const STRU & strRhs, - __in BOOL fIgnoreCase = FALSE - ) const - { - return Equals( strRhs.QueryStr(), fIgnoreCase ); - } - - BOOL - Equals( - __in PCWSTR pszRhs, - __in BOOL fIgnoreCase = FALSE - ) const - { - _ASSERTE( NULL != pszRhs ); - if ( NULL == pszRhs ) - { - return FALSE; - } - - #if defined( NTDDI_VERSION ) && NTDDI_VERSION >= NTDDI_LONGHORN - - return ( CSTR_EQUAL == CompareStringOrdinal( QueryStr(), - QueryCCH(), - pszRhs, - -1, - fIgnoreCase ) ); - #else - - if( fIgnoreCase ) - { - return ( 0 == _wcsicmp( QueryStr(), pszRhs ) ); - } - return ( 0 == wcscmp( QueryStr(), pszRhs ) ); - - #endif - } - - - static - BOOL - Equals( - __in PCWSTR pwszLhs, - __in PCWSTR pwszRhs, - __in bool fIgnoreCase = false - ) - { - // Return FALSE if either or both strings are NULL. - if (!pwszLhs || !pwszRhs) return FALSE; - - // - // This method performs a ordinal string comparison when OS is Vista or - // greater and a culture sensitive comparison if not (XP). This is - // consistent with the existing Equals implementation (see above). - // -#if defined( NTDDI_VERSION ) && NTDDI_VERSION >= NTDDI_LONGHORN - - return ( CSTR_EQUAL == CompareStringOrdinal( pwszLhs, - -1, - pwszRhs, - -1, - fIgnoreCase ) ); -#else - - if( fIgnoreCase ) - { - return ( 0 == _wcsicmp( pwszLhs, pwszRhs ) ); - } - else - { - return ( 0 == wcscmp( pwszLhs, pwszRhs ) ); - } - -#endif - } - - VOID - Trim(); - - BOOL - StartsWith( - __in const STRU * pStruPrefix, - __in bool fIgnoreCase = FALSE - ) const - { - _ASSERTE( pStruPrefix != NULL ); - return StartsWith( pStruPrefix->QueryStr(), fIgnoreCase ); - } - - BOOL - StartsWith( - __in const STRU & struPrefix, - __in bool fIgnoreCase = FALSE - ) const - { - return StartsWith( struPrefix.QueryStr(), fIgnoreCase ); - } - - BOOL - StartsWith( - __in PCWSTR pwszPrefix, - __in bool fIgnoreCase = FALSE - ) const; - - BOOL - EndsWith( - __in const STRU * pStruSuffix, - __in bool fIgnoreCase = FALSE - ) const - { - _ASSERTE( pStruSuffix != NULL ); - return EndsWith( pStruSuffix->QueryStr(), fIgnoreCase ); - } - - BOOL - EndsWith( - __in const STRU & struSuffix, - __in bool fIgnoreCase = FALSE - ) const - { - return EndsWith( struSuffix.QueryStr(), fIgnoreCase ); - } - - BOOL - EndsWith( - __in PCWSTR pwszSuffix, - __in bool fIgnoreCase = FALSE - ) const; - - INT - IndexOf( - __in WCHAR charValue, - __in DWORD dwStartIndex = 0 - ) const; - - INT - IndexOf( - __in PCWSTR pwszValue, - __in DWORD dwStartIndex = 0 - ) const; - - INT - LastIndexOf( - __in WCHAR charValue, - __in DWORD dwStartIndex = 0 - ) const; - - DWORD - QueryCB( - VOID - ) const; - - DWORD - QueryCCH( - VOID - ) const; - - DWORD - QuerySizeCCH( - VOID - ) const; - - __nullterminated - __ecount(this->m_cchLen) - WCHAR* - QueryStr( - VOID - ) const; - - VOID - Reset( - VOID - ); - - HRESULT - Resize( - DWORD cchSize - ); - - HRESULT - SyncWithBuffer( - VOID - ); - - template - HRESULT - Copy( - __in PCWSTR const (&rgpszStrings)[size] - ) - // - // Copies an array of strings declared as stack array. For example: - // - // LPCWSTR rgExample[] { L"one", L"two" }; - // hr = str.Copy( rgExample ); - // - { - Reset(); - - return AuxAppend( rgpszStrings, _countof( rgpszStrings ) ); - } - - HRESULT - Copy( - __in PCWSTR pszCopy - ); - - HRESULT - Copy( - __in_ecount(cchLen) - PCWSTR pszCopy, - SIZE_T cchLen - ); - - HRESULT - Copy( - __in const STRU * pstrRhs - ); - - HRESULT - Copy( - __in const STRU & str - ); - - HRESULT - CopyAndExpandEnvironmentStrings( - __in PCWSTR pszSource - ); - - HRESULT - CopyA( - __in PCSTR pszCopyA - ); - - HRESULT - CopyA( - __in_bcount(cchLen) - PCSTR pszCopyA, - SIZE_T cchLen, - UINT CodePage = CP_UTF8 - ); - - template - HRESULT - Append( - __in PCWSTR const (&rgpszStrings)[size] - ) - // - // Appends an array of strings declared as stack array. For example: - // - // LPCWSTR rgExample[] { L"one", L"two" }; - // hr = str.Append( rgExample ); - // - { - return AuxAppend( rgpszStrings, _countof( rgpszStrings ) ); - } - - HRESULT - Append( - __in PCWSTR pszAppend - ); - - HRESULT - Append( - __in_ecount(cchLen) - PCWSTR pszAppend, - SIZE_T cchLen - ); - - HRESULT - Append( - __in const STRU * pstrRhs - ); - - HRESULT - Append( - __in const STRU & strRhs - ); - - HRESULT - AppendA( - __in PCSTR pszAppendA - ); - - HRESULT - AppendA( - __in_bcount(cchLen) - PCSTR pszAppendA, - SIZE_T cchLen, - UINT CodePage = CP_UTF8 - ); - - HRESULT - CopyToBuffer( - __out_bcount(*pcb) WCHAR* pszBuffer, - PDWORD pcb - ) const; - - HRESULT - SetLen( - __in DWORD cchLen - ); - - HRESULT - SafeSnwprintf( - __in PCWSTR pwszFormatString, - ... - ); - - HRESULT - SafeVsnwprintf( - __in PCWSTR pwszFormatString, - va_list argsList - ); - - static - HRESULT ExpandEnvironmentVariables( - __in PCWSTR pszString, - __out STRU * pstrExpandedString - ); - -private: - - // - // Avoid C++ errors. This object should never go through a copy - // constructor, unintended cast or assignment. - // - STRU( const STRU & ); - STRU & operator = ( const STRU & ); - - HRESULT - AuxAppend( - __in_ecount(cNumStrings) - PCWSTR const rgpszStrings[], - SIZE_T cNumStrings - ); - - HRESULT - AuxAppend( - __in_bcount(cbStr) - const WCHAR* pStr, - SIZE_T cbStr, - DWORD cbOffset - ); - - HRESULT - AuxAppendA( - __in_bcount(cbStr) - const CHAR* pStr, - SIZE_T cbStr, - DWORD cbOffset, - UINT CodePage - ); - - // - // Buffer with an inline buffer of 1, - // enough to hold null-terminating character. - // - BUFFER_T m_Buff; - DWORD m_cchLen; -}; - -// -// Helps to initialize an external buffer before -// constructing the STRU object. -// -template -WCHAR* InitHelper(__out WCHAR (&psz)[size]) -{ - psz[0] = L'\0'; - return psz; -} - -// -// Heap operation reduction macros -// -#define STACK_STRU(name, size) WCHAR __ach##name[size];\ - STRU name(InitHelper(__ach##name), sizeof(__ach##name)/sizeof(*__ach##name)) - -#define INLINE_STRU(name, size) WCHAR __ach##name[size];\ - STRU name; - -#define INLINE_STRU_INIT(name) name(InitHelper(__ach##name), sizeof(__ach##name)/sizeof(*__ach##name)) - - -HRESULT -MakePathCanonicalizationProof( - IN PCWSTR pszName, - OUT STRU * pstrPath -); diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c deleted file mode 100644 index f7b2da5e4357..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.c +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include -#include "pudebug.h" -#include "tracelog.h" -#include - - -#define ALLOC_MEM(cb) (PVOID)LocalAlloc( LPTR, (cb) ) -#define FREE_MEM(ptr) (VOID)LocalFree( (HLOCAL)(ptr) ) - - - -PTRACE_LOG -CreateTraceLog( - IN LONG LogSize, - IN LONG ExtraBytesInHeader, - IN LONG EntrySize - ) -/*++ - -Routine Description: - - Creates a new (empty) trace log buffer. - -Arguments: - - LogSize - The number of entries in the log. - - ExtraBytesInHeader - The number of extra bytes to include in the - log header. This is useful for adding application-specific - data to the log. - - EntrySize - The size (in bytes) of each entry. - -Return Value: - - PTRACE_LOG - Pointer to the newly created log if successful, - NULL otherwise. - ---*/ -{ - - ULONG ulTotalSize = 0; - ULONG ulLogSize = 0; - ULONG ulEntrySize = 0; - ULONG ulTmpResult = 0; - ULONG ulExtraBytesInHeader = 0; - PTRACE_LOG log = NULL; - HRESULT hr = S_OK; - - // - // Sanity check the parameters. - // - - //DBG_ASSERT( LogSize > 0 ); - //DBG_ASSERT( EntrySize > 0 ); - //DBG_ASSERT( ExtraBytesInHeader >= 0 ); - //DBG_ASSERT( ( EntrySize & 3 ) == 0 ); - - // - // converting to unsigned long. Since all these values are positive - // so its safe to cast them to their unsigned equivalent directly. - // - ulLogSize = (ULONG) LogSize; - ulEntrySize = (ULONG) EntrySize; - ulExtraBytesInHeader = (ULONG) ExtraBytesInHeader; - - // - // Check if the multiplication operation will overflow a LONG - // ulTotalSize = LogSize * EntrySize; - // - hr = ULongMult( ulLogSize, ulEntrySize, &ulTotalSize ); - if ( FAILED(hr) ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return NULL; - } - - // - // check for overflow in addition operation. - // ulTmpResult = sizeof(TRACE_LOG) + ulExtraBytesInHeader - // - hr = ULongAdd( (ULONG) sizeof(TRACE_LOG), ulExtraBytesInHeader, &ulTmpResult ); - if ( FAILED(hr) ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return NULL; - } - - // - // check for overflow in addition operation. - // ulTotalSize = ulTotalSize + ulTmpResult; - // - hr = ULongAdd( ulTmpResult, ulTotalSize, &ulTotalSize ); - if ( FAILED(hr) ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return NULL; - } - - if ( ulTotalSize > (ULONG) 0x7FFFFFFF ) - { - SetLastError( ERROR_ARITHMETIC_OVERFLOW ); - return NULL; - } - - // - // Allocate & initialize the log structure. - // - - log = (PTRACE_LOG)ALLOC_MEM( ulTotalSize ); - - // - // Initialize it. - // - - if( log != NULL ) { - - RtlZeroMemory( log, ulTotalSize ); - - log->Signature = TRACE_LOG_SIGNATURE; - log->LogSize = LogSize; - log->NextEntry = -1; - log->EntrySize = EntrySize; - log->LogBuffer = (PUCHAR)( log + 1 ) + ExtraBytesInHeader; - } - - return log; - -} // CreateTraceLog - - -VOID -DestroyTraceLog( - IN PTRACE_LOG Log - ) -/*++ - -Routine Description: - - Destroys a trace log buffer created with CreateTraceLog(). - -Arguments: - - Log - The trace log buffer to destroy. - -Return Value: - - None. - ---*/ -{ - if ( Log != NULL ) { - //DBG_ASSERT( Log->Signature == TRACE_LOG_SIGNATURE ); - - Log->Signature = TRACE_LOG_SIGNATURE_X; - FREE_MEM( Log ); - } - -} // DestroyTraceLog - - -LONG -WriteTraceLog( - IN PTRACE_LOG Log, - IN PVOID Entry - ) -/*++ - -Routine Description: - - Writes a new entry to the specified trace log. - -Arguments: - - Log - The log to write to. - - Entry - Pointer to the data to write. This buffer is assumed to be - Log->EntrySize bytes long. - -Return Value: - - Index of entry in log. This is useful for correlating the output - of !inetdbg.ref to a particular point in the output debug stream - ---*/ -{ - - PUCHAR target; - ULONG index; - - //DBG_ASSERT( Log != NULL ); - //DBG_ASSERT( Log->Signature == TRACE_LOG_SIGNATURE ); - //DBG_ASSERT( Entry != NULL ); - - // - // Find the next slot, copy the entry to the slot. - // - - index = ( (ULONG) InterlockedIncrement( &Log->NextEntry ) ) % (ULONG) Log->LogSize; - - //DBG_ASSERT( index < (ULONG) Log->LogSize ); - - target = Log->LogBuffer + ( index * Log->EntrySize ); - - RtlCopyMemory( - target, - Entry, - Log->EntrySize - ); - - return index; -} // WriteTraceLog - - -VOID -ResetTraceLog( - IN PTRACE_LOG Log - ) -{ - - //DBG_ASSERT( Log != NULL ); - //DBG_ASSERT( Log->Signature == TRACE_LOG_SIGNATURE ); - - RtlZeroMemory( - ( Log + 1 ), - Log->LogSize * Log->EntrySize - ); - - Log->NextEntry = -1; - -} // ResetTraceLog - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h deleted file mode 100644 index ed34bcffc90b..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/tracelog.h +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef _TRACELOG_H_ -#define _TRACELOG_H_ - - -#if defined(__cplusplus) -extern "C" { -#endif // __cplusplus - - -typedef struct _TRACE_LOG { - - // - // Signature. - // - - LONG Signature; - - // - // The total number of entries available in the log. - // - - LONG LogSize; - - // - // The index of the next entry to use. - // - - LONG NextEntry; - - // - // The byte size of each entry. - // - - LONG EntrySize; - - // - // Pointer to the start of the circular buffer. - // - - PUCHAR LogBuffer; - - // - // The extra header bytes and actual log entries go here. - // - // BYTE ExtraHeaderBytes[ExtraBytesInHeader]; - // BYTE Entries[LogSize][EntrySize]; - // - -} TRACE_LOG, *PTRACE_LOG; - - -// -// Log header signature. -// - -#define TRACE_LOG_SIGNATURE ((DWORD)'gOlT') -#define TRACE_LOG_SIGNATURE_X ((DWORD)'golX') - - -// -// This macro maps a TRACE_LOG pointer to a pointer to the 'extra' -// data associated with the log. -// - -#define TRACE_LOG_TO_EXTRA_DATA(log) (PVOID)( (log) + 1 ) - - -// -// Manipulators. -// - -PTRACE_LOG -CreateTraceLog( - IN LONG LogSize, - IN LONG ExtraBytesInHeader, - IN LONG EntrySize - ); - -VOID -DestroyTraceLog( - IN PTRACE_LOG Log - ); - -LONG -WriteTraceLog( - IN PTRACE_LOG Log, - IN PVOID Entry - ); - -VOID -ResetTraceLog( - IN PTRACE_LOG Log - ); - - -#if defined(__cplusplus) -} // extern "C" -#endif // __cplusplus - - -#endif // _TRACELOG_H_ - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h deleted file mode 100644 index baa50726ce61..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/treehash.h +++ /dev/null @@ -1,850 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include -#include "rwlock.h" -#include "prime.h" - -template -class TREE_HASH_NODE -{ - template - friend class TREE_HASH_TABLE; - - private: - // Next node in the hash table look-aside - TREE_HASH_NODE<_Record> *_pNext; - - // links in the tree structure - TREE_HASH_NODE * _pParentNode; - TREE_HASH_NODE * _pFirstChild; - TREE_HASH_NODE * _pNextSibling; - - // actual record - _Record * _pRecord; - - // hash value - PCWSTR _pszPath; - DWORD _dwHash; -}; - -template -class TREE_HASH_TABLE -{ -protected: - typedef BOOL - (PFN_DELETE_IF)( - _Record * pRecord, - PVOID pvContext - ); - - typedef VOID - (PFN_APPLY)( - _Record * pRecord, - PVOID pvContext - ); - -public: - TREE_HASH_TABLE( - BOOL fCaseSensitive - ) : _ppBuckets( NULL ), - _nBuckets( 0 ), - _nItems( 0 ), - _fCaseSensitive( fCaseSensitive ) - { - } - - virtual - ~TREE_HASH_TABLE(); - - virtual - VOID - ReferenceRecord( - _Record * pRecord - ) = 0; - - virtual - VOID - DereferenceRecord( - _Record * pRecord - ) = 0; - - virtual - PCWSTR - GetKey( - _Record * pRecord - ) = 0; - - DWORD - Count() - { - return _nItems; - } - - virtual - VOID - Clear(); - - HRESULT - Initialize( - DWORD nBucketSize - ); - - DWORD - CalcHash( - PCWSTR pszKey - ) - { - return _fCaseSensitive ? HashString(pszKey) : HashStringNoCase(pszKey); - } - - virtual - VOID - FindKey( - PCWSTR pszKey, - _Record ** ppRecord - ); - - virtual - HRESULT - InsertRecord( - _Record * pRecord - ); - - virtual - VOID - DeleteKey( - PCWSTR pszKey - ); - - virtual - VOID - DeleteIf( - PFN_DELETE_IF pfnDeleteIf, - PVOID pvContext - ); - - VOID - Apply( - PFN_APPLY pfnApply, - PVOID pvContext - ); - -private: - - BOOL - FindNodeInternal( - PCWSTR pszKey, - DWORD dwHash, - TREE_HASH_NODE<_Record> ** ppNode, - TREE_HASH_NODE<_Record> *** pppPreviousNodeNextPointer = NULL - ); - - HRESULT - AddNodeInternal( - PCWSTR pszPath, - DWORD dwHash, - _Record * pRecord, - TREE_HASH_NODE<_Record> * pParentNode, - TREE_HASH_NODE<_Record> ** ppNewNode - ); - - HRESULT - AllocateNode( - PCWSTR pszPath, - DWORD dwHash, - _Record * pRecord, - TREE_HASH_NODE<_Record> * pParentNode, - TREE_HASH_NODE<_Record> ** ppNewNode - ); - - VOID - DeleteNode( - TREE_HASH_NODE<_Record> * pNode - ) - { - if (pNode->_pRecord != NULL) - { - DereferenceRecord(pNode->_pRecord); - pNode->_pRecord = NULL; - } - - HeapFree(GetProcessHeap(), - 0, - pNode); - } - - VOID - DeleteNodeInternal( - TREE_HASH_NODE<_Record> ** ppPreviousNodeNextPointer, - TREE_HASH_NODE<_Record> * pNode - ); - - VOID - RehashTableIfNeeded( - VOID - ); - - TREE_HASH_NODE<_Record> ** _ppBuckets; - DWORD _nBuckets; - DWORD _nItems; - BOOL _fCaseSensitive; - CWSDRWLock _tableLock; -}; - -template -HRESULT -TREE_HASH_TABLE<_Record>::AllocateNode( - PCWSTR pszPath, - DWORD dwHash, - _Record * pRecord, - TREE_HASH_NODE<_Record> * pParentNode, - TREE_HASH_NODE<_Record> ** ppNewNode -) -{ - // - // Allocate enough extra space for pszPath - // - DWORD cchPath = (DWORD) wcslen(pszPath); - if (cchPath >= ((0xffffffff - sizeof(TREE_HASH_NODE<_Record>))/sizeof(WCHAR) - 1)) - { - return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - } - TREE_HASH_NODE<_Record> *pNode = (TREE_HASH_NODE<_Record> *)HeapAlloc( - GetProcessHeap(), - HEAP_ZERO_MEMORY, - sizeof(TREE_HASH_NODE<_Record>) + (cchPath+1)*sizeof(WCHAR)); - if (pNode == NULL) - { - return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - } - - memcpy(pNode+1, pszPath, (cchPath+1)*sizeof(WCHAR)); - pNode->_pszPath = (PCWSTR)(pNode+1); - pNode->_dwHash = dwHash; - pNode->_pNext = pNode->_pNextSibling = pNode->_pFirstChild = NULL; - pNode->_pParentNode = pParentNode; - pNode->_pRecord = pRecord; - - *ppNewNode = pNode; - return S_OK; -} - -template -HRESULT -TREE_HASH_TABLE<_Record>::Initialize( - DWORD nBuckets -) -{ - HRESULT hr = S_OK; - - if ( nBuckets == 0 ) - { - hr = E_INVALIDARG; - goto Failed; - } - - hr = _tableLock.Init(); - if ( FAILED( hr ) ) - { - goto Failed; - } - - if (nBuckets >= 0xffffffff/sizeof(TREE_HASH_NODE<_Record> *)) - { - hr = E_INVALIDARG; - goto Failed; - } - - _ppBuckets = (TREE_HASH_NODE<_Record> **)HeapAlloc( - GetProcessHeap(), - HEAP_ZERO_MEMORY, - nBuckets*sizeof(TREE_HASH_NODE<_Record> *)); - if (_ppBuckets == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - goto Failed; - } - _nBuckets = nBuckets; - - return S_OK; - -Failed: - - if (_ppBuckets) - { - HeapFree(GetProcessHeap(), - 0, - _ppBuckets); - _ppBuckets = NULL; - } - - return hr; -} - - -template -TREE_HASH_TABLE<_Record>::~TREE_HASH_TABLE() -{ - if (_ppBuckets == NULL) - { - return; - } - - _ASSERTE(_nItems == 0); - - HeapFree(GetProcessHeap(), - 0, - _ppBuckets); - _ppBuckets = NULL; - _nBuckets = 0; -} - -template -VOID -TREE_HASH_TABLE<_Record>::Clear() -{ - TREE_HASH_NODE<_Record> *pCurrent; - TREE_HASH_NODE<_Record> *pNext; - - _tableLock.ExclusiveAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - pCurrent = _ppBuckets[i]; - _ppBuckets[i] = NULL; - while (pCurrent != NULL) - { - pNext = pCurrent->_pNext; - DeleteNode(pCurrent); - pCurrent = pNext; - } - } - - _nItems = 0; - _tableLock.ExclusiveRelease(); -} - -template -BOOL -TREE_HASH_TABLE<_Record>::FindNodeInternal( - PCWSTR pszKey, - DWORD dwHash, - TREE_HASH_NODE<_Record> ** ppNode, - TREE_HASH_NODE<_Record> *** pppPreviousNodeNextPointer -) -/*++ - Return value indicates whether the item is found - key, dwHash - key and hash for the node to find - ppNode - on successful return, the node found, on failed return, the first - node with hash value greater than the node to be found - pppPreviousNodeNextPointer - the pointer to previous node's _pNext - - This routine may be called under either read or write lock ---*/ -{ - TREE_HASH_NODE<_Record> **ppPreviousNodeNextPointer; - TREE_HASH_NODE<_Record> *pNode; - BOOL fFound = FALSE; - - ppPreviousNodeNextPointer = _ppBuckets + (dwHash % _nBuckets); - pNode = *ppPreviousNodeNextPointer; - while (pNode != NULL) - { - if (pNode->_dwHash == dwHash) - { - if (CompareStringOrdinal(pszKey, - -1, - pNode->_pszPath, - -1, - !_fCaseSensitive) == CSTR_EQUAL) - { - fFound = TRUE; - break; - } - } - else if (pNode->_dwHash > dwHash) - { - break; - } - - ppPreviousNodeNextPointer = &(pNode->_pNext); - pNode = *ppPreviousNodeNextPointer; - } - - *ppNode = pNode; - if (pppPreviousNodeNextPointer != NULL) - { - *pppPreviousNodeNextPointer = ppPreviousNodeNextPointer; - } - return fFound; -} - -template -VOID -TREE_HASH_TABLE<_Record>::FindKey( - PCWSTR pszKey, - _Record ** ppRecord -) -{ - TREE_HASH_NODE<_Record> *pNode; - - *ppRecord = NULL; - - DWORD dwHash = CalcHash(pszKey); - - _tableLock.SharedAcquire(); - - if (FindNodeInternal(pszKey, dwHash, &pNode) && - pNode->_pRecord != NULL) - { - ReferenceRecord(pNode->_pRecord); - *ppRecord = pNode->_pRecord; - } - - _tableLock.SharedRelease(); -} - -template -HRESULT -TREE_HASH_TABLE<_Record>::AddNodeInternal( - PCWSTR pszPath, - DWORD dwHash, - _Record * pRecord, - TREE_HASH_NODE<_Record> * pParentNode, - TREE_HASH_NODE<_Record> ** ppNewNode -) -/*++ - Return value is HRESULT indicating sucess or failure - pszPath, dwHash, pRecord - path, hash value and record to be inserted - pParentNode - this will be the parent of the node being inserted - ppNewNode - on successful return, the new node created and inserted - - This function may be called under a read or write lock ---*/ -{ - TREE_HASH_NODE<_Record> *pNewNode; - TREE_HASH_NODE<_Record> *pNextNode; - TREE_HASH_NODE<_Record> **ppNextPointer; - HRESULT hr; - - // - // Ownership of pRecord is not transferred to pNewNode yet, so remember - // to either set it to null before deleting pNewNode or add an extra - // reference later - this is to make sure we do not do an extra ref/deref - // which users may view as getting flushed out of the hash-table - // - hr = AllocateNode(pszPath, - dwHash, - pRecord, - pParentNode, - &pNewNode); - if (FAILED(hr)) - { - return hr; - } - - do - { - // - // Find the right place to add this node - // - - if (FindNodeInternal(pszPath, dwHash, &pNextNode, &ppNextPointer)) - { - // - // If node already there, record may still need updating - // - if (pRecord != NULL && - InterlockedCompareExchangePointer((PVOID *)&pNextNode->_pRecord, - pRecord, - NULL) == NULL) - { - ReferenceRecord(pRecord); - hr = S_OK; - } - else - { - hr = HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS); - } - - // ownership of pRecord has either passed to existing record or - // not to anyone at all - pNewNode->_pRecord = NULL; - DeleteNode(pNewNode); - *ppNewNode = pNextNode; - return hr; - } - - // - // If another node got inserted in betwen, we will have to retry - // - pNewNode->_pNext = pNextNode; - } while (InterlockedCompareExchangePointer((PVOID *)ppNextPointer, - pNewNode, - pNextNode) != pNextNode); - // pass ownership of pRecord now - if (pRecord != NULL) - { - ReferenceRecord(pRecord); - pRecord = NULL; - } - InterlockedIncrement((LONG *)&_nItems); - - // - // update the parent - // - if (pParentNode != NULL) - { - ppNextPointer = &pParentNode->_pFirstChild; - do - { - pNextNode = *ppNextPointer; - pNewNode->_pNextSibling = pNextNode; - } while (InterlockedCompareExchangePointer((PVOID *)ppNextPointer, - pNewNode, - pNextNode) != pNextNode); - } - - *ppNewNode = pNewNode; - return S_OK; -} - -template -HRESULT -TREE_HASH_TABLE<_Record>::InsertRecord( - _Record * pRecord -) -/*++ - This method inserts a node for this record and also empty nodes for paths - in the heirarchy leading upto this path - - The insert is done under only a read-lock - this is possible by keeping - the hashes in a bucket in increasing order and using interlocked operations - to actually insert the item in the hash-bucket lookaside list and the parent - children list - - Returns HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) if the record already exists. - Never leak this error to the end user because "*file* already exists" may be confusing. ---*/ -{ - PCWSTR pszKey = GetKey(pRecord); - STACK_STRU( strPartialPath, 256); - PWSTR pszPartialPath; - DWORD dwHash; - DWORD cchEnd; - HRESULT hr; - TREE_HASH_NODE<_Record> *pParentNode = NULL; - - hr = strPartialPath.Copy(pszKey); - if (FAILED(hr)) - { - goto Finished; - } - pszPartialPath = strPartialPath.QueryStr(); - - _tableLock.SharedAcquire(); - - // - // First find the lowest parent node present - // - for (cchEnd = strPartialPath.QueryCCH() - 1; cchEnd > 0; cchEnd--) - { - if (pszPartialPath[cchEnd] == L'/' || pszPartialPath[cchEnd] == L'\\') - { - pszPartialPath[cchEnd] = L'\0'; - - dwHash = CalcHash(pszPartialPath); - if (FindNodeInternal(pszPartialPath, dwHash, &pParentNode)) - { - pszPartialPath[cchEnd] = pszKey[cchEnd]; - break; - } - pParentNode = NULL; - } - } - - // - // Now go ahead and add the rest of the tree (including our record) - // - for (; cchEnd <= strPartialPath.QueryCCH(); cchEnd++) - { - if (pszPartialPath[cchEnd] == L'\0') - { - dwHash = CalcHash(pszPartialPath); - hr = AddNodeInternal( - pszPartialPath, - dwHash, - (cchEnd == strPartialPath.QueryCCH()) ? pRecord : NULL, - pParentNode, - &pParentNode); - if (FAILED(hr) && - hr != HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS)) - { - goto Finished; - } - - pszPartialPath[cchEnd] = pszKey[cchEnd]; - } - } - -Finished: - _tableLock.SharedRelease(); - - if (SUCCEEDED(hr)) - { - RehashTableIfNeeded(); - } - - return hr; -} - -template -VOID -TREE_HASH_TABLE<_Record>::DeleteNodeInternal( - TREE_HASH_NODE<_Record> ** ppNextPointer, - TREE_HASH_NODE<_Record> * pNode -) -/*++ - pNode is the node to be deleted - ppNextPointer is the pointer to the previous node's next pointer pointing - to this node - - This function should be called under write-lock ---*/ -{ - // - // First remove this node from hash table - // - *ppNextPointer = pNode->_pNext; - - // - // Now fixup parent - // - if (pNode->_pParentNode != NULL) - { - ppNextPointer = &pNode->_pParentNode->_pFirstChild; - while (*ppNextPointer != pNode) - { - ppNextPointer = &(*ppNextPointer)->_pNextSibling; - } - *ppNextPointer = pNode->_pNextSibling; - } - - // - // Now remove all children recursively - // - TREE_HASH_NODE<_Record> *pChild = pNode->_pFirstChild; - TREE_HASH_NODE<_Record> *pNextChild; - while (pChild != NULL) - { - pNextChild = pChild->_pNextSibling; - - ppNextPointer = _ppBuckets + (pChild->_dwHash % _nBuckets); - while (*ppNextPointer != pChild) - { - ppNextPointer = &(*ppNextPointer)->_pNext; - } - pChild->_pParentNode = NULL; - DeleteNodeInternal(ppNextPointer, pChild); - - pChild = pNextChild; - } - - DeleteNode(pNode); - _nItems--; -} - -template -VOID -TREE_HASH_TABLE<_Record>::DeleteKey( - PCWSTR pszKey -) -{ - TREE_HASH_NODE<_Record> *pNode; - TREE_HASH_NODE<_Record> **ppPreviousNodeNextPointer; - - DWORD dwHash = CalcHash(pszKey); - - _tableLock.ExclusiveAcquire(); - - if (FindNodeInternal(pszKey, dwHash, &pNode, &ppPreviousNodeNextPointer)) - { - DeleteNodeInternal(ppPreviousNodeNextPointer, pNode); - } - - _tableLock.ExclusiveRelease(); -} - -template -VOID -TREE_HASH_TABLE<_Record>::DeleteIf( - PFN_DELETE_IF pfnDeleteIf, - PVOID pvContext -) -{ - TREE_HASH_NODE<_Record> *pNode; - TREE_HASH_NODE<_Record> **ppPreviousNodeNextPointer; - BOOL fDelete; - - _tableLock.ExclusiveAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - ppPreviousNodeNextPointer = _ppBuckets + i; - pNode = *ppPreviousNodeNextPointer; - while (pNode != NULL) - { - // - // Non empty nodes deleted based on DeleteIf, empty nodes deleted - // if they have no children - // - fDelete = FALSE; - if (pNode->_pRecord != NULL) - { - if (pfnDeleteIf(pNode->_pRecord, pvContext)) - { - fDelete = TRUE; - } - } - else if (pNode->_pFirstChild == NULL) - { - fDelete = TRUE; - } - - if (fDelete) - { - if (pNode->_pFirstChild == NULL) - { - DeleteNodeInternal(ppPreviousNodeNextPointer, pNode); - } - else - { - DereferenceRecord(pNode->_pRecord); - pNode->_pRecord = NULL; - } - } - else - { - ppPreviousNodeNextPointer = &pNode->_pNext; - } - - pNode = *ppPreviousNodeNextPointer; - } - } - - _tableLock.ExclusiveRelease(); -} - -template -VOID -TREE_HASH_TABLE<_Record>::Apply( - PFN_APPLY pfnApply, - PVOID pvContext -) -{ - TREE_HASH_NODE<_Record> *pNode; - - _tableLock.SharedAcquire(); - - for (DWORD i=0; i<_nBuckets; i++) - { - pNode = _ppBuckets[i]; - while (pNode != NULL) - { - if (pNode->_pRecord != NULL) - { - pfnApply(pNode->_pRecord, pvContext); - } - - pNode = pNode->_pNext; - } - } - - _tableLock.SharedRelease(); -} - -template -VOID -TREE_HASH_TABLE<_Record>::RehashTableIfNeeded( - VOID -) -{ - TREE_HASH_NODE<_Record> **ppBuckets; - DWORD nBuckets; - TREE_HASH_NODE<_Record> *pNode; - TREE_HASH_NODE<_Record> *pNextNode; - TREE_HASH_NODE<_Record> **ppNextPointer; - TREE_HASH_NODE<_Record> *pNewNextNode; - DWORD nNewBuckets; - - // - // If number of items has become too many, we will double the hash table - // size (we never reduce it however) - // - if (_nItems <= PRIME::GetPrime(2*_nBuckets)) - { - return; - } - - _tableLock.ExclusiveAcquire(); - - nNewBuckets = PRIME::GetPrime(2*_nBuckets); - - if (_nItems <= nNewBuckets) - { - goto Finished; - } - - nBuckets = nNewBuckets; - if (nBuckets >= 0xffffffff/sizeof(TREE_HASH_NODE<_Record> *)) - { - goto Finished; - } - ppBuckets = (TREE_HASH_NODE<_Record> **)HeapAlloc( - GetProcessHeap(), - HEAP_ZERO_MEMORY, - nBuckets*sizeof(TREE_HASH_NODE<_Record> *)); - if (ppBuckets == NULL) - { - goto Finished; - } - - // - // Take out nodes from the old hash table and insert in the new one, make - // sure to keep the hashes in increasing order - // - for (DWORD i=0; i<_nBuckets; i++) - { - pNode = _ppBuckets[i]; - while (pNode != NULL) - { - pNextNode = pNode->_pNext; - - ppNextPointer = ppBuckets + (pNode->_dwHash % nBuckets); - pNewNextNode = *ppNextPointer; - while (pNewNextNode != NULL && - pNewNextNode->_dwHash <= pNode->_dwHash) - { - ppNextPointer = &pNewNextNode->_pNext; - pNewNextNode = pNewNextNode->_pNext; - } - pNode->_pNext = pNewNextNode; - *ppNextPointer = pNode; - - pNode = pNextNode; - } - } - - HeapFree(GetProcessHeap(), 0, _ppBuckets); - _ppBuckets = ppBuckets; - _nBuckets = nBuckets; - ppBuckets = NULL; - -Finished: - - _tableLock.ExclusiveRelease(); -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cxx deleted file mode 100644 index 214ee65abfe4..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/IISLib/util.cxx +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "precomp.h" - -HRESULT -MakePathCanonicalizationProof( - IN PCWSTR pszName, - OUT STRU * pstrPath -) -/*++ - -Routine Description: - - This functions adds a prefix - to the string, which is "\\?\UNC\" for a UNC path, and "\\?\" for - other paths. This prefix tells Windows not to parse the path. - -Arguments: - - IN pszName - The path to be converted - OUT pstrPath - Output path created - -Return Values: - - HRESULT - ---*/ -{ - HRESULT hr; - - if (pszName[0] == L'\\' && pszName[1] == L'\\') - { - // - // If the path is already canonicalized, just return - // - - if ((pszName[2] == '?' || pszName[2] == '.') && - pszName[3] == '\\') - { - hr = pstrPath->Copy(pszName); - - if (SUCCEEDED(hr)) - { - // - // If the path was in DOS form ("\\.\"), - // we need to change it to Win32 from ("\\?\") - // - - pstrPath->QueryStr()[2] = L'?'; - } - - return hr; - } - - pszName += 2; - - - if (FAILED(hr = pstrPath->Copy(L"\\\\?\\UNC\\"))) - { - return hr; - } - } - else if (wcslen(pszName) > MAX_PATH) - { - if (FAILED(hr = pstrPath->Copy(L"\\\\?\\"))) - { - return hr; - } - } - else - { - pstrPath->Reset(); - } - - return pstrPath->Append(pszName); -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/RequestHandler.vcxproj b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/RequestHandler.vcxproj deleted file mode 100644 index 955839f2b935..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/RequestHandler.vcxproj +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {D57EA297-6DC2-4BC0-8C91-334863327863} - Win32Proj - RequestHandler - 10.0.15063.0 - RequestHandler - - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - DynamicLibrary - true - v141 - Unicode - - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - aspnetcorerh - - - false - - - false - - - - NotUsing - Level4 - Disabled - WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - precomp.hxx - $(IntDir)$(TargetName).pch - ProgramDatabase - MultiThreadedDebug - ..\IISLib;..\CommonLib;.\Inc - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - true - kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - Source.def - - - - - NotUsing - Level4 - Disabled - WIN32;_DEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - precomp.hxx - $(IntDir)$(TargetName).pch - ProgramDatabase - MultiThreadedDebug - ..\IISLib;..\CommonLib;.\Inc - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - true - kernel32.lib;user32.lib;advapi32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - Source.def - - - - - Level4 - NotUsing - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;REQUESTHANDLER_EXPORTS;%(PreprocessorDefinitions) - precomp.hxx - MultiThreaded - ..\IISLib;..\CommonLib;.\Inc - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - false - true - true - Source.def - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;winhttp.lib;odbc32.lib;ws2_32.lib;odbccp32.lib;wbemuuid.lib;iphlpapi.lib;pdh.lib;rpcrt4.lib;%(AdditionalDependencies) - - - - - Level4 - NotUsing - MaxSpeed - true - true - NDEBUG;REQUESTHANDLER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - precomp.hxx - MultiThreaded - ..\IISLib;..\CommonLib;.\Inc - true - true - true - false - SyncCThrow - 8Bytes - true - false - true - CompileAsCpp - true - - - Windows - false - true - true - Source.def - kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;ahadmin.lib;rpcrt4.lib;winhttp.lib;pdh.lib;ws2_32.lib;wbemuuid.lib;iphlpapi.lib;%(AdditionalDependencies) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {55494e58-e061-4c4c-a0a8-837008e72f85} - - - {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/Source.def b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/Source.def deleted file mode 100644 index 889bd1a39b88..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/Source.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY aspnetcorerh - -EXPORTS - CreateApplication - CreateRequestHandler - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/aspnetcore_event.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/aspnetcore_event.h deleted file mode 100644 index 2c13d20d1e0d..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/aspnetcore_event.h +++ /dev/null @@ -1,550 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#ifndef __ASPNETCOREEVENT_H__ -#define __ASPNETCOREEVENT_H__ -/*++ - - Module Name: - - aspnetcore_event.h - - Abstract: - - Header file has been generated from mof file containing - IIS trace event descriptions - ---*/ - -// -// Start of the new provider class WWWServerTraceProvider, -// GUID: {3a2a4e84-4c21-4981-ae10-3fda0d9b0f83} -// Description: IIS: WWW Server -// - -class WWWServerTraceProvider -{ -public: - static - LPCGUID - GetProviderGuid( VOID ) - // return GUID for the current event class - { - static const GUID ProviderGuid = - {0x3a2a4e84,0x4c21,0x4981,{0xae,0x10,0x3f,0xda,0x0d,0x9b,0x0f,0x83}}; - return &ProviderGuid; - }; - enum enumAreaFlags - { - // AspNetCore module events - ANCM = 0x10000 - }; - static - LPCWSTR - TranslateEnumAreaFlagsToString( enum enumAreaFlags EnumValue) - { - switch( (DWORD) EnumValue ) - { - case 0x10000: return L"ANCM"; - } - return NULL; - }; - - static - BOOL - CheckTracingEnabled( - IHttpTraceContext * pHttpTraceContext, - enumAreaFlags AreaFlags, - DWORD dwVerbosity ) - { - HRESULT hr; - HTTP_TRACE_CONFIGURATION TraceConfig; - TraceConfig.pProviderGuid = GetProviderGuid(); - hr = pHttpTraceContext->GetTraceConfiguration( &TraceConfig ); - if ( FAILED( hr ) || !TraceConfig.fProviderEnabled ) - { - return FALSE; - } - if ( TraceConfig.dwVerbosity >= dwVerbosity && - ( TraceConfig.dwAreas == (DWORD) AreaFlags || - ( TraceConfig.dwAreas & (DWORD)AreaFlags ) == (DWORD)AreaFlags ) ) - { - return TRUE; - } - return FALSE; - }; -}; - -// -// Start of the new event class ANCMEvents, -// GUID: {82ADEAD7-12B2-4781-BDCA-5A4B6C757191} -// Description: ANCM runtime events -// - -class ANCMEvents -{ -public: - static - LPCGUID - GetAreaGuid( VOID ) - // return GUID for the current event class - { - static const GUID AreaGuid = - {0x82adead7,0x12b2,0x4781,{0xbd,0xca,0x5a,0x4b,0x6c,0x75,0x71,0x91}}; - return &AreaGuid; - }; - - // - // Event: mof class name ANCMAppStart, - // Description: Start application success - // EventTypeName: ANCM_START_APPLICATION_SUCCESS - // EventType: 1 - // EventLevel: 4 - // - - class ANCM_START_APPLICATION_SUCCESS - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId, - LPCWSTR pAppDescription - ) - // - // Raise ANCM_START_APPLICATION_SUCCESS Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 1; - Event.pszEventName = L"ANCM_START_APPLICATION_SUCCESS"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 4; - Event.cEventItems = 2; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 2 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Items[ 1 ].pszName = L"AppDescription"; - Items[ 1 ].dwDataType = HTTP_TRACE_TYPE_LPCWSTR; // mof type (string) - Items[ 1 ].pbData = (PBYTE) pAppDescription; - Items[ 1 ].cbData = - ( Items[ 1 ].pbData == NULL )? 0 : ( sizeof(WCHAR) * (1 + (DWORD) wcslen( (PWSTR) Items[ 1 ].pbData ) ) ); - Items[ 1 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 4 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMAppStartFail, - // Description: Start application failed - // EventTypeName: ANCM_START_APPLICATION_FAIL - // EventType: 2 - // EventLevel: 2 - // - - class ANCM_START_APPLICATION_FAIL - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId, - LPCWSTR pFailureDescription - ) - // - // Raise ANCM_START_APPLICATION_FAIL Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 2; - Event.pszEventName = L"ANCM_START_APPLICATION_FAIL"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 2; - Event.cEventItems = 2; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 2 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Items[ 1 ].pszName = L"FailureDescription"; - Items[ 1 ].dwDataType = HTTP_TRACE_TYPE_LPCWSTR; // mof type (string) - Items[ 1 ].pbData = (PBYTE) pFailureDescription; - Items[ 1 ].cbData = - ( Items[ 1 ].pbData == NULL )? 0 : ( sizeof(WCHAR) * (1 + (DWORD) wcslen( (PWSTR) Items[ 1 ].pbData ) ) ); - Items[ 1 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 2 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMForwardStart, - // Description: Start forwarding request - // EventTypeName: ANCM_REQUEST_FORWARD_START - // EventType: 3 - // EventLevel: 4 - // - - class ANCM_REQUEST_FORWARD_START - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId - ) - // - // Raise ANCM_REQUEST_FORWARD_START Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 3; - Event.pszEventName = L"ANCM_REQUEST_FORWARD_START"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 4; - Event.cEventItems = 1; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 1 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 4 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMForwardEnd, - // Description: Finish forwarding request - // EventTypeName: ANCM_REQUEST_FORWARD_END - // EventType: 4 - // EventLevel: 4 - // - - class ANCM_REQUEST_FORWARD_END - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId - ) - // - // Raise ANCM_REQUEST_FORWARD_END Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 4; - Event.pszEventName = L"ANCM_REQUEST_FORWARD_END"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 4; - Event.cEventItems = 1; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 1 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 4 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMForwardFail, - // Description: Forwarding request failure - // EventTypeName: ANCM_REQUEST_FORWARD_FAIL - // EventType: 5 - // EventLevel: 2 - // - - class ANCM_REQUEST_FORWARD_FAIL - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId, - ULONG ErrorCode - ) - // - // Raise ANCM_REQUEST_FORWARD_FAIL Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 5; - Event.pszEventName = L"ANCM_REQUEST_FORWARD_FAIL"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 2; - Event.cEventItems = 2; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 2 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Items[ 1 ].pszName = L"ErrorCode"; - Items[ 1 ].dwDataType = HTTP_TRACE_TYPE_ULONG; // mof type (uint32) - Items[ 1 ].pbData = (PBYTE) &ErrorCode; - Items[ 1 ].cbData = 4; - Items[ 1 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 2 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMWinHttpCallBack, - // Description: Receiving callback from WinHttp - // EventTypeName: ANCM_WINHTTP_CALLBACK - // EventType: 6 - // EventLevel: 4 - // - - class ANCM_WINHTTP_CALLBACK - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId, - ULONG InternetStatus - ) - // - // Raise ANCM_WINHTTP_CALLBACK Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 6; - Event.pszEventName = L"ANCM_WINHTTP_CALLBACK"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 4; - Event.cEventItems = 2; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 2 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Items[ 1 ].pszName = L"InternetStatus"; - Items[ 1 ].dwDataType = HTTP_TRACE_TYPE_ULONG; // mof type (uint32) - Items[ 1 ].pbData = (PBYTE) &InternetStatus; - Items[ 1 ].cbData = 4; - Items[ 1 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 4 ); //Verbosity - }; - }; - // - // Event: mof class name ANCMForwardEnd, - // Description: Inprocess executing request failure - // EventTypeName: ANCM_EXECUTE_REQUEST_FAIL - // EventType: 7 - // EventLevel: 2 - // - - class ANCM_EXECUTE_REQUEST_FAIL - { - public: - static - HRESULT - RaiseEvent( - IHttpTraceContext * pHttpTraceContext, - LPCGUID pContextId, - ULONG ErrorCode - ) - // - // Raise ANCM_EXECUTE_REQUEST_FAIL Event - // - { - HTTP_TRACE_EVENT Event; - Event.pProviderGuid = WWWServerTraceProvider::GetProviderGuid(); - Event.dwArea = WWWServerTraceProvider::ANCM; - Event.pAreaGuid = ANCMEvents::GetAreaGuid(); - Event.dwEvent = 7; - Event.pszEventName = L"ANCM_EXECUTE_REQUEST_FAIL"; - Event.dwEventVersion = 1; - Event.dwVerbosity = 2; - Event.cEventItems = 2; - Event.pActivityGuid = NULL; - Event.pRelatedActivityGuid = NULL; - Event.dwTimeStamp = 0; - Event.dwFlags = HTTP_TRACE_EVENT_FLAG_STATIC_DESCRIPTIVE_FIELDS; - - // pActivityGuid, pRelatedActivityGuid, Timestamp to be filled in by IIS - - HTTP_TRACE_EVENT_ITEM Items[ 2 ]; - Items[ 0 ].pszName = L"ContextId"; - Items[ 0 ].dwDataType = HTTP_TRACE_TYPE_LPCGUID; // mof type (object) - Items[ 0 ].pbData = (PBYTE) pContextId; - Items[ 0 ].cbData = 16; - Items[ 0 ].pszDataDescription = NULL; - Items[ 1 ].pszName = L"ErrorCode"; - Items[ 1 ].dwDataType = HTTP_TRACE_TYPE_ULONG; // mof type (uint32) - Items[ 1 ].pbData = (PBYTE) &ErrorCode; - Items[ 1 ].cbData = 4; - Items[ 1 ].pszDataDescription = NULL; - Event.pEventItems = Items; - pHttpTraceContext->RaiseTraceEvent( &Event ); - return S_OK; - }; - - static - BOOL - IsEnabled( - IHttpTraceContext * pHttpTraceContext ) - // Check if tracing for this event is enabled - { - return WWWServerTraceProvider::CheckTracingEnabled( - pHttpTraceContext, - WWWServerTraceProvider::ANCM, - 2 ); //Verbosity - }; - }; -}; -#endif diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/disconnectcontext.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/disconnectcontext.h deleted file mode 100644 index e43a49c0a011..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/disconnectcontext.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -class ASYNC_DISCONNECT_CONTEXT : public IHttpConnectionStoredContext -{ -public: - ASYNC_DISCONNECT_CONTEXT() - { - m_pHandler = NULL; - } - - VOID - CleanupStoredContext() - { - DBG_ASSERT(m_pHandler == NULL); - delete this; - } - - VOID - NotifyDisconnect() - { - REQUEST_HANDLER *pInitialValue = (REQUEST_HANDLER*) - InterlockedExchangePointer((PVOID*)&m_pHandler, NULL); - - if (pInitialValue != NULL) - { - pInitialValue->TerminateRequest(TRUE); - pInitialValue->DereferenceRequestHandler(); - } - } - - VOID - SetHandler( - REQUEST_HANDLER *pHandler - ) - { - // - // Take a reference on the forwarding handler. - // This reference will be released on either of two conditions: - // - // 1. When the request processing ends, in which case a ResetHandler() - // is called. - // - // 2. When a disconnect notification arrives. - // - // We need to make sure that only one of them ends up dereferencing - // the object. - // - - DBG_ASSERT(pHandler != NULL); - DBG_ASSERT(m_pHandler == NULL); - - pHandler->ReferenceRequestHandler(); - InterlockedExchangePointer((PVOID*)&m_pHandler, pHandler); - } - - VOID - ResetHandler( - VOID - ) - { - REQUEST_HANDLER *pInitialValue = (REQUEST_HANDLER*) - InterlockedExchangePointer((PVOID*)&m_pHandler, NULL); - - if (pInitialValue != NULL) - { - pInitialValue->DereferenceRequestHandler(); - } - } - -private: - ~ASYNC_DISCONNECT_CONTEXT() - {} - - REQUEST_HANDLER * m_pHandler; -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/dllmain.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/dllmain.cxx deleted file mode 100644 index 3cfdef079840..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/dllmain.cxx +++ /dev/null @@ -1,369 +0,0 @@ -// dllmain.cpp : Defines the entry point for the DLL application. -#include "precomp.hxx" -#include -#include - -BOOL g_fNsiApiNotSupported = FALSE; -BOOL g_fWebSocketSupported = FALSE; -BOOL g_fEnableReferenceCountTracing = FALSE; -BOOL g_fGlobalInitialize = FALSE; -BOOL g_fOutOfProcessInitialize = FALSE; -BOOL g_fOutOfProcessInitializeError = FALSE; -BOOL g_fWinHttpNonBlockingCallbackAvailable = FALSE; -BOOL g_fProcessDetach = FALSE; -DWORD g_OptionalWinHttpFlags = 0; -DWORD g_dwAspNetCoreDebugFlags = 0; -DWORD g_dwDebugFlags = 0; -DWORD g_dwTlsIndex = TLS_OUT_OF_INDEXES; -SRWLOCK g_srwLockRH; -HINTERNET g_hWinhttpSession = NULL; -IHttpServer * g_pHttpServer = NULL; -HINSTANCE g_hWinHttpModule; -HINSTANCE g_hAspNetCoreModule; -HANDLE g_hEventLog = NULL; - - -VOID -InitializeGlobalConfiguration( - IHttpServer * pServer -) -{ - HKEY hKey; - BOOL fLocked = FALSE; - DWORD dwSize = 0; - DWORD dwResult = 0; - - if (!g_fGlobalInitialize) - { - AcquireSRWLockExclusive(&g_srwLockRH); - fLocked = TRUE; - - if (g_fGlobalInitialize) - { - // Done by another thread - goto Finished; - } - - g_pHttpServer = pServer; - if (pServer->IsCommandLineLaunch()) - { - g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_IISEXPRESS_EVENT_PROVIDER); - } - else - { - g_hEventLog = RegisterEventSource(NULL, ASPNETCORE_EVENT_PROVIDER); - } - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - L"SOFTWARE\\Microsoft\\IIS Extensions\\IIS AspNetCore Module\\Parameters", - 0, - KEY_READ, - &hKey) == NO_ERROR) - { - DWORD dwType; - DWORD dwData; - DWORD cbData; - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"OptionalWinHttpFlags", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - g_OptionalWinHttpFlags = dwData; - } - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"EnableReferenceCountTracing", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD) && (dwData == 1 || dwData == 0)) - { - g_fEnableReferenceCountTracing = !!dwData; - } - - cbData = sizeof(dwData); - if ((RegQueryValueEx(hKey, - L"DebugFlags", - NULL, - &dwType, - (LPBYTE)&dwData, - &cbData) == NO_ERROR) && - (dwType == REG_DWORD)) - { - g_dwAspNetCoreDebugFlags = dwData; - } - RegCloseKey(hKey); - } - - dwResult = GetExtendedTcpTable(NULL, - &dwSize, - FALSE, - AF_INET, - TCP_TABLE_OWNER_PID_LISTENER, - 0); - if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER) - { - g_fNsiApiNotSupported = TRUE; - } - - g_fWebSocketSupported = IsWindows8OrGreater(); - - g_fGlobalInitialize = TRUE; - } -Finished: - if (fLocked) - { - ReleaseSRWLockExclusive(&g_srwLockRH); - } -} - -// -// Global initialization routine for OutOfProcess -// -HRESULT -EnsureOutOfProcessInitializtion() -{ - - DBG_ASSERT(pServer); - - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - - if (g_fOutOfProcessInitializeError) - { - hr = E_NOT_VALID_STATE; - goto Finished; - } - - if (!g_fOutOfProcessInitialize) - { - AcquireSRWLockExclusive(&g_srwLockRH); - fLocked = TRUE; - if (g_fOutOfProcessInitializeError) - { - hr = E_NOT_VALID_STATE; - goto Finished; - } - - if (g_fOutOfProcessInitialize) - { - // Done by another thread - goto Finished; - } - - g_hWinHttpModule = GetModuleHandle(TEXT("winhttp.dll")); - - g_hAspNetCoreModule = GetModuleHandle(TEXT("aspnetcore.dll")); - - hr = WINHTTP_HELPER::StaticInitialize(); - if (FAILED(hr)) - { - if (hr == HRESULT_FROM_WIN32(ERROR_PROC_NOT_FOUND)) - { - g_fWebSocketSupported = FALSE; - } - else - { - goto Finished; - } - } - - g_hWinhttpSession = WinHttpOpen(L"", - WINHTTP_ACCESS_TYPE_NO_PROXY, - WINHTTP_NO_PROXY_NAME, - WINHTTP_NO_PROXY_BYPASS, - WINHTTP_FLAG_ASYNC); - if (g_hWinhttpSession == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // - // Don't set non-blocking callbacks WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS, - // as we will call WinHttpQueryDataAvailable to get response on the same thread - // that we received callback from Winhttp on completing sending/forwarding the request - // - - // - // Setup the callback function - // - if (WinHttpSetStatusCallback(g_hWinhttpSession, - FORWARDING_HANDLER::OnWinHttpCompletion, - (WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | - WINHTTP_CALLBACK_STATUS_SENDING_REQUEST), - NULL) == WINHTTP_INVALID_STATUS_CALLBACK) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // - // Make sure we see the redirects (rather than winhttp doing it - // automatically) - // - DWORD dwRedirectOption = WINHTTP_OPTION_REDIRECT_POLICY_NEVER; - if (!WinHttpSetOption(g_hWinhttpSession, - WINHTTP_OPTION_REDIRECT_POLICY, - &dwRedirectOption, - sizeof(dwRedirectOption))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - g_dwTlsIndex = TlsAlloc(); - if (g_dwTlsIndex == TLS_OUT_OF_INDEXES) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hr = FORWARDING_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing); - if (FAILED(hr)) - { - goto Finished; - } - - hr = WEBSOCKET_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing); - if (FAILED(hr)) - { - goto Finished; - } - } - -Finished: - if (FAILED(hr)) - { - g_fOutOfProcessInitializeError = TRUE; - } - if (fLocked) - { - ReleaseSRWLockExclusive(&g_srwLockRH); - } - return hr; -} - -BOOL APIENTRY DllMain(HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved -) -{ - UNREFERENCED_PARAMETER(lpReserved); - - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - DisableThreadLibraryCalls(hModule); - InitializeSRWLock(&g_srwLockRH); - break; - case DLL_PROCESS_DETACH: - g_fProcessDetach = TRUE; - default: - break; - } - return TRUE; -} - -HRESULT -__stdcall -CreateApplication( - _In_ IHttpServer *pServer, - _In_ ASPNETCORE_CONFIG *pConfig, - _Out_ APPLICATION **ppApplication -) -{ - HRESULT hr = S_OK; - APPLICATION *pApplication = NULL; - - // Initialze some global variables here - InitializeGlobalConfiguration(pServer); - - if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) - { - pApplication = new IN_PROCESS_APPLICATION(pServer, pConfig); - if (pApplication == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY); - goto Finished; - } - } - else if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_OUT_PROCESS) - { - hr = EnsureOutOfProcessInitializtion(); - if (FAILED(hr)) - { - goto Finished; - } - - pApplication = new OUT_OF_PROCESS_APPLICATION(pServer, pConfig); - if (pApplication == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY); - goto Finished; - } - - hr = ((OUT_OF_PROCESS_APPLICATION*)pApplication)->Initialize(); - if (FAILED(hr)) - { - delete pApplication; - pApplication = NULL; - goto Finished; - } - } - else - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); - goto Finished; - } - - *ppApplication = pApplication; - -Finished: - return hr; -} - -HRESULT -__stdcall -CreateRequestHandler( - _In_ IHttpContext *pHttpContext, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication, - _Out_ REQUEST_HANDLER **pRequestHandler -) -{ - HRESULT hr = S_OK; - REQUEST_HANDLER* pHandler = NULL; - ASPNETCORE_CONFIG* pConfig = pApplication->QueryConfig(); - DBG_ASSERT(pConfig); - - if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_IN_PROCESS) - { - pHandler = new IN_PROCESS_HANDLER(pHttpContext, pModuleId, pApplication); - } - else if (pConfig->QueryHostingModel() == APP_HOSTING_MODEL::HOSTING_OUT_PROCESS) - { - pHandler = new FORWARDING_HANDLER(pHttpContext, pModuleId, pApplication); - } - else - { - return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); - } - - if (pHandler == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY); - } - else - { - *pRequestHandler = pHandler; - } - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/environmentvariablehelpers.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/environmentvariablehelpers.h deleted file mode 100644 index 268011d30a87..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/environmentvariablehelpers.h +++ /dev/null @@ -1,421 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "precomp.hxx" - -class ENVIRONMENT_VAR_HELPERS -{ - -public: - static - VOID - CopyToMultiSz( - ENVIRONMENT_VAR_ENTRY * pEntry, - PVOID pvData - ) - { - STRU strTemp; - MULTISZ *pMultiSz = static_cast(pvData); - DBG_ASSERT(pMultiSz); - DBG_ASSERT(pEntry); - strTemp.Copy(pEntry->QueryName()); - strTemp.Append(pEntry->QueryValue()); - pMultiSz->Append(strTemp.QueryStr()); - } - - static - VOID - CopyToTable( - ENVIRONMENT_VAR_ENTRY * pEntry, - PVOID pvData - ) - { - // best effort copy, ignore the failure - ENVIRONMENT_VAR_ENTRY * pNewEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pNewEntry != NULL) - { - pNewEntry->Initialize(pEntry->QueryName(), pEntry->QueryValue()); - ENVIRONMENT_VAR_HASH *pHash = static_cast(pvData); - DBG_ASSERT(pHash); - pHash->InsertRecord(pNewEntry); - // Need to dereference as InsertRecord references it now - pNewEntry->Dereference(); - } - } - - static - VOID - AppendEnvironmentVariables - ( - ENVIRONMENT_VAR_ENTRY * pEntry, - PVOID pvData - ) - { - HRESULT hr = S_OK; - DWORD dwResult = 0; - DWORD dwError = 0; - STRU struNameBuffer; - STACK_STRU(struValueBuffer, 300); - BOOL fFound = FALSE; - - HRESULT* pHr = static_cast(pvData); - - // pEntry->QueryName includes the trailing =, remove it before calling stru - if (FAILED(hr = struNameBuffer.Copy(pEntry->QueryName()))) - { - goto Finished; - } - dwResult = struNameBuffer.LastIndexOf(L'='); - if (dwResult != -1) - { - struNameBuffer.QueryStr()[dwResult] = L'\0'; - if (FAILED(hr = struNameBuffer.SyncWithBuffer())) - { - goto Finished; - } - } - - dwResult = GetEnvironmentVariable(struNameBuffer.QueryStr(), struValueBuffer.QueryStr(), struValueBuffer.QuerySizeCCH()); - if (dwResult == 0) - { - dwError = GetLastError(); - // Windows API (e.g., CreateProcess) allows variable with empty string value - // in such case dwResult will be 0 and dwError will also be 0 - // As UI and CMD does not allow empty value, ignore this environment var - if (dwError != ERROR_ENVVAR_NOT_FOUND && dwError != ERROR_SUCCESS) - { - hr = HRESULT_FROM_WIN32(dwError); - goto Finished; - } - } - else if (dwResult > struValueBuffer.QuerySizeCCH()) - { - // have to increase the buffer and try get environment var again - struValueBuffer.Reset(); - struValueBuffer.Resize(dwResult + (DWORD)wcslen(pEntry->QueryValue()) + 2); // for null char and semicolon - dwResult = GetEnvironmentVariable(struNameBuffer.QueryStr(), - struValueBuffer.QueryStr(), - struValueBuffer.QuerySizeCCH()); - if (struValueBuffer.IsEmpty()) - { - hr = E_UNEXPECTED; - goto Finished; - } - fFound = TRUE; - } - else - { - fFound = TRUE; - } - - if (FAILED(hr = struValueBuffer.SyncWithBuffer())) - { - goto Finished; - } - - if (fFound) - { - if (FAILED(hr = struValueBuffer.Append(L";"))) - { - goto Finished; - } - } - if (FAILED(hr = struValueBuffer.Append(pEntry->QueryValue()))) - { - goto Finished; - } - - if (FAILED(hr = pEntry->Initialize(pEntry->QueryName(), struValueBuffer.QueryStr()))) - { - goto Finished; - } - - Finished: - if (FAILED(hr)) - { - *pHr = hr; - } - return; - } - - static - VOID - SetEnvironmentVariables - ( - ENVIRONMENT_VAR_ENTRY * pEntry, - PVOID pvData - ) - { - UNREFERENCED_PARAMETER(pvData); - HRESULT hr = S_OK; - DWORD dwResult = 0; - STRU struNameBuffer; - - HRESULT* pHr = static_cast(pvData); - - // pEntry->QueryName includes the trailing =, remove it before calling SetEnvironmentVariable. - if (FAILED(hr = struNameBuffer.Copy(pEntry->QueryName()))) - { - goto Finished; - } - dwResult = struNameBuffer.LastIndexOf(L'='); - if (dwResult != -1) - { - struNameBuffer.QueryStr()[dwResult] = L'\0'; - if (FAILED(hr = struNameBuffer.SyncWithBuffer())) - { - goto Finished; - } - } - - dwResult = SetEnvironmentVariable(struNameBuffer.QueryStr(), pEntry->QueryValue()); - if (dwResult == 0) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - } - - Finished: - if (FAILED(hr)) - { - *pHr = hr; - } - return; - } - - static - HRESULT - InitEnvironmentVariablesTable - ( - _In_ ENVIRONMENT_VAR_HASH* pInEnvironmentVarTable, - _In_ BOOL fWindowsAuthEnabled, - _In_ BOOL fBasicAuthEnabled, - _In_ BOOL fAnonymousAuthEnabled, - _Out_ ENVIRONMENT_VAR_HASH** ppEnvironmentVarTable - ) - { - HRESULT hr = S_OK; - BOOL fFound = FALSE; - DWORD dwResult, dwError; - STRU strIisAuthEnvValue; - STACK_STRU(strStartupAssemblyEnv, 1024); - ENVIRONMENT_VAR_ENTRY* pHostingEntry = NULL; - ENVIRONMENT_VAR_ENTRY* pIISAuthEntry = NULL; - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable = NULL; - - pEnvironmentVarTable = new ENVIRONMENT_VAR_HASH(); - if (pEnvironmentVarTable == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - // - // few environment variables expected, small bucket size for hash table - // - if (FAILED(hr = pEnvironmentVarTable->Initialize(37 /*prime*/))) - { - goto Finished; - } - - // copy the envirable hash table (from configuration) to a temp one as we may need to remove elements - pInEnvironmentVarTable->Apply(ENVIRONMENT_VAR_HELPERS::CopyToTable, pEnvironmentVarTable); - if (pEnvironmentVarTable->Count() != pInEnvironmentVarTable->Count()) - { - // hash table copy failed - hr = E_UNEXPECTED; - goto Finished; - } - - pEnvironmentVarTable->FindKey((PWSTR)ASPNETCORE_IIS_AUTH_ENV_STR, &pIISAuthEntry); - if (pIISAuthEntry != NULL) - { - // user defined ASPNETCORE_IIS_HTTPAUTH in configuration, wipe it off - pIISAuthEntry->Dereference(); - pEnvironmentVarTable->DeleteKey((PWSTR)ASPNETCORE_IIS_AUTH_ENV_STR); - } - - if (fWindowsAuthEnabled) - { - strIisAuthEnvValue.Copy(ASPNETCORE_IIS_AUTH_WINDOWS); - } - - if (fBasicAuthEnabled) - { - strIisAuthEnvValue.Append(ASPNETCORE_IIS_AUTH_BASIC); - } - - if (fAnonymousAuthEnabled) - { - strIisAuthEnvValue.Append(ASPNETCORE_IIS_AUTH_ANONYMOUS); - } - - if (strIisAuthEnvValue.IsEmpty()) - { - strIisAuthEnvValue.Copy(ASPNETCORE_IIS_AUTH_NONE); - } - - pIISAuthEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pIISAuthEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - if (FAILED(hr = pIISAuthEntry->Initialize(ASPNETCORE_IIS_AUTH_ENV_STR, strIisAuthEnvValue.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pIISAuthEntry))) - { - goto Finished; - } - - // Compiler is complaining about conversion between PCWSTR and PWSTR here. - // Explictly casting. - pEnvironmentVarTable->FindKey((PWSTR)HOSTING_STARTUP_ASSEMBLIES_NAME, &pHostingEntry); - if (pHostingEntry != NULL) - { - // user defined ASPNETCORE_HOSTINGSTARTUPASSEMBLIES in configuration - // the value will be used in OutputEnvironmentVariables. Do nothing here - pHostingEntry->Dereference(); - pHostingEntry = NULL; - goto Skipped; - } - - //check whether ASPNETCORE_HOSTINGSTARTUPASSEMBLIES is defined in system - dwResult = GetEnvironmentVariable(HOSTING_STARTUP_ASSEMBLIES_ENV_STR, - strStartupAssemblyEnv.QueryStr(), - strStartupAssemblyEnv.QuerySizeCCH()); - if (dwResult == 0) - { - dwError = GetLastError(); - // Windows API (e.g., CreateProcess) allows variable with empty string value - // in such case dwResult will be 0 and dwError will also be 0 - // As UI and CMD does not allow empty value, ignore this environment var - if (dwError != ERROR_ENVVAR_NOT_FOUND && dwError != ERROR_SUCCESS) - { - hr = HRESULT_FROM_WIN32(dwError); - goto Finished; - } - } - else if (dwResult > strStartupAssemblyEnv.QuerySizeCCH()) - { - // have to increase the buffer and try get environment var again - strStartupAssemblyEnv.Reset(); - strStartupAssemblyEnv.Resize(dwResult + (DWORD)wcslen(HOSTING_STARTUP_ASSEMBLIES_VALUE) + 1); - dwResult = GetEnvironmentVariable(HOSTING_STARTUP_ASSEMBLIES_ENV_STR, - strStartupAssemblyEnv.QueryStr(), - strStartupAssemblyEnv.QuerySizeCCH()); - if (strStartupAssemblyEnv.IsEmpty()) - { - hr = E_UNEXPECTED; - goto Finished; - } - fFound = TRUE; - } - else - { - fFound = TRUE; - } - - strStartupAssemblyEnv.SyncWithBuffer(); - if (fFound) - { - strStartupAssemblyEnv.Append(L";"); - } - strStartupAssemblyEnv.Append(HOSTING_STARTUP_ASSEMBLIES_VALUE); - - // the environment variable was not defined, create it and add to hashtable - pHostingEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pHostingEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - if (FAILED(hr = pHostingEntry->Initialize(HOSTING_STARTUP_ASSEMBLIES_NAME, strStartupAssemblyEnv.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pHostingEntry))) - { - goto Finished; - } - - Skipped: - *ppEnvironmentVarTable = pEnvironmentVarTable; - pEnvironmentVarTable = NULL; - - Finished: - if (pHostingEntry != NULL) - { - pHostingEntry->Dereference(); - pHostingEntry = NULL; - } - - if (pIISAuthEntry != NULL) - { - pIISAuthEntry->Dereference(); - pIISAuthEntry = NULL; - } - - if (pEnvironmentVarTable != NULL) - { - pEnvironmentVarTable->Clear(); - delete pEnvironmentVarTable; - pEnvironmentVarTable = NULL; - } - return hr; - } - - - static - HRESULT - AddWebsocketEnabledToEnvironmentVariables - ( - _Inout_ ENVIRONMENT_VAR_HASH* pInEnvironmentVarTable, - _In_ BOOL fWebsocketsEnabled - ) - { - HRESULT hr = S_OK; - ENVIRONMENT_VAR_ENTRY* pIISWebsocketEntry = NULL; - STACK_STRU(strIISWebsocketEnvValue, 40); - - // We only need to set the WEBSOCKET_SUPPORTED environment variable for out of process - pInEnvironmentVarTable->FindKey((PWSTR)ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED_ENV_STR, &pIISWebsocketEntry); - if (pIISWebsocketEntry != NULL) - { - // user defined ASPNETCORE_IIS_WEBSOCKETS in configuration, wipe it off - pIISWebsocketEntry->Dereference(); - pInEnvironmentVarTable->DeleteKey((PWSTR)ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED_ENV_STR); - } - // Set either true or false for the WebsocketEnvValue. - if (fWebsocketsEnabled) - { - if (FAILED(hr = strIISWebsocketEnvValue.Copy(L"true"))) - { - goto Finished; - } - } - else - { - if (FAILED(hr = strIISWebsocketEnvValue.Copy(L"false"))) - { - goto Finished; - } - } - - pIISWebsocketEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pIISWebsocketEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - if (FAILED(hr = pIISWebsocketEntry->Initialize(ASPNETCORE_IIS_WEBSOCKETS_SUPPORTED_ENV_STR, strIISWebsocketEnvValue.QueryStr())) || - FAILED(hr = pInEnvironmentVarTable->InsertRecord(pIISWebsocketEntry))) - { - goto Finished; - } - - Finished: - return hr; - } -public: - ENVIRONMENT_VAR_HELPERS(); - ~ENVIRONMENT_VAR_HELPERS(); -}; - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.cpp deleted file mode 100644 index d8566262e171..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.cpp +++ /dev/null @@ -1,986 +0,0 @@ -#include "..\precomp.hxx" - -IN_PROCESS_APPLICATION* IN_PROCESS_APPLICATION::s_Application = NULL; - -IN_PROCESS_APPLICATION::IN_PROCESS_APPLICATION( - IHttpServer* pHttpServer, - ASPNETCORE_CONFIG* pConfig) : - APPLICATION(pHttpServer, pConfig), - m_pHttpServer(pHttpServer), - m_ProcessExitCode(0), - m_hLogFileHandle(INVALID_HANDLE_VALUE), - m_hErrReadPipe(INVALID_HANDLE_VALUE), - m_hErrWritePipe(INVALID_HANDLE_VALUE), - m_dwStdErrReadTotal(0), - m_fDoneStdRedirect(FALSE), - m_fBlockCallbacksIntoManaged(FALSE), - m_fInitialized(FALSE), - m_fShutdownCalledFromNative(FALSE), - m_fShutdownCalledFromManaged(FALSE), - m_srwLock() -{ - // is it guaranteed that we have already checked app offline at this point? - // If so, I don't think there is much to do here. - DBG_ASSERT(pHttpServer != NULL); - DBG_ASSERT(pConfig != NULL); - InitializeSRWLock(&m_srwLock); - - // TODO we can probably initialized as I believe we are the only ones calling recycle. - m_status = APPLICATION_STATUS::STARTING; -} - -IN_PROCESS_APPLICATION::~IN_PROCESS_APPLICATION() -{ - if (m_hLogFileHandle != INVALID_HANDLE_VALUE) - { - m_Timer.CancelTimer(); - CloseHandle(m_hLogFileHandle); - m_hLogFileHandle = INVALID_HANDLE_VALUE; - } - - m_hThread = NULL; - s_Application = NULL; -} - -//static -VOID -IN_PROCESS_APPLICATION::DoShutDown( - LPVOID lpParam -) -{ - IN_PROCESS_APPLICATION* pApplication = static_cast(lpParam); - DBG_ASSERT(pApplication); - pApplication->ShutDownInternal(); -} - -__override -VOID -IN_PROCESS_APPLICATION::ShutDown( - VOID -) -{ - HRESULT hr = S_OK; - CHandle hThread; - DWORD dwThreadStatus = 0; - DWORD dwTimeout = m_pConfig->QueryShutdownTimeLimitInMS(); - - if (IsDebuggerPresent()) - { - dwTimeout = INFINITE; - } - - hThread.Attach(CreateThread( - NULL, // default security attributes - 0, // default stack size - (LPTHREAD_START_ROUTINE)DoShutDown, - this, // thread function arguments - 0, // default creation flags - NULL)); // receive thread identifier - - if ((HANDLE)hThread == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (WaitForSingleObject(hThread, dwTimeout) != WAIT_OBJECT_0) - { - // if the thread is still running, we need kill it first before exit to avoid AV - if (GetExitCodeThread(m_hThread, &dwThreadStatus) != 0 && dwThreadStatus == STILL_ACTIVE) - { - // Calling back into managed at this point is prone to have AVs - // Calling terminate thread here may be our best solution. - TerminateThread(hThread, STATUS_CONTROL_C_EXIT); - hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT); - } - } - -Finished: - - if (FAILED(hr)) - { - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE, - ASPNETCORE_EVENT_APP_SHUTDOWN_FAILURE_MSG, - m_pConfig->QueryConfigPath()->QueryStr()); - - // - // Managed layer may block the shutdown and lead to shutdown timeout - // Assumption: only one inprocess application is hosted. - // Call process exit to force shutdown - // - exit(hr); - } -} - - -VOID -IN_PROCESS_APPLICATION::ShutDownInternal() -{ - DWORD dwThreadStatus = 0; - DWORD dwTimeout = m_pConfig->QueryShutdownTimeLimitInMS(); - HANDLE handle = NULL; - WIN32_FIND_DATA fileData; - - if (IsDebuggerPresent()) - { - dwTimeout = INFINITE; - } - - if (m_fShutdownCalledFromNative || - m_status == APPLICATION_STATUS::STARTING || - m_status == APPLICATION_STATUS::FAIL) - { - return; - } - - { - SRWLockWrapper lock(m_srwLock); - - if (m_fShutdownCalledFromNative || - m_status == APPLICATION_STATUS::STARTING || - m_status == APPLICATION_STATUS::FAIL) - { - return; - } - - // We need to keep track of when both managed and native initiate shutdown - // to avoid AVs. If shutdown has already been initiated in managed, we don't want to call into - // managed. We still need to wait on main exiting no matter what. m_fShutdownCalledFromNative - // is used for detecting redundant calls and blocking more requests to OnExecuteRequestHandler. - m_fShutdownCalledFromNative = TRUE; - m_status = APPLICATION_STATUS::SHUTDOWN; - - if (!m_fShutdownCalledFromManaged) - { - // We cannot call into managed if the dll is detaching from the process. - // Calling into managed code when the dll is detaching is strictly a bad idea, - // and usually results in an AV saying "The string binding is invalid" - if (!g_fProcessDetach) - { - m_ShutdownHandler(m_ShutdownHandlerContext); - m_ShutdownHandler = NULL; - } - } - - // Release the lock before we wait on the thread to exit. - } - - if (!m_fShutdownCalledFromManaged) - { - if (m_hThread != NULL && - GetExitCodeThread(m_hThread, &dwThreadStatus) != 0 && - dwThreadStatus == STILL_ACTIVE) - { - // wait for graceful shutdown, i.e., the exit of the background thread or timeout - if (WaitForSingleObject(m_hThread, dwTimeout) != WAIT_OBJECT_0) - { - // if the thread is still running, we need kill it first before exit to avoid AV - if (GetExitCodeThread(m_hThread, &dwThreadStatus) != 0 && dwThreadStatus == STILL_ACTIVE) - { - // Calling back into managed at this point is prone to have AVs - // Calling terminate thread here may be our best solution. - TerminateThread(m_hThread, STATUS_CONTROL_C_EXIT); - } - } - } - } - - CloseHandle(m_hThread); - m_hThread = NULL; - s_Application = NULL; - - CloseStdErrHandles(); - - if (m_pStdFile != NULL) - { - fflush(stdout); - fflush(stderr); - fclose(m_pStdFile); - } - - if (m_hLogFileHandle != INVALID_HANDLE_VALUE) - { - m_Timer.CancelTimer(); - CloseHandle(m_hLogFileHandle); - m_hLogFileHandle = INVALID_HANDLE_VALUE; - } - - // delete empty log file - handle = FindFirstFile(m_struLogFilePath.QueryStr(), &fileData); - if (handle != INVALID_HANDLE_VALUE && - fileData.nFileSizeHigh == 0 && - fileData.nFileSizeLow == 0) // skip check of nFileSizeHigh - { - FindClose(handle); - // no need to check whether the deletion succeeds - // as nothing can be done - DeleteFile(m_struLogFilePath.QueryStr()); - } -} - -__override -VOID -IN_PROCESS_APPLICATION::Recycle( - VOID -) -{ - // We need to guarantee that recycle is only called once, as calling pHttpServer->RecycleProcess - // multiple times can lead to AVs. - if (m_fRecycleCalled) - { - return; - } - - { - SRWLockWrapper lock(m_srwLock); - - if (m_fRecycleCalled) - { - return; - } - - m_fRecycleCalled = true; - } - - if (!m_pHttpServer->IsCommandLineLaunch()) - { - // IIS scenario. - // notify IIS first so that new request will be routed to new worker process - m_pHttpServer->RecycleProcess(L"AspNetCore InProcess Recycle Process on Demand"); - } - else - { - // IISExpress scenario - // Shutdown the managed application and call exit to terminate current process - ShutDown(); - exit(0); - } -} - -REQUEST_NOTIFICATION_STATUS -IN_PROCESS_APPLICATION::OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus, - IN_PROCESS_HANDLER* pInProcessHandler -) -{ - REQUEST_NOTIFICATION_STATUS dwRequestNotificationStatus = RQ_NOTIFICATION_CONTINUE; - - ReferenceApplication(); - - if (pInProcessHandler->QueryIsManagedRequestComplete()) - { - // means PostCompletion has been called and this is the associated callback. - dwRequestNotificationStatus = pInProcessHandler->QueryAsyncCompletionStatus(); - } - else if (m_fBlockCallbacksIntoManaged) - { - // this can potentially happen in ungraceful shutdown. - // Or something really wrong happening with async completions - // At this point, managed is in a shutting down state and we cannot send a request to it. - pInProcessHandler->QueryHttpContext()->GetResponse()->SetStatus(503, - "Server has been shutdown", - 0, - (ULONG)HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IN_PROGRESS)); - dwRequestNotificationStatus = RQ_NOTIFICATION_FINISH_REQUEST; - } - else - { - // Call the managed handler for async completion. - dwRequestNotificationStatus = m_AsyncCompletionHandler(pInProcessHandler->QueryManagedHttpContext(), hrCompletionStatus, cbCompletion); - } - - DereferenceApplication(); - - return dwRequestNotificationStatus; -} - -REQUEST_NOTIFICATION_STATUS -IN_PROCESS_APPLICATION::OnExecuteRequest( - _In_ IHttpContext* pHttpContext, - _In_ IN_PROCESS_HANDLER* pInProcessHandler -) -{ - REQUEST_NOTIFICATION_STATUS dwRequestNotificationStatus = RQ_NOTIFICATION_CONTINUE; - PFN_REQUEST_HANDLER pRequestHandler = NULL; - - ReferenceApplication(); - pRequestHandler = m_RequestHandler; - - if (pRequestHandler == NULL) - { - // - // return error as the application did not register callback - // - if (ANCMEvents::ANCM_EXECUTE_REQUEST_FAIL::IsEnabled(pHttpContext->GetTraceContext())) - { - ANCMEvents::ANCM_EXECUTE_REQUEST_FAIL::RaiseEvent(pHttpContext->GetTraceContext(), - NULL, - (ULONG)E_APPLICATION_ACTIVATION_EXEC_FAILURE); - } - - pHttpContext->GetResponse()->SetStatus(500, - "Internal Server Error", - 0, - (ULONG)E_APPLICATION_ACTIVATION_EXEC_FAILURE); - - dwRequestNotificationStatus = RQ_NOTIFICATION_FINISH_REQUEST; - } - else if (m_status != APPLICATION_STATUS::RUNNING || m_fBlockCallbacksIntoManaged) - { - pHttpContext->GetResponse()->SetStatus(503, - "Server is currently shutting down.", - 0, - (ULONG)HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IN_PROGRESS)); - dwRequestNotificationStatus = RQ_NOTIFICATION_FINISH_REQUEST; - } - else - { - dwRequestNotificationStatus = pRequestHandler(pInProcessHandler, m_RequestHandlerContext); - } - - DereferenceApplication(); - - return dwRequestNotificationStatus; -} - -VOID -IN_PROCESS_APPLICATION::SetCallbackHandles( - _In_ PFN_REQUEST_HANDLER request_handler, - _In_ PFN_SHUTDOWN_HANDLER shutdown_handler, - _In_ PFN_MANAGED_CONTEXT_HANDLER async_completion_handler, - _In_ VOID* pvRequstHandlerContext, - _In_ VOID* pvShutdownHandlerContext -) -{ - m_RequestHandler = request_handler; - m_RequestHandlerContext = pvRequstHandlerContext; - m_ShutdownHandler = shutdown_handler; - m_ShutdownHandlerContext = pvShutdownHandlerContext; - m_AsyncCompletionHandler = async_completion_handler; - - CloseStdErrHandles(); - // Can't check the std err handle as it isn't a critical error - SetStdHandle(STD_ERROR_HANDLE, INVALID_HANDLE_VALUE); - // Initialization complete - SetEvent(m_pInitalizeEvent); - m_fInitialized = TRUE; -} - -VOID -IN_PROCESS_APPLICATION::SetStdOut( - VOID -) -{ - HRESULT hr = S_OK; - STRU struPath; - SYSTEMTIME systemTime; - SECURITY_ATTRIBUTES saAttr = { 0 }; - HANDLE hStdErrReadPipe; - HANDLE hStdErrWritePipe; - - if (!m_fDoneStdRedirect) - { - // Have not set stdout yet, redirect stdout to log file - SRWLockWrapper lock(m_srwLock); - if (!m_fDoneStdRedirect) - { - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - // - // best effort - // no need to capture the error code as nothing we can do here - // in case mamanged layer exits abnormally, may not be able to capture the log content as it is buffered. - // - if (!GetConsoleWindow()) - { - // Full IIS scenario. - - // - // SetStdHandle works as w3wp does not have Console - // Current process does not have a console - // - if (m_pConfig->QueryStdoutLogEnabled()) - { - hr = UTILITY::ConvertPathToFullPath( - m_pConfig->QueryStdoutLogFile()->QueryStr(), - m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - &struPath); - if (FAILED(hr)) - { - goto Finished; - } - - hr = UTILITY::EnsureDirectoryPathExist(struPath.QueryStr()); - if (FAILED(hr)) - { - goto Finished; - } - - GetSystemTime(&systemTime); - hr = m_struLogFilePath.SafeSnwprintf(L"%s_%d%02d%02d%02d%02d%02d_%d.log", - struPath.QueryStr(), - systemTime.wYear, - systemTime.wMonth, - systemTime.wDay, - systemTime.wHour, - systemTime.wMinute, - systemTime.wSecond, - GetCurrentProcessId()); - if (FAILED(hr)) - { - goto Finished; - } - - m_hLogFileHandle = CreateFileW(m_struLogFilePath.QueryStr(), - FILE_READ_DATA | FILE_WRITE_DATA, - FILE_SHARE_READ, - &saAttr, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (m_hLogFileHandle == INVALID_HANDLE_VALUE) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (!SetStdHandle(STD_OUTPUT_HANDLE, m_hLogFileHandle)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (!SetStdHandle(STD_ERROR_HANDLE, m_hLogFileHandle)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // not work - // AllocConsole() does not help - // *stdout = *m_pStdFile; - // *stderr = *m_pStdFile; - // _dup2(_fileno(m_pStdFile), _fileno(stdout)); - // _dup2(_fileno(m_pStdFile), _fileno(stderr)); - // this one cannot capture the process start failure - // _wfreopen_s(&m_pStdFile, struLogFileName.QueryStr(), L"w", stdout); - - // Periodically flush the log content to file - m_Timer.InitializeTimer(STTIMER::TimerCallback, &m_struLogFilePath, 3000, 3000); - } - else - { - // - // CreatePipe for outputting stderr to the windows event log. - // Ignore failures - // - if (!CreatePipe(&hStdErrReadPipe, &hStdErrWritePipe, &saAttr, 0 /*nSize*/)) - { - goto Finished; - } - - if (!SetStdHandle(STD_ERROR_HANDLE, hStdErrWritePipe)) - { - goto Finished; - } - - m_hErrReadPipe = hStdErrReadPipe; - m_hErrWritePipe = hStdErrWritePipe; - - // Read the stderr handle on a separate thread until we get 4096 bytes. - m_hErrThread = CreateThread( - NULL, // default security attributes - 0, // default stack size - (LPTHREAD_START_ROUTINE)ReadStdErrHandle, - this, // thread function arguments - 0, // default creation flags - NULL); // receive thread identifier - - if (m_hErrThread == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - } - else - { - // The process has console, e.g., IIS Express scenario - - if (_wfopen_s(&m_pStdFile, m_struLogFilePath.QueryStr(), L"w") == 0) - { - // known issue: error info may not be capture when process crashes during buffering - // even we disabled FILE buffering - setvbuf(m_pStdFile, NULL, _IONBF, 0); - _dup2(_fileno(m_pStdFile), _fileno(stdout)); - _dup2(_fileno(m_pStdFile), _fileno(stderr)); - } - // These don't work for console scenario - // close and AllocConsole does not help - //_wfreopen_s(&m_pStdFile, struLogFileName.QueryStr(), L"w", stdout); - // SetStdHandle(STD_ERROR_HANDLE, m_hLogFileHandle); - // SetStdHandle(STD_OUTPUT_HANDLE, m_hLogFileHandle); - //*stdout = *m_pStdFile; - //*stderr = *m_pStdFile; - } - } - } - -Finished: - m_fDoneStdRedirect = TRUE; - if (FAILED(hr) && m_pConfig->QueryStdoutLogEnabled()) - { - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_CONFIG_ERROR, - ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, - m_struLogFilePath.QueryStr(), - hr); - } -} - -VOID -IN_PROCESS_APPLICATION::ReadStdErrHandle( - LPVOID pContext -) -{ - IN_PROCESS_APPLICATION *pApplication = (IN_PROCESS_APPLICATION*)pContext; - DBG_ASSERT(pApplication != NULL); - pApplication->ReadStdErrHandleInternal(); -} - -VOID -IN_PROCESS_APPLICATION::ReadStdErrHandleInternal( - VOID -) -{ - DWORD dwNumBytesRead = 0; - while (true) - { - if (ReadFile(m_hErrReadPipe, &m_pzFileContents[m_dwStdErrReadTotal], 4096 - m_dwStdErrReadTotal, &dwNumBytesRead, NULL)) - { - m_dwStdErrReadTotal += dwNumBytesRead; - if (m_dwStdErrReadTotal >= 4096) - { - break; - } - } - else if (GetLastError() == ERROR_BROKEN_PIPE) - { - break; - } - } -} - -VOID -IN_PROCESS_APPLICATION::CloseStdErrHandles -( - VOID -) -{ - DWORD dwThreadStatus = 0; - DWORD dwTimeout = m_pConfig->QueryShutdownTimeLimitInMS(); - // Close Handles for stderr as we only care about capturing startup errors - if (m_hErrWritePipe != INVALID_HANDLE_VALUE) - { - CloseHandle(m_hErrWritePipe); - m_hErrWritePipe = INVALID_HANDLE_VALUE; - } - - if (m_hErrThread != NULL && - GetExitCodeThread(m_hErrThread, &dwThreadStatus) != 0 && - dwThreadStatus == STILL_ACTIVE) - { - // wait for gracefullshut down, i.e., the exit of the background thread or timeout - if (WaitForSingleObject(m_hErrThread, dwTimeout) != WAIT_OBJECT_0) - { - // if the thread is still running, we need kill it first before exit to avoid AV - if (GetExitCodeThread(m_hErrThread, &dwThreadStatus) != 0 && dwThreadStatus == STILL_ACTIVE) - { - TerminateThread(m_hErrThread, STATUS_CONTROL_C_EXIT); - } - } - } - - CloseHandle(m_hErrThread); - m_hErrThread = NULL; - - if (m_hErrReadPipe != INVALID_HANDLE_VALUE) - { - CloseHandle(m_hErrReadPipe); - m_hErrReadPipe = INVALID_HANDLE_VALUE; - } -} - -// Will be called by the inprocesshandler -HRESULT -IN_PROCESS_APPLICATION::LoadManagedApplication -( - VOID -) -{ - HRESULT hr = S_OK; - DWORD dwTimeout; - DWORD dwResult; - - ReferenceApplication(); - - if (m_status != APPLICATION_STATUS::STARTING) - { - // Core CLR has already been loaded. - // Cannot load more than once even there was a failure - if (m_status == APPLICATION_STATUS::FAIL) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - } - else if (m_status == APPLICATION_STATUS::SHUTDOWN) - { - hr = HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IS_SCHEDULED); - } - - goto Finished; - } - - // Set up stdout redirect - SetStdOut(); - - { - SRWLockWrapper lock(m_srwLock); - if (m_status != APPLICATION_STATUS::STARTING) - { - if (m_status == APPLICATION_STATUS::FAIL) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - } - else if (m_status == APPLICATION_STATUS::SHUTDOWN) - { - hr = HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IS_SCHEDULED); - } - - goto Finished; - } - m_hThread = CreateThread( - NULL, // default security attributes - 0, // default stack size - (LPTHREAD_START_ROUTINE)ExecuteAspNetCoreProcess, - this, // thread function arguments - 0, // default creation flags - NULL); // receive thread identifier - - if (m_hThread == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - m_pInitalizeEvent = CreateEvent( - NULL, // default security attributes - TRUE, // manual reset event - FALSE, // not set - NULL); // name - - if (m_pInitalizeEvent == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - } - - // If the debugger is attached, never timeout - if (IsDebuggerPresent()) - { - dwTimeout = INFINITE; - } - else - { - dwTimeout = m_pConfig->QueryStartupTimeLimitInMS(); - } - - const HANDLE pHandles[2]{ m_hThread, m_pInitalizeEvent }; - - // Wait on either the thread to complete or the event to be set - dwResult = WaitForMultipleObjects(2, pHandles, FALSE, dwTimeout); - - // It all timed out - if (dwResult == WAIT_TIMEOUT) - { - // kill the backend thread as loading dotnet timedout - TerminateThread(m_hThread, 0); - hr = HRESULT_FROM_WIN32(dwResult); - goto Finished; - } - else if (dwResult == WAIT_FAILED) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // The thread ended it means that something failed - if (dwResult == WAIT_OBJECT_0) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - goto Finished; - } - - m_status = APPLICATION_STATUS::RUNNING; - } -Finished: - - if (FAILED(hr)) - { - m_status = APPLICATION_STATUS::FAIL; - - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_LOAD_CLR_FALIURE, - ASPNETCORE_EVENT_LOAD_CLR_FALIURE_MSG, - m_pConfig->QueryApplicationPath()->QueryStr(), - m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - hr); - } - DereferenceApplication(); - - return hr; -} - -// static -VOID -IN_PROCESS_APPLICATION::ExecuteAspNetCoreProcess( - _In_ LPVOID pContext -) -{ - HRESULT hr = S_OK; - IN_PROCESS_APPLICATION *pApplication = (IN_PROCESS_APPLICATION*)pContext; - DBG_ASSERT(pApplication != NULL); - hr = pApplication->ExecuteApplication(); - // - // no need to log the error here as if error happened, the thread will exit - // the error will ba catched by caller LoadManagedApplication which will log an error - // - -} - -HRESULT -IN_PROCESS_APPLICATION::SetEnvironementVariablesOnWorkerProcess( - VOID -) -{ - HRESULT hr = S_OK; - ENVIRONMENT_VAR_HASH* pHashTable = NULL; - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( - m_pConfig->QueryEnvironmentVariables(), - m_pConfig->QueryWindowsAuthEnabled(), - m_pConfig->QueryBasicAuthEnabled(), - m_pConfig->QueryAnonymousAuthEnabled(), - &pHashTable))) - { - goto Finished; - } - - pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr); - if (FAILED(hr)) - { - goto Finished; - } - pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr); - if (FAILED(hr)) - { - goto Finished; - } -Finished: - return hr; -} - -HRESULT -IN_PROCESS_APPLICATION::ExecuteApplication( - VOID -) -{ - HRESULT hr = S_OK; - HMODULE hModule; - hostfxr_main_fn pProc; - - DBG_ASSERT(m_status == APPLICATION_STATUS::STARTING); - - hModule = LoadLibraryW(m_pConfig->QueryHostFxrFullPath()); - - if (hModule == NULL) - { - // .NET Core not installed (we can log a more detailed error message here) - hr = ERROR_BAD_ENVIRONMENT; - goto Finished; - } - - // Get the entry point for main - pProc = (hostfxr_main_fn)GetProcAddress(hModule, "hostfxr_main"); - if (pProc == NULL) - { - hr = ERROR_BAD_ENVIRONMENT; - goto Finished; - } - - if (FAILED(hr = SetEnvironementVariablesOnWorkerProcess())) - { - goto Finished; - } - - // There can only ever be a single instance of .NET Core - // loaded in the process but we need to get config information to boot it up in the - // first place. This is happening in an execute request handler and everyone waits - // until this initialization is done. - // We set a static so that managed code can call back into this instance and - // set the callbacks - s_Application = this; - - hr = RunDotnetApplication(m_pConfig->QueryHostFxrArgCount(), m_pConfig->QueryHostFxrArguments(), pProc); - -Finished: - - // - // this method is called by the background thread and should never exit unless shutdown - // If main returned and shutdown was not called in managed, we want to block native from calling into - // managed. To do this, we can say that shutdown was called from managed. - // Don't bother locking here as there will always be a race between receiving a native shutdown - // notification and unexpected managed exit. - // - m_status = APPLICATION_STATUS::SHUTDOWN; - m_fShutdownCalledFromManaged = TRUE; - FreeLibrary(hModule); - - if (!m_fShutdownCalledFromNative) - { - LogErrorsOnMainExit(hr); - if (m_fInitialized) - { - // - // If the inprocess server was initialized, we need to cause recycle to be called on the worker process. - // - Recycle(); - } - } - - return hr; -} - -VOID -IN_PROCESS_APPLICATION::LogErrorsOnMainExit( - HRESULT hr -) -{ - // - // Ungraceful shutdown, try to log an error message. - // This will be a common place for errors as it means the hostfxr_main returned - // or there was an exception. - // - CHAR pzFileContents[4096] = { 0 }; - DWORD dwNumBytesRead; - STRU struStdErrLog; - LARGE_INTEGER li = { 0 }; - BOOL fLogged = FALSE; - DWORD dwFilePointer = 0; - - if (m_pConfig->QueryStdoutLogEnabled()) - { - // Put stdout/stderr logs into - if (m_hLogFileHandle != INVALID_HANDLE_VALUE) - { - if (GetFileSizeEx(m_hLogFileHandle, &li) && li.LowPart > 0 && li.HighPart == 0) - { - if (li.LowPart > 4096) - { - dwFilePointer = SetFilePointer(m_hLogFileHandle, -4096, NULL, FILE_END); - } - else - { - dwFilePointer = SetFilePointer(m_hLogFileHandle, 0, NULL, FILE_BEGIN); - } - if (dwFilePointer != INVALID_SET_FILE_POINTER) - { - if (ReadFile(m_hLogFileHandle, pzFileContents, 4096, &dwNumBytesRead, NULL)) - { - if (SUCCEEDED(struStdErrLog.CopyA(m_pzFileContents, m_dwStdErrReadTotal))) - { - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_STDOUT_MSG, - m_pConfig->QueryApplicationPath()->QueryStr(), - m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - hr, - struStdErrLog.QueryStr()); - fLogged = TRUE; - - } - } - } - } - } - } - else - { - if (m_dwStdErrReadTotal > 0) - { - if (SUCCEEDED(struStdErrLog.CopyA(m_pzFileContents, m_dwStdErrReadTotal))) - { - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_STDERR_MSG, - m_pConfig->QueryApplicationPath()->QueryStr(), - m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - hr, - struStdErrLog.QueryStr()); - fLogged = TRUE; - } - } - } - - if (!fLogged) - { - // If we didn't log, log the generic message. - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT, - ASPNETCORE_EVENT_INPROCESS_THREAD_EXIT_MSG, - m_pConfig->QueryApplicationPath()->QueryStr(), - m_pConfig->QueryApplicationPhysicalPath()->QueryStr(), - hr); - fLogged = TRUE; - } -} - -// -// Calls hostfxr_main with the hostfxr and application as arguments. -// Method should be called with only -// Need to have __try / __except in methods that require unwinding. -// Note, this will not -// -HRESULT -IN_PROCESS_APPLICATION::RunDotnetApplication(DWORD argc, CONST PCWSTR* argv, hostfxr_main_fn pProc) -{ - HRESULT hr = S_OK; - __try - { - m_ProcessExitCode = pProc(argc, argv); - } - __except (FilterException(GetExceptionCode(), GetExceptionInformation())) - { - // TODO Log error message here. - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - } - - return hr; -} - -// static -INT -IN_PROCESS_APPLICATION::FilterException(unsigned int, struct _EXCEPTION_POINTERS*) -{ - // We assume that any exception is a failure as the applicaiton didn't start or there was a startup error. - // TODO, log error based on exception code. - return EXCEPTION_EXECUTE_HANDLER; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.h deleted file mode 100644 index a97fa0a3a94e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocessapplication.h +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -typedef REQUEST_NOTIFICATION_STATUS(WINAPI * PFN_REQUEST_HANDLER) (IN_PROCESS_HANDLER* pInProcessHandler, void* pvRequestHandlerContext); -typedef BOOL(WINAPI * PFN_SHUTDOWN_HANDLER) (void* pvShutdownHandlerContext); -typedef REQUEST_NOTIFICATION_STATUS(WINAPI * PFN_MANAGED_CONTEXT_HANDLER)(void *pvManagedHttpContext, HRESULT hrCompletionStatus, DWORD cbCompletion); - -class IN_PROCESS_APPLICATION : public APPLICATION -{ -public: - IN_PROCESS_APPLICATION(IHttpServer* pHttpServer, ASPNETCORE_CONFIG* pConfig); - - ~IN_PROCESS_APPLICATION(); - - __override - VOID - ShutDown(); - - VOID - SetCallbackHandles( - _In_ PFN_REQUEST_HANDLER request_callback, - _In_ PFN_SHUTDOWN_HANDLER shutdown_callback, - _In_ PFN_MANAGED_CONTEXT_HANDLER managed_context_callback, - _In_ VOID* pvRequstHandlerContext, - _In_ VOID* pvShutdownHandlerContext - ); - - __override - VOID - Recycle( - VOID - ); - - // Executes the .NET Core process - HRESULT - ExecuteApplication( - VOID - ); - - VOID - ReadStdErrHandleInternal( - VOID - ); - - VOID - CloseStdErrHandles( - VOID - ); - - HRESULT - LoadManagedApplication( - VOID - ); - - VOID - LogErrorsOnMainExit( - HRESULT hr - ); - - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus, - IN_PROCESS_HANDLER* pInProcessHandler - ); - - REQUEST_NOTIFICATION_STATUS - OnExecuteRequest - ( - IHttpContext* pHttpContext, - IN_PROCESS_HANDLER* pInProcessHandler - ); - - VOID - StopCallsIntoManaged( - VOID - ) - { - m_fBlockCallbacksIntoManaged = TRUE; - } - - VOID - StopIncomingRequests( - VOID - ) - { - m_fShutdownCalledFromManaged = TRUE; - } - - static - IN_PROCESS_APPLICATION* - GetInstance( - VOID - ) - { - return s_Application; - } - -private: - static - VOID - DoShutDown( - LPVOID lpParam - ); - - VOID - ShutDownInternal( - VOID - ); - - IHttpServer* const m_pHttpServer; - - // Thread executing the .NET Core process - HANDLE m_hThread; - - // The request handler callback from managed code - PFN_REQUEST_HANDLER m_RequestHandler; - VOID* m_RequestHandlerContext; - - // The shutdown handler callback from managed code - PFN_SHUTDOWN_HANDLER m_ShutdownHandler; - VOID* m_ShutdownHandlerContext; - - PFN_MANAGED_CONTEXT_HANDLER m_AsyncCompletionHandler; - - // The event that gets triggered when managed initialization is complete - HANDLE m_pInitalizeEvent; - - // The std log file handle - HANDLE m_hLogFileHandle; - HANDLE m_hErrReadPipe; - HANDLE m_hErrWritePipe; - STRU m_struLogFilePath; - - // The exit code of the .NET Core process - INT m_ProcessExitCode; - - BOOL m_fIsWebSocketsConnection; - BOOL m_fDoneStdRedirect; - volatile BOOL m_fBlockCallbacksIntoManaged; - volatile BOOL m_fShutdownCalledFromNative; - volatile BOOL m_fShutdownCalledFromManaged; - BOOL m_fRecycleCalled; - BOOL m_fInitialized; - - FILE* m_pStdFile; - STTIMER m_Timer; - SRWLOCK m_srwLock; - - // Thread for capturing startup stderr logs when logging is disabled - HANDLE m_hErrThread; - CHAR m_pzFileContents[4096] = { 0 }; - DWORD m_dwStdErrReadTotal; - static IN_PROCESS_APPLICATION* s_Application; - - VOID - SetStdOut( - VOID - ); - - static - VOID - ExecuteAspNetCoreProcess( - _In_ LPVOID pContext - ); - - static - VOID - ReadStdErrHandle - ( - _In_ LPVOID pContext - ); - - HRESULT - SetEnvironementVariablesOnWorkerProcess( - VOID - ); - - static - INT - FilterException(unsigned int code, struct _EXCEPTION_POINTERS *ep); - - HRESULT - RunDotnetApplication( - DWORD argc, - CONST PCWSTR* argv, - hostfxr_main_fn pProc - ); -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.cpp deleted file mode 100644 index c98d84744ca7..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "..\precomp.hxx" - -IN_PROCESS_HANDLER::IN_PROCESS_HANDLER( - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication -): REQUEST_HANDLER(pW3Context, pModuleId, pApplication) -{ - m_fManagedRequestComplete = FALSE; -} - -IN_PROCESS_HANDLER::~IN_PROCESS_HANDLER() -{ - //todo -} - -__override -REQUEST_NOTIFICATION_STATUS -IN_PROCESS_HANDLER::OnExecuteRequestHandler() -{ - // First get the in process Application - HRESULT hr; - hr = ((IN_PROCESS_APPLICATION*)m_pApplication)->LoadManagedApplication(); - if (FAILED(hr)) - { - // TODO remove com_error? - /*_com_error err(hr); - if (ANCMEvents::ANCM_START_APPLICATION_FAIL::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_START_APPLICATION_FAIL::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL, - err.ErrorMessage()); - } - */ - //fInternalError = TRUE; - m_pW3Context->GetResponse()->SetStatus(500, "Internal Server Error", 0, hr); - return REQUEST_NOTIFICATION_STATUS::RQ_NOTIFICATION_FINISH_REQUEST; - } - - // FREB log - - if (ANCMEvents::ANCM_START_APPLICATION_SUCCESS::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_START_APPLICATION_SUCCESS::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL, - L"InProcess Application"); - } - - //SetHttpSysDisconnectCallback(); - return ((IN_PROCESS_APPLICATION*)m_pApplication)->OnExecuteRequest(m_pW3Context, this); -} - -__override -REQUEST_NOTIFICATION_STATUS -IN_PROCESS_HANDLER::OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus -) -{ - IN_PROCESS_APPLICATION* application = (IN_PROCESS_APPLICATION*)m_pApplication; - if (application == NULL) - { - return RQ_NOTIFICATION_FINISH_REQUEST; - } - - // OnAsyncCompletion must call into the application if there was a error. We will redo calls - // to Read/Write if we called cancelIo on the IHttpContext. - return application->OnAsyncCompletion(cbCompletion, hrCompletionStatus, this); -} - -VOID -IN_PROCESS_HANDLER::TerminateRequest( - bool fClientInitiated -) -{ - UNREFERENCED_PARAMETER(fClientInitiated); - //todo -} - -PVOID -IN_PROCESS_HANDLER::QueryManagedHttpContext( - VOID -) -{ - return m_pManagedHttpContext; -} - -BOOL -IN_PROCESS_HANDLER::QueryIsManagedRequestComplete( - VOID -) -{ - return m_fManagedRequestComplete; -} - -IHttpContext* -IN_PROCESS_HANDLER::QueryHttpContext( - VOID -) -{ - return m_pW3Context; -} - -VOID -IN_PROCESS_HANDLER::IndicateManagedRequestComplete( - VOID -) -{ - m_fManagedRequestComplete = TRUE; -} - -REQUEST_NOTIFICATION_STATUS -IN_PROCESS_HANDLER::QueryAsyncCompletionStatus( - VOID -) -{ - return m_requestNotificationStatus; -} - -VOID -IN_PROCESS_HANDLER::SetAsyncCompletionStatus( - REQUEST_NOTIFICATION_STATUS requestNotificationStatus -) -{ - m_requestNotificationStatus = requestNotificationStatus; -} - -VOID -IN_PROCESS_HANDLER::SetManagedHttpContext( - PVOID pManagedHttpContext -) -{ - m_pManagedHttpContext = pManagedHttpContext; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.h deleted file mode 100644 index 1ea1a8dbc56e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/inprocess/inprocesshandler.h +++ /dev/null @@ -1,72 +0,0 @@ -#pragma once - -class IN_PROCESS_HANDLER : public REQUEST_HANDLER -{ -public: - IN_PROCESS_HANDLER( - - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication); - - ~IN_PROCESS_HANDLER(); - - __override - REQUEST_NOTIFICATION_STATUS - OnExecuteRequestHandler(); - - __override - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus - ); - - __override - VOID - TerminateRequest( - bool fClientInitiated - - ); - - PVOID - QueryManagedHttpContext( - VOID - ); - - VOID - SetManagedHttpContext( - PVOID pManagedHttpContext - ); - - IHttpContext* - QueryHttpContext( - VOID - ); - - BOOL - QueryIsManagedRequestComplete( - VOID - ); - - VOID - IndicateManagedRequestComplete( - VOID - ); - - REQUEST_NOTIFICATION_STATUS - QueryAsyncCompletionStatus( - VOID - ); - - VOID - SetAsyncCompletionStatus( - REQUEST_NOTIFICATION_STATUS requestNotificationStatus - ); - -private: - PVOID m_pManagedHttpContext; - IHttpContext* m_pHttpContext; - BOOL m_fManagedRequestComplete; - REQUEST_NOTIFICATION_STATUS m_requestNotificationStatus; -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/managedexports.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/managedexports.cxx deleted file mode 100644 index 85eb5b4d47df..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/managedexports.cxx +++ /dev/null @@ -1,450 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -#include "precomp.hxx" - -// -// Initialization export -// -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -VOID -register_callbacks( - _In_ PFN_REQUEST_HANDLER request_handler, - _In_ PFN_SHUTDOWN_HANDLER shutdown_handler, - _In_ PFN_MANAGED_CONTEXT_HANDLER async_completion_handler, - _In_ VOID* pvRequstHandlerContext, - _In_ VOID* pvShutdownHandlerContext -) -{ - IN_PROCESS_APPLICATION::GetInstance()->SetCallbackHandles( - request_handler, - shutdown_handler, - async_completion_handler, - pvRequstHandlerContext, - pvShutdownHandlerContext - ); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HTTP_REQUEST* -http_get_raw_request( - _In_ IN_PROCESS_HANDLER* pInProcessHandler -) -{ - return pInProcessHandler->QueryHttpContext()->GetRequest()->GetRawHttpRequest(); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HTTP_RESPONSE* -http_get_raw_response( - _In_ IN_PROCESS_HANDLER* pInProcessHandler -) -{ - return pInProcessHandler->QueryHttpContext()->GetResponse()->GetRawHttpResponse(); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_get_server_variable( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ PCSTR pszVariableName, - _Out_ BSTR* pwszReturn -) -{ - PCWSTR pszVariableValue; - DWORD cbLength; - HRESULT hr = pInProcessHandler - ->QueryHttpContext() - ->GetServerVariable(pszVariableName, &pszVariableValue, &cbLength); - - if (FAILED(hr) || cbLength == 0) - { - goto Finished; - } - - *pwszReturn = SysAllocString(pszVariableValue); - - if (*pwszReturn == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - -Finished: - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_set_response_status_code( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ USHORT statusCode, - _In_ PCSTR pszReason -) -{ - return pInProcessHandler->QueryHttpContext()->GetResponse()->SetStatus(statusCode, pszReason); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_post_completion( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - DWORD cbBytes -) -{ - return pInProcessHandler->QueryHttpContext()->PostCompletion(cbBytes); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_set_completion_status( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ REQUEST_NOTIFICATION_STATUS requestNotificationStatus -) -{ - HRESULT hr = S_OK; - - pInProcessHandler->IndicateManagedRequestComplete(); - pInProcessHandler->SetAsyncCompletionStatus(requestNotificationStatus); - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_set_managed_context( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ PVOID pvManagedContext -) -{ - // todo: should we consider changing the signature - HRESULT hr = S_OK; - pInProcessHandler->SetManagedHttpContext(pvManagedContext); - - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -VOID -http_indicate_completion( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ REQUEST_NOTIFICATION_STATUS notificationStatus -) -{ - pInProcessHandler->QueryHttpContext()->IndicateCompletion(notificationStatus); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -VOID -http_get_completion_info( - _In_ IHttpCompletionInfo2* info, - _Out_ DWORD* cbBytes, - _Out_ HRESULT* hr -) -{ - *cbBytes = info->GetCompletionBytes(); - *hr = info->GetCompletionStatus(); -} - -// -// todo: we should not rely on IN_PROCESS_APPLICATION::GetInstance() -// the signature should be changed. application's based address should be passed in -// - -struct IISConfigurationData -{ - BSTR pwzFullApplicationPath; - BSTR pwzVirtualApplicationPath; - BOOL fWindowsAuthEnabled; - BOOL fBasicAuthEnabled; - BOOL fAnonymousAuthEnable; -}; - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_get_application_properties( - _In_ IISConfigurationData* pIISCofigurationData -) -{ - ASPNETCORE_CONFIG* pConfiguration = NULL; - IN_PROCESS_APPLICATION* pApplication = IN_PROCESS_APPLICATION::GetInstance(); - - if (pApplication == NULL) - { - return E_FAIL; - } - - pConfiguration = pApplication->QueryConfig(); - - pIISCofigurationData->pwzFullApplicationPath = SysAllocString(pConfiguration->QueryApplicationPhysicalPath()->QueryStr()); - pIISCofigurationData->pwzVirtualApplicationPath = SysAllocString(pConfiguration->QueryApplicationVirtualPath()->QueryStr()); - pIISCofigurationData->fWindowsAuthEnabled = pConfiguration->QueryWindowsAuthEnabled(); - pIISCofigurationData->fBasicAuthEnabled = pConfiguration->QueryBasicAuthEnabled(); - pIISCofigurationData->fAnonymousAuthEnable = pConfiguration->QueryAnonymousAuthEnabled(); - - return S_OK; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_read_request_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _Out_ CHAR* pvBuffer, - _In_ DWORD dwCbBuffer, - _Out_ DWORD* pdwBytesReceived, - _Out_ BOOL* pfCompletionPending -) -{ - HRESULT hr = S_OK; - - if (pInProcessHandler == NULL) - { - return E_FAIL; - } - if (dwCbBuffer == 0) - { - return E_FAIL; - } - IHttpRequest *pHttpRequest = (IHttpRequest*)pInProcessHandler->QueryHttpContext()->GetRequest(); - - // Check if there is anything to read - if (pHttpRequest->GetRemainingEntityBytes() > 0) - { - BOOL fAsync = TRUE; - hr = pHttpRequest->ReadEntityBody( - pvBuffer, - dwCbBuffer, - fAsync, - pdwBytesReceived, - pfCompletionPending); - - if (hr == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)) - { - // We reached the end of the data - hr = S_OK; - } - } - else - { - *pdwBytesReceived = 0; - *pfCompletionPending = FALSE; - } - - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_write_response_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ HTTP_DATA_CHUNK* pDataChunks, - _In_ DWORD dwChunks, - _In_ BOOL* pfCompletionExpected -) -{ - IHttpResponse *pHttpResponse = (IHttpResponse*)pInProcessHandler->QueryHttpContext()->GetResponse(); - BOOL fAsync = TRUE; - BOOL fMoreData = TRUE; - DWORD dwBytesSent = 0; - - HRESULT hr = pHttpResponse->WriteEntityChunks( - pDataChunks, - dwChunks, - fAsync, - fMoreData, - &dwBytesSent, - pfCompletionExpected); - - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_flush_response_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _Out_ BOOL* pfCompletionExpected -) -{ - IHttpResponse *pHttpResponse = (IHttpResponse*)pInProcessHandler->QueryHttpContext()->GetResponse(); - - BOOL fAsync = TRUE; - BOOL fMoreData = TRUE; - DWORD dwBytesSent = 0; - - HRESULT hr = pHttpResponse->Flush( - fAsync, - fMoreData, - &dwBytesSent, - pfCompletionExpected); - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_websockets_read_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ CHAR* pvBuffer, - _In_ DWORD cbBuffer, - _In_ PFN_ASYNC_COMPLETION pfnCompletionCallback, - _In_ VOID* pvCompletionContext, - _In_ DWORD* pDwBytesReceived, - _In_ BOOL* pfCompletionPending -) -{ - IHttpRequest3 *pHttpRequest = (IHttpRequest3*)pInProcessHandler->QueryHttpContext()->GetRequest(); - - BOOL fAsync = TRUE; - - HRESULT hr = pHttpRequest->ReadEntityBody( - pvBuffer, - cbBuffer, - fAsync, - pfnCompletionCallback, - pvCompletionContext, - pDwBytesReceived, - pfCompletionPending); - - if (hr == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)) - { - // We reached the end of the data - hr = S_OK; - } - - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_websockets_write_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ HTTP_DATA_CHUNK* pDataChunks, - _In_ DWORD dwChunks, - _In_ PFN_ASYNC_COMPLETION pfnCompletionCallback, - _In_ VOID* pvCompletionContext, - _In_ BOOL* pfCompletionExpected -) -{ - IHttpResponse2 *pHttpResponse = (IHttpResponse2*)pInProcessHandler->QueryHttpContext()->GetResponse(); - - BOOL fAsync = TRUE; - BOOL fMoreData = TRUE; - DWORD dwBytesSent; - - HRESULT hr = pHttpResponse->WriteEntityChunks( - pDataChunks, - dwChunks, - fAsync, - fMoreData, - pfnCompletionCallback, - pvCompletionContext, - &dwBytesSent, - pfCompletionExpected); - - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_websockets_flush_bytes( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ PFN_ASYNC_COMPLETION pfnCompletionCallback, - _In_ VOID* pvCompletionContext, - _In_ BOOL* pfCompletionExpected -) -{ - IHttpResponse2 *pHttpResponse = (IHttpResponse2*)pInProcessHandler->QueryHttpContext()->GetResponse(); - - BOOL fAsync = TRUE; - BOOL fMoreData = TRUE; - DWORD dwBytesSent; - - HRESULT hr = pHttpResponse->Flush( - fAsync, - fMoreData, - pfnCompletionCallback, - pvCompletionContext, - &dwBytesSent, - pfCompletionExpected); - return hr; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_enable_websockets( - _In_ IN_PROCESS_HANDLER* pInProcessHandler -) -{ - //if (!g_fWebSocketSupported) - //{ - // return E_FAIL; - //} - - ((IHttpContext3*)pInProcessHandler->QueryHttpContext())->EnableFullDuplex(); - ((IHttpResponse2*)pInProcessHandler->QueryHttpContext()->GetResponse())->DisableBuffering(); - - return S_OK; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_cancel_io( - _In_ IN_PROCESS_HANDLER* pInProcessHandler -) -{ - return pInProcessHandler->QueryHttpContext()->CancelIo(); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_response_set_unknown_header( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ PCSTR pszHeaderName, - _In_ PCSTR pszHeaderValue, - _In_ USHORT usHeaderValueLength, - _In_ BOOL fReplace -) -{ - return pInProcessHandler->QueryHttpContext()->GetResponse()->SetHeader(pszHeaderName, pszHeaderValue, usHeaderValueLength, fReplace); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_response_set_known_header( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _In_ HTTP_HEADER_ID dwHeaderId, - _In_ PCSTR pszHeaderValue, - _In_ USHORT usHeaderValueLength, - _In_ BOOL fReplace -) -{ - return pInProcessHandler->QueryHttpContext()->GetResponse()->SetHeader(dwHeaderId, pszHeaderValue, usHeaderValueLength, fReplace); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -HRESULT -http_get_authentication_information( - _In_ IN_PROCESS_HANDLER* pInProcessHandler, - _Out_ BSTR* pstrAuthType, - _Out_ VOID** pvToken -) -{ - *pstrAuthType = SysAllocString(pInProcessHandler->QueryHttpContext()->GetUser()->GetAuthenticationType()); - *pvToken = pInProcessHandler->QueryHttpContext()->GetUser()->GetPrimaryToken(); - - return S_OK; -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -VOID -http_stop_calls_into_managed() -{ - IN_PROCESS_APPLICATION::GetInstance()->StopCallsIntoManaged(); -} - -EXTERN_C __MIDL_DECLSPEC_DLLEXPORT -VOID -http_stop_incoming_requests() -{ - IN_PROCESS_APPLICATION::GetInstance()->StopIncomingRequests(); -} - -// End of export diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.cxx deleted file mode 100644 index 99990f938cf9..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.cxx +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" - -FORWARDER_CONNECTION::FORWARDER_CONNECTION( - VOID -) : m_cRefs (1), - m_hConnection (NULL) -{ -} - -HRESULT -FORWARDER_CONNECTION::Initialize( - DWORD dwPort -) -{ - HRESULT hr = S_OK; - - hr = m_ConnectionKey.Initialize( dwPort ); - if ( FAILED( hr ) ) - { - goto Finished; - } - - m_hConnection = WinHttpConnect(g_hWinhttpSession, - L"127.0.0.1", - (USHORT) dwPort, - 0); - if (m_hConnection == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // - // Since WinHttp will not emit WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING - // when closing WebSocket handle on Win8. Register callback at Connect level as a workaround - // - if (WinHttpSetStatusCallback(m_hConnection, - FORWARDING_HANDLER::OnWinHttpCompletion, - WINHTTP_CALLBACK_FLAG_HANDLES, - NULL) == WINHTTP_INVALID_STATUS_CALLBACK) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - -Finished: - - return hr; -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.h deleted file mode 100644 index 232e23988826..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwarderconnection.h +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -// -// The key used for hash-table lookups, consists of the port on which the http process is created. -// -class FORWARDER_CONNECTION_KEY -{ -public: - - FORWARDER_CONNECTION_KEY( - VOID - ) - { - } - - HRESULT - Initialize( - _In_ DWORD dwPort - ) - { - m_dwPort = dwPort; - return S_OK; - } - - BOOL - GetIsEqual( - const FORWARDER_CONNECTION_KEY * key2 - ) const - { - return m_dwPort == key2->m_dwPort; - } - - DWORD CalcKeyHash() const - { - // TODO: Review hash distribution. - return Hash(m_dwPort); - } - -private: - - DWORD m_dwPort; -}; - -class FORWARDER_CONNECTION -{ -public: - - FORWARDER_CONNECTION( - VOID - ); - - HRESULT - Initialize( - DWORD dwPort - ); - - HINTERNET - QueryHandle() const - { - return m_hConnection; - } - - VOID - ReferenceForwarderConnection() const - { - InterlockedIncrement(&m_cRefs); - } - - VOID - DereferenceForwarderConnection() const - { - if (InterlockedDecrement(&m_cRefs) == 0) - { - delete this; - } - } - - FORWARDER_CONNECTION_KEY * - QueryConnectionKey() - { - return &m_ConnectionKey; - } - -private: - - ~FORWARDER_CONNECTION() - { - if (m_hConnection != NULL) - { - WinHttpCloseHandle(m_hConnection); - m_hConnection = NULL; - } - } - - mutable LONG m_cRefs; - FORWARDER_CONNECTION_KEY m_ConnectionKey; - HINTERNET m_hConnection; -}; - -class FORWARDER_CONNECTION_HASH : - public HASH_TABLE -{ - -public: - - FORWARDER_CONNECTION_HASH() - {} - - FORWARDER_CONNECTION_KEY * - ExtractKey( - FORWARDER_CONNECTION *pConnection - ) - { - return pConnection->QueryConnectionKey(); - } - - DWORD - CalcKeyHash( - FORWARDER_CONNECTION_KEY *key - ) - { - return key->CalcKeyHash(); - } - - BOOL - EqualKeys( - FORWARDER_CONNECTION_KEY *key1, - FORWARDER_CONNECTION_KEY *key2 - ) - { - return key1->GetIsEqual(key2); - } - - VOID - ReferenceRecord( - FORWARDER_CONNECTION *pConnection - ) - { - pConnection->ReferenceForwarderConnection(); - } - - VOID - DereferenceRecord( - FORWARDER_CONNECTION *pConnection - ) - { - pConnection->DereferenceForwarderConnection(); - } - -private: - - FORWARDER_CONNECTION_HASH(const FORWARDER_CONNECTION_HASH &); - void operator=(const FORWARDER_CONNECTION_HASH &); -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.cpp deleted file mode 100644 index 4614b27d34b7..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.cpp +++ /dev/null @@ -1,2747 +0,0 @@ -#include "..\precomp.hxx" - -// Just to be aware of the FORWARDING_HANDLER object size. -C_ASSERT(sizeof(FORWARDING_HANDLER) <= 632); - -#define DEF_MAX_FORWARDS 32 -#define HEX_TO_ASCII(c) ((CHAR)(((c) < 10) ? ((c) + '0') : ((c) + 'a' - 10))) -#define BUFFER_SIZE (8192UL) -#define ENTITY_BUFFER_SIZE (6 + BUFFER_SIZE + 2) - -#define FORWARDING_HANDLER_SIGNATURE ((DWORD)'FHLR') -#define FORWARDING_HANDLER_SIGNATURE_FREE ((DWORD)'fhlr') - -STRA FORWARDING_HANDLER::sm_pStra502ErrorMsg; -ALLOC_CACHE_HANDLER * FORWARDING_HANDLER::sm_pAlloc = NULL; -TRACE_LOG * FORWARDING_HANDLER::sm_pTraceLog = NULL; -PROTOCOL_CONFIG FORWARDING_HANDLER::sm_ProtocolConfig; -RESPONSE_HEADER_HASH * FORWARDING_HANDLER::sm_pResponseHeaderHash = NULL; - -FORWARDING_HANDLER::FORWARDING_HANDLER( - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication -) : REQUEST_HANDLER(pW3Context, pModuleId, pApplication), - m_Signature(FORWARDING_HANDLER_SIGNATURE), - m_RequestStatus(FORWARDER_START), - m_fClientDisconnected(FALSE), - m_fResponseHeadersReceivedAndSet(FALSE), - m_fDoReverseRewriteHeaders(FALSE), - m_fFinishRequest(FALSE), - m_fHasError(FALSE), - m_pszHeaders(NULL), - m_cchHeaders(0), - m_BytesToReceive(0), - m_BytesToSend(0), - m_fWebSocketEnabled(FALSE), - m_pWebSocket(NULL), - m_dwHandlers (1), // default http handler - m_fDoneAsyncCompletion(FALSE), - m_fHttpHandleInClose(FALSE), - m_fWebSocketHandleInClose(FALSE), - m_fServerResetConn(FALSE) -{ -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::FORWARDING_HANDLER"); -#endif - - InitializeSRWLock(&m_RequestLock); -} - -FORWARDING_HANDLER::~FORWARDING_HANDLER( -) -{ - // - // Destructor has started. - // - m_Signature = FORWARDING_HANDLER_SIGNATURE_FREE; - -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::~FORWARDING_HANDLER"); -#endif - // - // RemoveRequest() should already have been called and m_pDisconnect - // has been freed or m_pDisconnect was never initialized. - // - // Disconnect notification cleanup would happen first, before - // the FORWARDING_HANDLER instance got removed from m_pSharedhandler list. - // The m_pServer cleanup would happen afterwards, since there may be a - // call pending from SHARED_HANDLER to FORWARDING_HANDLER::SetStatusAndHeaders() - // - DBG_ASSERT(m_pDisconnect == NULL); - - RemoveRequest(); - - FreeResponseBuffers(); - - if (m_pWebSocket) - { - m_pWebSocket->Terminate(); - m_pWebSocket = NULL; - } -} - -__override -REQUEST_NOTIFICATION_STATUS -FORWARDING_HANDLER::OnExecuteRequestHandler() -{ - REQUEST_NOTIFICATION_STATUS retVal = RQ_NOTIFICATION_CONTINUE; - HRESULT hr = S_OK; - BOOL fRequestLocked = FALSE; - BOOL fHandleSet = FALSE; - BOOL fFailedToStartKestrel = FALSE; - BOOL fSecure = FALSE; - HINTERNET hConnect = NULL; - IHttpRequest *pRequest = m_pW3Context->GetRequest(); - IHttpResponse *pResponse = m_pW3Context->GetResponse(); - IHttpConnection *pClientConnection = NULL; - OUT_OF_PROCESS_APPLICATION *pApplication = NULL; - PROTOCOL_CONFIG *pProtocol = &sm_ProtocolConfig; - SERVER_PROCESS *pServerProcess = NULL; - - USHORT cchHostName = 0; - - STACK_STRU(strDestination, 32); - STACK_STRU(strUrl, 2048); - STACK_STRU(struEscapedUrl, 2048); - - // - // Take a reference so that object does not go away as a result of - // async completion. - // - ReferenceRequestHandler(); - - // override Protocol related config from aspNetCore config - pProtocol->OverrideConfig(m_pApplication->QueryConfig()); - - // check connection - pClientConnection = m_pW3Context->GetConnection(); - if (pClientConnection == NULL || - !pClientConnection->IsConnected()) - { - hr = HRESULT_FROM_WIN32(WSAECONNRESET); - goto Failure; - } - - pApplication = static_cast (m_pApplication); - if (pApplication == NULL) - { - hr = E_INVALIDARG; - goto Failure; - } - - hr = pApplication->GetProcess(&pServerProcess); - if (FAILED(hr)) - { - fFailedToStartKestrel = TRUE; - goto Failure; - } - - if (pServerProcess == NULL) - { - fFailedToStartKestrel = TRUE; - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - goto Failure; - } - - if (pServerProcess->QueryWinHttpConnection() == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_INVALID_HANDLE); - goto Failure; - } - - hConnect = pServerProcess->QueryWinHttpConnection()->QueryHandle(); - - m_pszOriginalHostHeader = pRequest->GetHeader(HttpHeaderHost, &cchHostName); - // - // parse original url - // - if (FAILED(hr = UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, - &fSecure, - &strDestination, - &strUrl))) - { - goto Failure; - } - - if (FAILED(hr = UTILITY::EscapeAbsPath(pRequest, &struEscapedUrl))) - { - goto Failure; - } - - m_fDoReverseRewriteHeaders = pProtocol->QueryReverseRewriteHeaders(); - - m_cMinBufferLimit = pProtocol->QueryMinResponseBuffer(); - - // - // Mark request as websocket if upgrade header is present. - // - if (pApplication->QueryConfig()->QueryWebSocketEnabled()) - { - USHORT cchHeader = 0; - PCSTR pszWebSocketHeader = pRequest->GetHeader("Upgrade", &cchHeader); - if (cchHeader == 9 && _stricmp(pszWebSocketHeader, "websocket") == 0) - { - m_fWebSocketEnabled = TRUE; - } - } - - hr = CreateWinHttpRequest(pRequest, - pProtocol, - hConnect, - &struEscapedUrl, - pServerProcess); - if (FAILED(hr)) - { - goto Failure; - } - - // Set client disconnect callback contract with IIS - m_pDisconnect = static_cast( - pClientConnection->GetModuleContextContainer()-> - GetConnectionModuleContext(m_pModuleId)); - if (m_pDisconnect == NULL) - { - m_pDisconnect = new ASYNC_DISCONNECT_CONTEXT(); - if (m_pDisconnect == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - - hr = pClientConnection->GetModuleContextContainer()-> - SetConnectionModuleContext(m_pDisconnect, - m_pModuleId); - DBG_ASSERT(hr != HRESULT_FROM_WIN32(ERROR_ALREADY_ASSIGNED)); - if (FAILED(hr)) - { - goto Failure; - } - } - - m_pDisconnect->SetHandler(this); - fHandleSet = TRUE; - - // require lock as client disconnect callback may happen - AcquireSRWLockShared(&m_RequestLock); - fRequestLocked = TRUE; - - // - // Remember the handler being processed in the current thread - // before staring a WinHTTP operation. - // - DBG_ASSERT(fRequestLocked); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); - TlsSetValue(g_dwTlsIndex, this); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); - - if (m_hRequest == NULL) - { - hr = HRESULT_FROM_WIN32(WSAECONNRESET); - goto Failure; - } - - // - // Begins normal request handling. Send request to server. - // - m_RequestStatus = FORWARDER_SENDING_REQUEST; - - // - // Calculate the bytes to receive from the content length. - // - DWORD cbContentLength = 0; - PCSTR pszContentLength = pRequest->GetHeader(HttpHeaderContentLength); - if (pszContentLength != NULL) - { - cbContentLength = m_BytesToReceive = atol(pszContentLength); - if (m_BytesToReceive == INFINITE) - { - hr = HRESULT_FROM_WIN32(WSAECONNRESET); - goto Failure; - } - } - else if (pRequest->GetHeader(HttpHeaderTransferEncoding) != NULL) - { - m_BytesToReceive = INFINITE; - } - - if (m_fWebSocketEnabled) - { - // - // Set the upgrade flag for a websocket request. - // - if (!WinHttpSetOption(m_hRequest, - WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET, - NULL, - 0)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - - m_cchLastSend = m_cchHeaders; - - //FREB log - if (ANCMEvents::ANCM_REQUEST_FORWARD_START::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_REQUEST_FORWARD_START::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL); - } - - if (!WinHttpSendRequest(m_hRequest, - m_pszHeaders, - m_cchHeaders, - NULL, - 0, - cbContentLength, - reinterpret_cast(static_cast(this)))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::OnExecuteRequestHandler, Send request failed"); -#endif - // FREB log - if (ANCMEvents::ANCM_REQUEST_FORWARD_FAIL::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_REQUEST_FORWARD_FAIL::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL, - hr); - } - - goto Failure; - } - - // - // Async WinHTTP operation is in progress. Release this thread meanwhile, - // OnWinHttpCompletion method should resume the work by posting an IIS completion. - // - retVal = RQ_NOTIFICATION_PENDING; - goto Finished; - -Failure: - m_RequestStatus = FORWARDER_DONE; - - //disable client disconnect callback - RemoveRequest(); - - pResponse->DisableKernelCache(); - pResponse->GetRawHttpResponse()->EntityChunkCount = 0; - if (hr == HRESULT_FROM_WIN32(WSAECONNRESET)) - { - pResponse->SetStatus(400, "Bad Request", 0, hr); - } - else if (fFailedToStartKestrel && !m_pApplication->QueryConfig()->QueryDisableStartUpErrorPage()) - { - HTTP_DATA_CHUNK DataChunk; - pResponse->SetStatus(502, "Bad Gateway", 5, hr, NULL, TRUE); - pResponse->SetHeader("Content-Type", - "text/html", - (USHORT)strlen("text/html"), - FALSE - ); - - DataChunk.DataChunkType = HttpDataChunkFromMemory; - DataChunk.FromMemory.pBuffer = (PVOID)sm_pStra502ErrorMsg.QueryStr(); - DataChunk.FromMemory.BufferLength = sm_pStra502ErrorMsg.QueryCB(); - pResponse->WriteEntityChunkByReference(&DataChunk); - } - else - { - // - // default error behavior - // - pResponse->SetStatus(502, "Bad Gateway", 3, hr); - } - // - // Finish the request on failure. - // - retVal = RQ_NOTIFICATION_FINISH_REQUEST; - -Finished: - if (fRequestLocked) - { - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); - TlsSetValue(g_dwTlsIndex, NULL); - ReleaseSRWLockShared(&m_RequestLock); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); - } - - DereferenceRequestHandler(); - // - // Do not use this object after dereferencing it, it may be gone. - // - - return retVal; -} - -__override -REQUEST_NOTIFICATION_STATUS -FORWARDING_HANDLER::OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus -) -/*++ - -Routine Description: - -Handle the completion from IIS and continue the execution -of this request based on the current state. - -Arguments: - -cbCompletion - Number of bytes associated with this completion -dwCompletionStatus - the win32 status associated with this completion - -Return Value: - -REQUEST_NOTIFICATION_STATUS - ---*/ -{ - HRESULT hr = S_OK; - REQUEST_NOTIFICATION_STATUS retVal = RQ_NOTIFICATION_PENDING; - BOOL fLocked = FALSE; - BOOL fClientError = FALSE; - BOOL fClosed = FALSE; - BOOL fWebSocketUpgraded = FALSE; - - DBG_ASSERT(m_pW3Context != NULL); - __analysis_assume(m_pW3Context != NULL); - - // - // Take a reference so that object does not go away as a result of - // async completion. - // - ReferenceRequestHandler(); - - if (sm_pTraceLog != NULL) - { - WriteRefTraceLogEx(sm_pTraceLog, - m_cRefs, - this, - "FORWARDING_HANDLER::OnAsyncCompletion Enter", - reinterpret_cast(static_cast(cbCompletion)), - reinterpret_cast(static_cast(hrCompletionStatus))); - } - - if (TlsGetValue(g_dwTlsIndex) != this) - { - // - // Acquire exclusive lock as WinHTTP callback may happen on different thread - // We don't want two threads signal IIS pipeline simultaneously - // - AcquireLockExclusive(); - fLocked = TRUE; - } - - if (m_fClientDisconnected && (m_RequestStatus != FORWARDER_DONE)) - { - hr = ERROR_CONNECTION_ABORTED; - goto Failure; - } - - if (m_RequestStatus == FORWARDER_RECEIVED_WEBSOCKET_RESPONSE) - { -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::OnAsyncCompletion, Send completed for 101 response"); -#endif - // - // This should be the write completion of the 101 response. - // - m_pWebSocket = new WEBSOCKET_HANDLER(); - if (m_pWebSocket == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - - hr = m_pWebSocket->ProcessRequest(this, m_pW3Context, m_hRequest, &fWebSocketUpgraded); - if (fWebSocketUpgraded) - { - // WinHttp WebSocket handle has been created, bump the counter so that remember to close it - // and prevent from premature postcomplation and unexpected callback from winhttp - InterlockedIncrement(&m_dwHandlers); - } - - if (FAILED(hr)) - { - // This failure could happen when client disconnect happens or backend server fails - // after websocket upgrade - goto Failure; - } - - // - // WebSocket upgrade is successful. Close the WinHttpRequest Handle - // - m_fHttpHandleInClose = TRUE; - fClosed = WinHttpCloseHandle(m_hRequest); - DBG_ASSERT(fClosed); - m_hRequest = NULL; - - if (!fClosed) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - retVal = RQ_NOTIFICATION_PENDING; - goto Finished; - } - - // - // Begins normal completion handling. There is already an exclusive acquired lock - // for protecting the WinHTTP request handle from being closed. - // - switch (m_RequestStatus) - { - case FORWARDER_RECEIVING_RESPONSE: - - // - // This is a completion of a write (send) to http.sys, abort in case of - // failure, if there is more data available from WinHTTP, read it - // or else ask if there is more. - // - if (FAILED(hrCompletionStatus)) - { - hr = hrCompletionStatus; - fClientError = TRUE; - goto Failure; - } - - hr = OnReceivingResponse(); - if (FAILED(hr)) - { - goto Failure; - } - break; - - case FORWARDER_SENDING_REQUEST: - - hr = OnSendingRequest(cbCompletion, - hrCompletionStatus, - &fClientError); - if (FAILED(hr)) - { - goto Failure; - } - break; - - default: - DBG_ASSERT(m_RequestStatus == FORWARDER_DONE); - if (m_hRequest == NULL && m_pWebSocket == NULL) - { - // Request must have been done - if (!m_fFinishRequest) - { - goto Failure; - } - - if (m_fHasError) - { - retVal = RQ_NOTIFICATION_FINISH_REQUEST; - } - else - { - retVal = RQ_NOTIFICATION_CONTINUE; - } - } - goto Finished; - } - - // - // Either OnReceivingResponse or OnSendingRequest initiated an - // async WinHTTP operation, release this thread meanwhile, - // OnWinHttpCompletion method should resume the work by posting an IIS completion. - // - retVal = RQ_NOTIFICATION_PENDING; - goto Finished; - -Failure: - - // - // Reset status for consistency. - // - m_RequestStatus = FORWARDER_DONE; - if (!m_fHasError) - { - m_fHasError = TRUE; - - // - // Do the right thing based on where the error originated from. - // - IHttpResponse *pResponse = m_pW3Context->GetResponse(); - pResponse->DisableKernelCache(); - pResponse->GetRawHttpResponse()->EntityChunkCount = 0; - - if (fClientError || m_fClientDisconnected) - { - if (!m_fResponseHeadersReceivedAndSet) - { - pResponse->SetStatus(400, "Bad Request", 0, HRESULT_FROM_WIN32(WSAECONNRESET)); - } - else - { - // - // Response headers from origin server were - // already received and set for the current response. - // Honor the response status. - // - } - } - else - { - STACK_STRU(strDescription, 128); - - pResponse->SetStatus(502, "Bad Gateway", 3, hr); - - if (hr > HRESULT_FROM_WIN32(WINHTTP_ERROR_BASE) && - hr <= HRESULT_FROM_WIN32(WINHTTP_ERROR_LAST)) - { -#pragma prefast (suppress : __WARNING_FUNCTION_NEEDS_REVIEW, "Function and parameters reviewed.") - FormatMessage( - FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_HMODULE, - g_hWinHttpModule, - HRESULT_CODE(hr), - 0, - strDescription.QueryStr(), - strDescription.QuerySizeCCH(), - NULL); - } - else - { - LoadString(g_hAspNetCoreModule, - IDS_SERVER_ERROR, - strDescription.QueryStr(), - strDescription.QuerySizeCCH()); - } - (VOID)strDescription.SyncWithBuffer(); - - if (strDescription.QueryCCH() != 0) - { - pResponse->SetErrorDescription( - strDescription.QueryStr(), - strDescription.QueryCCH(), - FALSE); - } - - if (hr == HRESULT_FROM_WIN32(ERROR_WINHTTP_INVALID_SERVER_RESPONSE)) - { - if (!m_fServerResetConn) - { - RemoveRequest(); - pResponse->ResetConnection(); - m_fServerResetConn = TRUE; - } - } - } - } - - if (m_pWebSocket != NULL && !m_fWebSocketHandleInClose) - { - m_fWebSocketHandleInClose = TRUE; - m_pWebSocket->TerminateRequest(); - } - - if (m_hRequest != NULL && !m_fHttpHandleInClose) - { - m_fHttpHandleInClose = TRUE; - WinHttpCloseHandle(m_hRequest); - m_hRequest = NULL; - } - -Finished: - - if (retVal != RQ_NOTIFICATION_PENDING) - { - - DBG_ASSERT(m_dwHandlers == 0); - RemoveRequest(); - - // This is just a safety guard to prevent from returning non pending status no more once - // which should never happen - if (!m_fDoneAsyncCompletion) - { - m_fDoneAsyncCompletion = TRUE; - } - else - { - retVal = RQ_NOTIFICATION_PENDING; - } - } - - if (fLocked) - { - ReleaseLockExclusive(); - } - - DereferenceRequestHandler(); - // - // Do not use this object after dereferencing it, it may be gone. - // -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::OnAsyncCompletion Done %d", retVal); -#endif - return retVal; -} - -// static -HRESULT -FORWARDING_HANDLER::StaticInitialize( - BOOL fEnableReferenceCountTracing -) -/*++ - -Routine Description: - -Global initialization routine for FORWARDING_HANDLERs - -Arguments: - -fEnableReferenceCountTracing - True if ref count tracing should be use. - -Return Value: - -HRESULT - ---*/ -{ - HRESULT hr = S_OK; - - sm_pAlloc = new ALLOC_CACHE_HANDLER; - if (sm_pAlloc == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = sm_pAlloc->Initialize(sizeof(FORWARDING_HANDLER), - 64); // nThreshold - if (FAILED(hr)) - { - goto Finished; - } - - sm_pResponseHeaderHash = new RESPONSE_HEADER_HASH; - if (sm_pResponseHeaderHash == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = sm_pResponseHeaderHash->Initialize(); - if (FAILED(hr)) - { - goto Finished; - } - - // Initialize PROTOCOL_CONFIG - hr = sm_ProtocolConfig.Initialize(); - if (FAILED(hr)) - { - goto Finished; - } - - if (fEnableReferenceCountTracing) - { - sm_pTraceLog = CreateRefTraceLog(10000, 0); - } - - sm_pStra502ErrorMsg.Copy( - " \ - \ - \ - \ - IIS 502.5 Error \ -
\ -

HTTP Error 502.5 - Process Failure

\ -
\ -

Common causes of this issue:

\ -
  • The application process failed to start
  • \ -
  • The application process started but then stopped
  • \ -
  • The application process started but failed to listen on the configured port
\ -
\ -
\ -

Troubleshooting steps:

\ -
  • Check the system event log for error messages
  • \ -
  • Enable logging the application process' stdout messages
  • \ -
  • Attach a debugger to the application process and inspect
\ -

For more information visit: \ - https://go.microsoft.com/fwlink/?LinkID=808681

\ -
\ -
\ -
"); - -Finished: - if (FAILED(hr)) - { - StaticTerminate(); - } - return hr; -} - -//static -VOID -FORWARDING_HANDLER::StaticTerminate() -{ - sm_pStra502ErrorMsg.Reset(); - - if (sm_pResponseHeaderHash != NULL) - { - sm_pResponseHeaderHash->Clear(); - delete sm_pResponseHeaderHash; - sm_pResponseHeaderHash = NULL; - } - - if (sm_pTraceLog != NULL) - { - DestroyRefTraceLog(sm_pTraceLog); - sm_pTraceLog = NULL; - } - - if (sm_pAlloc != NULL) - { - delete sm_pAlloc; - sm_pAlloc = NULL; - } -} - -HRESULT -FORWARDING_HANDLER::GetHeaders( - _In_ const PROTOCOL_CONFIG * pProtocol, - _In_ BOOL fForwardWindowsAuthToken, - _In_ SERVER_PROCESS* pServerProcess, - _Out_ PCWSTR * ppszHeaders, - _Inout_ DWORD * pcchHeaders -) -{ - HRESULT hr = S_OK; - PCSTR pszCurrentHeader; - PCSTR ppHeadersToBeRemoved; - PCSTR pszFinalHeader; - USHORT cchCurrentHeader; - DWORD cchFinalHeader; - BOOL fSecure = FALSE; // dummy. Used in SplitUrl. Value will not be used - // as ANCM always use http protocol to communicate with backend - STRU struDestination; - STRU struUrl; - STACK_STRA(strTemp, 64); - HTTP_REQUEST_HEADERS *pHeaders; - IHttpRequest *pRequest = m_pW3Context->GetRequest(); - MULTISZA mszMsAspNetCoreHeaders; - - // - // We historically set the host section in request url to the new host header - // this is wrong but Kestrel has dependency on it. - // should change it in the future - // - if (!pProtocol->QueryPreserveHostHeader()) - { - if (FAILED(hr = UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, - &fSecure, - &struDestination, - &struUrl)) || - FAILED(hr = strTemp.CopyW(struDestination.QueryStr())) || - FAILED(hr = pRequest->SetHeader(HttpHeaderHost, - strTemp.QueryStr(), - static_cast(strTemp.QueryCCH()), - TRUE))) // fReplace - { - return hr; - } - } - // - // Strip all headers starting with MS-ASPNETCORE. - // These headers are generated by the asp.net core module and - // passed to the process it creates. - // - - pHeaders = &m_pW3Context->GetRequest()->GetRawHttpRequest()->Headers; - for (DWORD i = 0; iUnknownHeaderCount; i++) - { - if (_strnicmp(pHeaders->pUnknownHeaders[i].pName, "MS-ASPNETCORE", 13) == 0) - { - mszMsAspNetCoreHeaders.Append(pHeaders->pUnknownHeaders[i].pName, (DWORD)pHeaders->pUnknownHeaders[i].NameLength); - } - } - - ppHeadersToBeRemoved = mszMsAspNetCoreHeaders.First(); - - // - // iterate the list of headers to be removed and delete them from the request. - // - - while (ppHeadersToBeRemoved != NULL) - { - m_pW3Context->GetRequest()->DeleteHeader(ppHeadersToBeRemoved); - ppHeadersToBeRemoved = mszMsAspNetCoreHeaders.Next(ppHeadersToBeRemoved); - } - - if (pServerProcess->QueryGuid() != NULL) - { - hr = m_pW3Context->GetRequest()->SetHeader("MS-ASPNETCORE-TOKEN", - pServerProcess->QueryGuid(), - (USHORT)strlen(pServerProcess->QueryGuid()), - TRUE); - if (FAILED(hr)) - { - return hr; - } - } - - if (fForwardWindowsAuthToken && - (_wcsicmp(m_pW3Context->GetUser()->GetAuthenticationType(), L"negotiate") == 0 || - _wcsicmp(m_pW3Context->GetUser()->GetAuthenticationType(), L"ntlm") == 0)) - { - if (m_pW3Context->GetUser()->GetPrimaryToken() != NULL && - m_pW3Context->GetUser()->GetPrimaryToken() != INVALID_HANDLE_VALUE) - { - HANDLE hTargetTokenHandle = NULL; - hr = pServerProcess->SetWindowsAuthToken(m_pW3Context->GetUser()->GetPrimaryToken(), - &hTargetTokenHandle); - if (FAILED(hr)) - { - return hr; - } - - // - // set request header with target token value - // - CHAR pszHandleStr[16] = { 0 }; - if (_ui64toa_s((UINT64)hTargetTokenHandle, pszHandleStr, 16, 16) != 0) - { - hr = HRESULT_FROM_WIN32(ERROR_INVALID_DATA); - return hr; - } - - hr = m_pW3Context->GetRequest()->SetHeader("MS-ASPNETCORE-WINAUTHTOKEN", - pszHandleStr, - (USHORT)strlen(pszHandleStr), - TRUE); - if (FAILED(hr)) - { - return hr; - } - } - } - - if (!pProtocol->QueryXForwardedForName()->IsEmpty()) - { - strTemp.Reset(); - - pszCurrentHeader = pRequest->GetHeader(pProtocol->QueryXForwardedForName()->QueryStr(), &cchCurrentHeader); - if (pszCurrentHeader != NULL) - { - if (FAILED(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || - FAILED(hr = strTemp.Append(", ", 2))) - { - return hr; - } - } - - if (FAILED(hr = m_pW3Context->GetServerVariable("REMOTE_ADDR", - &pszFinalHeader, - &cchFinalHeader))) - { - return hr; - } - - if (pRequest->GetRawHttpRequest()->Address.pRemoteAddress->sa_family == AF_INET6) - { - if (FAILED(hr = strTemp.Append("[", 1)) || - FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader)) || - FAILED(hr = strTemp.Append("]", 1))) - { - return hr; - } - } - else - { - if (FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) - { - return hr; - } - } - - if (pProtocol->QueryIncludePortInXForwardedFor()) - { - if (FAILED(hr = m_pW3Context->GetServerVariable("REMOTE_PORT", - &pszFinalHeader, - &cchFinalHeader))) - { - return hr; - } - - if (FAILED(hr = strTemp.Append(":", 1)) || - FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) - { - return hr; - } - } - - if (FAILED(hr = pRequest->SetHeader(pProtocol->QueryXForwardedForName()->QueryStr(), - strTemp.QueryStr(), - static_cast(strTemp.QueryCCH()), - TRUE))) // fReplace - { - return hr; - } - } - - if (!pProtocol->QuerySslHeaderName()->IsEmpty()) - { - const HTTP_SSL_INFO *pSslInfo = pRequest->GetRawHttpRequest()->pSslInfo; - LPSTR pszScheme = "http"; - if (pSslInfo != NULL) - { - pszScheme = "https"; - } - - strTemp.Reset(); - - pszCurrentHeader = pRequest->GetHeader(pProtocol->QuerySslHeaderName()->QueryStr(), &cchCurrentHeader); - if (pszCurrentHeader != NULL) - { - if (FAILED(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || - FAILED(hr = strTemp.Append(", ", 2))) - { - return hr; - } - } - - if (FAILED(hr = strTemp.Append(pszScheme))) - { - return hr; - } - - if (FAILED(pRequest->SetHeader(pProtocol->QuerySslHeaderName()->QueryStr(), - strTemp.QueryStr(), - (USHORT)strTemp.QueryCCH(), - TRUE))) - { - return hr; - } - } - - if (!pProtocol->QueryClientCertName()->IsEmpty()) - { - if (pRequest->GetRawHttpRequest()->pSslInfo == NULL || - pRequest->GetRawHttpRequest()->pSslInfo->pClientCertInfo == NULL) - { - pRequest->DeleteHeader(pProtocol->QueryClientCertName()->QueryStr()); - } - else - { - // Resize the buffer large enough to hold the encoded certificate info - if (FAILED(hr = strTemp.Resize( - 1 + (pRequest->GetRawHttpRequest()->pSslInfo->pClientCertInfo->CertEncodedSize + 2) / 3 * 4))) - { - return hr; - } - - Base64Encode( - pRequest->GetRawHttpRequest()->pSslInfo->pClientCertInfo->pCertEncoded, - pRequest->GetRawHttpRequest()->pSslInfo->pClientCertInfo->CertEncodedSize, - strTemp.QueryStr(), - strTemp.QuerySize(), - NULL); - strTemp.SyncWithBuffer(); - - if (FAILED(hr = pRequest->SetHeader( - pProtocol->QueryClientCertName()->QueryStr(), - strTemp.QueryStr(), - static_cast(strTemp.QueryCCH()), - TRUE))) // fReplace - { - return hr; - } - } - } - - // - // Remove the connection header - // - if (!m_fWebSocketEnabled) - { - pRequest->DeleteHeader(HttpHeaderConnection); - } - - // - // Get all the headers to send to the client - // - hr = m_pW3Context->GetServerVariable("ALL_RAW", - ppszHeaders, - pcchHeaders); - if (FAILED(hr)) - { - return hr; - } - - return S_OK; -} - -HRESULT -FORWARDING_HANDLER::CreateWinHttpRequest( - _In_ const IHttpRequest * pRequest, - _In_ const PROTOCOL_CONFIG * pProtocol, - _In_ HINTERNET hConnect, - _Inout_ STRU * pstrUrl, - _In_ SERVER_PROCESS* pServerProcess -) -{ - HRESULT hr = S_OK; - PCWSTR pszVersion = NULL; - PCSTR pszVerb; - STACK_STRU(strVerb, 32); - - // - // Create the request handle for this request (leave some fields blank, - // we will fill them when sending the request) - // - pszVerb = pRequest->GetHttpMethod(); - if (FAILED(hr = strVerb.CopyA(pszVerb))) - { - goto Finished; - } - - //pszVersion = pProtocol->QueryVersion(); - if (pszVersion == NULL) - { - DWORD cchUnused; - hr = m_pW3Context->GetServerVariable( - "HTTP_VERSION", - &pszVersion, - &cchUnused); - if (FAILED(hr)) - { - goto Finished; - } - } - - m_hRequest = WinHttpOpenRequest(hConnect, - strVerb.QueryStr(), - pstrUrl->QueryStr(), - pszVersion, - WINHTTP_NO_REFERER, - WINHTTP_DEFAULT_ACCEPT_TYPES, - WINHTTP_FLAG_ESCAPE_DISABLE_QUERY - | g_OptionalWinHttpFlags); - if (m_hRequest == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (!WinHttpSetTimeouts(m_hRequest, - pProtocol->QueryTimeout(), - pProtocol->QueryTimeout(), - pProtocol->QueryTimeout(), - pProtocol->QueryTimeout())) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - DWORD dwResponseBufferLimit = pProtocol->QueryResponseBufferLimit(); - if (!WinHttpSetOption(m_hRequest, - WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE, - &dwResponseBufferLimit, - sizeof(dwResponseBufferLimit))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - DWORD dwMaxHeaderSize = pProtocol->QueryMaxResponseHeaderSize(); - if (!WinHttpSetOption(m_hRequest, - WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE, - &dwMaxHeaderSize, - sizeof(dwMaxHeaderSize))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - DWORD dwOption = WINHTTP_DISABLE_COOKIES; - - dwOption |= WINHTTP_DISABLE_AUTHENTICATION; - - if (!pProtocol->QueryDoKeepAlive()) - { - dwOption |= WINHTTP_DISABLE_KEEP_ALIVE; - } - if (!WinHttpSetOption(m_hRequest, - WINHTTP_OPTION_DISABLE_FEATURE, - &dwOption, - sizeof(dwOption))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (WinHttpSetStatusCallback(m_hRequest, - FORWARDING_HANDLER::OnWinHttpCompletion, - (WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | - WINHTTP_CALLBACK_FLAG_HANDLES | - WINHTTP_CALLBACK_STATUS_SENDING_REQUEST), - NULL) == WINHTTP_INVALID_STATUS_CALLBACK) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hr = GetHeaders(pProtocol, - m_pApplication->QueryConfig()->QueryForwardWindowsAuthToken(), - pServerProcess, - &m_pszHeaders, - &m_cchHeaders); - if (FAILED(hr)) - { - goto Finished; - } - -Finished: - - return hr; -} - -VOID -FORWARDING_HANDLER::OnWinHttpCompletion( - HINTERNET hRequest, - DWORD_PTR dwContext, - DWORD dwInternetStatus, - LPVOID lpvStatusInformation, - DWORD dwStatusInformationLength -) -{ - FORWARDING_HANDLER * pThis = static_cast(reinterpret_cast(dwContext)); - if (pThis == NULL) - { - //error happened, nothing can be done here - return; - } - DBG_ASSERT(pThis->m_Signature == FORWARDING_HANDLER_SIGNATURE); - pThis->OnWinHttpCompletionInternal(hRequest, - dwInternetStatus, - lpvStatusInformation, - dwStatusInformationLength); -} - -VOID -FORWARDING_HANDLER::OnWinHttpCompletionInternal( - _In_ HINTERNET hRequest, - _In_ DWORD dwInternetStatus, - _In_ LPVOID lpvStatusInformation, - _In_ DWORD dwStatusInformationLength -) -/*++ - -Routine Description: - -Completion call associated with a WinHTTP operation - -Arguments: - -hRequest - The winhttp request handle associated with this completion -dwInternetStatus - enum specifying what the completion is for -lpvStatusInformation - completion specific information -dwStatusInformationLength - length of the above information - -Return Value: - -None - ---*/ -{ - HRESULT hr = S_OK; - BOOL fExclusiveLocked = FALSE; - BOOL fSharedLocked = FALSE; - BOOL fClientError = FALSE; - BOOL fAnotherCompletionExpected = FALSE; - BOOL fDoPostCompletion = FALSE; - BOOL fHandleClosing = (dwInternetStatus == WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING); - DWORD dwHandlers = 1; // defaullt for http handler - - - DBG_ASSERT(m_pW3Context != NULL); - __analysis_assume(m_pW3Context != NULL); - IHttpResponse * pResponse = m_pW3Context->GetResponse(); - - // Reference the request handler to prevent it from being released prematurely - ReferenceRequestHandler(); - - UNREFERENCED_PARAMETER(dwStatusInformationLength); - - if (sm_pTraceLog != NULL) - { - WriteRefTraceLogEx(sm_pTraceLog, - m_cRefs, - this, - "FORWARDING_HANDLER::OnWinHttpCompletionInternal Enter", - reinterpret_cast(static_cast(dwInternetStatus)), - NULL); - } - - //FREB log - if (ANCMEvents::ANCM_WINHTTP_CALLBACK::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_WINHTTP_CALLBACK::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL, - dwInternetStatus); - } - -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::OnWinHttpCompletionInternal %x -- %d --%p\n", dwInternetStatus, GetCurrentThreadId(), m_pW3Context); -#endif - // - // Exclusive lock on the winhttp handle to protect from a client disconnect/ - // server stop closing the handle while we are using it. - // - // WinHttp can call async completion on the same thread/stack, so - // we have to account for that and not try to take the lock again, - // otherwise, we could end up in a deadlock. - // - - if (TlsGetValue(g_dwTlsIndex) != this) - { - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); - if (m_RequestStatus != FORWARDER_RECEIVED_WEBSOCKET_RESPONSE) - { - // Webscoket has already been guarded by critical section - // Only require exclisive lock for non-websocket scenario which has duplex channel - // Otherwise, there will be a deadlock - AcquireLockExclusive(); - fExclusiveLocked = TRUE; - } - else - { - AcquireSRWLockShared(&m_RequestLock); - TlsSetValue(g_dwTlsIndex, this); - fSharedLocked = TRUE; - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); - } - } - - if (fHandleClosing) - { - dwHandlers = InterlockedDecrement(&m_dwHandlers); - } - - if (m_fFinishRequest) - { - // Request was done by another thread, skip - goto Finished; - } - - - if (m_fClientDisconnected && (m_RequestStatus != FORWARDER_DONE)) - { - hr = ERROR_CONNECTION_ABORTED; - goto Failure; - } - - // - // In case of websocket, http request handle (m_hRequest) will be closed immediately after upgrading success - // This close will trigger a callback with WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING - // As m_RequestStatus is FORWARDER_RECEIVED_WEBSOCKET_RESPONSE, this callback will be skipped. - // When WebSocket handle (m_pWebsocket) gets closed, another winhttp handle close callback will be triggered - // This callback will be captured and then notify IIS pipeline to continue - // This ensures no request leaks - // - if (m_RequestStatus == FORWARDER_RECEIVED_WEBSOCKET_RESPONSE) - { - fAnotherCompletionExpected = TRUE; - if (m_pWebSocket == NULL) - { - goto Finished; - } - - switch (dwInternetStatus) - { - case WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE: - m_pWebSocket->OnWinHttpShutdownComplete(); - break; - - case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE: - m_pWebSocket->OnWinHttpSendComplete( - (WINHTTP_WEB_SOCKET_STATUS*)lpvStatusInformation - ); - break; - - case WINHTTP_CALLBACK_STATUS_READ_COMPLETE: - m_pWebSocket->OnWinHttpReceiveComplete( - (WINHTTP_WEB_SOCKET_STATUS*)lpvStatusInformation - ); - break; - - case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: - m_pWebSocket->OnWinHttpIoError( - (WINHTTP_WEB_SOCKET_ASYNC_RESULT*)lpvStatusInformation - ); - break; - } - goto Finished; - } - - switch (dwInternetStatus) - { - case WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE: - case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE: - hr = OnWinHttpCompletionSendRequestOrWriteComplete(hRequest, - dwInternetStatus, - &fClientError, - &fAnotherCompletionExpected); - break; - - case WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE: - hr = OnWinHttpCompletionStatusHeadersAvailable(hRequest, - &fAnotherCompletionExpected); - break; - - case WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE: - hr = OnWinHttpCompletionStatusDataAvailable(hRequest, - *reinterpret_cast(lpvStatusInformation), // dwBytes - &fAnotherCompletionExpected); - break; - - case WINHTTP_CALLBACK_STATUS_READ_COMPLETE: - hr = OnWinHttpCompletionStatusReadComplete(pResponse, - dwStatusInformationLength, - &fAnotherCompletionExpected); - break; - - case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: - hr = HRESULT_FROM_WIN32(static_cast(lpvStatusInformation)->dwError); - break; - - case WINHTTP_CALLBACK_STATUS_SENDING_REQUEST: - // - // This is a notification, not a completion. This notifiation happens - // during the Send Request operation. - // - fAnotherCompletionExpected = TRUE; - break; - - case WINHTTP_CALLBACK_STATUS_REQUEST_SENT: - // - // Need to ignore this event. We get it as a side-effect of registering - // for WINHTTP_CALLBACK_STATUS_SENDING_REQUEST (which we actually need). - // - hr = S_OK; - fAnotherCompletionExpected = TRUE; - break; - - case WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING: - if (ANCMEvents::ANCM_REQUEST_FORWARD_END::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_REQUEST_FORWARD_END::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL); - } - if (m_RequestStatus != FORWARDER_DONE) - { - hr = ERROR_CONNECTION_ABORTED; - fClientError = m_fClientDisconnected; - } - m_hRequest = NULL; - fAnotherCompletionExpected = FALSE; - break; - - case WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED: - hr = ERROR_CONNECTION_ABORTED; - break; - - default: - // - // E_UNEXPECTED is rarely used, if seen means that this condition may been occurred. - // - DBG_ASSERT(FALSE); - hr = E_UNEXPECTED; - if (sm_pTraceLog != NULL) - { - WriteRefTraceLogEx(sm_pTraceLog, - m_cRefs, - this, - "FORWARDING_HANDLER::OnWinHttpCompletionInternal Unexpected WinHTTP Status", - reinterpret_cast(static_cast(dwInternetStatus)), - NULL); - } - break; - } - - // - // Handle failure code for switch statement above. - // - if (FAILED(hr)) - { - goto Failure; - } - - // - // WinHTTP completion handled successfully. - // - goto Finished; - -Failure: - - if (!m_fHasError) - { - m_RequestStatus = FORWARDER_DONE; - m_fHasError = TRUE; - - pResponse->DisableKernelCache(); - pResponse->GetRawHttpResponse()->EntityChunkCount = 0; - - if (hr == HRESULT_FROM_WIN32(ERROR_WINHTTP_INVALID_SERVER_RESPONSE)) - { - m_fResetConnection = TRUE; - } - - if (fClientError || m_fClientDisconnected) - { - if (!m_fResponseHeadersReceivedAndSet) - { - pResponse->SetStatus(400, "Bad Request", 0, HRESULT_FROM_WIN32(WSAECONNRESET)); - } - else - { - // - // Response headers from origin server were - // already received and set for the current response. - // Honor the response status. - // - } - } - else - { - STACK_STRU(strDescription, 128); - - pResponse->SetStatus(502, "Bad Gateway", 3, hr); - - if (!(hr > HRESULT_FROM_WIN32(WINHTTP_ERROR_BASE) && - hr <= HRESULT_FROM_WIN32(WINHTTP_ERROR_LAST)) || -#pragma prefast (suppress : __WARNING_FUNCTION_NEEDS_REVIEW, "Function and parameters reviewed.") - FormatMessage( - FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_HMODULE, - g_hWinHttpModule, - HRESULT_CODE(hr), - 0, - strDescription.QueryStr(), - strDescription.QuerySizeCCH(), - NULL) == 0) - { - LoadString(g_hAspNetCoreModule, - IDS_SERVER_ERROR, - strDescription.QueryStr(), - strDescription.QuerySizeCCH()); - } - - strDescription.SyncWithBuffer(); - if (strDescription.QueryCCH() != 0) - { - pResponse->SetErrorDescription( - strDescription.QueryStr(), - strDescription.QueryCCH(), - FALSE); - } - } - } - - // FREB log - if (ANCMEvents::ANCM_REQUEST_FORWARD_FAIL::IsEnabled(m_pW3Context->GetTraceContext())) - { - ANCMEvents::ANCM_REQUEST_FORWARD_FAIL::RaiseEvent( - m_pW3Context->GetTraceContext(), - NULL, - hr); - } - -Finished: - // - // Since we use TLS to guard WinHttp operation, call PostCompletion instead of - // IndicateCompletion to allow cleaning up the TLS before thread reuse. - // Never post after the request has been finished for whatever reason - // - // Only postCompletion after all WinHttp handles (http and websocket) got closed, - // i.e., received WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING callback for both handles - // So that no further WinHttp callback will be called - // Never post completion again after that - // Otherwise, there will be a AV as the request already passed IIS pipeline - // - if (fHandleClosing && dwHandlers == 0) - { - // - // Happy path - // - // Marked the request is finished, no more PostCompletion is allowed - RemoveRequest(); - m_fFinishRequest = TRUE; - fDoPostCompletion = TRUE; - if (m_pWebSocket != NULL) - { - m_pWebSocket->Terminate(); - m_pWebSocket = NULL; - } - } - else if (m_RequestStatus == FORWARDER_DONE) - { - // - // Error path - // - RemoveRequest(); - if (m_hRequest != NULL && !m_fHttpHandleInClose) - { - m_fHttpHandleInClose = TRUE; - WinHttpCloseHandle(m_hRequest); - m_hRequest = NULL; - } - - if (m_pWebSocket != NULL && !m_fWebSocketHandleInClose) - { - m_fWebSocketHandleInClose = TRUE; - m_pWebSocket->TerminateRequest(); - } - - if (fHandleClosing) - { - fDoPostCompletion = dwHandlers == 0; - m_fFinishRequest = fDoPostCompletion; - } - } - else if (!fAnotherCompletionExpected) - { - // - // Regular async IO operation - // - fDoPostCompletion = !m_fFinishRequest; - } - - // - // No code should access IIS m_pW3Context after posting the completion. - // - if (fDoPostCompletion) - { - m_pW3Context->PostCompletion(0); - } - - if (fExclusiveLocked) - { - ReleaseLockExclusive(); - } - else if (fSharedLocked) - { - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); - TlsSetValue(g_dwTlsIndex, NULL); - ReleaseSRWLockShared(&m_RequestLock); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); - } - - DereferenceRequestHandler(); - -} - -HRESULT -FORWARDING_HANDLER::OnWinHttpCompletionSendRequestOrWriteComplete( - HINTERNET hRequest, - DWORD, - __out BOOL * pfClientError, - __out BOOL * pfAnotherCompletionExpected -) -{ - HRESULT hr = S_OK; - IHttpRequest * pRequest = m_pW3Context->GetRequest(); - - // - // completion for sending the initial request or request entity to - // winhttp, get more request entity if available, else start receiving - // the response - // - if (m_BytesToReceive > 0) - { - if (m_pEntityBuffer == NULL) - { - m_pEntityBuffer = GetNewResponseBuffer( - ENTITY_BUFFER_SIZE); - if (m_pEntityBuffer == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - } - - if (sm_pTraceLog != NULL) - { - WriteRefTraceLogEx(sm_pTraceLog, - m_cRefs, - this, - "Calling ReadEntityBody", - NULL, - NULL); - } - hr = pRequest->ReadEntityBody( - m_pEntityBuffer + 6, - min(m_BytesToReceive, BUFFER_SIZE), - TRUE, // fAsync - NULL, // pcbBytesReceived - NULL); // pfCompletionPending - if (hr == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)) - { - DBG_ASSERT(m_BytesToReceive == 0 || - m_BytesToReceive == INFINITE); - - // - // ERROR_HANDLE_EOF is not an error. - // - hr = S_OK; - - if (m_BytesToReceive == INFINITE) - { - m_BytesToReceive = 0; - m_cchLastSend = 5; - - // - // WinHttpWriteData can operate asynchronously. - // - // Take reference so that object does not go away as a result of - // async completion. - // - //ReferenceForwardingHandler(); - if (!WinHttpWriteData(m_hRequest, - "0\r\n\r\n", - 5, - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - //DereferenceForwardingHandler(); - goto Finished; - } - *pfAnotherCompletionExpected = TRUE; - - goto Finished; - } - } - else if (FAILED(hr)) - { - *pfClientError = TRUE; - goto Finished; - } - else - { - // - // ReadEntityBody will post a completion to IIS. - // - *pfAnotherCompletionExpected = TRUE; - - goto Finished; - } - } - - m_RequestStatus = FORWARDER_RECEIVING_RESPONSE; - - if (!WinHttpReceiveResponse(hRequest, NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - *pfAnotherCompletionExpected = TRUE; - -Finished: - - return hr; -} - -HRESULT -FORWARDING_HANDLER::OnWinHttpCompletionStatusHeadersAvailable( - HINTERNET hRequest, - __out BOOL * pfAnotherCompletionExpected -) -{ - HRESULT hr = S_OK; - STACK_BUFFER(bufHeaderBuffer, 2048); - STACK_STRA(strHeaders, 2048); - DWORD dwHeaderSize = bufHeaderBuffer.QuerySize(); - - UNREFERENCED_PARAMETER(pfAnotherCompletionExpected); - - // - // Headers are available, read the status line and headers and pass - // them on to the client - // - // WinHttpQueryHeaders operates synchronously, - // no need for taking reference. - // - dwHeaderSize = bufHeaderBuffer.QuerySize(); - if (!WinHttpQueryHeaders(hRequest, - WINHTTP_QUERY_RAW_HEADERS_CRLF, - WINHTTP_HEADER_NAME_BY_INDEX, - bufHeaderBuffer.QueryPtr(), - &dwHeaderSize, - WINHTTP_NO_HEADER_INDEX)) - { - if (!bufHeaderBuffer.Resize(dwHeaderSize)) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - // - // WinHttpQueryHeaders operates synchronously, - // no need for taking reference. - // - if (!WinHttpQueryHeaders(hRequest, - WINHTTP_QUERY_RAW_HEADERS_CRLF, - WINHTTP_HEADER_NAME_BY_INDEX, - bufHeaderBuffer.QueryPtr(), - &dwHeaderSize, - WINHTTP_NO_HEADER_INDEX)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - - if (FAILED(hr = strHeaders.CopyW( - reinterpret_cast(bufHeaderBuffer.QueryPtr())))) - { - goto Finished; - } - - // Issue: The reason we add trailing \r\n is to eliminate issues that have been observed - // in some configurations where status and headers would not have final \r\n nor \r\n\r\n - // (last header was null terminated).That caused crash within header parsing code that expected valid - // format. Parsing code was fized to return ERROR_INVALID_PARAMETER, but we still should make - // Example of a status+header string that was causing problems (note the missing \r\n at the end) - // HTTP/1.1 302 Moved Permanently\r\n....\r\nLocation:http://site\0 - // - - if (!strHeaders.IsEmpty() && strHeaders.QueryStr()[strHeaders.QueryCCH() - 1] != '\n') - { - hr = strHeaders.Append("\r\n"); - if (FAILED(hr)) - { - goto Finished; - } - } - - if (FAILED(hr = SetStatusAndHeaders( - strHeaders.QueryStr(), - strHeaders.QueryCCH()))) - { - goto Finished; - } - - FreeResponseBuffers(); - - // - // If the request was websocket, and response was 101, - // trigger a flush, so that IIS's websocket module - // can get a chance to initialize and complete the handshake. - // - - if (m_fWebSocketEnabled) - { - m_RequestStatus = FORWARDER_RECEIVED_WEBSOCKET_RESPONSE; - - hr = m_pW3Context->GetResponse()->Flush( - TRUE, - TRUE, - NULL, - NULL); - - if (FAILED(hr)) - { - *pfAnotherCompletionExpected = FALSE; - } - else - { - *pfAnotherCompletionExpected = TRUE; - } - } - -Finished: - - return hr; -} - -HRESULT -FORWARDING_HANDLER::OnWinHttpCompletionStatusDataAvailable( - HINTERNET hRequest, - DWORD dwBytes, - _Out_ BOOL * pfAnotherCompletionExpected -) -{ - HRESULT hr = S_OK; - - // - // Response data is available from winhttp, read it - // - if (dwBytes == 0) - { - if (m_cContentLength != 0) - { - hr = HRESULT_FROM_WIN32(ERROR_WINHTTP_INVALID_SERVER_RESPONSE); - goto Finished; - } - - m_RequestStatus = FORWARDER_DONE; - - goto Finished; - } - - m_BytesToSend = dwBytes; - if (m_cContentLength != 0) - { - m_cContentLength -= dwBytes; - } - - m_pEntityBuffer = GetNewResponseBuffer( - min(m_BytesToSend, BUFFER_SIZE)); - if (m_pEntityBuffer == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - // - // WinHttpReadData can operate asynchronously. - // - // Take reference so that object does not go away as a result of - // async completion. - // - //ReferenceForwardingHandler(); - if (!WinHttpReadData(hRequest, - m_pEntityBuffer, - min(m_BytesToSend, BUFFER_SIZE), - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - //DereferenceForwardingHandler(); - goto Finished; - } - *pfAnotherCompletionExpected = TRUE; - -Finished: - - return hr; -} - -HRESULT -FORWARDING_HANDLER::OnWinHttpCompletionStatusReadComplete( - __in IHttpResponse * pResponse, - DWORD dwStatusInformationLength, - __out BOOL * pfAnotherCompletionExpected -) -{ - HRESULT hr = S_OK; - - // - // Response data has been read from winhttp, send it to the client - // - m_BytesToSend -= dwStatusInformationLength; - - if (m_cMinBufferLimit >= BUFFER_SIZE / 2) - { - if (m_cContentLength != 0) - { - m_cContentLength -= dwStatusInformationLength; - } - - // - // If we were not using WinHttpQueryDataAvailable and winhttp - // did not fill our buffer, we must have reached the end of the - // response - // - if (dwStatusInformationLength == 0 || - m_BytesToSend != 0) - { - if (m_cContentLength != 0) - { - hr = HRESULT_FROM_WIN32(ERROR_WINHTTP_INVALID_SERVER_RESPONSE); - goto Finished; - } - - m_RequestStatus = FORWARDER_DONE; - } - } - else - { - DBG_ASSERT(dwStatusInformationLength != 0); - } - - if (dwStatusInformationLength == 0) - { - goto Finished; - } - else - { - m_cBytesBuffered += dwStatusInformationLength; - - HTTP_DATA_CHUNK Chunk; - Chunk.DataChunkType = HttpDataChunkFromMemory; - Chunk.FromMemory.pBuffer = m_pEntityBuffer; - Chunk.FromMemory.BufferLength = dwStatusInformationLength; - if (FAILED(hr = pResponse->WriteEntityChunkByReference(&Chunk))) - { - goto Finished; - } - } - - if (m_cBytesBuffered >= m_cMinBufferLimit) - { - // - // Always post a completion to resume the WinHTTP data pump. - // - hr = pResponse->Flush(TRUE, // fAsync - TRUE, // fMoreData - NULL); // pcbSent - if (FAILED(hr)) - { - goto Finished; - } - *pfAnotherCompletionExpected = TRUE; - } - else - { - *pfAnotherCompletionExpected = FALSE; - } - -Finished: - - return hr; -} - -HRESULT -FORWARDING_HANDLER::OnSendingRequest( - DWORD cbCompletion, - HRESULT hrCompletionStatus, - __out BOOL * pfClientError -) -{ - HRESULT hr = S_OK; - // - // This is a completion for a read from http.sys, abort in case - // of failure, if we read anything write it out over WinHTTP, - // but we have already reached EOF, now read the response - // - if (hrCompletionStatus == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF)) - { - DBG_ASSERT(m_BytesToReceive == 0 || m_BytesToReceive == INFINITE); - if (m_BytesToReceive == INFINITE) - { - m_BytesToReceive = 0; - m_cchLastSend = 5; // "0\r\n\r\n" - - if (!WinHttpWriteData(m_hRequest, - "0\r\n\r\n", - 5, - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - } - else - { - m_RequestStatus = FORWARDER_RECEIVING_RESPONSE; - - if (!WinHttpReceiveResponse(m_hRequest, NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - } - } - else if (SUCCEEDED(hrCompletionStatus)) - { - DWORD cbOffset; - - if (m_BytesToReceive != INFINITE) - { - m_BytesToReceive -= cbCompletion; - cbOffset = 6; - } - else - { - // - // For chunk-encoded requests, need to re-chunk the entity body - // Add the CRLF just before and after the chunk data - // - m_pEntityBuffer[4] = '\r'; - m_pEntityBuffer[5] = '\n'; - - m_pEntityBuffer[cbCompletion + 6] = '\r'; - m_pEntityBuffer[cbCompletion + 7] = '\n'; - - if (cbCompletion < 0x10) - { - cbOffset = 3; - m_pEntityBuffer[3] = HEX_TO_ASCII(cbCompletion); - cbCompletion += 5; - } - else if (cbCompletion < 0x100) - { - cbOffset = 2; - m_pEntityBuffer[2] = HEX_TO_ASCII(cbCompletion >> 4); - m_pEntityBuffer[3] = HEX_TO_ASCII(cbCompletion & 0xf); - cbCompletion += 6; - } - else if (cbCompletion < 0x1000) - { - cbOffset = 1; - m_pEntityBuffer[1] = HEX_TO_ASCII(cbCompletion >> 8); - m_pEntityBuffer[2] = HEX_TO_ASCII((cbCompletion >> 4) & 0xf); - m_pEntityBuffer[3] = HEX_TO_ASCII(cbCompletion & 0xf); - cbCompletion += 7; - } - else - { - DBG_ASSERT(cbCompletion < 0x10000); - - cbOffset = 0; - m_pEntityBuffer[0] = HEX_TO_ASCII(cbCompletion >> 12); - m_pEntityBuffer[1] = HEX_TO_ASCII((cbCompletion >> 8) & 0xf); - m_pEntityBuffer[2] = HEX_TO_ASCII((cbCompletion >> 4) & 0xf); - m_pEntityBuffer[3] = HEX_TO_ASCII(cbCompletion & 0xf); - cbCompletion += 8; - } - } - m_cchLastSend = cbCompletion; - - if (!WinHttpWriteData(m_hRequest, - m_pEntityBuffer + cbOffset, - cbCompletion, - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - } - else - { - hr = hrCompletionStatus; - *pfClientError = TRUE; - goto Failure; - } - -Failure: - - return hr; -} - -HRESULT -FORWARDING_HANDLER::OnReceivingResponse( -) -{ - HRESULT hr = S_OK; - - if (m_cBytesBuffered >= m_cMinBufferLimit) - { - FreeResponseBuffers(); - } - - if (m_BytesToSend == 0) - { - // - // If response buffering is enabled, try to read large chunks - // at a time - also treat very small buffering limit as no - // buffering - // - m_BytesToSend = min(m_cMinBufferLimit, BUFFER_SIZE); - if (m_BytesToSend < BUFFER_SIZE / 2) - { - // - // Disable buffering. - // - m_BytesToSend = 0; - } - } - - if (m_BytesToSend == 0) - { - // - // No buffering enabled. - // - if (!WinHttpQueryDataAvailable(m_hRequest, NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - } - else - { - // - // Buffering enabled. - // - if (m_pEntityBuffer == NULL) - { - m_pEntityBuffer = GetNewResponseBuffer(min(m_BytesToSend, BUFFER_SIZE)); - if (m_pEntityBuffer == NULL) - { - hr = E_OUTOFMEMORY; - goto Failure; - } - } - - if (!WinHttpReadData(m_hRequest, - m_pEntityBuffer, - min(m_BytesToSend, BUFFER_SIZE), - NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - } - -Failure: - return hr; -} - -BYTE * -FORWARDING_HANDLER::GetNewResponseBuffer( - DWORD dwBufferSize -) -{ - DWORD dwNeededSize = (m_cEntityBuffers + 1) * sizeof(BYTE *); - if (dwNeededSize > m_buffEntityBuffers.QuerySize() && - !m_buffEntityBuffers.Resize( - max(dwNeededSize, m_buffEntityBuffers.QuerySize() * 2))) - { - return NULL; - } - - BYTE *pBuffer = (BYTE *)HeapAlloc(GetProcessHeap(), - 0, // dwFlags - dwBufferSize); - if (pBuffer == NULL) - { - return NULL; - } - - m_buffEntityBuffers.QueryPtr()[m_cEntityBuffers] = pBuffer; - m_cEntityBuffers++; - - return pBuffer; -} - -VOID -FORWARDING_HANDLER::FreeResponseBuffers() -{ - BYTE **pBuffers = m_buffEntityBuffers.QueryPtr(); - for (DWORD i = 0; iGetResponse(); - IHttpRequest * pRequest = m_pW3Context->GetRequest(); - STACK_STRA(strHeaderName, 128); - STACK_STRA(strHeaderValue, 2048); - DWORD index = 0; - PSTR pchNewline; - PCSTR pchEndofHeaderValue; - BOOL fServerHeaderPresent = FALSE; - - _ASSERT(pszHeaders != NULL); - - // - // The first line is the status line - // - PSTR pchStatus = const_cast(strchr(pszHeaders, ' ')); - if (pchStatus == NULL) - { - return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - } - while (*pchStatus == ' ') - { - pchStatus++; - } - USHORT uStatus = static_cast(atoi(pchStatus)); - - if (m_fWebSocketEnabled && uStatus != 101) - { - // - // Expected 101 response. - // - - m_fWebSocketEnabled = FALSE; - } - - pchStatus = strchr(pchStatus, ' '); - if (pchStatus == NULL) - { - return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - } - while (*pchStatus == ' ') - { - pchStatus++; - } - if (*pchStatus == '\r' || *pchStatus == '\n') - { - pchStatus--; - } - - pchNewline = strchr(pchStatus, '\n'); - if (pchNewline == NULL) - { - return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - } - - if (uStatus != 200) - { - // - // Skip over any spaces before the '\n' - // - for (pchEndofHeaderValue = pchNewline - 1; - (pchEndofHeaderValue > pchStatus) && - ((*pchEndofHeaderValue == ' ') || - (*pchEndofHeaderValue == '\r')); - pchEndofHeaderValue--) - { - } - - // - // Copy the status description - // - if (FAILED(hr = strHeaderValue.Copy( - pchStatus, - (DWORD)(pchEndofHeaderValue - pchStatus) + 1)) || - FAILED(hr = pResponse->SetStatus(uStatus, - strHeaderValue.QueryStr(), - 0, - S_OK, - NULL, - TRUE))) - { - return hr; - } - } - - for (index = static_cast(pchNewline - pszHeaders) + 1; - pszHeaders[index] != '\r' && pszHeaders[index] != '\n' && pszHeaders[index] != '\0'; - index = static_cast(pchNewline - pszHeaders) + 1) - { - // - // Find the ':' in Header : Value\r\n - // - PCSTR pchColon = strchr(pszHeaders + index, ':'); - - // - // Find the '\n' in Header : Value\r\n - // - pchNewline = const_cast(strchr(pszHeaders + index, '\n')); - - if (pchNewline == NULL) - { - return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - } - - // - // Take care of header continuation - // - while (pchNewline[1] == ' ' || - pchNewline[1] == '\t') - { - pchNewline = strchr(pchNewline + 1, '\n'); - } - - DBG_ASSERT( - (pchColon != NULL) && (pchColon < pchNewline)); - if ((pchColon == NULL) || (pchColon >= pchNewline)) - { - return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - } - - // - // Skip over any spaces before the ':' - // - PCSTR pchEndofHeaderName; - for (pchEndofHeaderName = pchColon - 1; - (pchEndofHeaderName >= pszHeaders + index) && - (*pchEndofHeaderName == ' '); - pchEndofHeaderName--) - { - } - - pchEndofHeaderName++; - - // - // Copy the header name - // - if (FAILED(hr = strHeaderName.Copy( - pszHeaders + index, - (DWORD)(pchEndofHeaderName - pszHeaders) - index))) - { - return hr; - } - - // - // Skip over the ':' and any trailing spaces - // - for (index = static_cast(pchColon - pszHeaders) + 1; - pszHeaders[index] == ' '; - index++) - { - } - - // - // Skip over any spaces before the '\n' - // - for (pchEndofHeaderValue = pchNewline - 1; - (pchEndofHeaderValue >= pszHeaders + index) && - ((*pchEndofHeaderValue == ' ') || - (*pchEndofHeaderValue == '\r')); - pchEndofHeaderValue--) - { - } - - pchEndofHeaderValue++; - - // - // Copy the header value - // - if (pchEndofHeaderValue == pszHeaders + index) - { - strHeaderValue.Reset(); - } - else if (FAILED(hr = strHeaderValue.Copy( - pszHeaders + index, - (DWORD)(pchEndofHeaderValue - pszHeaders) - index))) - { - return hr; - } - - // - // Do not pass the transfer-encoding:chunked, Connection, Date or - // Server headers along - // - DWORD headerIndex = sm_pResponseHeaderHash->GetIndex(strHeaderName.QueryStr()); - if (headerIndex == UNKNOWN_INDEX) - { - hr = pResponse->SetHeader(strHeaderName.QueryStr(), - strHeaderValue.QueryStr(), - static_cast(strHeaderValue.QueryCCH()), - FALSE); // fReplace - } - else - { - switch (headerIndex) - { - case HttpHeaderTransferEncoding: - if (!strHeaderValue.Equals("chunked", TRUE)) - { - break; - } - __fallthrough; - case HttpHeaderConnection: - case HttpHeaderDate: - continue; - - case HttpHeaderServer: - fServerHeaderPresent = TRUE; - break; - - case HttpHeaderContentLength: - if (pRequest->GetRawHttpRequest()->Verb != HttpVerbHEAD) - { - m_cContentLength = _atoi64(strHeaderValue.QueryStr()); - } - break; - } - - hr = pResponse->SetHeader(static_cast(headerIndex), - strHeaderValue.QueryStr(), - static_cast(strHeaderValue.QueryCCH()), - TRUE); // fReplace - } - if (FAILED(hr)) - { - return hr; - } - } - - // - // Explicitly remove the Server header if the back-end didn't set one. - // - - if (!fServerHeaderPresent) - { - pResponse->DeleteHeader("Server"); - } - - if (m_fDoReverseRewriteHeaders) - { - hr = DoReverseRewrite(pResponse); - if (FAILED(hr)) - { - return hr; - } - } - - m_fResponseHeadersReceivedAndSet = TRUE; - - return S_OK; -} - -HRESULT -FORWARDING_HANDLER::DoReverseRewrite( - _In_ IHttpResponse *pResponse -) -{ - DBG_ASSERT(pResponse == m_pW3Context->GetResponse()); - BOOL fSecure = (m_pW3Context->GetRequest()->GetRawHttpRequest()->pSslInfo != NULL); - STRA strTemp; - PCSTR pszHeader; - PCSTR pszStartHost; - PCSTR pszEndHost; - HTTP_RESPONSE_HEADERS *pHeaders; - HRESULT hr; - - // - // Content-Location and Location are easy, one known header in - // http[s]://host/url format - // - pszHeader = pResponse->GetHeader(HttpHeaderContentLocation); - if (pszHeader != NULL) - { - if (_strnicmp(pszHeader, "http://", 7) == 0) - { - pszStartHost = pszHeader + 7; - } - else if (_strnicmp(pszHeader, "https://", 8) == 0) - { - pszStartHost = pszHeader + 8; - } - else - { - goto Location; - } - - pszEndHost = strchr(pszStartHost, '/'); - - if (FAILED(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader))) - { - return hr; - } - if (pszEndHost != NULL && - FAILED(hr = strTemp.Append(pszEndHost))) - { - return hr; - } - if (FAILED(hr = pResponse->SetHeader(HttpHeaderContentLocation, - strTemp.QueryStr(), - static_cast(strTemp.QueryCCH()), - TRUE))) - { - return hr; - } - } - -Location: - - pszHeader = pResponse->GetHeader(HttpHeaderLocation); - if (pszHeader != NULL) - { - if (_strnicmp(pszHeader, "http://", 7) == 0) - { - pszStartHost = pszHeader + 7; - } - else if (_strnicmp(pszHeader, "https://", 8) == 0) - { - pszStartHost = pszHeader + 8; - } - else - { - goto SetCookie; - } - - pszEndHost = strchr(pszStartHost, '/'); - - if (FAILED(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader))) - { - return hr; - } - if (pszEndHost != NULL && - FAILED(hr = strTemp.Append(pszEndHost))) - { - return hr; - } - if (FAILED(hr = pResponse->SetHeader(HttpHeaderLocation, - strTemp.QueryStr(), - static_cast(strTemp.QueryCCH()), - TRUE))) - { - return hr; - } - } - -SetCookie: - - // - // Set-Cookie is different - possibly multiple unknown headers with - // syntax name=value ; ... ; Domain=.host ; ... - // - pHeaders = &pResponse->GetRawHttpResponse()->Headers; - for (DWORD i = 0; iUnknownHeaderCount; i++) - { - if (_stricmp(pHeaders->pUnknownHeaders[i].pName, "Set-Cookie") != 0) - { - continue; - } - - pszHeader = pHeaders->pUnknownHeaders[i].pRawValue; - pszStartHost = strchr(pszHeader, ';'); - while (pszStartHost != NULL) - { - pszStartHost++; - while (IsSpace(*pszStartHost)) - { - pszStartHost++; - } - - if (_strnicmp(pszStartHost, "Domain", 6) != 0) - { - pszStartHost = strchr(pszStartHost, ';'); - continue; - } - pszStartHost += 6; - - while (IsSpace(*pszStartHost)) - { - pszStartHost++; - } - if (*pszStartHost != '=') - { - break; - } - pszStartHost++; - while (IsSpace(*pszStartHost)) - { - pszStartHost++; - } - if (*pszStartHost == '.') - { - pszStartHost++; - } - pszEndHost = pszStartHost; - while (!IsSpace(*pszEndHost) && - *pszEndHost != ';' && - *pszEndHost != '\0') - { - pszEndHost++; - } - - if (FAILED(hr = strTemp.Copy(pszHeader, static_cast(pszStartHost - pszHeader))) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader)) || - FAILED(hr = strTemp.Append(pszEndHost))) - { - return hr; - } - - pszHeader = (PCSTR)m_pW3Context->AllocateRequestMemory(strTemp.QueryCCH() + 1); - if (pszHeader == NULL) - { - return E_OUTOFMEMORY; - } - StringCchCopyA(const_cast(pszHeader), strTemp.QueryCCH() + 1, strTemp.QueryStr()); - pHeaders->pUnknownHeaders[i].pRawValue = pszHeader; - pHeaders->pUnknownHeaders[i].RawValueLength = static_cast(strTemp.QueryCCH()); - - break; - } - } - - return S_OK; -} - -VOID -FORWARDING_HANDLER::RemoveRequest( - VOID -) -{ - ASYNC_DISCONNECT_CONTEXT * pDisconnect; - pDisconnect = (ASYNC_DISCONNECT_CONTEXT *)InterlockedExchangePointer((PVOID*)&m_pDisconnect, NULL); - if (pDisconnect != NULL) - { - pDisconnect->ResetHandler(); - pDisconnect = NULL; - } -} - -VOID -FORWARDING_HANDLER::TerminateRequest( - bool fClientInitiated -) -{ - UNREFERENCED_PARAMETER(fClientInitiated); - - BOOL fLocked = FALSE; - if (TlsGetValue(g_dwTlsIndex) != this) - { - // - // Acquire exclusive lock as WinHTTP callback may happen on different thread - // We don't want two threads signal IIS pipeline simultaneously - // - AcquireLockExclusive(); - fLocked = TRUE; - } - - // Set tls as close winhttp handle will immediately trigger - // a winhttp callback on the same thread and we donot want to - // acquire the lock again - -#ifdef DEBUG - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "FORWARDING_HANDLER::TerminateRequest %d --%p\n", GetCurrentThreadId(), m_pW3Context); -#endif // DEBUG - - if (!m_fHttpHandleInClose) - { - m_fClientDisconnected = fClientInitiated; - } - - if (fLocked) - { - ReleaseLockExclusive(); - } -} - -VOID -FORWARDING_HANDLER::AcquireLockExclusive() -{ - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); - AcquireSRWLockExclusive(&m_RequestLock); - TlsSetValue(g_dwTlsIndex, this); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); -} - -VOID -FORWARDING_HANDLER::ReleaseLockExclusive() -{ - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == this); - TlsSetValue(g_dwTlsIndex, NULL); - ReleaseSRWLockExclusive(&m_RequestLock); - DBG_ASSERT(TlsGetValue(g_dwTlsIndex) == NULL); -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.h deleted file mode 100644 index 427540f2d31f..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/forwardinghandler.h +++ /dev/null @@ -1,233 +0,0 @@ -#pragma once - -extern DWORD g_OptionalWinHttpFlags; -extern HINSTANCE g_hWinHttpModule; -extern HINSTANCE g_hAspNetCoreModule; - - -enum FORWARDING_REQUEST_STATUS -{ - FORWARDER_START, - FORWARDER_SENDING_REQUEST, - FORWARDER_RECEIVING_RESPONSE, - FORWARDER_RECEIVED_WEBSOCKET_RESPONSE, - FORWARDER_DONE, - FORWARDER_FINISH_REQUEST -}; - - -class FORWARDING_HANDLER : public REQUEST_HANDLER -{ -public: - FORWARDING_HANDLER( - - _In_ IHttpContext *pW3Context, - _In_ HTTP_MODULE_ID *pModuleId, - _In_ APPLICATION *pApplication); - - ~FORWARDING_HANDLER(); - - __override - REQUEST_NOTIFICATION_STATUS - OnExecuteRequestHandler(); - - __override - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - DWORD cbCompletion, - HRESULT hrCompletionStatus - ); - - VOID - SetStatus( - FORWARDING_REQUEST_STATUS status - ) - { - m_RequestStatus = status; - } - - static - VOID - CALLBACK - FORWARDING_HANDLER::OnWinHttpCompletion( - HINTERNET hRequest, - DWORD_PTR dwContext, - DWORD dwInternetStatus, - LPVOID lpvStatusInformation, - DWORD dwStatusInformationLength - ); - - static - HRESULT - StaticInitialize( - BOOL fEnableReferenceCountTracing - ); - - static - VOID - StaticTerminate(); - - VOID - TerminateRequest( - bool fClientInitiated - ); - -private: - - VOID - AcquireLockExclusive(); - - VOID - ReleaseLockExclusive(); - - HRESULT - CreateWinHttpRequest( - _In_ const IHttpRequest * pRequest, - _In_ const PROTOCOL_CONFIG * pProtocol, - _In_ HINTERNET hConnect, - _Inout_ STRU * pstrUrl, - _In_ SERVER_PROCESS* pServerProcess - ); - - VOID - FORWARDING_HANDLER::OnWinHttpCompletionInternal( - _In_ HINTERNET hRequest, - _In_ DWORD dwInternetStatus, - _In_ LPVOID lpvStatusInformation, - _In_ DWORD dwStatusInformationLength - ); - - HRESULT - OnWinHttpCompletionSendRequestOrWriteComplete( - HINTERNET hRequest, - DWORD dwInternetStatus, - _Out_ BOOL * pfClientError, - _Out_ BOOL * pfAnotherCompletionExpected - ); - - HRESULT - OnWinHttpCompletionStatusHeadersAvailable( - HINTERNET hRequest, - _Out_ BOOL * pfAnotherCompletionExpected - ); - - HRESULT - OnWinHttpCompletionStatusDataAvailable( - HINTERNET hRequest, - DWORD dwBytes, - _Out_ BOOL * pfAnotherCompletionExpected - ); - - HRESULT - OnWinHttpCompletionStatusReadComplete( - _In_ IHttpResponse * pResponse, - DWORD dwStatusInformationLength, - _Out_ BOOL * pfAnotherCompletionExpected - ); - - HRESULT - OnSendingRequest( - DWORD cbCompletion, - HRESULT hrCompletionStatus, - _Out_ BOOL * pfClientError - ); - - HRESULT - OnReceivingResponse(); - - BYTE * - GetNewResponseBuffer( - DWORD dwBufferSize - ); - - VOID - FreeResponseBuffers(); - - HRESULT - SetStatusAndHeaders( - PCSTR pszHeaders, - DWORD cchHeaders - ); - - HRESULT - DoReverseRewrite( - _In_ IHttpResponse *pResponse - ); - - HRESULT - GetHeaders( - _In_ const PROTOCOL_CONFIG * pProtocol, - _In_ BOOL fForwardWindowsAuthToken, - _In_ SERVER_PROCESS* pServerProcess, - _Out_ PCWSTR * ppszHeaders, - _Inout_ DWORD * pcchHeaders - ); - - VOID - RemoveRequest( - VOID - ); - - DWORD m_Signature; - // - // WinHTTP request handle is protected using a read-write lock. - // - SRWLOCK m_RequestLock; - HINTERNET m_hRequest; - FORWARDING_REQUEST_STATUS m_RequestStatus; - - BOOL m_fWebSocketEnabled; - BOOL m_fResponseHeadersReceivedAndSet; - BOOL m_fResetConnection; - BOOL m_fDoReverseRewriteHeaders; - BOOL m_fServerResetConn; - volatile BOOL m_fClientDisconnected; - // - // A safety guard flag indicating no more IIS PostCompletion is allowed - // - volatile BOOL m_fFinishRequest; - // - // A safety guard flag to prevent from unexpect callback which may signal IIS pipeline - // more than once with non-pending status - // - volatile BOOL m_fDoneAsyncCompletion; - volatile BOOL m_fHasError; - // - // WinHttp may hit AV under race if handle got closed more than once simultaneously - // Use two bool variables to guard - // - volatile BOOL m_fHttpHandleInClose; - volatile BOOL m_fWebSocketHandleInClose; - - PCSTR m_pszOriginalHostHeader; - PCWSTR m_pszHeaders; - // - // Record the number of winhttp handles in use - // release IIS pipeline only after all handles got closed - // - volatile LONG m_dwHandlers; - DWORD m_cchHeaders; - DWORD m_BytesToReceive; - DWORD m_BytesToSend; - DWORD m_cchLastSend; - DWORD m_cEntityBuffers; - DWORD m_cBytesBuffered; - DWORD m_cMinBufferLimit; - ULONGLONG m_cContentLength; - WEBSOCKET_HANDLER * m_pWebSocket; - ASYNC_DISCONNECT_CONTEXT * m_pDisconnect; - - BYTE * m_pEntityBuffer; - static const SIZE_T INLINE_ENTITY_BUFFERS = 8; - BUFFER_T m_buffEntityBuffers; - - static ALLOC_CACHE_HANDLER * sm_pAlloc; - static PROTOCOL_CONFIG sm_ProtocolConfig; - static RESPONSE_HEADER_HASH * sm_pResponseHeaderHash; - // - // Reference cout tracing for debugging purposes. - // - static TRACE_LOG * sm_pTraceLog; - - static STRA sm_pStra502ErrorMsg; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.cpp b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.cpp deleted file mode 100644 index e9222ba95e44..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "..\precomp.hxx" - -OUT_OF_PROCESS_APPLICATION::OUT_OF_PROCESS_APPLICATION( - IHttpServer* pHttpServer, - ASPNETCORE_CONFIG* pConfig) : - APPLICATION(pHttpServer, pConfig) -{ - m_status = APPLICATION_STATUS::RUNNING; - m_pProcessManager = NULL; - InitializeSRWLock(&rwlock); -} - -OUT_OF_PROCESS_APPLICATION::~OUT_OF_PROCESS_APPLICATION() -{ - if (m_pProcessManager != NULL) - { - m_pProcessManager->ShutdownAllProcesses(); - m_pProcessManager->DereferenceProcessManager(); - m_pProcessManager = NULL; - } -} - -HRESULT -OUT_OF_PROCESS_APPLICATION::Initialize( -) -{ - HRESULT hr = S_OK; - if (m_pProcessManager == NULL) - { - m_pProcessManager = new PROCESS_MANAGER; - if (m_pProcessManager == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = m_pProcessManager->Initialize(); - if (FAILED(hr)) - { - goto Finished; - } - } - -Finished: - return hr; -} - -HRESULT -OUT_OF_PROCESS_APPLICATION::GetProcess( - _Out_ SERVER_PROCESS **ppServerProcess -) -{ - return m_pProcessManager->GetProcess(m_pConfig, ppServerProcess); -} - -__override -VOID -OUT_OF_PROCESS_APPLICATION::ShutDown() -{ - AcquireSRWLockExclusive(&rwlock); - { - if (m_pProcessManager != NULL) - { - m_pProcessManager->ShutdownAllProcesses(); - m_pProcessManager->DereferenceProcessManager(); - m_pProcessManager = NULL; - } - } - ReleaseSRWLockExclusive(&rwlock); -} - -__override -VOID -OUT_OF_PROCESS_APPLICATION::Recycle() -{ - ShutDown(); -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.h deleted file mode 100644 index f8c30a69cc57..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/outprocessapplication.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -class OUT_OF_PROCESS_APPLICATION : public APPLICATION -{ - -public: - OUT_OF_PROCESS_APPLICATION(IHttpServer* pHttpServer, ASPNETCORE_CONFIG *pConfig); - - ~OUT_OF_PROCESS_APPLICATION(); - - HRESULT - Initialize(); - - HRESULT - GetProcess( - _Out_ SERVER_PROCESS **ppServerProcess - ); - - __override - VOID - ShutDown(); - - __override - VOID - Recycle(); - -private: - PROCESS_MANAGER * m_pProcessManager; - SRWLOCK rwlock; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.cxx deleted file mode 100644 index 7e8c58462a56..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.cxx +++ /dev/null @@ -1,274 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" - -volatile BOOL PROCESS_MANAGER::sm_fWSAStartupDone = FALSE; - -HRESULT -PROCESS_MANAGER::Initialize( - VOID -) -{ - HRESULT hr = S_OK; - WSADATA wsaData; - int result; - BOOL fLocked = FALSE; - - if( !sm_fWSAStartupDone ) - { - AcquireSRWLockExclusive( &m_srwLock ); - fLocked = TRUE; - - if( !sm_fWSAStartupDone ) - { - if( (result = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0 ) - { - hr = HRESULT_FROM_WIN32( result ); - goto Finished; - } - sm_fWSAStartupDone = TRUE; - } - - ReleaseSRWLockExclusive( &m_srwLock ); - fLocked = FALSE; - } - - m_dwRapidFailTickStart = GetTickCount(); - - if( m_hNULHandle == NULL ) - { - SECURITY_ATTRIBUTES saAttr; - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - m_hNULHandle = CreateFileW( L"NUL", - FILE_WRITE_DATA, - FILE_SHARE_READ, - &saAttr, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL ); - if( m_hNULHandle == INVALID_HANDLE_VALUE ) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - -Finished: - - if(fLocked) - { - ReleaseSRWLockExclusive( &m_srwLock ); - } - - return hr; -} - -PROCESS_MANAGER::~PROCESS_MANAGER() -{ - AcquireSRWLockExclusive(&m_srwLock); - - //if( m_ppServerProcessList != NULL ) - //{ - // for( DWORD i = 0; i < m_dwProcessesPerApplication; ++i ) - // { - // if( m_ppServerProcessList[i] != NULL ) - // { - // m_ppServerProcessList[i]->DereferenceServerProcess(); - // m_ppServerProcessList[i] = NULL; - // } - // } - - // delete[] m_ppServerProcessList; - // m_ppServerProcessList = NULL; - //} - - //if( m_hNULHandle != NULL ) - //{ - // CloseHandle( m_hNULHandle ); - // m_hNULHandle = NULL; - //} - - //if( sm_fWSAStartupDone ) - //{ - // WSACleanup(); - // sm_fWSAStartupDone = FALSE; - //} - - ReleaseSRWLockExclusive(&m_srwLock); -} - -HRESULT -PROCESS_MANAGER::GetProcess( - _In_ ASPNETCORE_CONFIG *pConfig, - _Out_ SERVER_PROCESS **ppServerProcess -) -{ - HRESULT hr = S_OK; - BOOL fSharedLock = FALSE; - BOOL fExclusiveLock = FALSE; - DWORD dwProcessIndex = 0; - SERVER_PROCESS *pSelectedServerProcess = NULL; - - if (!m_fServerProcessListReady) - { - AcquireSRWLockExclusive(&m_srwLock); - fExclusiveLock = TRUE; - - if (!m_fServerProcessListReady) - { - m_dwProcessesPerApplication = pConfig->QueryProcessesPerApplication(); - m_ppServerProcessList = new SERVER_PROCESS*[m_dwProcessesPerApplication]; - if (m_ppServerProcessList == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - for (DWORD i = 0; i < m_dwProcessesPerApplication; ++i) - { - m_ppServerProcessList[i] = NULL; - } - } - m_fServerProcessListReady = TRUE; - ReleaseSRWLockExclusive(&m_srwLock); - fExclusiveLock = FALSE; - } - - AcquireSRWLockShared(&m_srwLock); - fSharedLock = TRUE; - - // - // round robin through to the next available process. - // - dwProcessIndex = (DWORD)InterlockedIncrement64((LONGLONG*)&m_dwRouteToProcessIndex); - dwProcessIndex = dwProcessIndex % m_dwProcessesPerApplication; - - if (m_ppServerProcessList[dwProcessIndex] != NULL && - m_ppServerProcessList[dwProcessIndex]->IsReady()) - { - *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; - goto Finished; - } - - ReleaseSRWLockShared(&m_srwLock); - fSharedLock = FALSE; - - // should make the lock per process so that we can start processes simultaneously ? - if (m_ppServerProcessList[dwProcessIndex] == NULL || - !m_ppServerProcessList[dwProcessIndex]->IsReady()) - { - AcquireSRWLockExclusive(&m_srwLock); - fExclusiveLock = TRUE; - - if (m_ppServerProcessList[dwProcessIndex] != NULL) - { - if (!m_ppServerProcessList[dwProcessIndex]->IsReady()) - { - // - // terminate existing process that is not ready - // before creating new one. - // - ShutdownProcessNoLock( m_ppServerProcessList[dwProcessIndex] ); - } - else - { - // server is already up and ready to serve requests. - //m_ppServerProcessList[dwProcessIndex]->ReferenceServerProcess(); - *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; - goto Finished; - } - } - - if (RapidFailsPerMinuteExceeded(pConfig->QueryRapidFailsPerMinute())) - { - // - // rapid fails per minute exceeded, do not create new process. - // - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED, - ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG, - pConfig->QueryRapidFailsPerMinute()); - - hr = HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED); - goto Finished; - } - - if (m_ppServerProcessList[dwProcessIndex] == NULL) - { - - pSelectedServerProcess = new SERVER_PROCESS(); - if (pSelectedServerProcess == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - - hr = pSelectedServerProcess->Initialize( - this, //ProcessManager - pConfig->QueryProcessPath(), // - pConfig->QueryArguments(), // - pConfig->QueryStartupTimeLimitInMS(), - pConfig->QueryShutdownTimeLimitInMS(), - pConfig->QueryWindowsAuthEnabled(), - pConfig->QueryBasicAuthEnabled(), - pConfig->QueryAnonymousAuthEnabled(), - pConfig->QueryEnvironmentVariables(), - pConfig->QueryStdoutLogEnabled(), - pConfig->QueryWebSocketEnabled(), - pConfig->QueryStdoutLogFile(), - pConfig->QueryApplicationPhysicalPath(), // physical path - pConfig->QueryApplicationPath(), // app path - pConfig->QueryApplicationVirtualPath() // App relative virtual path - ); - if (FAILED(hr)) - { - goto Finished; - } - - hr = pSelectedServerProcess->StartProcess(); - if (FAILED(hr)) - { - goto Finished; - } - } - - if (!pSelectedServerProcess->IsReady()) - { - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - goto Finished; - } - - m_ppServerProcessList[dwProcessIndex] = pSelectedServerProcess; - pSelectedServerProcess = NULL; - - } - *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; - -Finished: - - if (fSharedLock) - { - ReleaseSRWLockShared(&m_srwLock); - fSharedLock = FALSE; - } - - if (fExclusiveLock) - { - ReleaseSRWLockExclusive(&m_srwLock); - fExclusiveLock = FALSE; - } - - if (pSelectedServerProcess != NULL) - { - delete pSelectedServerProcess; - pSelectedServerProcess = NULL; - } - - return hr; -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.h deleted file mode 100644 index 9523e8a819e4..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/processmanager.h +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define ONE_MINUTE_IN_MILLISECONDS 60000 -class SERVER_PROCESS; - -class PROCESS_MANAGER -{ -public: - - virtual - ~PROCESS_MANAGER(); - - VOID - ReferenceProcessManager() const - { - InterlockedIncrement(&m_cRefs); - } - - VOID - DereferenceProcessManager() const - { - if (InterlockedDecrement(&m_cRefs) == 0) - { - delete this; - } - } - - HRESULT - GetProcess( - _In_ ASPNETCORE_CONFIG *pConfig, - _Out_ SERVER_PROCESS **ppServerProcess - ); - - HANDLE - QueryNULHandle() - { - return m_hNULHandle; - } - - HRESULT - Initialize( - VOID - ); - - VOID - SendShutdownSignal() - { - AcquireSRWLockExclusive( &m_srwLock ); - - for(DWORD i = 0; i < m_dwProcessesPerApplication; ++i ) - { - if( m_ppServerProcessList != NULL && - m_ppServerProcessList[i] != NULL ) - { - m_ppServerProcessList[i]->SendSignal(); - m_ppServerProcessList[i]->DereferenceServerProcess(); - m_ppServerProcessList[i] = NULL; - } - } - - ReleaseSRWLockExclusive( &m_srwLock ); - } - - VOID - ShutdownProcess( - SERVER_PROCESS* pServerProcess - ) - { - AcquireSRWLockExclusive( &m_srwLock ); - - ShutdownProcessNoLock( pServerProcess ); - - ReleaseSRWLockExclusive( &m_srwLock ); - } - - VOID - ShutdownAllProcesses( - ) - { - AcquireSRWLockExclusive( &m_srwLock ); - - ShutdownAllProcessesNoLock(); - - ReleaseSRWLockExclusive( &m_srwLock ); - } - - VOID - IncrementRapidFailCount( - VOID - ) - { - InterlockedIncrement(&m_cRapidFailCount); - } - - PROCESS_MANAGER() : - m_ppServerProcessList( NULL ), - m_hNULHandle( NULL ), - m_cRapidFailCount( 0 ), - m_dwProcessesPerApplication( 1 ), - m_dwRouteToProcessIndex( 0 ), - m_fServerProcessListReady(FALSE), - m_cRefs( 1 ) - { - m_ppServerProcessList = NULL; - m_fServerProcessListReady = FALSE; - InitializeSRWLock( &m_srwLock ); - } - -private: - - BOOL - RapidFailsPerMinuteExceeded( - LONG dwRapidFailsPerMinute - ) - { - DWORD dwCurrentTickCount = GetTickCount(); - - if( (dwCurrentTickCount - m_dwRapidFailTickStart) - >= ONE_MINUTE_IN_MILLISECONDS ) - { - // - // reset counters every minute. - // - - InterlockedExchange(&m_cRapidFailCount, 0); - m_dwRapidFailTickStart = dwCurrentTickCount; - } - - return m_cRapidFailCount > dwRapidFailsPerMinute; - } - - VOID - ShutdownProcessNoLock( - SERVER_PROCESS* pServerProcess - ) - { - for(DWORD i = 0; i < m_dwProcessesPerApplication; ++i ) - { - if( m_ppServerProcessList != NULL && - m_ppServerProcessList[i] != NULL && - m_ppServerProcessList[i]->GetPort() == pServerProcess->GetPort() ) - { - // shutdown pServerProcess if not already shutdown. - m_ppServerProcessList[i]->StopProcess(); - m_ppServerProcessList[i]->DereferenceServerProcess(); - m_ppServerProcessList[i] = NULL; - } - } - } - - VOID - ShutdownAllProcessesNoLock( - VOID - ) - { - for(DWORD i = 0; i < m_dwProcessesPerApplication; ++i ) - { - if( m_ppServerProcessList != NULL && - m_ppServerProcessList[i] != NULL ) - { - // shutdown pServerProcess if not already shutdown. - m_ppServerProcessList[i]->SendSignal(); - m_ppServerProcessList[i]->DereferenceServerProcess(); - m_ppServerProcessList[i] = NULL; - } - } - } - - volatile LONG m_cRapidFailCount; - DWORD m_dwRapidFailTickStart; - DWORD m_dwProcessesPerApplication; - volatile DWORD m_dwRouteToProcessIndex; - - SRWLOCK m_srwLock; - SERVER_PROCESS **m_ppServerProcessList; - - // - // m_hNULHandle is used to redirect stdout/stderr to NUL. - // If Createprocess is called to launch a batch file for example, - // it tries to write to the console buffer by default. It fails to - // start if the console buffer is owned by the parent process i.e - // in our case w3wp.exe. So we have to redirect the stdout/stderr - // of the child process to NUL or to a file (anything other than - // the console buffer of the parent process). - // - - HANDLE m_hNULHandle; - mutable LONG m_cRefs; - - volatile static BOOL sm_fWSAStartupDone; - volatile BOOL m_fServerProcessListReady; -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.cxx deleted file mode 100644 index 9faebab82a08..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.cxx +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" - -HRESULT -PROTOCOL_CONFIG::Initialize() -{ - HRESULT hr; - STRU strTemp; - - m_fKeepAlive = TRUE; - m_msTimeout = 120000; - m_fPreserveHostHeader = TRUE; - m_fReverseRewriteHeaders = FALSE; - - if (FAILED(hr = m_strXForwardedForName.CopyW(L"X-Forwarded-For"))) - { - goto Finished; - } - - if (FAILED(hr = m_strSslHeaderName.CopyW(L"X-Forwarded-Proto"))) - { - goto Finished; - } - - if (FAILED(hr = m_strClientCertName.CopyW(L"MS-ASPNETCORE-CLIENTCERT"))) - { - goto Finished; - } - - m_fIncludePortInXForwardedFor = TRUE; - m_dwMinResponseBuffer = 0; // no response buffering - m_dwResponseBufferLimit = 4096*1024; - m_dwMaxResponseHeaderSize = 65536; - -Finished: - - return hr; -} - -VOID -PROTOCOL_CONFIG::OverrideConfig( - ASPNETCORE_CONFIG *pAspNetCoreConfig -) -{ - m_msTimeout = pAspNetCoreConfig->QueryRequestTimeoutInMS(); -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.h deleted file mode 100644 index 0bb34aa53d7e..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/protocolconfig.h +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -class PROTOCOL_CONFIG -{ - public: - - PROTOCOL_CONFIG() - { - } - - HRESULT - Initialize(); - - VOID - OverrideConfig( - ASPNETCORE_CONFIG *pAspNetCoreConfig - ); - - BOOL - QueryDoKeepAlive() const - { - return m_fKeepAlive; - } - - DWORD - QueryTimeout() const - { - return m_msTimeout; - } - - BOOL - QueryPreserveHostHeader() const - { - return m_fPreserveHostHeader; - } - - BOOL - QueryReverseRewriteHeaders() const - { - return m_fReverseRewriteHeaders; - } - - const STRA * - QueryXForwardedForName() const - { - return &m_strXForwardedForName; - } - - BOOL - QueryIncludePortInXForwardedFor() const - { - return m_fIncludePortInXForwardedFor; - } - - DWORD - QueryMinResponseBuffer() const - { - return m_dwMinResponseBuffer; - } - - DWORD - QueryResponseBufferLimit() const - { - return m_dwResponseBufferLimit; - } - - DWORD - QueryMaxResponseHeaderSize() const - { - return m_dwMaxResponseHeaderSize; - } - - const STRA* - QuerySslHeaderName() const - { - return &m_strSslHeaderName; - } - - const STRA * - QueryClientCertName() const - { - return &m_strClientCertName; - } - - private: - - BOOL m_fKeepAlive; - BOOL m_fPreserveHostHeader; - BOOL m_fReverseRewriteHeaders; - BOOL m_fIncludePortInXForwardedFor; - - DWORD m_msTimeout; - DWORD m_dwMinResponseBuffer; - DWORD m_dwResponseBufferLimit; - DWORD m_dwMaxResponseHeaderSize; - - STRA m_strXForwardedForName; - STRA m_strSslHeaderName; - STRA m_strClientCertName; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.cxx deleted file mode 100644 index f2fae274d536..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.cxx +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" - -HEADER_RECORD RESPONSE_HEADER_HASH::sm_rgHeaders[] = -{ - { "Cache-Control", HttpHeaderCacheControl }, - { "Connection", HttpHeaderConnection }, - { "Date", HttpHeaderDate }, - { "Keep-Alive", HttpHeaderKeepAlive }, - { "Pragma", HttpHeaderPragma }, - { "Trailer", HttpHeaderTrailer }, - { "Transfer-Encoding", HttpHeaderTransferEncoding }, - { "Upgrade", HttpHeaderUpgrade }, - { "Via", HttpHeaderVia }, - { "Warning", HttpHeaderWarning }, - { "Allow", HttpHeaderAllow }, - { "Content-Length", HttpHeaderContentLength }, - { "Content-Type", HttpHeaderContentType }, - { "Content-Encoding", HttpHeaderContentEncoding }, - { "Content-Language", HttpHeaderContentLanguage }, - { "Content-Location", HttpHeaderContentLocation }, - { "Content-MD5", HttpHeaderContentMd5 }, - { "Content-Range", HttpHeaderContentRange }, - { "Expires", HttpHeaderExpires }, - { "Last-Modified", HttpHeaderLastModified }, - { "Accept-Ranges", HttpHeaderAcceptRanges }, - { "Age", HttpHeaderAge }, - { "ETag", HttpHeaderEtag }, - { "Location", HttpHeaderLocation }, - { "Proxy-Authenticate", HttpHeaderProxyAuthenticate }, - { "Retry-After", HttpHeaderRetryAfter }, - { "Server", HttpHeaderServer }, - // Set it to something which cannot be a header name, in effect - // making Server an unknown header. w:w is used to avoid collision with Keep-Alive. - { "w:w\r\n", HttpHeaderServer }, - // Set it to something which cannot be a header name, in effect - // making Set-Cookie an unknown header - { "y:y\r\n", HttpHeaderSetCookie }, - { "Vary", HttpHeaderVary }, - // Set it to something which cannot be a header name, in effect - // making WWW-Authenticate an unknown header - { "z:z\r\n", HttpHeaderWwwAuthenticate } - -}; - -HRESULT -RESPONSE_HEADER_HASH::Initialize( - VOID -) -/*++ - -Routine Description: - - Initialize global header hash table - -Arguments: - - None - -Return Value: - - HRESULT - ---*/ -{ - HRESULT hr; - - // - // 31 response headers. - // Make sure to update the number of buckets it new headers - // are added. Test it to avoid collisions. - // - C_ASSERT(_countof(sm_rgHeaders) == 31); - - // - // 79 buckets will have less collisions for the 31 response headers. - // Known collisions are "Age" colliding with "Expire" and "Location" - // colliding with both "Expire" and "Age". - // - hr = HASH_TABLE::Initialize(79); - if (FAILED(hr)) - { - return hr; - } - - for ( DWORD Index = 0; Index < _countof(sm_rgHeaders); ++Index ) - { - if (FAILED(hr = InsertRecord(&sm_rgHeaders[Index]))) - { - return hr; - } - } - - return S_OK; -} - diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.h deleted file mode 100644 index 54f9c8295426..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/responseheaderhash.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -// -// *_HEADER_HASH maps strings to UlHeader* values -// - -#define UNKNOWN_INDEX (0xFFFFFFFF) - -struct HEADER_RECORD -{ - PCSTR _pszName; - ULONG _ulHeaderIndex; -}; - -class RESPONSE_HEADER_HASH: public HASH_TABLE -{ -public: - RESPONSE_HEADER_HASH() - {} - - VOID - ReferenceRecord( - HEADER_RECORD * - ) - {} - - VOID - DereferenceRecord( - HEADER_RECORD * - ) - {} - - PCSTR - ExtractKey( - HEADER_RECORD * pRecord - ) - { - return pRecord->_pszName; - } - - DWORD - CalcKeyHash( - PCSTR key - ) - { - return HashStringNoCase(key); - } - - BOOL - EqualKeys( - PCSTR key1, - PCSTR key2 - ) - { - return (_stricmp(key1, key2) == 0); - } - - HRESULT - Initialize( - VOID - ); - - VOID - Terminate( - VOID - ); - - DWORD - GetIndex( - PCSTR pszName - ) - { - HEADER_RECORD * pRecord = NULL; - - FindKey(pszName, &pRecord); - if (pRecord != NULL) - { - return pRecord->_ulHeaderIndex; - } - - return UNKNOWN_INDEX; - } - - static - PCSTR - GetString( - ULONG ulIndex - ) - { - if (ulIndex < HttpHeaderResponseMaximum) - { - DBG_ASSERT(sm_rgHeaders[ulIndex]._ulHeaderIndex == ulIndex); - return sm_rgHeaders[ulIndex]._pszName; - } - - return NULL; - } - -private: - - static HEADER_RECORD sm_rgHeaders[]; - - RESPONSE_HEADER_HASH(const RESPONSE_HEADER_HASH &); - void operator=(const RESPONSE_HEADER_HASH &); -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.cxx deleted file mode 100644 index de309bf643f2..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.cxx +++ /dev/null @@ -1,2148 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" -#include -//#include - -//extern BOOL g_fNsiApiNotSupported; - -#define STARTUP_TIME_LIMIT_INCREMENT_IN_MILLISECONDS 5000 - - -HRESULT -SERVER_PROCESS::Initialize( - PROCESS_MANAGER *pProcessManager, - STRU *pszProcessExePath, - STRU *pszArguments, - DWORD dwStartupTimeLimitInMS, - DWORD dwShtudownTimeLimitInMS, - BOOL fWindowsAuthEnabled, - BOOL fBasicAuthEnabled, - BOOL fAnonymousAuthEnabled, - ENVIRONMENT_VAR_HASH *pEnvironmentVariables, - BOOL fStdoutLogEnabled, - BOOL fWebsocketsEnabled, - STRU *pstruStdoutLogFile, - STRU *pszAppPhysicalPath, - STRU *pszAppPath, - STRU *pszAppVirtualPath -) -{ - HRESULT hr = S_OK; - - m_pProcessManager = pProcessManager; - m_dwStartupTimeLimitInMS = dwStartupTimeLimitInMS; - m_dwShutdownTimeLimitInMS = dwShtudownTimeLimitInMS; - m_fStdoutLogEnabled = fStdoutLogEnabled; - m_fWindowsAuthEnabled = fWindowsAuthEnabled; - m_fBasicAuthEnabled = fBasicAuthEnabled; - m_fAnonymousAuthEnabled = fAnonymousAuthEnabled; - m_fWebsocketsEnabled = fWebsocketsEnabled; - m_pProcessManager->ReferenceProcessManager(); - - if (FAILED(hr = m_ProcessPath.Copy(*pszProcessExePath)) || - FAILED(hr = m_struLogFile.Copy(*pstruStdoutLogFile))|| - FAILED(hr = m_struPhysicalPath.Copy(*pszAppPhysicalPath))|| - FAILED(hr = m_struAppFullPath.Copy(*pszAppPath))|| - FAILED(hr = m_struAppVirtualPath.Copy(*pszAppVirtualPath))|| - FAILED(hr = m_Arguments.Copy(*pszArguments)) || - FAILED(hr = SetupJobObject())) - { - goto Finished; - } - - m_pEnvironmentVarTable = pEnvironmentVariables; - -Finished: - return hr; -} - -HRESULT -SERVER_PROCESS::SetupJobObject(VOID) -{ - HRESULT hr = S_OK; - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo = { 0 }; - - if (m_hJobObject == NULL) - { - m_hJobObject = CreateJobObject(NULL, // LPSECURITY_ATTRIBUTES - NULL); // LPCTSTR lpName -#pragma warning( disable : 4312) - // 0xdeadbeef is used by Antares - if (m_hJobObject == NULL || m_hJobObject == (HANDLE)0xdeadbeef) - { - m_hJobObject = NULL; - // ignore job object creation error. - } -#pragma warning( error : 4312) - if (m_hJobObject != NULL) - { - jobInfo.BasicLimitInformation.LimitFlags = - JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; - - if (!SetInformationJobObject(m_hJobObject, - JobObjectExtendedLimitInformation, - &jobInfo, - sizeof jobInfo)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - } - } - } - - return hr; -} - -HRESULT -SERVER_PROCESS::GetRandomPort -( - DWORD* pdwPickedPort, - DWORD dwExcludedPort = 0 -) -{ - HRESULT hr = S_OK; - BOOL fPortInUse = FALSE; - DWORD dwActualProcessId = 0; - - if (g_fNsiApiNotSupported) - { - // - // the default value for optional parameter dwExcludedPort is 0 which is reserved - // a random number between MIN_PORT and MAX_PORT - // - while ((*pdwPickedPort = (rand() % (MAX_PORT - MIN_PORT)) + MIN_PORT + 1) == dwExcludedPort); - } - else - { - DWORD cRetry = 0; - do - { - // - // ignore dwActualProcessId because here we are - // determing whether the randomly generated port is - // in use by any other process. - // - while ((*pdwPickedPort = (rand() % (MAX_PORT - MIN_PORT)) + MIN_PORT + 1) == dwExcludedPort); - hr = CheckIfServerIsUp(*pdwPickedPort, &dwActualProcessId, &fPortInUse); - } while (fPortInUse && ++cRetry < MAX_RETRY); - - if (cRetry >= MAX_RETRY) - { - hr = HRESULT_FROM_WIN32(ERROR_PORT_NOT_SET); - } - } - - return hr; -} - -HRESULT -SERVER_PROCESS::SetupListenPort( - ENVIRONMENT_VAR_HASH *pEnvironmentVarTable, - BOOL* pfCriticalError -) -{ - HRESULT hr = S_OK; - ENVIRONMENT_VAR_ENTRY *pEntry = NULL; - *pfCriticalError = FALSE; - - pEnvironmentVarTable->FindKey(ASPNETCORE_PORT_ENV_STR, &pEntry); - if (pEntry != NULL) - { - if (pEntry->QueryValue() != NULL || pEntry->QueryValue()[0] != L'\0') - { - m_dwPort = (DWORD)_wtoi(pEntry->QueryValue()); - if (m_dwPort >MAX_PORT || m_dwPort < MIN_PORT) - { - hr = E_INVALIDARG; - *pfCriticalError = TRUE; - goto Finished; - // need add log for this one - } - hr = m_struPort.Copy(pEntry->QueryValue()); - goto Finished; - } - else - { - // - // user set the env variable but did not give value, let's set it up - // - pEnvironmentVarTable->DeleteKey(ASPNETCORE_PORT_ENV_STR); - } - pEntry->Dereference(); - pEntry = NULL; - } - - WCHAR buffer[15]; - if (FAILED(hr = GetRandomPort(&m_dwPort))) - { - goto Finished; - } - - if (swprintf_s(buffer, 15, L"%d", m_dwPort) <= 0) - { - hr = E_INVALIDARG; - goto Finished; - } - - pEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if (FAILED(hr = pEntry->Initialize(ASPNETCORE_PORT_ENV_STR, buffer)) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry)) || - FAILED(hr = m_struPort.Copy(buffer))) - { - goto Finished; - } - -Finished: - if (pEntry != NULL) - { - pEntry->Dereference(); - pEntry = NULL; - } - - if (FAILED(hr)) - { - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_PROCESS_START_SUCCESS, - ASPNETCORE_EVENT_PROCESS_START_PORTSETUP_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_dwPort, - MIN_PORT, - MAX_PORT, - hr); - } - - return hr; -} - -HRESULT -SERVER_PROCESS::SetupAppPath( - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable -) -{ - HRESULT hr = S_OK; - ENVIRONMENT_VAR_ENTRY* pEntry = NULL; - - pEnvironmentVarTable->FindKey(ASPNETCORE_APP_PATH_ENV_STR, &pEntry); - if (pEntry != NULL) - { - // user should not set this environment variable in configuration - pEnvironmentVarTable->DeleteKey(ASPNETCORE_APP_PATH_ENV_STR); - pEntry->Dereference(); - pEntry = NULL; - } - - pEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if (FAILED(hr = pEntry->Initialize(ASPNETCORE_APP_PATH_ENV_STR, m_struAppVirtualPath.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry))) - { - goto Finished; - } - -Finished: - if (pEntry != NULL) - { - pEntry->Dereference(); - pEntry = NULL; - } - return hr; -} - -HRESULT -SERVER_PROCESS::SetupAppToken( - ENVIRONMENT_VAR_HASH *pEnvironmentVarTable -) -{ - HRESULT hr = S_OK; - UUID logUuid; - PSTR pszLogUuid = NULL; - BOOL fRpcStringAllocd = FALSE; - RPC_STATUS rpcStatus; - STRU strAppToken; - ENVIRONMENT_VAR_ENTRY* pEntry = NULL; - - pEnvironmentVarTable->FindKey(ASPNETCORE_APP_TOKEN_ENV_STR, &pEntry); - if (pEntry != NULL) - { - // user sets the environment variable - m_straGuid.Reset(); - hr = m_straGuid.CopyW(pEntry->QueryValue()); - pEntry->Dereference(); - pEntry = NULL; - goto Finished; - } - else - { - if (m_straGuid.IsEmpty()) - { - // the GUID has not been set yet - rpcStatus = UuidCreate(&logUuid); - if (rpcStatus != RPC_S_OK) - { - hr = rpcStatus; - goto Finished; - } - - rpcStatus = UuidToStringA(&logUuid, (BYTE **)&pszLogUuid); - if (rpcStatus != RPC_S_OK) - { - hr = rpcStatus; - goto Finished; - } - - fRpcStringAllocd = TRUE; - - if (FAILED(hr = m_straGuid.Copy(pszLogUuid))) - { - goto Finished; - } - } - - pEntry = new ENVIRONMENT_VAR_ENTRY(); - if (pEntry == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if (FAILED(strAppToken.CopyA(m_straGuid.QueryStr())) || - FAILED(hr = pEntry->Initialize(ASPNETCORE_APP_TOKEN_ENV_STR, strAppToken.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry))) - { - goto Finished; - } - } - -Finished: - - if (fRpcStringAllocd) - { - RpcStringFreeA((BYTE **)&pszLogUuid); - pszLogUuid = NULL; - } - if (pEntry != NULL) - { - pEntry->Dereference(); - pEntry = NULL; - } - return hr; -} - -HRESULT -SERVER_PROCESS::OutputEnvironmentVariables -( - MULTISZ* pmszOutput, - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable -) -{ - HRESULT hr = S_OK; - LPWSTR pszEnvironmentVariables = NULL; - LPWSTR pszCurrentVariable = NULL; - LPWSTR pszNextVariable = NULL; - LPWSTR pszEqualChar = NULL; - STRU strEnvVar; - ENVIRONMENT_VAR_ENTRY* pEntry = NULL; - - DBG_ASSERT(pmszOutput); - DBG_ASSERT(pEnvironmentVarTable); // We added some startup variables - DBG_ASSERT(pEnvironmentVarTable->Count() >0); - - // cleanup, as we may in retry logic - pmszOutput->Reset(); - - pszEnvironmentVariables = GetEnvironmentStringsW(); - if (pszEnvironmentVariables == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_INVALID_ENVIRONMENT); - goto Finished; - } - pszCurrentVariable = pszEnvironmentVariables; - while (*pszCurrentVariable != L'\0') - { - pszNextVariable = pszCurrentVariable + wcslen(pszCurrentVariable) + 1; - pszEqualChar = wcschr(pszCurrentVariable, L'='); - if (pszEqualChar != NULL) - { - if (FAILED(hr = strEnvVar.Copy(pszCurrentVariable, (DWORD)(pszEqualChar - pszCurrentVariable) + 1))) - { - goto Finished; - } - pEnvironmentVarTable->FindKey(strEnvVar.QueryStr(), &pEntry); - if (pEntry != NULL) - { - // same env variable is defined in configuration, use it - if (FAILED(hr = strEnvVar.Append(pEntry->QueryValue()))) - { - goto Finished; - } - pmszOutput->Append(strEnvVar); //should we check the returned bool - // remove the record from hash table as we already output it - pEntry->Dereference(); - pEnvironmentVarTable->DeleteKey(pEntry->QueryName()); - strEnvVar.Reset(); - pEntry = NULL; - } - else - { - pmszOutput->Append(pszCurrentVariable); - } - } - else - { - // env varaible is not well formated - hr = HRESULT_FROM_WIN32(ERROR_INVALID_ENVIRONMENT); - goto Finished; - } - // move to next env variable - pszCurrentVariable = pszNextVariable; - } - // append the remaining env variable in hash table - pEnvironmentVarTable->Apply(ENVIRONMENT_VAR_HELPERS::CopyToMultiSz, pmszOutput); - -Finished: - if (pszEnvironmentVariables != NULL) - { - FreeEnvironmentStringsW(pszEnvironmentVariables); - pszEnvironmentVariables = NULL; - } - return hr; -} - -HRESULT -SERVER_PROCESS::SetupCommandLine( - STRU* pstrCommandLine -) -{ - HRESULT hr = S_OK; - LPWSTR pszPath = NULL; - LPWSTR pszFullPath = NULL; - STRU strRelativePath; - DWORD dwBufferSize = 0; - FILE *file = NULL; - - DBG_ASSERT(pstrCommandLine); - - if (!m_struCommandLine.IsEmpty() && - pstrCommandLine == (&m_struCommandLine)) - { - // already set up the commandline string, skip - goto Finished; - } - - pszPath = m_ProcessPath.QueryStr(); - - if ((wcsstr(pszPath, L":") == NULL) && (wcsstr(pszPath, L"%") == NULL)) - { - // let's check whether it is a relative path - if (FAILED(hr = strRelativePath.Copy(m_struPhysicalPath.QueryStr())) || - FAILED(hr = strRelativePath.Append(L"\\")) || - FAILED(hr = strRelativePath.Append(pszPath))) - { - goto Finished; - } - - dwBufferSize = strRelativePath.QueryCCH() + 1; - pszFullPath = new WCHAR[dwBufferSize]; - if (pszFullPath == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - if (_wfullpath(pszFullPath, - strRelativePath.QueryStr(), - dwBufferSize) == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); - goto Finished; - } - - if ((file = _wfsopen(pszFullPath, L"r", _SH_DENYNO)) != NULL) - { - fclose(file); - pszPath = pszFullPath; - } - } - if (FAILED(hr = pstrCommandLine->Copy(pszPath)) || - FAILED(hr = pstrCommandLine->Append(L" ")) || - FAILED(hr = pstrCommandLine->Append(m_Arguments.QueryStr()))) - { - goto Finished; - } - -Finished: - if (pszFullPath != NULL) - { - delete pszFullPath; - } - return hr; -} - -HRESULT -SERVER_PROCESS::PostStartCheck( - VOID -) -{ - HRESULT hr = S_OK; - - BOOL fReady = FALSE; - BOOL fProcessMatch = FALSE; - BOOL fDebuggerAttached = FALSE; - DWORD dwTickCount = 0; - DWORD dwTimeDifference = 0; - DWORD dwActualProcessId = 0; - INT iChildProcessIndex = -1; - STACK_STRU(strEventMsg, 256); - - if (CheckRemoteDebuggerPresent(m_hProcessHandle, &fDebuggerAttached) == 0) - { - // some error occurred - assume debugger is not attached; - fDebuggerAttached = FALSE; - } - - dwTickCount = GetTickCount(); - do - { - DWORD processStatus = 0; - if (GetExitCodeProcess(m_hProcessHandle, &processStatus)) - { - // make sure the process is still running - if (processStatus != STILL_ACTIVE) - { - // double check - if (GetExitCodeProcess(m_hProcessHandle, &processStatus) && processStatus != STILL_ACTIVE) - { - hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; - strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_PROCESS_START_STATUS_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - hr, - m_dwProcessId, - processStatus); - goto Finished; - } - } - } - // - // dwActualProcessId will be set only when NsiAPI(GetExtendedTcpTable) is supported - // - hr = CheckIfServerIsUp(m_dwPort, &dwActualProcessId, &fReady); - fDebuggerAttached = IsDebuggerIsAttached(); - - if (!fReady) - { - Sleep(250); - } - - dwTimeDifference = (GetTickCount() - dwTickCount); - } while (fReady == FALSE && - ((dwTimeDifference < m_dwStartupTimeLimitInMS) || fDebuggerAttached)); - - if (!fReady) - { - hr = E_APPLICATION_ACTIVATION_TIMED_OUT; - goto Finished; - } - - // register call back with the created process - if (FAILED(hr = RegisterProcessWait(&m_hProcessWaitHandle, m_hProcessHandle))) - { - goto Finished; - } - - // - // check if debugger is attached after startupTimeout. - // - if (!fDebuggerAttached && - CheckRemoteDebuggerPresent(m_hProcessHandle, &fDebuggerAttached) == 0) - { - // some error occurred - assume debugger is not attached; - fDebuggerAttached = FALSE; - } - - if (!g_fNsiApiNotSupported) - { - // - // NsiAPI(GetExtendedTcpTable) is supported. we should check whether processIds matche - // - if (dwActualProcessId == m_dwProcessId) - { - m_dwListeningProcessId = m_dwProcessId; - fProcessMatch = TRUE; - } - - if (!fProcessMatch) - { - // could be the scenario that backend creates child process - if (FAILED(hr = GetChildProcessHandles())) - { - goto Finished; - } - - for (DWORD i = 0; i < m_cChildProcess; ++i) - { - // a child process listen on the assigned port - if (dwActualProcessId == m_dwChildProcessIds[i]) - { - m_dwListeningProcessId = m_dwChildProcessIds[i]; - fProcessMatch = TRUE; - - if (m_hChildProcessHandles[i] != NULL) - { - if (fDebuggerAttached == FALSE && - CheckRemoteDebuggerPresent(m_hChildProcessHandles[i], &fDebuggerAttached) == 0) - { - // some error occurred - assume debugger is not attached; - fDebuggerAttached = FALSE; - } - - if (FAILED(hr = RegisterProcessWait(&m_hChildProcessWaitHandles[i], - m_hChildProcessHandles[i]))) - { - goto Finished; - } - iChildProcessIndex = i; - } - break; - } - } - } - - if(!fProcessMatch) - { - // - // process that we created is not listening - // on the port we specified. - // - fReady = FALSE; - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_PROCESS_START_WRONGPORT_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - m_dwPort, - hr); - goto Finished; - } - } - - if (!fReady) - { - // - // hr is already set by CheckIfServerIsUp - // - if (dwTimeDifference >= m_dwStartupTimeLimitInMS) - { - hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT); - strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - m_dwPort, - hr); - } - goto Finished; - } - - if (iChildProcessIndex >= 0) - { - // - // final check to make sure child process listening on HTTP is still UP - // This is needed because, the child process might have crashed/exited between - // the previous call to checkIfServerIsUp and RegisterProcessWait - // and we would not know about it. - // - - hr = CheckIfServerIsUp(m_dwPort, &dwActualProcessId, &fReady); - - if ((FAILED(hr) || fReady == FALSE)) - { - strEventMsg.SafeSnwprintf( - ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - m_dwPort, - hr); - goto Finished; - } - } - - // - // ready to mark the server process ready but before this, - // create and initialize the FORWARDER_CONNECTION - // - if (m_pForwarderConnection == NULL) - { - m_pForwarderConnection = new FORWARDER_CONNECTION(); - if (m_pForwarderConnection == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = m_pForwarderConnection->Initialize(m_dwPort); - if (FAILED(hr)) - { - goto Finished; - } - } - - if (!g_fNsiApiNotSupported) - { - m_hListeningProcessHandle = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE | PROCESS_DUP_HANDLE, - FALSE, - m_dwListeningProcessId); - } - - // - // mark server process as Ready - // - m_fReady = TRUE; - -Finished: - if (FAILED(hr)) - { - if (m_pForwarderConnection != NULL) - { - m_pForwarderConnection->DereferenceForwarderConnection(); - m_pForwarderConnection = NULL; - } - - if (!strEventMsg.IsEmpty()) - { - UTILITY::LogEvent( - g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_PROCESS_START_ERROR, - strEventMsg.QueryStr()); - } - } - return hr; -} - -HRESULT -SERVER_PROCESS::StartProcess( - VOID -) -{ - HRESULT hr = S_OK; - PROCESS_INFORMATION processInformation = {0}; - STARTUPINFOW startupInfo = {0}; - DWORD dwRetryCount = 2; // should we allow customer to config it - DWORD dwCreationFlags = 0; - MULTISZ mszNewEnvironment; - ENVIRONMENT_VAR_HASH *pHashTable = NULL; - PWSTR pStrStage = NULL; - BOOL fCriticalError = FALSE; - GetStartupInfoW(&startupInfo); - - // - // setup stdout and stderr handles to our stdout handle only if - // the handle is valid. - // - SetupStdHandles(&startupInfo); - - while (dwRetryCount > 0) - { - m_dwPort = 0; - dwRetryCount--; - // - // generate process command line. - // - if (FAILED(hr = SetupCommandLine(&m_struCommandLine))) - { - pStrStage = L"SetupCommandLine"; - goto Failure; - } - - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( - m_pEnvironmentVarTable, - m_fWindowsAuthEnabled, - m_fBasicAuthEnabled, - m_fAnonymousAuthEnabled, - &pHashTable))) - { - pStrStage = L"InitEnvironmentVariablesTable"; - goto Failure; - } - - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::AddWebsocketEnabledToEnvironmentVariables( - pHashTable, - m_fWebsocketsEnabled - ))) - { - pStrStage = L"AddWebsocketEnabledToEnvironmentVariables"; - goto Failure; - - } - - // - // setup the the port that the backend process will listen on - // - if (FAILED(hr = SetupListenPort(pHashTable, &fCriticalError))) - { - pStrStage = L"SetupListenPort"; - goto Failure; - } - - // - // get app path - // - if (FAILED(hr = SetupAppPath(pHashTable))) - { - pStrStage = L"SetupAppPath"; - goto Failure; - } - - // - // generate new guid for each process - // - if (FAILED(hr = SetupAppToken(pHashTable))) - { - pStrStage = L"SetupAppToken"; - goto Failure; - } - - // - // setup environment variables for new process - // - if (FAILED(hr = OutputEnvironmentVariables(&mszNewEnvironment, pHashTable))) - { - pStrStage = L"OutputEnvironmentVariables"; - goto Failure; - } - - dwCreationFlags = CREATE_NO_WINDOW | - CREATE_UNICODE_ENVIRONMENT | - CREATE_SUSPENDED | - CREATE_NEW_PROCESS_GROUP; - - if (!CreateProcessW( - NULL, // applicationName - m_struCommandLine.QueryStr(), - NULL, // processAttr - NULL, // threadAttr - TRUE, // inheritHandles - dwCreationFlags, - mszNewEnvironment.QueryStr(), - m_struPhysicalPath.QueryStr(), // currentDir - &startupInfo, - &processInformation)) - { - pStrStage = L"CreateProcessW"; - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - - m_hProcessHandle = processInformation.hProcess; - m_dwProcessId = processInformation.dwProcessId; - - if (FAILED(hr = SetupJobObject())) - { - pStrStage = L"SetupJobObject"; - goto Failure; - } - - if (m_hJobObject != NULL) - { - if (!AssignProcessToJobObject(m_hJobObject, m_hProcessHandle)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - if (hr != HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)) - { - pStrStage = L"AssignProcessToJobObject"; - goto Failure; - } - } - } - - if (ResumeThread(processInformation.hThread) == -1) - { - pStrStage = L"ResumeThread"; - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Failure; - } - - // - // need to make sure the server is up and listening on the port specified. - // - if (FAILED(hr = PostStartCheck())) - { - pStrStage = L"PostStartCheck"; - goto Failure; - } - - // Backend process starts successfully. Set retry counter to 0 - dwRetryCount = 0; - - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_PROCESS_START_SUCCESS, - ASPNETCORE_EVENT_PROCESS_START_SUCCESS_MSG, - m_struAppFullPath.QueryStr(), - m_dwProcessId, - m_dwListeningProcessId, - m_dwPort); - - goto Finished; - - Failure: - if (fCriticalError) - { - // Critical error, no retry need to avoid wasting resource and polluting log - dwRetryCount = 0; - } - - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_PROCESS_START_ERROR, - ASPNETCORE_EVENT_PROCESS_START_ERROR_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - pStrStage, - hr, - m_dwPort, - dwRetryCount); - - if (processInformation.hThread != NULL) - { - CloseHandle(processInformation.hThread); - processInformation.hThread = NULL; - } - - if (pHashTable != NULL) - { - pHashTable->Clear(); - delete pHashTable; - pHashTable = NULL; - } - - CleanUp(); - } - -Finished: - if (FAILED(hr) || m_fReady == FALSE) - { - if (m_hStdoutHandle != NULL) - { - if (m_hStdoutHandle != INVALID_HANDLE_VALUE) - { - CloseHandle(m_hStdoutHandle); - } - m_hStdoutHandle = NULL; - } - - if (m_fStdoutLogEnabled) - { - m_Timer.CancelTimer(); - } - - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_ERROR_TYPE, - ASPNETCORE_EVENT_PROCESS_START_FAILURE, - ASPNETCORE_EVENT_PROCESS_START_FAILURE_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_struCommandLine.QueryStr(), - m_dwPort); - } - return hr; -} - -HRESULT -SERVER_PROCESS::SetWindowsAuthToken( - HANDLE hToken, - LPHANDLE pTargetTokenHandle -) -{ - HRESULT hr = S_OK; - - if (m_hListeningProcessHandle != NULL && m_hListeningProcessHandle != INVALID_HANDLE_VALUE) - { - if (!DuplicateHandle( GetCurrentProcess(), - hToken, - m_hListeningProcessHandle, - pTargetTokenHandle, - 0, - FALSE, - DUPLICATE_SAME_ACCESS )) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - } - -Finished: - - return hr; -} - -HRESULT -SERVER_PROCESS::SetupStdHandles( - LPSTARTUPINFOW pStartupInfo -) -{ - HRESULT hr = S_OK; - SYSTEMTIME systemTime; - SECURITY_ATTRIBUTES saAttr = { 0 }; - - STRU struPath; - - DBG_ASSERT(pStartupInfo); - - if (!m_fStdoutLogEnabled) - { - pStartupInfo->dwFlags = STARTF_USESTDHANDLES; - pStartupInfo->hStdInput = INVALID_HANDLE_VALUE; - pStartupInfo->hStdError = INVALID_HANDLE_VALUE; - pStartupInfo->hStdOutput = INVALID_HANDLE_VALUE; - return hr; - } - if (m_hStdoutHandle != NULL && m_hStdoutHandle != INVALID_HANDLE_VALUE) - { - if (!CloseHandle(m_hStdoutHandle)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - m_hStdoutHandle = NULL; - } - - hr = UTILITY::ConvertPathToFullPath( - m_struLogFile.QueryStr(), - m_struPhysicalPath.QueryStr(), - &struPath); - if (FAILED(hr)) - { - goto Finished; - } - - GetSystemTime(&systemTime); - hr = m_struFullLogFile.SafeSnwprintf(L"%s_%d%02d%02d%02d%02d%02d_%d.log", - struPath.QueryStr(), - systemTime.wYear, - systemTime.wMonth, - systemTime.wDay, - systemTime.wHour, - systemTime.wMinute, - systemTime.wSecond, - GetCurrentProcessId()); - if (FAILED(hr)) - { - goto Finished; - } - - hr = UTILITY::EnsureDirectoryPathExist(struPath.QueryStr()); - if (FAILED(hr)) - { - goto Finished; - } - - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - m_hStdoutHandle = CreateFileW(m_struFullLogFile.QueryStr(), - FILE_WRITE_DATA, - FILE_SHARE_READ, - &saAttr, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - - if (m_hStdoutHandle == INVALID_HANDLE_VALUE) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - pStartupInfo->dwFlags = STARTF_USESTDHANDLES; - pStartupInfo->hStdInput = INVALID_HANDLE_VALUE; - pStartupInfo->hStdError = m_hStdoutHandle; - pStartupInfo->hStdOutput = m_hStdoutHandle; - // start timer to open and close handles regularly. - m_Timer.InitializeTimer(STTIMER::TimerCallback, &m_struFullLogFile, 3000, 3000); - -Finished: - if (FAILED(hr)) - { - pStartupInfo->dwFlags = STARTF_USESTDHANDLES; - pStartupInfo->hStdInput = INVALID_HANDLE_VALUE; - pStartupInfo->hStdError = INVALID_HANDLE_VALUE; - pStartupInfo->hStdOutput = INVALID_HANDLE_VALUE; - - if (m_fStdoutLogEnabled) - { - // Log the error - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_CONFIG_ERROR, - ASPNETCORE_EVENT_INVALID_STDOUT_LOG_FILE_MSG, - m_struFullLogFile.IsEmpty()? m_struLogFile.QueryStr() : m_struFullLogFile.QueryStr(), - hr); - } - // The log file was not created yet in case of failure. No need to clean it - m_struFullLogFile.Reset(); - } - return hr; -} - -HRESULT -SERVER_PROCESS::CheckIfServerIsUp( - _In_ DWORD dwPort, - _Out_ DWORD * pdwProcessId, - _Out_ BOOL * pfReady -) -{ - HRESULT hr = S_OK; - DWORD dwResult = ERROR_INSUFFICIENT_BUFFER; - MIB_TCPTABLE_OWNER_PID *pTCPInfo = NULL; - MIB_TCPROW_OWNER_PID *pOwner = NULL; - DWORD dwSize = 1000; // Initial size for pTCPInfo buffer - int iResult = 0; - SOCKADDR_IN sockAddr; - SOCKET socketCheck = INVALID_SOCKET; - - DBG_ASSERT(pfReady); - DBG_ASSERT(pdwProcessId); - - *pfReady = FALSE; - // - // it's OK for us to return processID 0 in case we cannot detect the real one - // - *pdwProcessId = 0; - - if (!g_fNsiApiNotSupported) - { - while (dwResult == ERROR_INSUFFICIENT_BUFFER) - { - // Increase the buffer size with additional space, MIB_TCPROW 20 bytes - // New entries may be added by other processes before calling GetExtendedTcpTable - dwSize += 200; - - if (pTCPInfo != NULL) - { - HeapFree(GetProcessHeap(), 0, pTCPInfo); - } - - pTCPInfo = (MIB_TCPTABLE_OWNER_PID*)HeapAlloc(GetProcessHeap(), 0, dwSize); - if (pTCPInfo == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - dwResult = GetExtendedTcpTable(pTCPInfo, - &dwSize, - FALSE, - AF_INET, - TCP_TABLE_OWNER_PID_LISTENER, - 0); - - if (dwResult != NO_ERROR && dwResult != ERROR_INSUFFICIENT_BUFFER) - { - hr = HRESULT_FROM_WIN32(dwResult); - goto Finished; - } - } - - // iterate pTcpInfo struct to find PID/PORT entry - for (DWORD dwLoop = 0; dwLoop < pTCPInfo->dwNumEntries; dwLoop++) - { - pOwner = &pTCPInfo->table[dwLoop]; - if (ntohs((USHORT)pOwner->dwLocalPort) == dwPort) - { - *pdwProcessId = pOwner->dwOwningPid; - *pfReady = TRUE; - break; - } - } - } - else - { - // - // We have to open socket to ping the service - // - socketCheck = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - - if (socketCheck == INVALID_SOCKET) - { - hr = HRESULT_FROM_WIN32(WSAGetLastError()); - goto Finished; - } - - sockAddr.sin_family = AF_INET; - if (!inet_pton(AF_INET, LOCALHOST, &(sockAddr.sin_addr))) - { - hr = HRESULT_FROM_WIN32(WSAGetLastError()); - goto Finished; - } - - //sockAddr.sin_addr.s_addr = inet_addr( LOCALHOST ); - sockAddr.sin_port = htons((u_short)dwPort); - - // - // Connect to server. - // if connection fails, socket is not closed, we reuse the same socket - // while retrying - // - iResult = connect(socketCheck, (SOCKADDR *)&sockAddr, sizeof(sockAddr)); - if (iResult == SOCKET_ERROR) - { - hr = HRESULT_FROM_WIN32(WSAGetLastError()); - if (hr == HRESULT_FROM_WIN32(WSAECONNREFUSED)) - { - // WSAECONNREFUSED means no application listen on the given port. - // This is not a failure. Reset the hresult to S_OK and return fReady to false - hr = S_OK; - } - goto Finished; - } - *pfReady = TRUE; - } - -Finished: - - if (socketCheck != INVALID_SOCKET) - { - iResult = closesocket(socketCheck); - if (iResult == SOCKET_ERROR) - { - hr = HRESULT_FROM_WIN32(WSAGetLastError()); - } - socketCheck = INVALID_SOCKET; - } - - if (pTCPInfo != NULL) - { - HeapFree(GetProcessHeap(), 0, pTCPInfo); - pTCPInfo = NULL; - } - - return hr; -} - -// send signal to the process to let it gracefully shutdown -// if the process cannot shutdown within given time, terminate it -VOID -SERVER_PROCESS::SendSignal( - VOID -) -{ - HRESULT hr = S_OK; - HANDLE hThread = NULL; - - ReferenceServerProcess(); - - m_hShutdownHandle = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE, FALSE, m_dwProcessId); - - if (m_hShutdownHandle == NULL) - { - // since we cannot open the process. let's terminate the process - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hThread = CreateThread( - NULL, // default security attributes - 0, // default stack size - (LPTHREAD_START_ROUTINE)SendShutDownSignal, - this, // thread function arguments - 0, // default creation flags - NULL); // receive thread identifier - - if (hThread == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (WaitForSingleObject(m_hShutdownHandle, m_dwShutdownTimeLimitInMS) != WAIT_OBJECT_0) - { - hr = HRESULT_FROM_WIN32(ERROR_TIMEOUT); - goto Finished; - } - // thread should already exit - CloseHandle(hThread); - hThread = NULL; - -Finished: - if (hThread != NULL) - { - // if the send shutdown message thread is still running, terminate it - DWORD dwThreadStatus = 0; - if (GetExitCodeThread(hThread, &dwThreadStatus)!= 0 && dwThreadStatus == STILL_ACTIVE) - { - TerminateThread(hThread, STATUS_CONTROL_C_EXIT); - } - CloseHandle(hThread); - hThread = NULL; - } - - if (FAILED(hr)) - { - TerminateBackendProcess(); - } - - if (m_hShutdownHandle != NULL && m_hShutdownHandle != INVALID_HANDLE_VALUE) - { - CloseHandle(m_hShutdownHandle); - m_hShutdownHandle = NULL; - } - - DereferenceServerProcess(); -} - - -// -// StopProcess is only called if process crashes OR if the process -// creation failed and calling this counts towards RapidFailCounts. -// -VOID -SERVER_PROCESS::StopProcess( - VOID -) -{ - m_fReady = FALSE; - - m_pProcessManager->IncrementRapidFailCount(); - - for (INT i=0; iNumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || - processList->NumberOfProcessIdsInList == 0)); - - if (dwError == ERROR_MORE_DATA) - { - hr = E_OUTOFMEMORY; - // some error - goto Finished; - } - - if (processList == NULL || - (processList->NumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || - processList->NumberOfProcessIdsInList == 0)) - { - hr = HRESULT_FROM_WIN32(ERROR_PROCESS_ABORTED); - // some error - goto Finished; - } - - if (processList->NumberOfProcessIdsInList > MAX_ACTIVE_CHILD_PROCESSES) - { - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - goto Finished; - } - - for (DWORD i=0; iNumberOfProcessIdsInList; i++) - { - dwPid = (DWORD)processList->ProcessIdList[i]; - if (dwPid != dwWorkerProcessPid) - { - HANDLE hProcess = OpenProcess( - PROCESS_QUERY_INFORMATION | SYNCHRONIZE | PROCESS_TERMINATE | PROCESS_DUP_HANDLE, - FALSE, - dwPid); - - BOOL returnValue = CheckRemoteDebuggerPresent(hProcess, &fDebuggerPresent); - if (hProcess != NULL) - { - CloseHandle(hProcess); - hProcess = NULL; - } - - if (!returnValue) - { - goto Finished; - } - - if (fDebuggerPresent) - { - break; - } - } - } - -Finished: - - if (processList != NULL) - { - HeapFree(GetProcessHeap(), 0, processList); - } - - return fDebuggerPresent; -} - -HRESULT -SERVER_PROCESS::GetChildProcessHandles( - VOID -) -{ - HRESULT hr = S_OK; - PJOBOBJECT_BASIC_PROCESS_ID_LIST processList = NULL; - DWORD dwPid = 0; - DWORD dwWorkerProcessPid = 0; - DWORD cbNumBytes = 1024; - DWORD dwRetries = 0; - DWORD dwError = NO_ERROR; - - dwWorkerProcessPid = GetCurrentProcessId(); - - do - { - dwError = NO_ERROR; - - if (processList != NULL) - { - HeapFree(GetProcessHeap(), 0, processList); - processList = NULL; - - // resize - cbNumBytes = cbNumBytes * 2; - } - - processList = (PJOBOBJECT_BASIC_PROCESS_ID_LIST) HeapAlloc( - GetProcessHeap(), - 0, - cbNumBytes - ); - if (processList == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - RtlZeroMemory(processList, cbNumBytes); - - if (!QueryInformationJobObject( - m_hJobObject, - JobObjectBasicProcessIdList, - processList, - cbNumBytes, - NULL)) - { - dwError = GetLastError(); - if (dwError != ERROR_MORE_DATA) - { - hr = HRESULT_FROM_WIN32(dwError); - goto Finished; - } - } - - } while (dwRetries++ < 5 && - processList != NULL && - (processList->NumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || processList->NumberOfProcessIdsInList == 0)); - - if (dwError == ERROR_MORE_DATA) - { - hr = E_OUTOFMEMORY; - // some error - goto Finished; - } - - if (processList == NULL || (processList->NumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || processList->NumberOfProcessIdsInList == 0)) - { - hr = HRESULT_FROM_WIN32(ERROR_PROCESS_ABORTED); - // some error - goto Finished; - } - - if (processList->NumberOfProcessIdsInList > MAX_ACTIVE_CHILD_PROCESSES) - { - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - goto Finished; - } - - for (DWORD i=0; iNumberOfProcessIdsInList; i++) - { - dwPid = (DWORD)processList->ProcessIdList[i]; - if (dwPid != m_dwProcessId && - dwPid != dwWorkerProcessPid ) - { - m_hChildProcessHandles[m_cChildProcess] = OpenProcess( - PROCESS_QUERY_INFORMATION | SYNCHRONIZE | PROCESS_TERMINATE | PROCESS_DUP_HANDLE, - FALSE, - dwPid - ); - m_dwChildProcessIds[m_cChildProcess] = dwPid; - m_cChildProcess ++; - } - } - -Finished: - - if (processList != NULL) - { - HeapFree(GetProcessHeap(), 0, processList); - } - - return hr; -} - -HRESULT -SERVER_PROCESS::StopAllProcessesInJobObject( - VOID -) -{ - HRESULT hr = S_OK; - PJOBOBJECT_BASIC_PROCESS_ID_LIST processList = NULL; - HANDLE hProcess = NULL; - DWORD dwWorkerProcessPid = 0; - DWORD cbNumBytes = 1024; - DWORD dwRetries = 0; - - dwWorkerProcessPid = GetCurrentProcessId(); - - do - { - if (processList != NULL) - { - HeapFree(GetProcessHeap(), 0, processList); - processList = NULL; - - // resize - cbNumBytes = cbNumBytes * 2; - } - - processList = (PJOBOBJECT_BASIC_PROCESS_ID_LIST) HeapAlloc( - GetProcessHeap(), - 0, - cbNumBytes - ); - if (processList == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - RtlZeroMemory(processList, cbNumBytes); - - if (!QueryInformationJobObject( - m_hJobObject, - JobObjectBasicProcessIdList, - processList, - cbNumBytes, - NULL)) - { - DWORD dwError = GetLastError(); - if (dwError != ERROR_MORE_DATA) - { - hr = HRESULT_FROM_WIN32(dwError); - goto Finished; - } - } - - } while (dwRetries++ < 5 && - processList != NULL && - (processList->NumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || processList->NumberOfProcessIdsInList == 0)); - - if (processList == NULL || (processList->NumberOfAssignedProcesses > processList->NumberOfProcessIdsInList || processList->NumberOfProcessIdsInList == 0)) - { - hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY); - // some error - goto Finished; - } - - for (DWORD i=0; iNumberOfProcessIdsInList; i++) - { - if (dwWorkerProcessPid != (DWORD)processList->ProcessIdList[i]) - { - hProcess = OpenProcess(PROCESS_TERMINATE, - FALSE, - (DWORD)processList->ProcessIdList[i]); - if (hProcess != NULL) - { - if (!TerminateProcess(hProcess, 1)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - } - else - { - WaitForSingleObject(hProcess, INFINITE); - } - - if (hProcess != NULL) - { - CloseHandle(hProcess); - hProcess = NULL; - } - } - } - } - -Finished: - - if (processList != NULL) - { - HeapFree(GetProcessHeap(), 0, processList); - } - - return hr; -} - -SERVER_PROCESS::SERVER_PROCESS() : - m_cRefs(1), - m_hProcessHandle(NULL), - m_hProcessWaitHandle(NULL), - m_dwProcessId(0), - m_cChildProcess(0), - m_fReady(FALSE), - m_lStopping(0L), - m_hStdoutHandle(NULL), - m_fStdoutLogEnabled(FALSE), - m_hJobObject(NULL), - m_pForwarderConnection(NULL), - m_dwListeningProcessId(0), - m_hListeningProcessHandle(NULL), - m_hShutdownHandle(NULL) -{ - //InterlockedIncrement(&g_dwActiveServerProcesses); - srand(GetTickCount()); - - for (INT i=0; iDereferenceForwarderConnection(); - m_pForwarderConnection = NULL; - } - -} - -SERVER_PROCESS::~SERVER_PROCESS() -{ - - CleanUp(); - - m_pEnvironmentVarTable = NULL; - // no need to free m_pEnvironmentVarTable, as it references to - // the same hash table hold by configuration. - // the hashtable memory will be freed once onfiguration got recycled - - if (m_pProcessManager != NULL) - { - m_pProcessManager->DereferenceProcessManager(); - m_pProcessManager = NULL; - } - - if (m_hStdoutHandle != NULL) - { - if (m_hStdoutHandle != INVALID_HANDLE_VALUE) - { - CloseHandle(m_hStdoutHandle); - } - m_hStdoutHandle = NULL; - } - - if (m_fStdoutLogEnabled) - { - m_Timer.CancelTimer(); - } - - if (!m_fStdoutLogEnabled && !m_struFullLogFile.IsEmpty()) - { - WIN32_FIND_DATA fileData; - HANDLE handle = FindFirstFile(m_struFullLogFile.QueryStr(), &fileData); - if (handle != INVALID_HANDLE_VALUE && - fileData.nFileSizeHigh == 0 && - fileData.nFileSizeLow == 0) - { - FindClose(handle); - // no need to check whether the deletion succeeds - // as nothing can be done - DeleteFile(m_struFullLogFile.QueryStr()); - } - } -} - -//static -VOID -CALLBACK -SERVER_PROCESS::ProcessHandleCallback( - _In_ PVOID pContext, - _In_ BOOL -) -{ - SERVER_PROCESS *pServerProcess = (SERVER_PROCESS*) pContext; - pServerProcess->HandleProcessExit(); -} - -HRESULT -SERVER_PROCESS::RegisterProcessWait( - PHANDLE phWaitHandle, - HANDLE hProcessToWaitOn -) -{ - HRESULT hr = S_OK; - NTSTATUS status = 0; - - _ASSERT(phWaitHandle != NULL && *phWaitHandle == NULL); - - *phWaitHandle = NULL; - - // wait thread will dereference. - ReferenceServerProcess(); - - status = RegisterWaitForSingleObject( - phWaitHandle, - hProcessToWaitOn, - (WAITORTIMERCALLBACKFUNC)&ProcessHandleCallback, - this, - INFINITE, - WT_EXECUTEONLYONCE | WT_EXECUTEINWAITTHREAD - ); - - if (status < 0) - { - hr = HRESULT_FROM_NT(status); - goto Finished; - } - -Finished: - - if (FAILED(hr)) - { - *phWaitHandle = NULL; - DereferenceServerProcess(); - } - - return hr; -} - -VOID -SERVER_PROCESS::HandleProcessExit( VOID ) -{ - BOOL fReady = FALSE; - DWORD dwProcessId = 0; - - if (InterlockedCompareExchange(&m_lStopping, 1L, 0L) == 0L) - { - CheckIfServerIsUp(m_dwPort, &dwProcessId, &fReady); - - if (!fReady) - { - UTILITY::LogEventF( - g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_PROCESS_SHUTDOWN, - ASPNETCORE_EVENT_PROCESS_SHUTDOWN_MSG, - m_struAppFullPath.QueryStr(), - m_struPhysicalPath.QueryStr(), - m_dwProcessId, - m_dwPort); - - m_pProcessManager->ShutdownProcess(this); - } - - DereferenceServerProcess(); - } -} - -HRESULT -SERVER_PROCESS::SendShutdownHttpMessage( VOID ) -{ - HRESULT hr = S_OK; - HINTERNET hSession = NULL; - HINTERNET hConnect = NULL; - HINTERNET hRequest = NULL; - - STACK_STRU(strHeaders, 256); - STRU strAppToken; - STRU strUrl; - DWORD dwStatusCode = 0; - DWORD dwSize = sizeof(dwStatusCode); - - hSession = WinHttpOpen(L"", - WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, - WINHTTP_NO_PROXY_NAME, - WINHTTP_NO_PROXY_BYPASS, - 0); - - if (hSession == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hConnect = WinHttpConnect(hSession, - L"127.0.0.1", - (USHORT)m_dwPort, - 0); - - if (hConnect == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - if (m_struAppVirtualPath.QueryCCH() > 1) - { - // app path size is 1 means site root, i.e., "/" - // we don't want to add duplicated '/' to the request url - // otherwise the request will fail - strUrl.Copy(m_struAppVirtualPath); - } - strUrl.Append(L"/iisintegration"); - - hRequest = WinHttpOpenRequest(hConnect, - L"POST", - strUrl.QueryStr(), - NULL, - WINHTTP_NO_REFERER, - NULL, - 0); - - if (hRequest == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // set timeout - if (!WinHttpSetTimeouts(hRequest, - m_dwShutdownTimeLimitInMS, // dwResolveTimeout - m_dwShutdownTimeLimitInMS, // dwConnectTimeout - m_dwShutdownTimeLimitInMS, // dwSendTimeout - m_dwShutdownTimeLimitInMS)) // dwReceiveTimeout - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - // set up the shutdown headers - if (FAILED(hr = strHeaders.Append(L"MS-ASPNETCORE-EVENT:shutdown \r\n")) || - FAILED(hr = strAppToken.Append(L"MS-ASPNETCORE-TOKEN:")) || - FAILED(hr = strAppToken.AppendA(m_straGuid.QueryStr())) || - FAILED(hr = strHeaders.Append(strAppToken.QueryStr()))) - { - goto Finished; - } - - if (!WinHttpSendRequest(hRequest, - strHeaders.QueryStr(), // pwszHeaders - strHeaders.QueryCCH(), // dwHeadersLength - WINHTTP_NO_REQUEST_DATA, - 0, // dwOptionalLength - 0, // dwTotalLength - 0)) // dwContext - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (!WinHttpReceiveResponse(hRequest , NULL)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (!WinHttpQueryHeaders(hRequest, - WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, - WINHTTP_HEADER_NAME_BY_INDEX, - &dwStatusCode, - &dwSize, - WINHTTP_NO_HEADER_INDEX)) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - if (dwStatusCode != 202) - { - // not expected http status - hr = E_FAIL; - } - - // log - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_INFORMATION_TYPE, - ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST, - ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST_MSG, - m_dwProcessId, - dwStatusCode); - -Finished: - if (hRequest) - { - WinHttpCloseHandle(hRequest); - hRequest = NULL; - } - if (hConnect) - { - WinHttpCloseHandle(hConnect); - hConnect = NULL; - } - if (hSession) - { - WinHttpCloseHandle(hSession); - hSession = NULL; - } - return hr; -} - -//static -VOID -SERVER_PROCESS::SendShutDownSignal( - LPVOID lpParam -) -{ - SERVER_PROCESS* pThis = static_cast(lpParam); - DBG_ASSERT(pThis); - pThis->SendShutDownSignalInternal(); -} - -// -// send shutdown message first, if fail then send -// ctrl-c to the backend process to let it gracefully shutdown -// -VOID -SERVER_PROCESS::SendShutDownSignalInternal( - VOID -) -{ - ReferenceServerProcess(); - - if (FAILED(SendShutdownHttpMessage())) - { - // - // failed to send shutdown http message - // try send ctrl signal - // - HWND hCurrentConsole = NULL; - BOOL fFreeConsole = FALSE; - hCurrentConsole = GetConsoleWindow(); - if (hCurrentConsole) - { - // free current console first, as we may have one, e.g., hostedwebcore case - fFreeConsole = FreeConsole(); - } - - if (AttachConsole(m_dwProcessId)) - { - // As we called CreateProcess with CREATE_NEW_PROCESS_GROUP - // call ctrl-break instead of ctrl-c as child process ignores ctrl-c - if (!GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, m_dwProcessId)) - { - // failed to send the ctrl signal. terminate the backend process immediately instead of waiting for timeout - TerminateBackendProcess(); - } - FreeConsole(); - - if (fFreeConsole) - { - // IISExpress and hostedwebcore w3wp run as background process - // have to attach console back to ensure post app_offline scenario still works - AttachConsole(ATTACH_PARENT_PROCESS); - } - } - else - { - // terminate the backend process immediately instead of waiting for timeout - TerminateBackendProcess(); - } - } - - DereferenceServerProcess(); -} - -VOID -SERVER_PROCESS::TerminateBackendProcess( - VOID -) -{ - if (InterlockedCompareExchange(&m_lStopping, 1L, 0L) == 0L) - { - // backend process will be terminated, remove the waitcallback - if (m_hProcessWaitHandle != NULL) - { - UnregisterWait(m_hProcessWaitHandle); - - // as we skipped process exit callback (ProcessHandleCallback), - // need to dereference the object otherwise memory leak - DereferenceServerProcess(); - - m_hProcessWaitHandle = NULL; - } - - // cannot gracefully shutdown or timeout, terminate the process - if (m_hProcessHandle != NULL && m_hProcessHandle != INVALID_HANDLE_VALUE) - { - TerminateProcess(m_hProcessHandle, 0); - m_hProcessHandle = NULL; - } - - // log a warning for ungraceful shutdown - UTILITY::LogEventF(g_hEventLog, - EVENTLOG_WARNING_TYPE, - ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE, - ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE_MSG, - m_dwProcessId); - } -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.h deleted file mode 100644 index ff76297a1cc2..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/serverprocess.h +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#define MIN_PORT 1025 -#define MAX_PORT 48000 -#define MAX_RETRY 10 -#define MAX_ACTIVE_CHILD_PROCESSES 16 -#define LOCALHOST "127.0.0.1" -#define ASPNETCORE_PORT_STR L"ASPNETCORE_PORT" -#define ASPNETCORE_PORT_ENV_STR L"ASPNETCORE_PORT=" -#define ASPNETCORE_APP_PATH_ENV_STR L"ASPNETCORE_APPL_PATH=" -#define ASPNETCORE_APP_TOKEN_ENV_STR L"ASPNETCORE_TOKEN=" -#define ASPNETCORE_APP_PATH_ENV_STR L"ASPNETCORE_APPL_PATH=" - -class PROCESS_MANAGER; - -class SERVER_PROCESS -{ -public: - SERVER_PROCESS(); - - HRESULT - Initialize( - _In_ PROCESS_MANAGER *pProcessManager, - _In_ STRU *pszProcessExePath, - _In_ STRU *pszArguments, - _In_ DWORD dwStartupTimeLimitInMS, - _In_ DWORD dwShtudownTimeLimitInMS, - _In_ BOOL fWindowsAuthEnabled, - _In_ BOOL fBasicAuthEnabled, - _In_ BOOL fAnonymousAuthEnabled, - _In_ ENVIRONMENT_VAR_HASH* pEnvironmentVariables, - _In_ BOOL fStdoutLogEnabled, - _In_ BOOL fWebsocketsEnabled, - _In_ STRU *pstruStdoutLogFile, - _In_ STRU *pszAppPhysicalPath, - _In_ STRU *pszAppPath, - _In_ STRU *pszAppVirtualPath - ); - - HRESULT - StartProcess( VOID ); - - HRESULT - SetWindowsAuthToken( - _In_ HANDLE hToken, - _Out_ LPHANDLE pTargeTokenHandle - ); - - BOOL - IsReady( - VOID - ) - { - return m_fReady; - } - - VOID - StopProcess( - VOID - ); - - DWORD - GetPort() - { - return m_dwPort; - } - - VOID - ReferenceServerProcess( - VOID - ) - { - InterlockedIncrement(&m_cRefs); - } - - VOID - DereferenceServerProcess( - VOID - ) - { - _ASSERT(m_cRefs != 0 ); - if (InterlockedDecrement(&m_cRefs) == 0) - { - delete this; - } - } - - virtual - ~SERVER_PROCESS(); - - static - VOID - CALLBACK - ProcessHandleCallback( - _In_ PVOID pContext, - _In_ BOOL - ); - - VOID - HandleProcessExit( - VOID - ); - - FORWARDER_CONNECTION* - QueryWinHttpConnection( - VOID - ) - { - return m_pForwarderConnection; - } - - LPCSTR - QueryGuid() - { - return m_straGuid.QueryStr(); - }; - - VOID - SendSignal( - VOID - ); - -private: - VOID - CleanUp(); - - HRESULT - SetupJobObject( - VOID - ); - - BOOL - IsDebuggerIsAttached( - VOID - ); - - HRESULT - StopAllProcessesInJobObject( - VOID - ); - - HRESULT - SetupStdHandles( - _Inout_ LPSTARTUPINFOW pStartupInfo - ); - - HRESULT - CheckIfServerIsUp( - _In_ DWORD dwPort, - _Out_ DWORD * pdwProcessId, - _Out_ BOOL * pfReady - ); - - HRESULT - RegisterProcessWait( - _In_ PHANDLE phWaitHandle, - _In_ HANDLE hProcessToWaitOn - ); - - HRESULT - GetChildProcessHandles( - VOID - ); - - HRESULT - SetupListenPort( - ENVIRONMENT_VAR_HASH *pEnvironmentVarTable, - BOOL *pfCriticalError - ); - - HRESULT - SetupAppPath( - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable - ); - - HRESULT - SetupAppToken( - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable - ); - - HRESULT - OutputEnvironmentVariables( - MULTISZ* pmszOutput, - ENVIRONMENT_VAR_HASH* pEnvironmentVarTable - ); - - HRESULT - SetupCommandLine( - STRU* pstrCommandLine - ); - - HRESULT - PostStartCheck( - VOID - ); - - HRESULT - GetRandomPort( - DWORD* pdwPickedPort, - DWORD dwExcludedPort - ); - - static - VOID - SendShutDownSignal( - LPVOID lpParam - ); - - VOID - SendShutDownSignalInternal( - VOID - ); - - HRESULT - SendShutdownHttpMessage( - VOID - ); - - VOID - TerminateBackendProcess( - VOID - ); - - FORWARDER_CONNECTION *m_pForwarderConnection; - BOOL m_fStdoutLogEnabled; - BOOL m_fWindowsAuthEnabled; - BOOL m_fBasicAuthEnabled; - BOOL m_fAnonymousAuthEnabled; - BOOL m_fWebsocketsEnabled; - - STTIMER m_Timer; - SOCKET m_socket; - - STRU m_struLogFile; - STRU m_struFullLogFile; - STRU m_ProcessPath; - STRU m_Arguments; - STRU m_struAppVirtualPath; // e.g., '/' for site - STRU m_struAppFullPath; // e.g., /LM/W3SVC/4/ROOT/Inproc - STRU m_struPhysicalPath; // e.g., c:/test/mysite - STRU m_struPort; - STRU m_struCommandLine; - - volatile LONG m_lStopping; - volatile BOOL m_fReady; - mutable LONG m_cRefs; - - DWORD m_dwPort; - DWORD m_dwStartupTimeLimitInMS; - DWORD m_dwShutdownTimeLimitInMS; - DWORD m_cChildProcess; - DWORD m_dwChildProcessIds[MAX_ACTIVE_CHILD_PROCESSES]; - DWORD m_dwProcessId; - DWORD m_dwListeningProcessId; - - STRA m_straGuid; - - HANDLE m_hJobObject; - HANDLE m_hStdoutHandle; - // - // m_hProcessHandle is the handle to process this object creates. - // - HANDLE m_hProcessHandle; - HANDLE m_hListeningProcessHandle; - HANDLE m_hProcessWaitHandle; - HANDLE m_hShutdownHandle; - // - // m_hChildProcessHandle is the handle to process created by - // m_hProcessHandle process if it does. - // - HANDLE m_hChildProcessHandles[MAX_ACTIVE_CHILD_PROCESSES]; - HANDLE m_hChildProcessWaitHandles[MAX_ACTIVE_CHILD_PROCESSES]; - - PROCESS_MANAGER *m_pProcessManager; - ENVIRONMENT_VAR_HASH *m_pEnvironmentVarTable ; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.cxx deleted file mode 100644 index ae7ecf697e58..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.cxx +++ /dev/null @@ -1,1151 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -/*++ - -Abstract: - - Main Handler for websocket requests. - - Initiates websocket connection to backend. - Uses WinHttp API's for backend connections, - and IIS Websocket API's for sending/receiving - websocket traffic. - - Transfers data between the two IO endpoints. - ------------------ -Read Loop Design ------------------ -When a read IO completes successfully on any endpoints, Asp.Net Core Module doesn't -immediately issue the next read. The next read is initiated only after -the read data is sent to the other endpoint. As soon as this send completes, -we initiate the next IO. It should be noted that the send complete merely -indicates the API completion from HTTP, and not necessarily over the network. - -This prevents the need for data buffering at the Asp.Net Core Module level. - ---*/ - -#include "..\precomp.hxx" - -SRWLOCK WEBSOCKET_HANDLER::sm_RequestsListLock; - -LIST_ENTRY WEBSOCKET_HANDLER::sm_RequestsListHead; - -TRACE_LOG * WEBSOCKET_HANDLER::sm_pTraceLog; - -WEBSOCKET_HANDLER::WEBSOCKET_HANDLER() : - _pHttpContext(NULL), - _pWebSocketContext(NULL), - _hWebSocketRequest(NULL), - _pHandler(NULL), - _dwOutstandingIo(0), - _fCleanupInProgress(FALSE), - _fIndicateCompletionToIis(FALSE), - _fHandleClosed(FALSE), - _fReceivedCloseMsg(FALSE) -{ - DebugPrintf (ASPNETCORE_DEBUG_FLAG_INFO, "WEBSOCKET_HANDLER::WEBSOCKET_HANDLER"); - - InitializeCriticalSectionAndSpinCount(&_RequestLock, 1000); - InsertRequest(); -} - -VOID -WEBSOCKET_HANDLER::Terminate( - VOID - ) -{ - DebugPrintf (ASPNETCORE_DEBUG_FLAG_INFO, "WEBSOCKET_HANDLER::Terminate"); - if (!_fHandleClosed) - { - RemoveRequest(); - _fCleanupInProgress = TRUE; - - if (_pHttpContext != NULL) - { - _pHttpContext->CancelIo(); - _pHttpContext = NULL; - } - if (_hWebSocketRequest) - { - WinHttpCloseHandle(_hWebSocketRequest); - _hWebSocketRequest = NULL; - } - - _pWebSocketContext = NULL; - DeleteCriticalSection(&_RequestLock); - - delete this; - } -} - -//static -HRESULT -WEBSOCKET_HANDLER::StaticInitialize( - BOOL fEnableReferenceCountTracing - ) -/*++ - - Routine Description: - - Initialize structures required for idle connection cleanup. - ---*/ -{ - if (!g_fWebSocketSupported) - { - return S_OK; - } - - if (fEnableReferenceCountTracing) - { - // - // If tracing is enabled, keep track of all websocket requests - // for debugging purposes. - // - InitializeListHead (&sm_RequestsListHead); - sm_pTraceLog = CreateRefTraceLog( 10000, 0 ); - } - - InitializeSRWLock(&sm_RequestsListLock); - - return S_OK; -} - -//static -VOID -WEBSOCKET_HANDLER::StaticTerminate( - VOID - ) -{ - if (!g_fWebSocketSupported) - { - return; - } - - if (sm_pTraceLog) - { - DestroyRefTraceLog(sm_pTraceLog); - sm_pTraceLog = NULL; - } -} - -VOID -WEBSOCKET_HANDLER::InsertRequest( - VOID - ) -{ - if (g_fEnableReferenceCountTracing) - { - AcquireSRWLockExclusive(&sm_RequestsListLock); - InsertTailList(&sm_RequestsListHead, &_listEntry); - ReleaseSRWLockExclusive( &sm_RequestsListLock); - } -} - -//static -VOID -WEBSOCKET_HANDLER::RemoveRequest( - VOID - ) -{ - if (g_fEnableReferenceCountTracing) - { - AcquireSRWLockExclusive(&sm_RequestsListLock); - RemoveEntryList(&_listEntry); - ReleaseSRWLockExclusive( &sm_RequestsListLock); - } -} - -VOID -WEBSOCKET_HANDLER::IncrementOutstandingIo( - VOID - ) -{ - LONG dwOutstandingIo = InterlockedIncrement(&_dwOutstandingIo); - if (sm_pTraceLog) - { - WriteRefTraceLog(sm_pTraceLog, dwOutstandingIo, this); - } -} - -VOID -WEBSOCKET_HANDLER::DecrementOutstandingIo( - VOID - ) -/*++ - Routine Description: - Decrements outstanding IO count. - - This indicates completion to IIS if all outstanding IO - has been completed, and a Cleanup was triggered for this - connection (denoted by _fIndicateCompletionToIis). - ---*/ -{ - LONG dwOutstandingIo = InterlockedDecrement (&_dwOutstandingIo); - - if (sm_pTraceLog) - { - WriteRefTraceLog(sm_pTraceLog, dwOutstandingIo, this); - } - - if (dwOutstandingIo == 0 && _fIndicateCompletionToIis) - { - IndicateCompletionToIIS(); - } -} - -VOID -WEBSOCKET_HANDLER::IndicateCompletionToIIS( - VOID - ) -/*++ - Routine Description: - Indicates completion to IIS. - - This returns a Pending Status, so that forwarding handler has a chance - to do book keeping when request is finally done. - ---*/ -{ - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::IndicateCompletionToIIS called %d", _dwOutstandingIo); - - // - // close Websocket handle. This will triger a WinHttp callback - // on handle close, then let IIS pipeline continue. - // Make sure no pending IO as there is no IIS websocket cancelation, - // any unexpected callback will lead to AV. Revisit it once CanelOutGoingIO works - // - if (_hWebSocketRequest != NULL && _dwOutstandingIo == 0) - { - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::IndicateCompletionToIIS"); - - _pHandler->SetStatus(FORWARDER_DONE); - _fHandleClosed = TRUE; - WinHttpCloseHandle(_hWebSocketRequest); - _hWebSocketRequest = NULL; - } -} - -HRESULT -WEBSOCKET_HANDLER::ProcessRequest( - FORWARDING_HANDLER *pHandler, - IHttpContext *pHttpContext, - HINTERNET hRequest, - BOOL* pfHandleCreated -) -/*++ - -Routine Description: - - Entry point to WebSocket Handler: - - This routine is called after the 101 response was successfully sent to - the client. - This routine get's a websocket handle to winhttp, - websocket handle to IIS's websocket context, and initiates IO - in these two endpoints. - - ---*/ -{ - HRESULT hr = S_OK; - //DWORD dwBuffSize = RECEIVE_BUFFER_SIZE; - - *pfHandleCreated = FALSE; - _pHandler = pHandler; - - EnterCriticalSection(&_RequestLock); - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::ProcessRequest"); - - // - // Cache the points to IHttpContext3 - // - hr = HttpGetExtendedInterface(g_pHttpServer, - pHttpContext, - &_pHttpContext); - if (FAILED (hr)) - { - goto Finished; - } - - // - // Get pointer to IWebSocketContext for IIS websocket IO. - // - - _pWebSocketContext = (IWebSocketContext *) _pHttpContext-> - GetNamedContextContainer()->GetNamedContext(IIS_WEBSOCKET); - if ( _pWebSocketContext == NULL ) - { - hr = HRESULT_FROM_WIN32( ERROR_FILE_NOT_FOUND ); - goto Finished; - } - - // - // Get Handle to Winhttp's websocket context. - // - _hWebSocketRequest = WINHTTP_HELPER::sm_pfnWinHttpWebSocketCompleteUpgrade( - hRequest, - (DWORD_PTR) pHandler); - - if (_hWebSocketRequest == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - *pfHandleCreated = TRUE; - - // - // Resize the send & receive buffers to be more conservative (and avoid DoS attacks). - // NOTE: The two WinHTTP options below were added for WinBlue, so we can't - // rely on their existence. - // - - //if (!WinHttpSetOption(_hWebSocketRequest, - // WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE, - // &dwBuffSize, - // sizeof(dwBuffSize))) - //{ - // DWORD dwRet = GetLastError(); - // if ( dwRet != ERROR_WINHTTP_INVALID_OPTION ) - // { - // hr = HRESULT_FROM_WIN32(dwRet); - // goto Finished; - // } - //} - - //if (!WinHttpSetOption(_hWebSocketRequest, - // WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE, - // &dwBuffSize, - // sizeof(dwBuffSize))) - //{ - // DWORD dwRet = GetLastError(); - // if ( dwRet != ERROR_WINHTTP_INVALID_OPTION ) - // { - // hr = HRESULT_FROM_WIN32(dwRet); - // goto Finished; - // } - //} - - // - // Initiate Read on IIS - // - hr = DoIisWebSocketReceive(); - if (FAILED(hr)) - { - goto Finished; - } - - // - // Initiate Read on WinHttp - // - - hr = DoWinHttpWebSocketReceive(); - if (FAILED(hr)) - { - goto Finished; - } - -Finished: - LeaveCriticalSection(&_RequestLock); - - if (FAILED (hr)) - { - DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, - "Process Request Failed with HR=%08x", hr); - } - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::DoIisWebSocketReceive( - VOID -) -/*++ - -Routine Description: - - Initiates a websocket receive on the IIS Websocket Context. - - ---*/ -{ - HRESULT hr = S_OK; - DWORD dwBufferSize = RECEIVE_BUFFER_SIZE; - BOOL fUtf8Encoded; - BOOL fFinalFragment; - BOOL fClose; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoIisWebSocketReceive"); - - IncrementOutstandingIo(); - - hr = _pWebSocketContext->ReadFragment( - &_IisReceiveBuffer, - &dwBufferSize, - TRUE, - &fUtf8Encoded, - &fFinalFragment, - &fClose, - OnReadIoCompletion, - this, - NULL); - if (FAILED(hr)) - { - DecrementOutstandingIo(); - DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::DoIisWebSocketSend failed with %08x", hr); - } - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::DoWinHttpWebSocketReceive( - VOID -) -/*++ - -Routine Description: - - Initiates a websocket receive on WinHttp - - ---*/ -{ - HRESULT hr = S_OK; - DWORD dwError = NO_ERROR; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoWinHttpWebSocketReceive"); - - IncrementOutstandingIo(); - - dwError = WINHTTP_HELPER::sm_pfnWinHttpWebSocketReceive( - _hWebSocketRequest, - &_WinHttpReceiveBuffer, - RECEIVE_BUFFER_SIZE, - NULL, - NULL); - - if (dwError != NO_ERROR) - { - DecrementOutstandingIo(); - hr = HRESULT_FROM_WIN32(dwError); - DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::DoWinHttpWebSocketReceive failed with %08x", hr); - } - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::DoIisWebSocketSend( - DWORD cbData, - WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType -) -/*++ - -Routine Description: - - Initiates a websocket send on IIS - ---*/ -{ - HRESULT hr = S_OK; - BOOL fUtf8Encoded = FALSE; - BOOL fFinalFragment = FALSE; - BOOL fClose = FALSE; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoIisWebSocketSend %d", eBufferType); - - if (eBufferType == WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE) - { - // - // Query Close Status from WinHttp - // - - DWORD dwError = NO_ERROR; - USHORT uStatus; - DWORD dwReceived = 0; - STACK_STRU(strCloseReason, 128); - - dwError = WINHTTP_HELPER::sm_pfnWinHttpWebSocketQueryCloseStatus( - _hWebSocketRequest, - &uStatus, - &_WinHttpReceiveBuffer, - RECEIVE_BUFFER_SIZE, - &dwReceived); - - if (dwError != NO_ERROR) - { - hr = HRESULT_FROM_WIN32(dwError); - goto Finished; - } - - // - // Convert close reason to WCHAR - // - hr = strCloseReason.CopyA((PCSTR)&_WinHttpReceiveBuffer, - dwReceived); - if (FAILED(hr)) - { - goto Finished; - } - - IncrementOutstandingIo(); - // - // Backend end may start close hand shake first - // Need to indicate no more receive should be called on WinHttp connection - // - _fReceivedCloseMsg = TRUE; - _fIndicateCompletionToIis = TRUE; - - // - // Send close to IIS. - // - hr = _pWebSocketContext->SendConnectionClose( - TRUE, - uStatus, - uStatus == 1005 ? NULL : strCloseReason.QueryStr(), - OnWriteIoCompletion, - this, - NULL); - } - else - { - // - // Get equivalant flags for IIS API from buffer type. - // - - WINHTTP_HELPER::GetFlagsFromBufferType(eBufferType, - &fUtf8Encoded, - &fFinalFragment, - &fClose); - - IncrementOutstandingIo(); - - // - // Do the Send. - // - hr = _pWebSocketContext->WriteFragment( - &_WinHttpReceiveBuffer, - &cbData, - TRUE, - fUtf8Encoded, - fFinalFragment, - OnWriteIoCompletion, - this, - NULL); - } - - if (FAILED(hr)) - { - DecrementOutstandingIo(); - } - -Finished: - if (FAILED(hr)) - { - DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::DoIisWebSocketSend failed with %08x", hr); - } - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::DoWinHttpWebSocketSend( - DWORD cbData, - WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType -) -/*++ - -Routine Description: - - Initiates a websocket send on WinHttp - ---*/ -{ - DWORD dwError = NO_ERROR; - HRESULT hr = S_OK; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoWinHttpWebSocketSend, %d", eBufferType); - - if (eBufferType == WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE) - { - USHORT uStatus; - LPCWSTR pszReason; - STACK_STRA(strCloseReason, 128); - - // - // Get Close status from IIS. - // - hr = _pWebSocketContext->GetCloseStatus(&uStatus, - &pszReason); - - if (FAILED(hr)) - { - goto Finished; - } - - // - // Convert status to UTF8 - // - hr = strCloseReason.CopyWToUTF8Unescaped(pszReason); - if (FAILED(hr)) - { - goto Finished; - } - - IncrementOutstandingIo(); - - // - // Send Close. - // - dwError = WINHTTP_HELPER::sm_pfnWinHttpWebSocketShutdown( - _hWebSocketRequest, - uStatus, - strCloseReason.QueryCCH() == 0 ? NULL : (PVOID) strCloseReason.QueryStr(), - strCloseReason.QueryCCH()); - - if (dwError == ERROR_IO_PENDING) - { - // - // Call will complete asynchronously, return. - // ignore error. - // - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoWinhttpWebSocketSend IO_PENDING"); - - dwError = NO_ERROR; - } - else - { - if (dwError == NO_ERROR) - { - // - // Call completed synchronously. - // - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::DoWinhttpWebSocketSend Shutdown successful."); - } - } - } - else - { - IncrementOutstandingIo(); - - dwError = WINHTTP_HELPER::sm_pfnWinHttpWebSocketSend( - _hWebSocketRequest, - eBufferType, - cbData == 0 ? NULL : &_IisReceiveBuffer, - cbData - ); - } - - if (dwError != NO_ERROR) - { - hr = HRESULT_FROM_WIN32(dwError); - DecrementOutstandingIo(); - goto Finished; - } - -Finished: - if (FAILED(hr)) - { - DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::DoWinHttpWebSocketSend failed with %08x", hr); - } - - return hr; -} - -//static -VOID -WINAPI -WEBSOCKET_HANDLER::OnReadIoCompletion( - HRESULT hrError, - VOID * pvCompletionContext, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ) -/*++ - - Routine Description: - - Completion routine for Read's from IIS pipeline. - ---*/ -{ - WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) - pvCompletionContext; - - pHandler->OnIisReceiveComplete( - hrError, - cbIO, - fUTF8Encoded, - fFinalFragment, - fClose - ); -} - -//static -VOID -WINAPI -WEBSOCKET_HANDLER::OnWriteIoCompletion( - HRESULT hrError, - VOID * pvCompletionContext, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ) -/*++ - Routine Description: - - Completion routine for Write's from IIS pipeline. - ---*/ -{ - WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) - pvCompletionContext; - - UNREFERENCED_PARAMETER(fUTF8Encoded); - UNREFERENCED_PARAMETER(fFinalFragment); - UNREFERENCED_PARAMETER(fClose); - - pHandler->OnIisSendComplete( - hrError, - cbIO - ); -} - - -HRESULT -WEBSOCKET_HANDLER::OnWinHttpSendComplete( - WINHTTP_WEB_SOCKET_STATUS * - ) -/*++ - -Routine Description: - Completion callback executed when a send to backend - server completes. - - If the send was successful, issue the next read - on the client's endpoint. - -++*/ -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - CleanupReason cleanupReason = CleanupReasonUnknown; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::OnWinHttpSendComplete"); - - if (_fCleanupInProgress) - { - goto Finished; - } - - EnterCriticalSection (&_RequestLock); - - fLocked = TRUE; - - if (_fCleanupInProgress) - { - goto Finished; - } - // - // Data was successfully sent to backend. - // Initiate next receive from IIS. - // - - hr = DoIisWebSocketReceive(); - if (FAILED(hr)) - { - goto Finished; - } - -Finished: - if (fLocked) - { - LeaveCriticalSection(&_RequestLock); - } - - if (FAILED (hr)) - { - Cleanup (cleanupReason); - - DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::OnWinsockSendComplete failed with HR=%08x", hr); - } - - // - // The handler object can be gone after this call. - // do not reference it after this statement. - // - DecrementOutstandingIo(); - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::OnWinHttpShutdownComplete( - VOID - ) -{ - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::OnWinHttpShutdownComplete --%p", _pHandler); - - DecrementOutstandingIo(); - - return S_OK; -} - -HRESULT -WEBSOCKET_HANDLER::OnWinHttpIoError( - WINHTTP_WEB_SOCKET_ASYNC_RESULT *pCompletionStatus -) -{ - HRESULT hr = HRESULT_FROM_WIN32(pCompletionStatus->AsyncResult.dwError); - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::OnWinHttpIoError HR = %08x, Operation = %d", - hr, pCompletionStatus->AsyncResult.dwResult); - - Cleanup(ServerDisconnect); - DecrementOutstandingIo(); - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::OnWinHttpReceiveComplete( - WINHTTP_WEB_SOCKET_STATUS * pCompletionStatus - ) -/*++ - -Routine Description: - - Completion callback executed when a receive completes - on the backend server winhttp endpoint. - - Issue send on the Client(IIS) if the receive was - successful. - - If the receive completed with zero bytes, that - indicates that the server has disconnected the connection. - Issue cleanup for the websocket handler. ---*/ -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - CleanupReason cleanupReason = CleanupReasonUnknown; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::OnWinHttpReceiveComplete --%p", _pHandler); - - if (_fCleanupInProgress) - { - goto Finished; - } - - EnterCriticalSection(&_RequestLock); - - fLocked = TRUE; - if (_fCleanupInProgress) - { - goto Finished; - } - hr = DoIisWebSocketSend( - pCompletionStatus->dwBytesTransferred, - pCompletionStatus->eBufferType - ); - - if (FAILED (hr)) - { - cleanupReason = ClientDisconnect; - goto Finished; - } - -Finished: - if (fLocked) - { - LeaveCriticalSection(&_RequestLock); - } - if (FAILED (hr)) - { - Cleanup (cleanupReason); - - DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::OnWinsockReceiveComplete failed with HR=%08x", hr); - } - - // - // The handler object can be gone after this call. - // do not reference it after this statement. - // - - DecrementOutstandingIo(); - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::OnIisSendComplete( - HRESULT hrCompletion, - DWORD cbIo - ) -/*++ -Routine Description: - - Completion callback executed when a send - completes from the client. - - If send was successful,issue read on the - server endpoint, to continue the readloop. - ---*/ -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - CleanupReason cleanupReason = CleanupReasonUnknown; - - UNREFERENCED_PARAMETER(cbIo); - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, "WEBSOCKET_HANDLER::OnIisSendComplete"); - - if (FAILED(hrCompletion)) - { - hr = hrCompletion; - cleanupReason = ClientDisconnect; - goto Finished; - } - - if (_fCleanupInProgress) - { - goto Finished; - } - EnterCriticalSection(&_RequestLock); - fLocked = TRUE; - if (_fCleanupInProgress) - { - goto Finished; - } - - // - // Only call read if no close hand shake was received from backend - // - if (!_fReceivedCloseMsg) - { - // - // Write Completed, initiate next read from backend server. - // - hr = DoWinHttpWebSocketReceive(); - if (FAILED(hr)) - { - cleanupReason = ServerDisconnect; - goto Finished; - } - } - -Finished: - if (fLocked) - { - LeaveCriticalSection(&_RequestLock); - } - if (FAILED (hr)) - { - Cleanup (cleanupReason); - - DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::OnIisSendComplete failed with HR=%08x", hr); - } - - // - // The handler object can be gone after this call. - // do not reference it after this statement. - // - - DecrementOutstandingIo(); - - return hr; -} - -HRESULT -WEBSOCKET_HANDLER::OnIisReceiveComplete( - HRESULT hrCompletion, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ) -/*++ -Routine Description: - - Completion routine executed when a receive completes - from the client (IIS endpoint). - - If the receive was successful, initiate a send on - the backend server (winhttp) endpoint. - - If the receive failed, initiate cleanup. - ---*/ -{ - HRESULT hr = S_OK; - BOOL fLocked = FALSE; - CleanupReason cleanupReason = CleanupReasonUnknown; - WINHTTP_WEB_SOCKET_BUFFER_TYPE BufferType; - - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::OnIisReceiveComplete"); - - if (FAILED(hrCompletion)) - { - cleanupReason = ClientDisconnect; - hr = hrCompletion; - goto Finished; - } - - if (_fCleanupInProgress) - { - goto Finished; - } - - EnterCriticalSection(&_RequestLock); - - fLocked = TRUE; - if (_fCleanupInProgress) - { - goto Finished; - } - // - // Get Buffer Type from flags. - // - - WINHTTP_HELPER::GetBufferTypeFromFlags(fUTF8Encoded, - fFinalFragment, - fClose, - &BufferType); - - // - // Initiate Send. - // - - hr = DoWinHttpWebSocketSend(cbIO, BufferType); - if (FAILED (hr)) - { - cleanupReason = ServerDisconnect; - goto Finished; - } - -Finished: - if (fLocked) - { - LeaveCriticalSection(&_RequestLock); - } - if (FAILED (hr)) - { - Cleanup (cleanupReason); - - DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, - "WEBSOCKET_HANDLER::OnIisReceiveComplete failed with HR=%08x", hr); - } - - // - // The handler object can be gone after this call. - // do not reference it after this statement. - // - - DecrementOutstandingIo(); - - return hr; -} - -VOID -WEBSOCKET_HANDLER::Cleanup( - CleanupReason reason -) -/*++ - -Routine Description: - - Cleanup function for the websocket handler. - - Initiates cancelIo on the two IO endpoints: - IIS, WinHttp client. - -Arguments: - CleanupReason ---*/ -{ - BOOL fLocked = FALSE; - DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, - "WEBSOCKET_HANDLER::Cleanup Initiated with reason %d", reason); - - if (_fCleanupInProgress) - { - goto Finished; - } - - EnterCriticalSection(&_RequestLock); - - fLocked = TRUE; - if (_fCleanupInProgress) - { - goto Finished; - } - - _fCleanupInProgress = TRUE; - - _fIndicateCompletionToIis = TRUE; - - // - // TODO:: Raise FREB event with cleanup reason. - // - if (reason == ClientDisconnect || reason == ServerStateUnavailable) - { - // - // Calling shutdown to notify the backend about disonnect - // - WINHTTP_HELPER::sm_pfnWinHttpWebSocketShutdown( - _hWebSocketRequest, - 1011, // indicate that a server is terminating the connection because it encountered - // an unexpected condition that prevent it from fulfilling the request - NULL, // Reason - 0); // length og Reason - - } - - if (reason == ServerDisconnect || reason == ServerStateUnavailable) - { - _pHttpContext->CancelIo(); - // - // CancelIo sometime may not be able to cannel pending websocket IO - // ResetConnection to force IISWebsocket module to release the pipeline - // - _pHttpContext->GetResponse()->ResetConnection(); - } - -Finished: - if (fLocked) - { - LeaveCriticalSection(&_RequestLock); - } -} diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.h deleted file mode 100644 index 2256e5d70e95..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/websockethandler.h +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -extern IHttpServer * g_pHttpServer; -class FORWARDING_HANDLER; - -class WEBSOCKET_HANDLER -{ -public: - WEBSOCKET_HANDLER(); - - static - HRESULT - StaticInitialize( - BOOL fEnableReferenceTraceLogging - ); - - static - VOID - StaticTerminate( - VOID - ); - - VOID - Terminate( - VOID - ); - - VOID - TerminateRequest( - VOID - ) - { - Cleanup(ServerStateUnavailable); - } - - HRESULT - ProcessRequest( - FORWARDING_HANDLER *pHandler, - IHttpContext * pHttpContext, - HINTERNET hRequest, - BOOL* pfHandleCreated - ); - - REQUEST_NOTIFICATION_STATUS - OnAsyncCompletion( - VOID - ); - - HRESULT - OnWinHttpSendComplete( - WINHTTP_WEB_SOCKET_STATUS * pCompletionStatus - ); - - HRESULT - OnWinHttpShutdownComplete( - VOID - ); - - HRESULT - OnWinHttpReceiveComplete( - WINHTTP_WEB_SOCKET_STATUS * pCompletionStatus - ); - - HRESULT - OnWinHttpIoError( - WINHTTP_WEB_SOCKET_ASYNC_RESULT *pCompletionStatus - ); - - -private: - enum CleanupReason - { - CleanupReasonUnknown = 0, - IdleTimeout = 1, - ConnectFailed = 2, - ClientDisconnect = 3, - ServerDisconnect = 4, - ServerStateUnavailable = 5 - }; - - virtual - ~WEBSOCKET_HANDLER() - { - } - - WEBSOCKET_HANDLER(const WEBSOCKET_HANDLER &); - void operator=(const WEBSOCKET_HANDLER &); - - VOID - InsertRequest( - VOID - ); - - VOID - RemoveRequest( - VOID - ); - - static - VOID - WINAPI - OnReadIoCompletion( - HRESULT hrError, - VOID * pvCompletionContext, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ); - - static - VOID - WINAPI - OnWriteIoCompletion( - HRESULT hrError, - VOID * pvCompletionContext, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ); - - VOID - Cleanup( - CleanupReason reason - ); - - HRESULT - DoIisWebSocketReceive( - VOID - ); - - HRESULT - DoWinHttpWebSocketReceive( - VOID - ); - - HRESULT - DoIisWebSocketSend( - DWORD cbData, - WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType - ); - - HRESULT - DoWinHttpWebSocketSend( - DWORD cbData, - WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType - ); - - HRESULT - OnIisSendComplete( - HRESULT hrError, - DWORD cbIO - ); - - HRESULT - OnIisReceiveComplete( - HRESULT hrError, - DWORD cbIO, - BOOL fUTF8Encoded, - BOOL fFinalFragment, - BOOL fClose - ); - - VOID - IncrementOutstandingIo( - VOID - ); - - VOID - DecrementOutstandingIo( - VOID - ); - - VOID - IndicateCompletionToIIS( - VOID - ); - -private: - static const - DWORD RECEIVE_BUFFER_SIZE = 4*1024; - - LIST_ENTRY _listEntry; - - IHttpContext3 * _pHttpContext; - - IWebSocketContext * _pWebSocketContext; - - FORWARDING_HANDLER *_pHandler; - - HINTERNET _hWebSocketRequest; - - BYTE _WinHttpReceiveBuffer[RECEIVE_BUFFER_SIZE]; - - BYTE _IisReceiveBuffer[RECEIVE_BUFFER_SIZE]; - - CRITICAL_SECTION _RequestLock; - - LONG _dwOutstandingIo; - - volatile - BOOL _fCleanupInProgress; - - volatile - BOOL _fIndicateCompletionToIis; - - volatile - BOOL _fHandleClosed; - - volatile - BOOL _fReceivedCloseMsg; - - static - LIST_ENTRY sm_RequestsListHead; - - static - SRWLOCK sm_RequestsListLock; - - static - TRACE_LOG * sm_pTraceLog; -}; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.cxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.cxx deleted file mode 100644 index ce4256a710bd..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.cxx +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#include "..\precomp.hxx" - -PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE -WINHTTP_HELPER::sm_pfnWinHttpWebSocketCompleteUpgrade; - -PFN_WINHTTP_WEBSOCKET_SEND -WINHTTP_HELPER::sm_pfnWinHttpWebSocketSend; - -PFN_WINHTTP_WEBSOCKET_RECEIVE -WINHTTP_HELPER::sm_pfnWinHttpWebSocketReceive; - -PFN_WINHTTP_WEBSOCKET_SHUTDOWN -WINHTTP_HELPER::sm_pfnWinHttpWebSocketShutdown; - -PFN_WINHTTP_WEBSOCKET_QUERY_CLOSE_STATUS -WINHTTP_HELPER::sm_pfnWinHttpWebSocketQueryCloseStatus; - -//static -HRESULT -WINHTTP_HELPER::StaticInitialize( - VOID -) -{ - HRESULT hr = S_OK; - - if (!g_fWebSocketSupported) - { - return S_OK; - } - - // - // Initialize the function pointers for WinHttp Websocket API's. - // - - HMODULE hWinHttp = GetModuleHandleA("winhttp.dll"); - if (hWinHttp == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - sm_pfnWinHttpWebSocketCompleteUpgrade = (PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE) - GetProcAddress(hWinHttp, "WinHttpWebSocketCompleteUpgrade"); - if (sm_pfnWinHttpWebSocketCompleteUpgrade == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - sm_pfnWinHttpWebSocketQueryCloseStatus = (PFN_WINHTTP_WEBSOCKET_QUERY_CLOSE_STATUS) - GetProcAddress(hWinHttp, "WinHttpWebSocketQueryCloseStatus"); - if (sm_pfnWinHttpWebSocketQueryCloseStatus == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - sm_pfnWinHttpWebSocketReceive = (PFN_WINHTTP_WEBSOCKET_RECEIVE) - GetProcAddress(hWinHttp, "WinHttpWebSocketReceive"); - if (sm_pfnWinHttpWebSocketReceive == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - sm_pfnWinHttpWebSocketSend = (PFN_WINHTTP_WEBSOCKET_SEND) - GetProcAddress(hWinHttp, "WinHttpWebSocketSend"); - if (sm_pfnWinHttpWebSocketSend == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - sm_pfnWinHttpWebSocketShutdown = (PFN_WINHTTP_WEBSOCKET_SHUTDOWN) - GetProcAddress(hWinHttp, "WinHttpWebSocketShutdown"); - if (sm_pfnWinHttpWebSocketShutdown == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - -Finished: - return hr; -} - - -//static -VOID -WINHTTP_HELPER::GetFlagsFromBufferType( - __in WINHTTP_WEB_SOCKET_BUFFER_TYPE BufferType, - __out BOOL * pfUtf8Encoded, - __out BOOL * pfFinalFragment, - __out BOOL * pfClose -) -{ - switch (BufferType) - { - case WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE: - *pfUtf8Encoded = FALSE; - *pfFinalFragment = TRUE; - *pfClose = FALSE; - - break; - - case WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE: - *pfUtf8Encoded = FALSE; - *pfFinalFragment = FALSE; - *pfClose = FALSE; - - break; - - case WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE: - *pfUtf8Encoded = TRUE; - *pfFinalFragment = TRUE; - *pfClose = FALSE; - - break; - - case WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE: - *pfUtf8Encoded = TRUE; - *pfFinalFragment = FALSE; - *pfClose = FALSE; - - break; - - case WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE: - *pfUtf8Encoded = FALSE; - *pfFinalFragment = FALSE; - *pfClose = TRUE; - - break; - } -} - -//static -VOID -WINHTTP_HELPER::GetBufferTypeFromFlags( - __in BOOL fUtf8Encoded, - __in BOOL fFinalFragment, - __in BOOL fClose, - __out WINHTTP_WEB_SOCKET_BUFFER_TYPE* pBufferType -) -{ - if (fClose) - { - *pBufferType = WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE; - } - else - if (fUtf8Encoded) - { - if (fFinalFragment) - { - *pBufferType = WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE; - } - else - { - *pBufferType = WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE; - } - } - else - { - if (fFinalFragment) - { - *pBufferType = WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE; - } - else - { - *pBufferType = WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE; - } - } - - return; -} \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.h deleted file mode 100644 index d583f6fb1032..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/outofprocess/winhttphelper.h +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -typedef -HINTERNET -(WINAPI * PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE)( - _In_ HINTERNET hRequest, - _In_opt_ DWORD_PTR pContext -); - - -typedef -DWORD -(WINAPI * PFN_WINHTTP_WEBSOCKET_SEND)( - _In_ HINTERNET hWebSocket, - _In_ WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType, - _In_reads_opt_(dwBufferLength) PVOID pvBuffer, - _In_ DWORD dwBufferLength -); - -typedef -DWORD -(WINAPI * PFN_WINHTTP_WEBSOCKET_RECEIVE)( - _In_ HINTERNET hWebSocket, - _Out_writes_bytes_to_(dwBufferLength, *pdwBytesRead) PVOID pvBuffer, - _In_ DWORD dwBufferLength, - _Out_range_(0, dwBufferLength) DWORD *pdwBytesRead, - _Out_ WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType -); - -typedef -DWORD -(WINAPI * PFN_WINHTTP_WEBSOCKET_SHUTDOWN)( - _In_ HINTERNET hWebSocket, - _In_ USHORT usStatus, - _In_reads_bytes_opt_(dwReasonLength) PVOID pvReason, - _In_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD dwReasonLength -); - -typedef -DWORD -(WINAPI * PFN_WINHTTP_WEBSOCKET_QUERY_CLOSE_STATUS)( - _In_ HINTERNET hWebSocket, - _Out_ USHORT *pusStatus, - _Out_writes_bytes_to_opt_(dwReasonLength, *pdwReasonLengthConsumed) PVOID pvReason, - _In_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD dwReasonLength, - _Out_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD *pdwReasonLengthConsumed -); - -class WINHTTP_HELPER -{ -public: - static - HRESULT - StaticInitialize(); - - static - VOID - GetFlagsFromBufferType( - __in WINHTTP_WEB_SOCKET_BUFFER_TYPE BufferType, - __out BOOL * pfUtf8Encoded, - __out BOOL * pfFinalFragment, - __out BOOL * pfClose - ); - - static - VOID - GetBufferTypeFromFlags( - __in BOOL fUtf8Encoded, - __in BOOL fFinalFragment, - __in BOOL fClose, - __out WINHTTP_WEB_SOCKET_BUFFER_TYPE* pBufferType - ); - - static - PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE sm_pfnWinHttpWebSocketCompleteUpgrade; - - static - PFN_WINHTTP_WEBSOCKET_SEND sm_pfnWinHttpWebSocketSend; - - static - PFN_WINHTTP_WEBSOCKET_RECEIVE sm_pfnWinHttpWebSocketReceive; - - static - PFN_WINHTTP_WEBSOCKET_SHUTDOWN sm_pfnWinHttpWebSocketShutdown; - - static - PFN_WINHTTP_WEBSOCKET_QUERY_CLOSE_STATUS sm_pfnWinHttpWebSocketQueryCloseStatus; -}; \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/precomp.hxx b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/precomp.hxx deleted file mode 100644 index 2fa43aac17b2..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/precomp.hxx +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once -#pragma warning( disable : 4091) - -// -// System related headers -// -#define _WINSOCKAPI_ - -#define NTDDI_VERSION 0x06010000 -#define WINVER 0x0601 -#define _WIN32_WINNT 0x0601 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// This should remove our issue of compiling for win7 without header files. -// We force the Windows 8 version check logic in iiswebsocket.h to succeed even though we're compiling for Windows 7. -// Then, we set the version defines back to Windows 7 to for the remainder of the compilation. -#undef NTDDI_VERSION -#undef WINVER -#undef _WIN32_WINNT -#define NTDDI_VERSION 0x06020000 -#define WINVER 0x0602 -#define _WIN32_WINNT 0x0602 -#include -#undef NTDDI_VERSION -#undef WINVER -#undef _WIN32_WINNT - -#define NTDDI_VERSION 0x06010000 -#define WINVER 0x0601 -#define _WIN32_WINNT 0x0601 - -#include "..\IISLib\acache.h" -#include "..\IISLib\multisz.h" -#include "..\IISLib\multisza.h" -#include "..\IISLib\base64.h" -#include "..\IISLib\listentry.h" -#include "..\CommonLib\fx_ver.h" -#include "..\CommonLib\debugutil.h" -#include "..\CommonLib\requesthandler.h" -#include "..\CommonLib\aspnetcoreconfig.h" -#include "..\CommonLib\utility.h" -#include "..\CommonLib\application.h" -#include "..\CommonLib\resources.h" -#include "aspnetcore_event.h" -#include "aspnetcore_msg.h" -#include "disconnectcontext.h" -#include "environmentvariablehelpers.h" -#include "sttimer.h" -#include ".\inprocess\InProcessHandler.h" -#include ".\inprocess\inprocessapplication.h" -#include ".\outofprocess\responseheaderhash.h" -#include ".\outofprocess\protocolconfig.h" -#include ".\outofprocess\forwarderconnection.h" -#include ".\outofprocess\serverprocess.h" -#include ".\outofprocess\processmanager.h" -#include ".\outofprocess\websockethandler.h" -#include ".\outofprocess\forwardinghandler.h" -#include ".\outofprocess\outprocessapplication.h" -#include ".\outofprocess\winhttphelper.h" - -#ifdef max -#undef max -template inline T max(T a, T b) -{ - return a > b ? a : b; -} -#endif - -#ifdef min -#undef min -template inline T min(T a, T b) -{ - return a < b ? a : b; -} -#endif - - -inline bool IsSpace(char ch) -{ - switch (ch) - { - case 32: // ' ' - case 9: // '\t' - case 10: // '\n' - case 13: // '\r' - case 11: // '\v' - case 12: // '\f' - return true; - default: - return false; - } -} - -extern BOOL g_fAsyncDisconnectAvailable; -extern BOOL g_fWinHttpNonBlockingCallbackAvailable; -extern BOOL g_fWebSocketSupported; -extern BOOL g_fNsiApiNotSupported; -extern BOOL g_fEnableReferenceCountTracing; -extern BOOL g_fProcessDetach; -extern DWORD g_dwActiveServerProcesses; -extern DWORD g_OptionalWinHttpFlags; -extern SRWLOCK g_srwLockRH; -extern HINTERNET g_hWinhttpSession; -extern DWORD g_dwTlsIndex; -extern HANDLE g_hEventLog; diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/requesthandler.rc b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/requesthandler.rc deleted file mode 100644 index 2cc99c23310c..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/requesthandler.rc +++ /dev/null @@ -1,119 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include -#include "version.h" -#include "..\CommonLib\resources.h" -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#define FileDescription "IIS ASP.NET Core Module Request Handler. Commit: " CommitHash - -///////////////////////////////////////////////////////////////////////////// -// -// 11 -// - -//1 11 -//BEGIN -// 0x0001, 0x0000, 0x03e8, 0x0000, 0x03ed, 0x0000, 0x0010, 0x0000, 0x0010, -// 0x0001, 0x0025, 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, -// 0x0025, 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, -// 0x0031, 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, -// 0x000d, 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, 0x000d, -// 0x000a, 0x0000, 0x0000, 0x0010, 0x0001, 0x0025, 0x0031, 0x000d, 0x000a, -// 0x0000, 0x0000 -//END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\CommonLib\resources.h\0" -END - -2 TEXTINCLUDE -BEGIN - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION FileVersion - PRODUCTVERSION ProductVersion - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "Microsoft" - VALUE "FileDescription", FileDescription - VALUE "FileVersion", FileVersionStr - VALUE "InternalName", "aspnetcorerh.dll" - VALUE "LegalCopyright", "Copyright (C) Microsoft Corporation" - VALUE "OriginalFilename", "aspnetcorerh.dll" - VALUE "ProductName", "ASP.NET Core Module Request Handler" - VALUE "ProductVersion", ProductVersionStr - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_INVALID_PROPERTY "Property name '%s' in system.webServer/aspNetCore section has invalid value '%s' which does not conform to the prescribed format" - IDS_SERVER_ERROR "There was a connection error while trying to route the request." -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/sttimer.h b/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/sttimer.h deleted file mode 100644 index dfb79e7a6a8a..000000000000 --- a/src/IISIntegration/src/AspNetCoreModuleV2/RequestHandler/sttimer.h +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#ifndef _STTIMER_H -#define _STTIMER_H - -class STTIMER -{ -public: - - STTIMER() - : _pTimer( NULL ) - { - fInCanel = FALSE; - } - - virtual - ~STTIMER() - { - if ( _pTimer ) - { - CancelTimer(); - CloseThreadpoolTimer( _pTimer ); - _pTimer = NULL; - } - } - - HRESULT - InitializeTimer( - PTP_TIMER_CALLBACK pfnCallback, - VOID * pContext, - DWORD dwInitialWait = 0, - DWORD dwPeriod = 0 - ) - { - _pTimer = CreateThreadpoolTimer( pfnCallback, - pContext, - NULL ); - - if ( !_pTimer ) - { - return HRESULT_FROM_WIN32( GetLastError() ); - } - - if ( dwInitialWait ) - { - SetTimer( dwInitialWait, - dwPeriod ); - } - - return S_OK; - } - - VOID - SetTimer( - DWORD dwInitialWait, - DWORD dwPeriod = 0 - ) - { - FILETIME ftInitialWait; - - if ( dwInitialWait == 0 && dwPeriod == 0 ) - { - // - // Special case. We are preventing new callbacks - // from being queued. Any existing callbacks in the - // queue will still run. - // - // This effectively disables the timer. It can be - // re-enabled by setting non-zero initial wait or - // period values. - // - if (_pTimer != NULL) - { - SetThreadpoolTimer(_pTimer, NULL, 0, 0); - } - - return; - } - - InitializeRelativeFileTime( &ftInitialWait, dwInitialWait ); - - SetThreadpoolTimer( _pTimer, - &ftInitialWait, - dwPeriod, - 0 ); - } - - VOID - CancelTimer() - { - // - // Disable the timer - // - if (fInCanel) - return; - - fInCanel = TRUE; - SetTimer( 0 ); - - // - // Wait until any callbacks queued prior to disabling - // have completed. - // - if (_pTimer != NULL) - { - WaitForThreadpoolTimerCallbacks(_pTimer, TRUE); - } - - fInCanel = FALSE; - } - - static - VOID - CALLBACK - TimerCallback( - _In_ PTP_CALLBACK_INSTANCE Instance, - _In_ PVOID Context, - _In_ PTP_TIMER Timer - ) - { - Instance; - Timer; - STRU* pstruLogFilePath = (STRU*)Context; - HANDLE hStdoutHandle = NULL; - SECURITY_ATTRIBUTES saAttr = { 0 }; - HRESULT hr = S_OK; - - saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); - saAttr.bInheritHandle = TRUE; - saAttr.lpSecurityDescriptor = NULL; - - hStdoutHandle = CreateFileW(pstruLogFilePath->QueryStr(), - FILE_READ_DATA, - FILE_SHARE_WRITE, - &saAttr, - OPEN_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - NULL); - if (hStdoutHandle == INVALID_HANDLE_VALUE) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - } - - CloseHandle(hStdoutHandle); - } - -private: - - VOID - InitializeRelativeFileTime( - FILETIME * pft, - DWORD dwMilliseconds - ) - { - LARGE_INTEGER li; - - // - // The pftDueTime parameter expects the time to be - // expressed as the number of 100 nanosecond intervals - // times -1. - // - // To convert from milliseconds, we'll multiply by - // -10000 - // - - li.QuadPart = (LONGLONG)dwMilliseconds * -10000; - - pft->dwHighDateTime = li.HighPart; - pft->dwLowDateTime = li.LowPart; - }; - - TP_TIMER * _pTimer; - BOOL fInCanel; -}; - -class STELAPSED -{ -public: - - STELAPSED() - : _dwInitTime( 0 ), - _dwInitTickCount( 0 ), - _dwPerfCountsPerMillisecond( 0 ), - _fUsingHighResolution( FALSE ) - { - LARGE_INTEGER li; - BOOL fResult; - - _dwInitTickCount = GetTickCount64(); - - fResult = QueryPerformanceFrequency( &li ); - - if ( !fResult ) - { - goto Finished; - } - - _dwPerfCountsPerMillisecond = li.QuadPart / 1000; - - fResult = QueryPerformanceCounter( &li ); - - if ( !fResult ) - { - goto Finished; - } - - _dwInitTime = li.QuadPart / _dwPerfCountsPerMillisecond; - - _fUsingHighResolution = TRUE; - -Finished: - - return; - } - - virtual - ~STELAPSED() - { - } - - LONGLONG - QueryElapsedTime() - { - LARGE_INTEGER li; - - if ( _fUsingHighResolution && QueryPerformanceCounter( &li ) ) - { - DWORD64 dwCurrentTime = li.QuadPart / _dwPerfCountsPerMillisecond; - - if ( dwCurrentTime < _dwInitTime ) - { - // - // It's theoretically possible that QueryPerformanceCounter - // may return slightly different values on different CPUs. - // In this case, we don't want to return an unexpected value - // so we'll return zero. This is acceptable because - // presumably such a case would only happen for a very short - // time window. - // - // It would be possible to prevent this by ensuring processor - // affinity for all calls to QueryPerformanceCounter, but that - // would be undesirable in the general case because it could - // introduce unnecessary context switches and potentially a - // CPU bottleneck. - // - // Note that this issue also applies to callers doing rapid - // calls to this function. If a caller wants to mitigate - // that, they could enforce the affinitization, or they - // could implement a similar sanity check when comparing - // returned values from this function. - // - - return 0; - } - - return dwCurrentTime - _dwInitTime; - } - - return GetTickCount64() - _dwInitTickCount; - } - - BOOL - QueryUsingHighResolution() - { - return _fUsingHighResolution; - } - -private: - - DWORD64 _dwInitTime; - DWORD64 _dwInitTickCount; - DWORD64 _dwPerfCountsPerMillisecond; - BOOL _fUsingHighResolution; -}; - -#endif // _STTIMER_H \ No newline at end of file diff --git a/src/IISIntegration/src/Directory.Build.props b/src/IISIntegration/src/Directory.Build.props deleted file mode 100644 index 4b89a431e7f2..000000000000 --- a/src/IISIntegration/src/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj deleted file mode 100644 index a3814f318b95..000000000000 --- a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj +++ /dev/null @@ -1,33 +0,0 @@ - - - - ASP.NET Core components for working with the IIS AspNetCoreModule. - netstandard2.0 - $(NoWarn);CS1591 - true - aspnetcore;iis - true - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj b/src/IISIntegration/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj deleted file mode 100644 index 8f12548e9f97..000000000000 --- a/src/IISIntegration/test/AspNetCoreModuleTests/AspNetCoreModuleTests.vcxproj +++ /dev/null @@ -1,184 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {0692D963-DB10-4387-B3EA-460FBB9BD9A3} - Win32Proj - AspNetCoreModuleTests - 10.0.15063.0 - NativeUnitTestProject - - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - - - - - - - - - - - - - - - - - - - true - - - true - - - true - - - true - - - - Use - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - _DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Windows - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Use - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - WIN32;_DEBUG;%(PreprocessorDefinitions) - true - MultiThreadedDebug - - - Windows - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - Use - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - WIN32;NDEBUG;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - Use - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories);..\..\src\AspNetCoreModuleV2\CommonLib;..\..\src\AspNetCoreModuleV2\IISLib - NDEBUG;%(PreprocessorDefinitions) - true - MultiThreaded - - - Windows - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - - - - - Create - Create - Create - Create - - - - - - - {55494e58-e061-4c4c-a0a8-837008e72f85} - - - {4787a64f-9a3e-4867-a55a-70cb4b2b2ffe} - - - - - - - \ No newline at end of file diff --git a/src/IISIntegration/test/AspNetCoreModuleTests/stdafx.h b/src/IISIntegration/test/AspNetCoreModuleTests/stdafx.h deleted file mode 100644 index 67bd5aa27b82..000000000000 --- a/src/IISIntegration/test/AspNetCoreModuleTests/stdafx.h +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. - -#pragma once - -#include "targetver.h" - -#define WIN32_LEAN_AND_MEAN - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "stringa.h" -#include "stringu.h" -#include "dbgutil.h" -#include "ahutil.h" -#include "multisz.h" -#include "multisza.h" -#include "base64.h" -#include -#include -#include -#include -#include - -#include "..\..\src\AspNetCoreModuleV2\IISLib\hashtable.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\stringu.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\stringa.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\multisz.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\dbgutil.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\ahutil.h" -#include "..\..\src\AspNetCoreModuleV2\IISLib\hashfn.h" - -#include "..\..\src\AspNetCoreModuleV2\CommonLib\hostfxr_utility.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\environmentvariablehash.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\aspnetcoreconfig.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\application.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\utility.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\debugutil.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\requesthandler.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\resources.h" -#include "..\..\src\AspNetCoreModuleV2\CommonLib\aspnetcore_msg.h" - -#include "CppUnitTest.h" diff --git a/src/IISIntegration/test/Directory.Build.props b/src/IISIntegration/test/Directory.Build.props deleted file mode 100644 index 3a74fe4d2a7d..000000000000 --- a/src/IISIntegration/test/Directory.Build.props +++ /dev/null @@ -1,14 +0,0 @@ - - - - - netcoreapp2.1 - $(DeveloperBuildTestTfms) - $(StandardTestTfms);netcoreapp2.0 - $(StandardTestTfms);net461 - - - - - - diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj b/src/IISIntegration/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj deleted file mode 100644 index d79a5ec5d9b1..000000000000 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - - $(StandardTestTfms) - - - - - - - - - - False - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISExpressSupportsInProcessHostingAttribute.cs b/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISExpressSupportsInProcessHostingAttribute.cs deleted file mode 100644 index 5f2edd22f6be..000000000000 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISExpressSupportsInProcessHostingAttribute.cs +++ /dev/null @@ -1,62 +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.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Xml.Linq; -using Microsoft.AspNetCore.Testing.xunit; - -namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests -{ - [AttributeUsage(AttributeTargets.Method | AttributeTargets.Assembly | AttributeTargets.Class)] - public sealed class IISExpressSupportsInProcessHostingAttribute : Attribute, ITestCondition - { - public bool IsMet => AncmSchema.SupportsInProcessHosting; - - public string SkipReason => AncmSchema.SkipReason; - - private class AncmSchema - { - public static bool SupportsInProcessHosting { get; } - public static string SkipReason { get; } = "IIS Express must be upgraded to support in-process hosting."; - - static AncmSchema() - { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - SkipReason = "IIS Express tests can only be run on Windows"; - return; - } - - var ancmConfigPath = Path.Combine( - Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), - "IIS Express", "config", "schema", "aspnetcore_schema.xml"); - - if (!File.Exists(ancmConfigPath)) - { - SkipReason = "IIS Express is not installed."; - return; - } - - XDocument ancmConfig; - - try - { - ancmConfig = XDocument.Load(ancmConfigPath); - } - catch - { - SkipReason = "Could not read ANCM schema configuration"; - return; - } - - SupportsInProcessHosting = ancmConfig - .Root - .Descendants("attribute") - .Any(n => "hostingModel".Equals(n.Attribute("name")?.Value, StringComparison.Ordinal)); - } - } - } -} diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs b/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs deleted file mode 100644 index 8d53affc9870..000000000000 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteCollection.cs +++ /dev/null @@ -1,16 +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 Xunit; - -namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests -{ - /// - /// This type just maps collection names to available fixtures - /// - [CollectionDefinition(Name)] - public class IISTestSiteCollection : ICollectionFixture - { - public const string Name = nameof(IISTestSiteCollection); - } -} diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs b/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs deleted file mode 100644 index 763603508d29..000000000000 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/IISTestSiteFixture.cs +++ /dev/null @@ -1,53 +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.IO; -using System.Net.Http; -using System.Threading; -using Microsoft.AspNetCore.Server.IntegrationTesting; -using Microsoft.Extensions.Logging.Abstractions; - -namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests -{ - public class IISTestSiteFixture : IDisposable - { - private readonly IApplicationDeployer _deployer; - - public IISTestSiteFixture() - { - var deploymentParameters = new DeploymentParameters(Helpers.GetInProcessTestSitesPath(), - ServerType.IISExpress, - RuntimeFlavor.CoreClr, - RuntimeArchitecture.x64) - { - ServerConfigTemplateContent = File.ReadAllText("AppHostConfig/Http.config"), - SiteName = "HttpTestSite", - TargetFramework = "netcoreapp2.1", - ApplicationType = ApplicationType.Portable, - Configuration = -#if DEBUG - "Debug" -#else - "Release" -#endif - }; - - _deployer = ApplicationDeployerFactory.Create(deploymentParameters, NullLoggerFactory.Instance); - DeploymentResult = _deployer.DeployAsync().Result; - Client = DeploymentResult.HttpClient; - BaseUri = DeploymentResult.ApplicationBaseUri; - ShutdownToken = DeploymentResult.HostShutdownToken; - } - - public string BaseUri { get; } - public HttpClient Client { get; } - public CancellationToken ShutdownToken { get; } - public DeploymentResult DeploymentResult { get; } - - public void Dispose() - { - _deployer.Dispose(); - } - } -} diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj b/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj deleted file mode 100644 index ea19c2a1fc89..000000000000 --- a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - $(StandardTestTfms) - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/TestTasks/InjectRequestHandler.cs b/src/IISIntegration/test/TestTasks/InjectRequestHandler.cs deleted file mode 100644 index 639428ebd1aa..000000000000 --- a/src/IISIntegration/test/TestTasks/InjectRequestHandler.cs +++ /dev/null @@ -1,62 +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.Diagnostics; -using System.IO; -using System.Linq; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace TestTasks -{ - public class InjectRequestHandler - { - private static void Main(string[] args) - { - var depsFile = args[2]; - var rid = args[0]; - var libraryLocation = args[1]; - - JToken deps; - using (var file = File.OpenText(depsFile)) - using (JsonTextReader reader = new JsonTextReader(file)) - { - deps = JObject.ReadFrom(reader); - } - - var libraryName = "ANCMRH/1.0"; - var libraries = (JObject)deps["libraries"]; - var targetName = (JValue)deps["runtimeTarget"]["name"]; - - var target = (JObject)deps["targets"][targetName.Value]; - var targetLibrary = target.Properties().FirstOrDefault(p => p.Name == libraryName); - targetLibrary?.Remove(); - targetLibrary = - new JProperty(libraryName, new JObject( - new JProperty("runtimeTargets", new JObject( - new JProperty(libraryLocation.Replace('\\', '/'), new JObject( - new JProperty("rid", rid), - new JProperty("assetType", "native") - )))))); - target.AddFirst(targetLibrary); - - var library = libraries.Properties().FirstOrDefault(p => p.Name == libraryName); - library?.Remove(); - library = - new JProperty(libraryName, new JObject( - new JProperty("type", "package"), - new JProperty("serviceable", true), - new JProperty("sha512", ""), - new JProperty("path", libraryName), - new JProperty("hashPath", ""))); - libraries.AddFirst(library); - - using (var file = File.CreateText(depsFile)) - using (var writer = new JsonTextWriter(file) { Formatting = Formatting.Indented }) - { - deps.WriteTo(writer); - } - } - } -} diff --git a/src/IISIntegration/test/TestTasks/TestTasks.csproj b/src/IISIntegration/test/TestTasks/TestTasks.csproj deleted file mode 100644 index aa4c144936ed..000000000000 --- a/src/IISIntegration/test/TestTasks/TestTasks.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - Exe - $(StandardTestTfms) - - - - - - - diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj b/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj deleted file mode 100644 index c615d460eebe..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/InProcessWebSite.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - - $(StandardTestTfms) - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs b/src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs deleted file mode 100644 index 0550f0f1fdff..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/Program.cs +++ /dev/null @@ -1,26 +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.Hosting; -using Microsoft.Extensions.Logging; - -namespace IISTestSite -{ - public static class Program - { - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .ConfigureLogging((_, factory) => - { - factory.AddConsole(); - factory.AddFilter("Console", level => level >= LogLevel.Information); - }) - .UseIISIntegration() - .UseStartup(typeof(Program).Assembly.FullName) - .Build(); - - host.Run(); - } - } -} diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs b/src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs deleted file mode 100644 index 23cec82f790e..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/Startup.cs +++ /dev/null @@ -1,684 +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.Diagnostics; -using System.IO; -using System.Net; -using System.Reflection; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.AspNetCore.Server.IIS; -using Microsoft.AspNetCore.Server.IISIntegration; -using Microsoft.Extensions.Primitives; -using Xunit; - -namespace IISTestSite -{ - public class Startup - { - public void Configure(IApplicationBuilder app) - { - foreach (var method in GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) - { - var parameters = method.GetParameters(); - if (method.Name != nameof(Configure) && - parameters.Length == 1 && - parameters[0].ParameterType == typeof(IApplicationBuilder)) - { - app.Map("/" + method.Name, innerAppBuilder => method.Invoke(this, new[] { innerAppBuilder })); - } - } - } - - private void ServerVariable(IApplicationBuilder app) - { - app.Run(async ctx => - { - var varName = ctx.Request.Query["q"]; - await ctx.Response.WriteAsync($"{varName}: {ctx.GetIISServerVariable(varName) ?? "(null)"}"); - }); - } - - public void AuthenticationAnonymous(IApplicationBuilder app) - { - app.Run(async ctx => - { - await ctx.Response.WriteAsync("Anonymous?" + !ctx.User.Identity.IsAuthenticated); - }); - } - - private void AuthenticationRestricted(IApplicationBuilder app) - { - app.Run(async ctx => - { - if (ctx.User.Identity.IsAuthenticated) - { - await ctx.Response.WriteAsync(ctx.User.Identity.AuthenticationType); - } - else - { - await ctx.ChallengeAsync(IISDefaults.AuthenticationScheme); - } - }); - } - - public void AuthenticationForbidden(IApplicationBuilder app) - { - app.Run(async ctx => - { - await ctx.ForbidAsync(IISDefaults.AuthenticationScheme); - }); - } - - public void AuthenticationRestrictedNTLM(IApplicationBuilder app) - { - app.Run(async ctx => - { - if (string.Equals("NTLM", ctx.User.Identity.AuthenticationType, StringComparison.Ordinal)) - { - await ctx.Response.WriteAsync("NTLM"); - } - else - { - await ctx.ChallengeAsync(IISDefaults.AuthenticationScheme); - } - }); - } - - private void FeatureCollectionSetRequestFeatures(IApplicationBuilder app) - { - app.Run(async context => - { - try - { - Assert.Equal("GET", context.Request.Method); - context.Request.Method = "test"; - Assert.Equal("test", context.Request.Method); - - Assert.Equal("http", context.Request.Scheme); - context.Request.Scheme = "test"; - Assert.Equal("test", context.Request.Scheme); - - Assert.Equal("/FeatureCollectionSetRequestFeatures", context.Request.PathBase); - context.Request.PathBase = "/base"; - Assert.Equal("/base", context.Request.PathBase); - - Assert.Equal("/path", context.Request.Path); - context.Request.Path = "/path"; - Assert.Equal("/path", context.Request.Path); - - Assert.Equal("?query", context.Request.QueryString.Value); - context.Request.QueryString = QueryString.Empty; - Assert.Equal("", context.Request.QueryString.Value); - - Assert.Equal("HTTP/1.1", context.Request.Protocol); - context.Request.Protocol = "HTTP/1.0"; - Assert.Equal("HTTP/1.0", context.Request.Protocol); - - Assert.NotNull(context.Request.Headers); - var headers = new HeaderDictionary(); - context.Features.Get().Headers = headers; - Assert.Same(headers, context.Features.Get().Headers); - - Assert.NotNull(context.Request.Body); - var body = new MemoryStream(); - context.Request.Body = body; - Assert.Same(body, context.Request.Body); - - //Assert.NotNull(context.Features.Get().TraceIdentifier); - //Assert.NotEqual(CancellationToken.None, context.RequestAborted); - //var token = new CancellationTokenSource().Token; - //context.RequestAborted = token; - //Assert.Equal(token, context.RequestAborted); - - await context.Response.WriteAsync("Success"); - return; - } - catch (Exception exception) - { - context.Response.StatusCode = 500; - await context.Response.WriteAsync(exception.ToString()); - } - await context.Response.WriteAsync("_Failure"); - }); - } - - private void FeatureCollectionSetResponseFeatures(IApplicationBuilder app) - { - app.Run(async context => - { - try - { - Assert.Equal(200, context.Response.StatusCode); - context.Response.StatusCode = 404; - Assert.Equal(404, context.Response.StatusCode); - context.Response.StatusCode = 200; - - Assert.Null(context.Features.Get().ReasonPhrase); - context.Features.Get().ReasonPhrase = "Set Response"; - Assert.Equal("Set Response", context.Features.Get().ReasonPhrase); - - Assert.NotNull(context.Response.Headers); - var headers = new HeaderDictionary(); - context.Features.Get().Headers = headers; - Assert.Same(headers, context.Features.Get().Headers); - - var originalBody = context.Response.Body; - Assert.NotNull(originalBody); - var body = new MemoryStream(); - context.Response.Body = body; - Assert.Same(body, context.Response.Body); - context.Response.Body = originalBody; - - await context.Response.WriteAsync("Success"); - return; - } - catch (Exception exception) - { - context.Response.StatusCode = 500; - await context.Response.WriteAsync(exception.ToString()); - } - await context.Response.WriteAsync("_Failure"); - }); - } - - private void FeatureCollectionSetConnectionFeatures(IApplicationBuilder app) - { - app.Run(async context => - { - try - { - Assert.True(IPAddress.IsLoopback(context.Connection.LocalIpAddress)); - context.Connection.LocalIpAddress = IPAddress.IPv6Any; - Assert.Equal(IPAddress.IPv6Any, context.Connection.LocalIpAddress); - - Assert.True(IPAddress.IsLoopback(context.Connection.RemoteIpAddress)); - context.Connection.RemoteIpAddress = IPAddress.IPv6Any; - Assert.Equal(IPAddress.IPv6Any, context.Connection.RemoteIpAddress); - await context.Response.WriteAsync("Success"); - return; - } - catch (Exception exception) - { - context.Response.StatusCode = 500; - await context.Response.WriteAsync(exception.ToString()); - } - await context.Response.WriteAsync("_Failure"); - }); - } - - private void Throw(IApplicationBuilder app) - { - app.Run(ctx => { throw new Exception(); }); - } - - private void SetCustomErorCode(IApplicationBuilder app) - { - app.Run(async ctx => { - var feature = ctx.Features.Get(); - feature.ReasonPhrase = ctx.Request.Query["reason"]; - feature.StatusCode = int.Parse(ctx.Request.Query["code"]); - await ctx.Response.WriteAsync("Body"); - }); - } - - private void HelloWorld(IApplicationBuilder app) - { - app.Run(async ctx => - { - if (ctx.Request.Path.Value.StartsWith("/Path")) - { - await ctx.Response.WriteAsync(ctx.Request.Path.Value); - return; - } - if (ctx.Request.Path.Value.StartsWith("/Query")) - { - await ctx.Response.WriteAsync(ctx.Request.QueryString.Value); - return; - } - - await ctx.Response.WriteAsync("Hello World"); - }); - } - - private void LargeResponseBody(IApplicationBuilder app) - { - app.Run(async context => - { - if (int.TryParse(context.Request.Query["length"], out var length)) - { - await context.Response.WriteAsync(new string('a', length)); - } - }); - } - - private void ResponseHeaders(IApplicationBuilder app) - { - app.Run(async context => - { - context.Response.Headers["UnknownHeader"] = "test123=foo"; - context.Response.ContentType = "text/plain"; - context.Response.Headers["MultiHeader"] = new StringValues(new string[] { "1", "2" }); - await context.Response.WriteAsync("Request Complete"); - }); - } - - private void ResponseInvalidOrdering(IApplicationBuilder app) - { - app.Run(async context => - { - if (context.Request.Path.Equals("/SetStatusCodeAfterWrite")) - { - await context.Response.WriteAsync("Started_"); - try - { - context.Response.StatusCode = 200; - } - catch (InvalidOperationException) - { - await context.Response.WriteAsync("SetStatusCodeAfterWriteThrew_"); - } - await context.Response.WriteAsync("Finished"); - return; - } - else if (context.Request.Path.Equals("/SetHeaderAfterWrite")) - { - await context.Response.WriteAsync("Started_"); - try - { - context.Response.Headers["This will fail"] = "some value"; - } - catch (InvalidOperationException) - { - await context.Response.WriteAsync("SetHeaderAfterWriteThrew_"); - } - await context.Response.WriteAsync("Finished"); - return; - } - }); - } - - private void CheckEnvironmentVariable(IApplicationBuilder app) - { - app.Run(async context => - { - var variable = Environment.GetEnvironmentVariable("ASPNETCORE_INPROCESS_TESTING_VALUE"); - await context.Response.WriteAsync(variable); - }); - } - - private void CheckEnvironmentLongValueVariable(IApplicationBuilder app) - { - app.Run(async context => - { - var variable = Environment.GetEnvironmentVariable("ASPNETCORE_INPROCESS_TESTING_LONG_VALUE"); - await context.Response.WriteAsync(variable); - }); - } - - private void CheckAppendedEnvironmentVariable(IApplicationBuilder app) - { - app.Run(async context => - { - var variable = Environment.GetEnvironmentVariable("ProgramFiles"); - await context.Response.WriteAsync(variable); - }); - } - - private void CheckRemoveAuthEnvironmentVariable(IApplicationBuilder app) - { - app.Run(async context => - { - var variable = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_HTTPAUTH"); - await context.Response.WriteAsync(variable); - }); - } - private void ReadAndWriteSynchronously(IApplicationBuilder app) - { - app.Run(async context => - { - var t2 = Task.Run(() => WriteManyTimesToResponseBody(context)); - var t1 = Task.Run(() => ReadRequestBody(context)); - await Task.WhenAll(t1, t2); - }); - } - - private async Task ReadRequestBody(HttpContext context) - { - var readBuffer = new byte[1]; - var result = await context.Request.Body.ReadAsync(readBuffer, 0, 1); - while (result != 0) - { - result = await context.Request.Body.ReadAsync(readBuffer, 0, 1); - } - } - - private async Task WriteManyTimesToResponseBody(HttpContext context) - { - for (var i = 0; i < 10000; i++) - { - await context.Response.WriteAsync("hello world"); - } - } - - private void ReadAndWriteEcho(IApplicationBuilder app) - { - app.Run(async context => - { - var readBuffer = new byte[4096]; - var result = await context.Request.Body.ReadAsync(readBuffer, 0, readBuffer.Length); - while (result != 0) - { - await context.Response.WriteAsync(Encoding.UTF8.GetString(readBuffer, 0, result)); - result = await context.Request.Body.ReadAsync(readBuffer, 0, readBuffer.Length); - } - }); - } - - private void ReadAndWriteEchoTwice(IApplicationBuilder app) - { - app.Run(async context => - { - var readBuffer = new byte[4096]; - var result = await context.Request.Body.ReadAsync(readBuffer, 0, readBuffer.Length); - while (result != 0) - { - await context.Response.WriteAsync(Encoding.UTF8.GetString(readBuffer, 0, result)); - await context.Response.Body.FlushAsync(); - await context.Response.WriteAsync(Encoding.UTF8.GetString(readBuffer, 0, result)); - await context.Response.Body.FlushAsync(); - result = await context.Request.Body.ReadAsync(readBuffer, 0, readBuffer.Length); - } - }); - } - - private void ReadAndWriteSlowConnection(IApplicationBuilder app) - { - app.Run(async context => - { - var t2 = Task.Run(() => WriteResponseBodyAFewTimes(context)); - var t1 = Task.Run(() => ReadRequestBody(context)); - await Task.WhenAll(t1, t2); - }); - } - - private async Task WriteResponseBodyAFewTimes(HttpContext context) - { - for (var i = 0; i < 100; i++) - { - await context.Response.WriteAsync("hello world"); - } - } - - private void WebsocketRequest(IApplicationBuilder app) - { - app.Run(async context => - { - await context.Response.WriteAsync("test"); - }); - } - - private void ReadAndWriteCopyToAsync(IApplicationBuilder app) - { - app.Run(async context => - { - await context.Request.Body.CopyToAsync(context.Response.Body); - }); - } - - private void UpgradeFeatureDetection(IApplicationBuilder app) - { - app.Run(async ctx => - { - if (ctx.Features.Get() != null) - { - await ctx.Response.WriteAsync("Enabled"); - } - else - { - await ctx.Response.WriteAsync("Disabled"); - } - }); - } - - private void TestReadOffsetWorks(IApplicationBuilder app) - { - app.Run(async ctx => - { - var buffer = new byte[11]; - ctx.Request.Body.Read(buffer, 0, 6); - ctx.Request.Body.Read(buffer, 6, 5); - - await ctx.Response.WriteAsync(Encoding.UTF8.GetString(buffer)); - }); - } - - private void TestInvalidReadOperations(IApplicationBuilder app) - { - app.Run(async context => - { - var success = false; - if (context.Request.Path.StartsWithSegments("/NullBuffer")) - { - try - { - await context.Request.Body.ReadAsync(null, 0, 0); - } - catch (Exception) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) - { - try - { - await context.Request.Body.ReadAsync(new byte[1], -1, 0); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidOffsetLarge")) - { - try - { - await context.Request.Body.ReadAsync(new byte[1], 2, 0); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountSmall")) - { - try - { - await context.Request.Body.ReadAsync(new byte[1], 0, -1); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountLarge")) - { - try - { - await context.Request.Body.ReadAsync(new byte[1], 0, -1); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountWithOffset")) - { - try - { - await context.Request.Body.ReadAsync(new byte[3], 1, 3); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - - - await context.Response.WriteAsync(success ? "Success" : "Failure"); - }); - } - - private void TestValidReadOperations(IApplicationBuilder app) - { - app.Run(async context => - { - var count = -1; - - if (context.Request.Path.StartsWithSegments("/NullBuffer")) - { - count = await context.Request.Body.ReadAsync(null, 0, 0); - } - else if (context.Request.Path.StartsWithSegments("/NullBufferPost")) - { - count = await context.Request.Body.ReadAsync(null, 0, 0); - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountZeroRead")) - { - count = await context.Request.Body.ReadAsync(new byte[1], 0, 0); - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountZeroReadPost")) - { - count = await context.Request.Body.ReadAsync(new byte[1], 0, 0); - } - - await context.Response.WriteAsync(count == 0 ? "Success" : "Failure"); - }); - } - - private void TestInvalidWriteOperations(IApplicationBuilder app) - { - app.Run(async context => - { - var success = false; - - if (context.Request.Path.StartsWithSegments("/InvalidOffsetSmall")) - { - try - { - await context.Response.Body.WriteAsync(new byte[1], -1, 0); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidOffsetLarge")) - { - try - { - await context.Response.Body.WriteAsync(new byte[1], 2, 0); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountSmall")) - { - try - { - await context.Response.Body.WriteAsync(new byte[1], 0, -1); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountLarge")) - { - try - { - await context.Response.Body.WriteAsync(new byte[1], 0, -1); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - else if (context.Request.Path.StartsWithSegments("/InvalidCountWithOffset")) - { - try - { - await context.Response.Body.WriteAsync(new byte[3], 1, 3); - } - catch (ArgumentOutOfRangeException) - { - success = true; - } - } - - await context.Response.WriteAsync(success ? "Success" : "Failure"); - }); - } - - private void TestValidWriteOperations(IApplicationBuilder app) - { - app.Run(async context => - { - - if (context.Request.Path.StartsWithSegments("/NullBuffer")) - { - await context.Response.Body.WriteAsync(null, 0, 0); - } - else if (context.Request.Path.StartsWithSegments("/NullBufferPost")) - { - await context.Response.Body.WriteAsync(null, 0, 0); - } - - await context.Response.WriteAsync("Success"); - }); - } - - private void LargeResponseFile(IApplicationBuilder app) - { - app.Run(async ctx => - { - var tempFile = Path.GetTempFileName(); - var fileContent = new string('a', 200000); - var fileStream = File.OpenWrite(tempFile); - - for (var i = 0; i < 1000; i++) - { - await fileStream.WriteAsync(Encoding.UTF8.GetBytes(fileContent), 0, fileContent.Length); - } - fileStream.Close(); - - await ctx.Response.SendFileAsync(tempFile, 0, null); - - // Try to delete the file from the temp directory. If it fails, don't report an error - // to the application. File should eventually be cleaned up from the temp directory - // by OS. - try - { - File.Delete(tempFile); - } - catch (Exception) - { - } - }); - } - - private void BasePath(IApplicationBuilder app) - { - app.Run(async ctx => { await ctx.Response.WriteAsync(AppDomain.CurrentDomain.BaseDirectory); }); - } - } -} diff --git a/src/IISIntegration/test/WebSites/InProcessWebSite/web.config b/src/IISIntegration/test/WebSites/InProcessWebSite/web.config deleted file mode 100644 index 8ba96a4e9ecb..000000000000 --- a/src/IISIntegration/test/WebSites/InProcessWebSite/web.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj deleted file mode 100644 index 0b96c98c36fd..000000000000 --- a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - $(StandardTestTfms) - - - - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/OverriddenServerWebSite.csproj b/src/IISIntegration/test/WebSites/OverriddenServerWebSite/OverriddenServerWebSite.csproj deleted file mode 100644 index 4332ea3fd1f3..000000000000 --- a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/OverriddenServerWebSite.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - $(StandardTestTfms) - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Program.cs b/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Program.cs deleted file mode 100644 index bb65e0300494..000000000000 --- a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Program.cs +++ /dev/null @@ -1,48 +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.Threading; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Hosting.Server; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.Extensions.DependencyInjection; - -namespace IISTestSite -{ - public static class Program - { - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .UseIISIntegration() - .ConfigureServices(services => services.AddSingleton()) - .Configure(builder => builder.Run(async context => { await context.Response.WriteAsync("I shouldn't work"); })) - .Build(); - - host.Run(); - } - } - - public class DummyServer: IServer - { - public void Dispose() - { - } - - public Task StartAsync(IHttpApplication application, CancellationToken cancellationToken) - { - return Task.Delay(TimeSpan.MaxValue); - } - - public Task StopAsync(CancellationToken cancellationToken) - { - return Task.Delay(TimeSpan.MaxValue); - } - - public IFeatureCollection Features { get; } - } -} diff --git a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Properties/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/web.config b/src/IISIntegration/test/WebSites/OverriddenServerWebSite/web.config deleted file mode 100644 index f125d5710737..000000000000 --- a/src/IISIntegration/test/WebSites/OverriddenServerWebSite/web.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs b/src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs deleted file mode 100644 index e8e5392c2c72..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/Program.cs +++ /dev/null @@ -1,26 +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.Hosting; -using Microsoft.Extensions.Logging; - -namespace ANCMStressTestApp -{ - public class Program - { - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .ConfigureLogging((_, factory) => - { - factory.AddConsole(); - }) - .UseKestrel() - .UseIISIntegration() - .UseStartup() - .Build(); - - host.Run(); - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json b/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json deleted file mode 100644 index 6d5ce43f737a..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/Properties/launchSettings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": true, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5762/", - "sslPort": 0 - } - }, - "profiles": { - "ANCM IIS Express": { - "commandName": "Executable", - "executablePath": "$(IISExpressPath)", - "commandLineArgs": "$(IISExpressArguments)", - "nativeDebugging": true, - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - }, - "ANCM IIS": { - "commandName": "Executable", - "executablePath": "$(IISPath)", - "commandLineArgs": "$(IISArguments)", - "environmentVariables": { - "IIS_SITE_PATH": "$(MSBuildThisFileDirectory)", - "ANCM_PATH": "$(TargetDir)$(AncmPath)", - "LAUNCHER_ARGS": "$(TargetPath)", - "ASPNETCORE_ENVIRONMENT": "Development", - "LAUNCHER_PATH": "$(DotNetPath)" - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs b/src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs deleted file mode 100644 index be0969ec7764..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/Startup.cs +++ /dev/null @@ -1,231 +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.IO; -using System.Linq; -using System.Threading.Tasks; -using System.Threading; -using System.Text; -using System.Net.WebSockets; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.Net.Http.Headers; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Primitives; - -namespace ANCMStressTestApp -{ - public class Startup - { - // This method gets called by the runtime. Use this method to add services to the container. - // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 - public void ConfigureServices(IServiceCollection services) - { - } - - public void Configure(IApplicationBuilder app) - { - app.Map("/HelloWorld", HelloWorld); - app.Map("/ConnectionClose", ConnectionClose); - app.Map("/EchoPostData", EchoPostData); - app.Map("/LargeResponseBody", LargeResponseBody); - app.Map("/ResponseHeaders", ResponseHeaders); - app.Map("/EnvironmentVariables", EnvironmentVariables); - app.Map("/RequestInformation", RequestInformation); - app.Map("/WebSocket", WebSocket); - - app.Run(async context => - { - await context.Response.WriteAsync("Default Page"); - }); - } - - private void HelloWorld(IApplicationBuilder app) - { - app.Run(async context => - { - await context.Response.WriteAsync("Hello World"); - }); - } - - private void ConnectionClose(IApplicationBuilder app) - { - app.Run(async context => - { - context.Response.Headers[HeaderNames.Connection] = "close"; - await context.Response.WriteAsync("Connnection Close"); - await context.Response.Body.FlushAsync(); - }); - } - - private void EchoPostData(IApplicationBuilder app) - { - app.Run(async context => - { - string responseBody = string.Empty; - - if (string.Equals(context.Request.Method, "POST", StringComparison.OrdinalIgnoreCase)) - { - using (StreamReader reader = new StreamReader(context.Request.Body, Encoding.UTF8)) - { - responseBody = await reader.ReadToEndAsync(); - } - } - else - { - responseBody = "NoAction"; - } - - await context.Response.WriteAsync(responseBody); - }); - } - - private void LargeResponseBody(IApplicationBuilder app) - { - app.Run(async context => - { - if (int.TryParse(context.Request.Query["length"], out var length)) - { - await context.Response.WriteAsync(new string('a', length)); - } - }); - } - - private void ResponseHeaders(IApplicationBuilder app) - { - app.Run(async context => - { - context.Response.Headers["UnknownHeader"] = "test123=foo"; - context.Response.ContentType = "text/plain"; - context.Response.Headers["MultiHeader"] = new StringValues(new string[] { "1", "2" }); - await context.Response.WriteAsync("Request Complete"); - }); - } - - private void EnvironmentVariables(IApplicationBuilder app) - { - app.Run(async context => - { - context.Response.ContentType = "text/plain"; - await context.Response.WriteAsync("Environment Variables:" + Environment.NewLine); - var vars = Environment.GetEnvironmentVariables(); - foreach (var key in vars.Keys.Cast().OrderBy(key => key, StringComparer.OrdinalIgnoreCase)) - { - var value = vars[key]; - await context.Response.WriteAsync(key + ": " + value + Environment.NewLine); - } - await context.Response.WriteAsync(Environment.NewLine); - }); - } - - private void RequestInformation(IApplicationBuilder app) - { - app.Run(async context => - { - context.Response.ContentType = "text/plain"; - - await context.Response.WriteAsync("Address:" + Environment.NewLine); - await context.Response.WriteAsync("Scheme: " + context.Request.Scheme + Environment.NewLine); - await context.Response.WriteAsync("Host: " + context.Request.Headers["Host"] + Environment.NewLine); - await context.Response.WriteAsync("PathBase: " + context.Request.PathBase.Value + Environment.NewLine); - await context.Response.WriteAsync("Path: " + context.Request.Path.Value + Environment.NewLine); - await context.Response.WriteAsync("Query: " + context.Request.QueryString.Value + Environment.NewLine); - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Connection:" + Environment.NewLine); - await context.Response.WriteAsync("RemoteIp: " + context.Connection.RemoteIpAddress + Environment.NewLine); - await context.Response.WriteAsync("RemotePort: " + context.Connection.RemotePort + Environment.NewLine); - await context.Response.WriteAsync("LocalIp: " + context.Connection.LocalIpAddress + Environment.NewLine); - await context.Response.WriteAsync("LocalPort: " + context.Connection.LocalPort + Environment.NewLine); - await context.Response.WriteAsync(Environment.NewLine); - - await context.Response.WriteAsync("Headers:" + Environment.NewLine); - foreach (var header in context.Request.Headers) - { - await context.Response.WriteAsync(header.Key + ": " + header.Value + Environment.NewLine); - } - await context.Response.WriteAsync(Environment.NewLine); - }); - } - - private void WebSocket(IApplicationBuilder app) - { - app.Run(async context => - { - var upgradeFeature = context.Features.Get(); - - // Generate WebSocket response headers - string key = context.Request.Headers[Constants.Headers.SecWebSocketKey].ToString(); - var responseHeaders = HandshakeHelpers.GenerateResponseHeaders(key); - foreach (var headerPair in responseHeaders) - { - context.Response.Headers[headerPair.Key] = headerPair.Value; - } - - // Upgrade the connection - Stream opaqueTransport = await upgradeFeature.UpgradeAsync(); - - // Get the WebSocket object - var ws = WebSocketProtocol.CreateFromStream(opaqueTransport, isServer: true, subProtocol: null, keepAliveInterval: TimeSpan.FromMinutes(2)); - - var appLifetime = app.ApplicationServices.GetRequiredService(); - - await Echo(ws, appLifetime.ApplicationStopping); - }); - } - - private async Task Echo(WebSocket webSocket, CancellationToken token) - { - try - { - var buffer = new byte[1024 * 4]; - var result = await webSocket.ReceiveAsync(new ArraySegment(buffer), token); - bool closeFromServer = false; - string closeFromServerCmd = "CloseFromServer"; - int closeFromServerLength = closeFromServerCmd.Length; - - while (!result.CloseStatus.HasValue && !token.IsCancellationRequested && !closeFromServer) - { - if (result.Count == closeFromServerLength && - Encoding.ASCII.GetString(buffer).Substring(0, result.Count) == closeFromServerCmd) - { - // The client sent "CloseFromServer" text message to request the server to close (a test scenario). - closeFromServer = true; - } - else - { - await webSocket.SendAsync(new ArraySegment(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, token); - result = await webSocket.ReceiveAsync(new ArraySegment(buffer), token); - } - } - - if (result.CloseStatus.HasValue) - { - // Client-initiated close handshake - await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - } - else - { - // Server-initiated close handshake due to either of the two conditions: - // (1) The applicaton host is performing a graceful shutdown. - // (2) The client sent "CloseFromServer" text message to request the server to close (a test scenario). - await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeFromServerCmd, CancellationToken.None); - - // The server has sent the Close frame. - // Stop sending but keep receiving until we get the Close frame from the client. - while (!result.CloseStatus.HasValue) - { - result = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); - } - } - } - catch (Exception e) - { - Console.WriteLine("{0} Exception caught!", e); - } - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj b/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj deleted file mode 100644 index 3566143fcdf3..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/StressTestWebSite.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - $(StandardTestTfms) - - - - - - - - - - - - - diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/Constants.cs b/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/Constants.cs deleted file mode 100644 index bcf546255823..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/Constants.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. - -namespace ANCMStressTestApp -{ - public static class Constants - { - public static class Headers - { - public const string Upgrade = "Upgrade"; - public const string UpgradeWebSocket = "websocket"; - public const string Connection = "Connection"; - public const string SecWebSocketKey = "Sec-WebSocket-Key"; - public const string SecWebSocketAccept = "Sec-WebSocket-Accept"; - } - } -} diff --git a/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/HandshakeHelpers.cs b/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/HandshakeHelpers.cs deleted file mode 100644 index 331f415013d3..000000000000 --- a/src/IISIntegration/test/WebSites/StressTestWebSite/WebSockets/HandshakeHelpers.cs +++ /dev/null @@ -1,42 +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.Security.Cryptography; -using System.Text; - -namespace ANCMStressTestApp -{ - // Removed all the - internal static class HandshakeHelpers - { - public static IEnumerable> GenerateResponseHeaders(string key) - { - yield return new KeyValuePair(Constants.Headers.Connection, Constants.Headers.Upgrade); - yield return new KeyValuePair(Constants.Headers.Upgrade, Constants.Headers.UpgradeWebSocket); - yield return new KeyValuePair(Constants.Headers.SecWebSocketAccept, CreateResponseKey(key)); - } - - public static string CreateResponseKey(string requestKey) - { - // "The value of this header field is constructed by concatenating /key/, defined above in step 4 - // in Section 4.2.2, with the string "258EAFA5- E914-47DA-95CA-C5AB0DC85B11", taking the SHA-1 hash of - // this concatenated value to obtain a 20-byte value and base64-encoding" - // https://tools.ietf.org/html/rfc6455#section-4.2.2 - - if (requestKey == null) - { - throw new ArgumentNullException(nameof(requestKey)); - } - - using (var algorithm = SHA1.Create()) - { - string merged = requestKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; - byte[] mergedBytes = Encoding.UTF8.GetBytes(merged); - byte[] hashedBytes = algorithm.ComputeHash(mergedBytes); - return Convert.ToBase64String(hashedBytes); - } - } - } -} diff --git a/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs b/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs index b3ae85687ae0..47b02a309269 100644 --- a/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs +++ b/src/Servers/HttpSys/test/FunctionalTests/HttpsTests.cs @@ -99,7 +99,7 @@ public async Task Https_ClientCertRequested_ClientCertPresent() } } - private async Task SendRequestAsync(string uri, + private async Task SendRequestAsync(string uri, X509Certificate cert = null) { var handler = new WinHttpHandler(); diff --git a/src/IISIntegration/.gitignore b/src/Servers/IIS/.gitignore similarity index 97% rename from src/IISIntegration/.gitignore rename to src/Servers/IIS/.gitignore index f86f68b74880..dc2b157fe07a 100644 --- a/src/IISIntegration/.gitignore +++ b/src/Servers/IIS/.gitignore @@ -31,24 +31,20 @@ project.lock.json *.bin *.vs/ .testPublish/ - *.obj *.tlog *.CppClean.log *msbuild.log - src/*/*/Debug/ src/*/*/x64/Debug/ src/*/*/Release/ src/*/*/x64/Release/ x64/ - *vcxproj.filters *.aps *.pdb *.lib *.idb - src/*/AspNetCore/aspnetcoremodule.h src/*/AspNetCore/aspnetcore_msg.h src/*/AspNetCore/aspnetcore_msg.rc @@ -61,7 +57,6 @@ test/*/Release test/gtest-1.8.0/msvc/Debug test/gtest-1.8.0/msvc/Release .build - *.VC.*db global.json -msbuild.binlog +msbuild.binlog \ No newline at end of file diff --git a/src/Servers/IIS/IISIntegration.sln b/src/Servers/IIS/IISIntegration.sln new file mode 100644 index 000000000000..85a5d7ebcde4 --- /dev/null +++ b/src/Servers/IIS/IISIntegration.sln @@ -0,0 +1,163 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2036 +MinimumVisualStudioVersion = 15.0.26730.03 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{04B1EDB6-E967-4D25-89B9-E6F8304038CD}" + ProjectSection(SolutionItems) = preProject + src\Directory.Build.props = src\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0EF45656-B25D-40D8-959C-726EAF185E60}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + Directory.Build.props = Directory.Build.props + Directory.Build.targets = Directory.Build.targets + NuGet.Config = NuGet.Config + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{EF30B533-D715-421A-92B7-92FEF460AC9C}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.props = test\Directory.Build.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISSample", "samples\IISSample\IISSample.csproj", "{E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "src\Microsoft.AspNetCore.Server.IISIntegration\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{8B3446E8-E6A8-4591-AA63-A95837C6E97C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration.Tests", "test\Microsoft.AspNetCore.Server.IISIntegration.Tests\Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj", "{4106DB10-E09F-480E-9CE6-B39235512EE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutOfProcessWebSite", "test\testassets\OutOfProcessWebSite\OutOfProcessWebSite.csproj", "{F54715C3-88D8-49E3-A291-C13570FE81FC}" + ProjectSection(ProjectDependencies) = postProject + {439824F9-1455-4CC4-BD79-B44FA0A16552} = {439824F9-1455-4CC4-BD79-B44FA0A16552} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{7E80C58E-9CC8-450C-8A8D-94FC76428150}" + ProjectSection(SolutionItems) = preProject + build\applicationhost.config = build\applicationhost.config + build\applicationhost.iis.config = build\applicationhost.iis.config + build\dependencies.props = build\dependencies.props + build\native.targets = build\native.targets + build\repo.props = build\repo.props + build\testsite.props = build\testsite.props + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IISIntegration.FunctionalTests", "test\IISIntegration.FunctionalTests\IISIntegration.FunctionalTests.csproj", "{4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "testassets", "testassets", "{744ACDC6-F6A0-4FF9-9421-F25C5F2DC520}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AspNetCoreModuleV1", "AspNetCoreModuleV1", "{16E521CE-77F1-4B1C-A183-520A41C4F372}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IISLib", "src\AspNetCoreModuleV1\IISLib\IISLib.vcxproj", "{4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AspNetCore", "src\AspNetCoreModuleV1\AspNetCore\AspNetCore.vcxproj", "{439824F9-1455-4CC4-BD79-B44FA0A16552}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x64.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Debug|x86.Build.0 = Debug|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|Any CPU.Build.0 = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x64.Build.0 = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.ActiveCfg = Release|Any CPU + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64}.Release|x86.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x64.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Debug|x86.Build.0 = Debug|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|Any CPU.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x64.Build.0 = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.ActiveCfg = Release|Any CPU + {8B3446E8-E6A8-4591-AA63-A95837C6E97C}.Release|x86.Build.0 = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.ActiveCfg = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x64.Build.0 = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.ActiveCfg = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Debug|x86.Build.0 = Debug|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|Any CPU.Build.0 = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.ActiveCfg = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x64.Build.0 = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.ActiveCfg = Release|Any CPU + {4106DB10-E09F-480E-9CE6-B39235512EE6}.Release|x86.Build.0 = Release|Any CPU + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|Any CPU.ActiveCfg = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.ActiveCfg = Debug|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x64.Build.0 = Debug|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.ActiveCfg = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Debug|x86.Build.0 = Debug|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|Any CPU.ActiveCfg = Release|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.ActiveCfg = Release|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x64.Build.0 = Release|x64 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.ActiveCfg = Release|x86 + {F54715C3-88D8-49E3-A291-C13570FE81FC}.Release|x86.Build.0 = Release|x86 + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x64.Build.0 = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Debug|x86.Build.0 = Debug|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|Any CPU.Build.0 = Release|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.ActiveCfg = Release|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x64.Build.0 = Release|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.ActiveCfg = Release|Any CPU + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA}.Release|x86.Build.0 = Release|Any CPU + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.ActiveCfg = Debug|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x64.Build.0 = Debug|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.ActiveCfg = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Debug|x86.Build.0 = Debug|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|Any CPU.ActiveCfg = Release|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.ActiveCfg = Release|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x64.Build.0 = Release|x64 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.ActiveCfg = Release|Win32 + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE}.Release|x86.Build.0 = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.ActiveCfg = Debug|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x64.Build.0 = Debug|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.ActiveCfg = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Debug|x86.Build.0 = Debug|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|Any CPU.ActiveCfg = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.ActiveCfg = Release|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x64.Build.0 = Release|x64 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.ActiveCfg = Release|Win32 + {439824F9-1455-4CC4-BD79-B44FA0A16552}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E4E2BDC4-A9C6-4AE9-B429-032EC83EDE64} = {C74B8F36-FD2F-45C9-9B8A-00E7CF0126A9} + {8B3446E8-E6A8-4591-AA63-A95837C6E97C} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {4106DB10-E09F-480E-9CE6-B39235512EE6} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {F54715C3-88D8-49E3-A291-C13570FE81FC} = {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} + {4E3E1F5C-CD52-4CC0-A35F-D1FA1685D2FA} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {744ACDC6-F6A0-4FF9-9421-F25C5F2DC520} = {EF30B533-D715-421A-92B7-92FEF460AC9C} + {16E521CE-77F1-4B1C-A183-520A41C4F372} = {04B1EDB6-E967-4D25-89B9-E6F8304038CD} + {4787A64F-9A3E-4867-A55A-70CB4B2B2FFE} = {16E521CE-77F1-4B1C-A183-520A41C4F372} + {439824F9-1455-4CC4-BD79-B44FA0A16552} = {16E521CE-77F1-4B1C-A183-520A41C4F372} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DB4F868D-E1AE-4FD7-9333-69FA15B268C5} + EndGlobalSection +EndGlobal diff --git a/src/IISIntegration/LICENSE.txt b/src/Servers/IIS/LICENSE.txt similarity index 100% rename from src/IISIntegration/LICENSE.txt rename to src/Servers/IIS/LICENSE.txt diff --git a/src/IISIntegration/NuGetPackageVerifier.json b/src/Servers/IIS/NuGetPackageVerifier.json similarity index 80% rename from src/IISIntegration/NuGetPackageVerifier.json rename to src/Servers/IIS/NuGetPackageVerifier.json index eea701bb65c5..e4dda240ca51 100644 --- a/src/IISIntegration/NuGetPackageVerifier.json +++ b/src/Servers/IIS/NuGetPackageVerifier.json @@ -2,7 +2,6 @@ "adx-nonshipping": { "rules": [], "packages": { - "Microsoft.AspNetCore.AspNetCoreModule": {}, "Microsoft.AspNetCore.AspNetCoreModuleV1": {} } }, diff --git a/src/IISIntegration/NuGetPackageVerifier.xplat.json b/src/Servers/IIS/NuGetPackageVerifier.xplat.json similarity index 100% rename from src/IISIntegration/NuGetPackageVerifier.xplat.json rename to src/Servers/IIS/NuGetPackageVerifier.xplat.json diff --git a/src/IISIntegration/build/Build.Settings b/src/Servers/IIS/build/Build.Settings similarity index 92% rename from src/IISIntegration/build/Build.Settings rename to src/Servers/IIS/build/Build.Settings index 9daccf4aaab2..6180860c512e 100644 --- a/src/IISIntegration/build/Build.Settings +++ b/src/Servers/IIS/build/Build.Settings @@ -4,24 +4,22 @@ $(MSBuildThisFileDirectory)..\ Debug Win32 - v120 - v140 - v120 + v141 $(MSBuildProjectDirectory)\bin\$(Configuration)\$(Platform)\ $(OutputPath) aspnetcore - + true false - + false true - + Use @@ -39,13 +37,13 @@ true - + Disabled - + MaxSpeed @@ -53,19 +51,19 @@ true - + WIN32;_DEBUG;%(PreprocessorDefinitions) - + _WIN64;_DEBUG;%(PreprocessorDefinitions) - + WIN32;NDEBUG;%(PreprocessorDefinitions) @@ -74,7 +72,7 @@ true - + _WIN64;NDEBUG;%(PreprocessorDefinitions) @@ -83,7 +81,7 @@ true - + <_TwoDigitYear>$([MSBuild]::Subtract($([System.DateTime]::UtcNow.Year), 2000)) <_ThreeDigitDayOfYear>$([System.DateTime]::UtcNow.DayOfYear.ToString().PadLeft(3, '0')) diff --git a/src/IISIntegration/build/Config.Definitions.Props b/src/Servers/IIS/build/Config.Definitions.Props similarity index 100% rename from src/IISIntegration/build/Config.Definitions.Props rename to src/Servers/IIS/build/Config.Definitions.Props diff --git a/src/IISIntegration/build/applicationhost.config b/src/Servers/IIS/build/applicationhost.config similarity index 100% rename from src/IISIntegration/build/applicationhost.config rename to src/Servers/IIS/build/applicationhost.config diff --git a/src/IISIntegration/build/applicationhost.iis.config b/src/Servers/IIS/build/applicationhost.iis.config similarity index 100% rename from src/IISIntegration/build/applicationhost.iis.config rename to src/Servers/IIS/build/applicationhost.iis.config diff --git a/src/Servers/IIS/build/build.msbuild b/src/Servers/IIS/build/build.msbuild new file mode 100644 index 000000000000..6b260d5bae44 --- /dev/null +++ b/src/Servers/IIS/build/build.msbuild @@ -0,0 +1,6 @@ + + + + + diff --git a/src/IISIntegration/build/native.targets b/src/Servers/IIS/build/native.targets similarity index 96% rename from src/IISIntegration/build/native.targets rename to src/Servers/IIS/build/native.targets index 1c5a98169133..1f6a52a1a05b 100644 --- a/src/IISIntegration/build/native.targets +++ b/src/Servers/IIS/build/native.targets @@ -1,5 +1,5 @@ - + diff --git a/src/Servers/IIS/build/repo.props b/src/Servers/IIS/build/repo.props new file mode 100644 index 000000000000..78508b7a4c5d --- /dev/null +++ b/src/Servers/IIS/build/repo.props @@ -0,0 +1,23 @@ + + + + + Microsoft + $(BuildDir)AspNetCoreModule.zip + + + + + Internal.AspNetCore.Universe.Lineup + 2.1.0-rc1-* + https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json + + + + + + + + + + diff --git a/src/Servers/IIS/build/repo.targets b/src/Servers/IIS/build/repo.targets new file mode 100644 index 000000000000..4fac86df79b7 --- /dev/null +++ b/src/Servers/IIS/build/repo.targets @@ -0,0 +1,8 @@ + + + + $(PackageDependsOn);PackageNativeProjects + $(RepositoryRoot)NuGetPackageVerifier.xplat.json + + + diff --git a/src/Servers/IIS/build/testsite.props b/src/Servers/IIS/build/testsite.props new file mode 100644 index 000000000000..d1f746bb2eee --- /dev/null +++ b/src/Servers/IIS/build/testsite.props @@ -0,0 +1,44 @@ + + + + win7-x64;win7-x86 + x64;x86 + $(MSBuildThisFileDirectory)applicationhost.config + $(MSBuildThisFileDirectory)applicationhost.iis.config + x64 + $(Platform) + + + + $(MSBuildProgramFiles32)\IIS Express\iisexpress.exe + $(SystemRoot)\SysWOW64\inetsrv\w3wp.exe + Win32 + + + + $(ProgramW6432)\IIS Express\iisexpress.exe + $(SystemRoot)\System32\inetsrv\w3wp.exe + x64 + + + + + $(NativePlatform)\ + + + + + + + + + /config:"$(IISExpressAppHostConfig)" + -h "$(IISAppHostConfig)" + + $(NativePlatform)\aspnetcore.dll + $(userprofile)\.dotnet\$(NativePlatform)\dotnet.exe + + + diff --git a/src/Servers/IIS/samples/IISSample/IISSample.csproj b/src/Servers/IIS/samples/IISSample/IISSample.csproj new file mode 100644 index 000000000000..21e5953c9a61 --- /dev/null +++ b/src/Servers/IIS/samples/IISSample/IISSample.csproj @@ -0,0 +1,15 @@ + + + + netcoreapp2.1;net461 + + + + + + + + + + + diff --git a/src/IISIntegration/samples/IISSample/Startup.cs b/src/Servers/IIS/samples/IISSample/Startup.cs similarity index 100% rename from src/IISIntegration/samples/IISSample/Startup.cs rename to src/Servers/IIS/samples/IISSample/Startup.cs diff --git a/src/IISIntegration/samples/IISSample/web.config b/src/Servers/IIS/samples/IISSample/web.config similarity index 100% rename from src/IISIntegration/samples/IISSample/web.config rename to src/Servers/IIS/samples/IISSample/web.config diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj similarity index 99% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj index e1c11dddb634..7e2d840f0cb8 100644 --- a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj +++ b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/AspNetCore.vcxproj @@ -281,4 +281,5 @@ %(Filename).rc;%(Filename).h;MSG0409.bin + \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/application.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/applicationmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/aspnetcoreconfig.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/debugutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/environmentvariablehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/filewatcher.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwarderconnection.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/forwardinghandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/path.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/processmanager.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/protocolconfig.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/proxymodule.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/responseheaderhash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/serverprocess.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/sttimer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/websockethandler.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Inc/winhttphelper.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Source.def b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Source.def similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/Source.def rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/Source.def diff --git a/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.h new file mode 100644 index 000000000000..3c95a91f472c --- /dev/null +++ b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.h @@ -0,0 +1,129 @@ +/*++ + +Copyright (c) 2014 Microsoft Corporation + +Module Name: + + aspnetcore_msg.mc + +Abstract: + + Asp.Net Core Module localizable messages. + +--*/ + + +#ifndef _ASPNETCORE_MSG_H_ +#define _ASPNETCORE_MSG_H_ + +// +// Values are 32 bit values laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---+-+-+-----------------------+-------------------------------+ +// |Sev|C|R| Facility | Code | +// +---+-+-+-----------------------+-------------------------------+ +// +// where +// +// Sev - is the severity code +// +// 00 - Success +// 01 - Informational +// 10 - Warning +// 11 - Error +// +// C - is the Customer code flag +// +// R - is a reserved bit +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// + + +// +// Define the severity codes +// + + +// +// MessageId: ASPNETCORE_EVENT_PROCESS_START_ERROR +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_PROCESS_START_ERROR ((DWORD)0x000003E8L) + +// +// MessageId: ASPNETCORE_EVENT_PROCESS_START_SUCCESS +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_PROCESS_START_SUCCESS ((DWORD)0x000003E9L) + +// +// MessageId: ASPNETCORE_EVENT_PROCESS_CRASH +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_PROCESS_CRASH ((DWORD)0x000003EAL) + +// +// MessageId: ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED ((DWORD)0x000003EBL) + +// +// MessageId: ASPNETCORE_EVENT_CONFIG_ERROR +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_CONFIG_ERROR ((DWORD)0x000003ECL) + +// +// MessageId: ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_GRACEFUL_SHUTDOWN_FAILURE ((DWORD)0x000003EDL) + +// +// MessageId: ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_SENT_SHUTDOWN_HTTP_REQUEST ((DWORD)0x000003EEL) + +// +// MessageId: ASPNETCORE_EVENT_RECYCLE_APPOFFLINE +// +// MessageText: +// +// %1 +// +#define ASPNETCORE_EVENT_RECYCLE_APPOFFLINE ((DWORD)0x000003F4L) + + +#endif // _ASPNETCORE_MODULE_MSG_H_ + diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.mc diff --git a/src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.rc b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV2/CommonLib/aspnetcore_msg.rc rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_msg.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_schema.xml b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_schema.xml similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_schema.xml rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcore_schema.xml diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/aspnetcoremodule.rc diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/resource.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/application.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/applicationmanager.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/aspnetcoreconfig.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/filewatcher.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwarderconnection.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/forwardinghandler.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/main.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/path.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/precomp.hxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/processmanager.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/protocolconfig.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/proxymodule.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/responseheaderhash.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/serverprocess.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/websockethandler.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/src/winhttphelper.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj similarity index 99% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj index bb8795992b77..addf6ce98b0e 100644 --- a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj +++ b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/IISLib.vcxproj @@ -198,4 +198,7 @@ + + + \ No newline at end of file diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.cxx diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/acache.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/acache.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ahutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ahutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/base64.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/base64.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/buffer.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/buffer.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/buffer.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/buffer.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/datetime.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/datetime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/datetime.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/datetime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/dbgutil.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/dbgutil.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/dbgutil.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/dbgutil.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashfn.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashfn.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashfn.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashfn.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashtable.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashtable.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/hashtable.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/hashtable.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/listentry.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/listentry.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/listentry.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/listentry.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/macros.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/macros.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/macros.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/macros.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisz.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisz.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/multisza.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/multisza.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ntassert.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ntassert.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/ntassert.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/ntassert.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/percpu.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/percpu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/percpu.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/percpu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/precomp.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/precomp.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/precomp.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/precomp.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/prime.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/prime.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/prime.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/prime.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/pudebug.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/pudebug.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/pudebug.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/pudebug.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.c b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.c rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/reftrace.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/reftrace.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/rwlock.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/rwlock.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/rwlock.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/rwlock.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringa.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringa.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.cpp b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.cpp similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.cpp rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.cpp diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/stringu.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/stringu.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.c b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.c similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.c rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.c diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/tracelog.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/tracelog.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/treehash.h b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/treehash.h similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/treehash.h rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/treehash.h diff --git a/src/IISIntegration/src/AspNetCoreModuleV1/IISLib/util.cxx b/src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/util.cxx similarity index 100% rename from src/IISIntegration/src/AspNetCoreModuleV1/IISLib/util.cxx rename to src/Servers/IIS/src/AspNetCoreModuleV1/IISLib/util.cxx diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Directory.Build.targets b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Directory.Build.targets new file mode 100644 index 000000000000..21ff857b22c1 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Directory.Build.targets @@ -0,0 +1,34 @@ + + + + + + + false + + false + + false + + true + + true + + false + + false + + + + + + + NuGetPackage + $(PackageId) + $(PackageVersion) + + + + + + \ No newline at end of file diff --git a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModule.props similarity index 53% rename from src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props rename to src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModule.props index 5b01ee63a4de..4e6fbe80e847 100644 --- a/src/IISIntegration/nuget/Microsoft.AspNetCore.AspNetCoreModule.props +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModule.props @@ -3,8 +3,6 @@ $(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcore.dll $(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcore.dll - $(MSBuildThisFileDirectory)..\contentFiles\any\any\x64\aspnetcorerh.dll - $(MSBuildThisFileDirectory)..\contentFiles\any\any\x86\aspnetcorerh.dll - + \ No newline at end of file diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj new file mode 100644 index 000000000000..9520777a0edf --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj @@ -0,0 +1,36 @@ + + + + + false + netcoreapp2.1 + aspnetcore + Microsoft ASP.NET Core Module + true + content + true + ASP.NET Core Module + + + + + + + + + + + + + + True + lib + + + + + + + + + \ No newline at end of file diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/lib/netcoreapp2.1/_._ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/lib/netcoreapp2.1/_._ new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/AuthenticationHandler.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/ForwardedTlsConnectionFeature.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISDefaults.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISHostingStartup.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISMiddleware.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISOptions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/IISSetupFilter.cs diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj new file mode 100644 index 000000000000..726a93a1e176 --- /dev/null +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj @@ -0,0 +1,42 @@ + + + + + ASP.NET Core components for working with the IIS AspNetCoreModule. + netstandard2.0 + $(NoWarn);CS1591 + true + aspnetcore;iis + true + + + + + + + + + False + + + False + + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs similarity index 92% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs index 02fc967f1ae1..4ecb5018a27e 100644 --- a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/NativeMethods.cs @@ -3,6 +3,7 @@ using System; using System.Runtime.InteropServices; +using Microsoft.AspNetCore.HttpSys.Internal; namespace Microsoft.AspNetCore.Server.IISIntegration { diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Properties/AssemblyInfo.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/WebHostBuilderIISExtensions.cs diff --git a/src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json similarity index 100% rename from src/IISIntegration/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json rename to src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/baseline.netcore.json diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config b/src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config similarity index 100% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/Http.config diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/Https.config b/src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/Https.config similarity index 100% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/Https.config rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/Https.config diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/NtlmAuthentation.config b/src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/NtlmAuthentation.config similarity index 100% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/NtlmAuthentation.config rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/NtlmAuthentation.config diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/WebsocketsNotSupported.config b/src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/WebsocketsNotSupported.config similarity index 100% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/AppHostConfig/WebsocketsNotSupported.config rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/AppHostConfig/WebsocketsNotSupported.config diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj b/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj new file mode 100644 index 000000000000..d3404c43de0e --- /dev/null +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj @@ -0,0 +1,23 @@ + + + + $(StandardTestTfms) + + + + + + + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs similarity index 98% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs index 370ce2cf630a..6eff64fa15db 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs @@ -29,7 +29,6 @@ public Task HelloWorld_IISExpress_Clr_X64_Portable(string ancmVersion) [Theory] [InlineData("V1")] - [InlineData("V2")] public Task HelloWorld_IISExpress_CoreClr_X64_Portable(string ancmVersion) { return HelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, ancmVersion); @@ -49,7 +48,7 @@ private async Task HelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType appli EnvironmentName = "HelloWorld", // Will pick the Start class named 'StartupHelloWorld', ServerConfigTemplateContent = (serverType == ServerType.IISExpress) ? File.ReadAllText("AppHostConfig/Http.config") : null, SiteName = "HttpTestSite", // This is configured in the Http.config - TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.0", + TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.1", ApplicationType = applicationType, Configuration = #if DEBUG diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs similarity index 95% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs index 0e71a21fdccb..e88f6f2db706 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs @@ -25,9 +25,8 @@ public HttpsTest(ITestOutputHelper output) : base(output) { } - [Theory(Skip = "Full framework web.config generation is currently incorrect. See: https://github.com/aspnet/websdk/pull/322")] + [Theory] [InlineData("V1")] - [InlineData("V2")] public Task Https_HelloWorld_CLR_X64(string ancmVersion) { return HttpsHelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44396, ancmVersion); @@ -35,7 +34,6 @@ public Task Https_HelloWorld_CLR_X64(string ancmVersion) [Theory] [InlineData("V1")] - [InlineData("V2")] public Task Https_HelloWorld_CoreCLR_X64_Portable(string ancmVersion) { return HttpsHelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44394, ancmVersion); @@ -58,7 +56,7 @@ private async Task HttpsHelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType EnvironmentName = "HttpsHelloWorld", // Will pick the Start class named 'StartupHttpsHelloWorld', ServerConfigTemplateContent = (serverType == ServerType.IISExpress) ? File.ReadAllText("AppHostConfig/Https.config") : null, SiteName = "HttpsTestSite", // This is configured in the Https.config - TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.0", + TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.1", ApplicationType = applicationType, Configuration = #if DEBUG @@ -101,15 +99,13 @@ private async Task HttpsHelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType [Theory] [InlineData("V1")] - [InlineData("V2")] public Task Https_HelloWorld_NoClientCert_CoreCLR_X64_Portable(string ancmVersion) { return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable , port: 44397, sendClientCert: false, ancmVersion); } - [Theory(Skip = "Full framework web.config generation is currently incorrect. See https://github.com/aspnet/websdk/pull/322")] + [Theory] [InlineData("V1")] - [InlineData("V2")] public Task Https_HelloWorld_NoClientCert_Clr_X64(string ancmVersion) { return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44398, sendClientCert: false, ancmVersion); @@ -118,7 +114,6 @@ public Task Https_HelloWorld_NoClientCert_Clr_X64(string ancmVersion) #pragma warning disable xUnit1004 // Test methods should not be skipped [Theory(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] [InlineData("V1")] - [InlineData("V2")] #pragma warning restore xUnit1004 // Test methods should not be skipped public Task Https_HelloWorld_ClientCert_Clr_X64(string ancmVersion) { @@ -128,7 +123,6 @@ public Task Https_HelloWorld_ClientCert_Clr_X64(string ancmVersion) #pragma warning disable xUnit1004 // Test methods should not be skipped [Theory(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] [InlineData("V1")] - [InlineData("V2")] #pragma warning restore xUnit1004 // Test methods should not be skipped public Task Https_HelloWorld_ClientCert_CoreCLR_X64_Portable(string ancmVersion) { @@ -151,7 +145,7 @@ private async Task HttpsHelloWorldCerts(RuntimeFlavor runtimeFlavor, Application EnvironmentName = "HttpsHelloWorld", // Will pick the Start class named 'StartupHttpsHelloWorld', ServerConfigTemplateContent = (serverType == ServerType.IISExpress) ? File.ReadAllText("AppHostConfig/Https.config") : null, SiteName = "HttpsTestSite", // This is configured in the Https.config - TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.0", + TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.1", ApplicationType = applicationType, Configuration = #if DEBUG diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs similarity index 99% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs index 809c213b27f9..6ad5131d8204 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs @@ -66,7 +66,7 @@ private async Task NtlmAuthentication(RuntimeFlavor runtimeFlavor, ApplicationTy EnvironmentName = "NtlmAuthentication", // Will pick the Start class named 'StartupNtlmAuthentication' ServerConfigTemplateContent = (serverType == ServerType.IISExpress) ? File.ReadAllText("AppHostConfig/NtlmAuthentation.config") : null, SiteName = "NtlmAuthenticationTestSite", // This is configured in the NtlmAuthentication.config - TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.0", + TargetFramework = runtimeFlavor == RuntimeFlavor.Clr ? "net461" : "netcoreapp2.1", ApplicationType = applicationType, AdditionalPublishParameters = additionalPublishParameters, Configuration = diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs similarity index 76% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs index 240f2d35c057..a150572c1fe6 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Properties/AssemblyInfo.cs @@ -4,5 +4,4 @@ // All functional tests in this project require a version of IIS express with an updated schema using Xunit; -[assembly: Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests.IISExpressSupportsInProcessHosting] [assembly: CollectionBehavior(DisableTestParallelization = true)] diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs similarity index 90% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs index 8627334de705..0e4dd61e78e1 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/UpgradeFeatureDetectionTests.cs @@ -22,16 +22,6 @@ public UpgradeFeatureDetectionTests(ITestOutputHelper output) : base(output) { } - [Fact] - public Task UpgradeFeatureDetectionEnabled_OutOfProcess_IISExpress_CoreClr_x64_Portable() - { - return UpgradeFeatureDetectionDeployer(RuntimeFlavor.CoreClr, - ApplicationType.Portable, - "AppHostConfig/WebsocketsNotSupported.config", - Helpers.GetOutOfProcessTestSitesPath(), - "Disabled"); - } - [Fact] public Task UpgradeFeatureDetectionDisabled_OutOfProcess_IISExpress_CoreClr_x64_Portable() { diff --git a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs similarity index 89% rename from src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs rename to src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs index 5cda36000518..0071fda1b2d9 100644 --- a/src/IISIntegration/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs @@ -12,19 +12,21 @@ namespace Microsoft.AspNetCore.Server.IISIntegration.FunctionalTests public class Helpers { public static string GetTestWebSitePath(string name) - { + { return Path.GetFullPath( Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", // tfm "..", // debug "..", // obj "..", // projectfolder - "WebSites", + "src", + "servers", + "iis", + "test", + "testassets", name)); } - public static string GetInProcessTestSitesPath() => GetTestWebSitePath("InProcessWebSite"); - public static string GetOutOfProcessTestSitesPath() => GetTestWebSitePath("OutOfProcessWebSite"); public static void ModifyAspNetCoreSectionInWebConfig(DeploymentResult deploymentResult, string key, string value) diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs similarity index 100% rename from src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs rename to src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISExtensionTests.cs diff --git a/src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs similarity index 100% rename from src/IISIntegration/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs rename to src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/IISMiddlewareTests.cs diff --git a/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj new file mode 100644 index 000000000000..6567415b2f29 --- /dev/null +++ b/src/Servers/IIS/test/Microsoft.AspNetCore.Server.IISIntegration.Tests/Microsoft.AspNetCore.Server.IISIntegration.Tests.csproj @@ -0,0 +1,15 @@ + + + + $(StandardTestTfms) + + + + + + + + + + + diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj new file mode 100644 index 000000000000..17aa40c7fb97 --- /dev/null +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -0,0 +1,19 @@ + + + + + + $(StandardTestTfms) + + + + + + + + + + + + + diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/Program.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/Program.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/Program.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/Program.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupHelloWorld.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupHelloWorld.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupHelloWorld.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupHelloWorld.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupHttpsHelloWorld.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupHttpsHelloWorld.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupHttpsHelloWorld.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupHttpsHelloWorld.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupNtlmAuthentication.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs similarity index 96% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupNtlmAuthentication.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs index 29098ca70276..eda1493fbb90 100644 --- a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupNtlmAuthentication.cs +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs @@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.IISIntegration; using Microsoft.Extensions.Logging; -using Xunit; namespace TestSites { @@ -47,7 +46,6 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { if (context.User.Identity.IsAuthenticated) { - Assert.IsType(context.User); return context.Response.WriteAsync(context.User.Identity.AuthenticationType); } else diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupUpgradeFeatureDetection.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupUpgradeFeatureDetection.cs similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/StartupUpgradeFeatureDetection.cs rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupUpgradeFeatureDetection.cs diff --git a/src/IISIntegration/test/WebSites/OutOfProcessWebSite/web.config b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/web.config similarity index 100% rename from src/IISIntegration/test/WebSites/OutOfProcessWebSite/web.config rename to src/Servers/IIS/test/testassets/OutOfProcessWebSite/web.config diff --git a/src/IISIntegration/tools/SetupTestEnvironment.ps1 b/src/Servers/IIS/tools/SetupTestEnvironment.ps1 similarity index 100% rename from src/IISIntegration/tools/SetupTestEnvironment.ps1 rename to src/Servers/IIS/tools/SetupTestEnvironment.ps1 diff --git a/src/IISIntegration/tools/UpdateIISExpressCertificate.ps1 b/src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1 similarity index 100% rename from src/IISIntegration/tools/UpdateIISExpressCertificate.ps1 rename to src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1 diff --git a/src/IISIntegration/tools/certificate.ps1 b/src/Servers/IIS/tools/certificate.ps1 similarity index 100% rename from src/IISIntegration/tools/certificate.ps1 rename to src/Servers/IIS/tools/certificate.ps1 diff --git a/src/IISIntegration/tools/httpsys.ps1 b/src/Servers/IIS/tools/httpsys.ps1 similarity index 100% rename from src/IISIntegration/tools/httpsys.ps1 rename to src/Servers/IIS/tools/httpsys.ps1 diff --git a/src/IISIntegration/tools/installancm.ps1 b/src/Servers/IIS/tools/installancm.ps1 similarity index 100% rename from src/IISIntegration/tools/installancm.ps1 rename to src/Servers/IIS/tools/installancm.ps1 diff --git a/src/IISIntegration/tools/stresstest.ps1 b/src/Servers/IIS/tools/stresstest.ps1 similarity index 100% rename from src/IISIntegration/tools/stresstest.ps1 rename to src/Servers/IIS/tools/stresstest.ps1 diff --git a/src/IISIntegration/tools/update_schema.ps1 b/src/Servers/IIS/tools/update_schema.ps1 similarity index 100% rename from src/IISIntegration/tools/update_schema.ps1 rename to src/Servers/IIS/tools/update_schema.ps1 diff --git a/src/IISIntegration/version.props b/src/Servers/IIS/version.props similarity index 100% rename from src/IISIntegration/version.props rename to src/Servers/IIS/version.props diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin b/src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin b/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..8d0f75d5a9e51585569d68c3a3f76fa2d87c4edf GIT binary patch literal 18597 zcmeI%y-Gtd6ae6~iy)#G{GqFEMG?U#C@ZK0Yc6MG>njm4z8albj49d@SD_FB9AKiGLcZQXU} zIz_!v*2@^{jkISaK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0Rja6QeZhAR*!QwpIQ6z>#_HI`}%S4GP8X$(hZ@qb^Nyboo-ZFjdAgJ d$3y>m{qt)6sQI*i(YrZo6&?N5F@BzR`~dZXM+*P| literal 0 HcmV?d00001 diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock b/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..b12b378eb053b0d81f745f4be7ed2462583a2e83 GIT binary patch literal 17 TcmZSXu+P`2?cO8H00ArjDER|R literal 0 HcmV?d00001 diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock b/src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..ed53ea70ed447105c1ca83ec6fcc80e75b32be09 GIT binary patch literal 17 TcmZQJJmK)E^XUGs3{U_7J(X3=qHw06HE7!~g&Q literal 0 HcmV?d00001 diff --git a/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties b/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 000000000000..bbfebeb9b3b6 --- /dev/null +++ b/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Dec 07 17:30:44 PST 2018 +gradle.version=4.9 diff --git a/src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties b/src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom b/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom new file mode 100644 index 000000000000..a2346e91d8a0 --- /dev/null +++ b/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom @@ -0,0 +1,80 @@ + + + 4.0.0 + com.microsoft.signalr + signalr + 1.0.0-rtm + com.microsoft.signalr:signalr + ASP.NET Core SignalR Client for Java applications + https://github.com/aspnet/SignalR + 2018 + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + microsoft + Microsoft + + + + scm:git:git://github.com/aspnet/SignalR.git + scm:git:git://github.com/aspnet/SignalR.git + http://github.com/aspnet/SignalR/tree/master + + + + io.reactivex.rxjava2 + rxjava + 2.2.2 + compile + + + com.google.code.gson + gson + 2.8.5 + runtime + + + com.squareup.okhttp3 + okhttp + 3.11.0 + runtime + + + org.slf4j + slf4j-api + 1.7.25 + runtime + + + org.junit.jupiter + junit-jupiter-params + 5.3.1 + test + + + org.slf4j + slf4j-jdk14 + 1.7.25 + test + + + org.junit.jupiter + junit-jupiter-api + 5.3.1 + test + + + org.junit.jupiter + junit-jupiter-engine + 5.3.1 + test + + + From 2ac5a63da737c637b6f64bbc54d44a919d96a35a Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Thu, 6 Dec 2018 16:32:21 -0800 Subject: [PATCH 02/13] path --- .azure/pipelines/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index a0c24b2d1546..f1a8ff37efe9 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -14,7 +14,7 @@ jobs: jobDisplayName: "Build and test: Windows" agentOs: Windows beforeBuild: - - powershell: "& ./src/IISIntegration/tools/UpdateIISExpressCertificate.ps1" + - powershell: "& ./src/servers/iis/tools/UpdateIISExpressCertificate.ps1" displayName: Setup IISExpress test certificates - template: jobs/iisintegration-job.yml parameters: From f6de6b3f3309dbe1626c60524630dc02c953b729 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 7 Dec 2018 11:17:40 -0800 Subject: [PATCH 03/13] Package contents conditional --- .azure/pipelines/ci.yml | 2 +- .../Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index f1a8ff37efe9..2b5449481df2 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -14,7 +14,7 @@ jobs: jobDisplayName: "Build and test: Windows" agentOs: Windows beforeBuild: - - powershell: "& ./src/servers/iis/tools/UpdateIISExpressCertificate.ps1" + - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1" displayName: Setup IISExpress test certificates - template: jobs/iisintegration-job.yml parameters: diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj index 9520777a0edf..3a5ad7aba979 100644 --- a/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.AspNetCoreModuleV1/Microsoft.AspNetCore.AspNetCoreModuleV1.pkgproj @@ -12,7 +12,7 @@ ASP.NET Core Module - + From e35b12389dd6b8ba38b8a5b61e77ac6eeab3221a Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 7 Dec 2018 12:17:32 -0800 Subject: [PATCH 04/13] Package exists on all os now --- build/artifacts.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/artifacts.props b/build/artifacts.props index 14973792a3e6..9fdb19bcebd2 100644 --- a/build/artifacts.props +++ b/build/artifacts.props @@ -30,7 +30,7 @@ - + From b0ef03e260afd73b370ba4149fc6588c79203dfd Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 7 Dec 2018 12:51:22 -0800 Subject: [PATCH 05/13] Caps --- .../Microsoft.AspNetCore.Server.IISIntegration.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj index 726a93a1e176..2bddeaaabb6b 100644 --- a/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj +++ b/src/Servers/IIS/src/Microsoft.AspNetCore.Server.IISIntegration/Microsoft.AspNetCore.Server.IISIntegration.csproj @@ -11,7 +11,7 @@ - + From 9f2346dee25b697e819ed4704faa5453f766860d Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 7 Dec 2018 14:13:02 -0800 Subject: [PATCH 06/13] Remove azure pipeline pr validation --- .azure/pipelines/ci.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 2b5449481df2..7126baae5c54 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -16,7 +16,3 @@ jobs: beforeBuild: - powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1" displayName: Setup IISExpress test certificates -- template: jobs/iisintegration-job.yml - parameters: - variables: - _FolderName: IISIntegration From 0fa3f53793aff775650ce57a71aad13c341bf237 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 7 Dec 2018 14:52:13 -0800 Subject: [PATCH 07/13] Feedback --- src/Servers/IIS/build/repo.props | 23 ------------- src/Servers/IIS/build/repo.targets | 8 ----- .../OutOfProcess/HttpsTest.cs | 32 ++++++++----------- .../OutOfProcessWebSite.csproj | 1 + .../StartupNtlmAuthentication.cs | 2 ++ src/Servers/IIS/version.props | 18 ----------- version.props | 4 +++ 7 files changed, 20 insertions(+), 68 deletions(-) delete mode 100644 src/Servers/IIS/build/repo.props delete mode 100644 src/Servers/IIS/build/repo.targets delete mode 100644 src/Servers/IIS/version.props diff --git a/src/Servers/IIS/build/repo.props b/src/Servers/IIS/build/repo.props deleted file mode 100644 index 78508b7a4c5d..000000000000 --- a/src/Servers/IIS/build/repo.props +++ /dev/null @@ -1,23 +0,0 @@ - - - - - Microsoft - $(BuildDir)AspNetCoreModule.zip - - - - - Internal.AspNetCore.Universe.Lineup - 2.1.0-rc1-* - https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json - - - - - - - - - - diff --git a/src/Servers/IIS/build/repo.targets b/src/Servers/IIS/build/repo.targets deleted file mode 100644 index 4fac86df79b7..000000000000 --- a/src/Servers/IIS/build/repo.targets +++ /dev/null @@ -1,8 +0,0 @@ - - - - $(PackageDependsOn);PackageNativeProjects - $(RepositoryRoot)NuGetPackageVerifier.xplat.json - - - diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs index e88f6f2db706..81236fba2191 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs @@ -25,18 +25,16 @@ public HttpsTest(ITestOutputHelper output) : base(output) { } - [Theory] - [InlineData("V1")] + [Fact] public Task Https_HelloWorld_CLR_X64(string ancmVersion) { - return HttpsHelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44396, ancmVersion); + return HttpsHelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44396, "V1"); } - [Theory] - [InlineData("V1")] - public Task Https_HelloWorld_CoreCLR_X64_Portable(string ancmVersion) + [Fact] + public Task Https_HelloWorld_CoreCLR_X64_Portable() { - return HttpsHelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44394, ancmVersion); + return HttpsHelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44394, "V1"); } private async Task HttpsHelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType applicationType, int port, string ancmVersion) @@ -97,36 +95,32 @@ private async Task HttpsHelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType } } - [Theory] - [InlineData("V1")] + [Fact] public Task Https_HelloWorld_NoClientCert_CoreCLR_X64_Portable(string ancmVersion) { - return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable , port: 44397, sendClientCert: false, ancmVersion); + return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable , port: 44397, sendClientCert: false, "V1"); } - [Theory] - [InlineData("V1")] + [Fact] public Task Https_HelloWorld_NoClientCert_Clr_X64(string ancmVersion) { - return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44398, sendClientCert: false, ancmVersion); + return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44398, sendClientCert: false, "V1"); } #pragma warning disable xUnit1004 // Test methods should not be skipped - [Theory(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] - [InlineData("V1")] + [Fact(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] #pragma warning restore xUnit1004 // Test methods should not be skipped public Task Https_HelloWorld_ClientCert_Clr_X64(string ancmVersion) { - return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44301, sendClientCert: true, ancmVersion); + return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44301, sendClientCert: true, "V1"); } #pragma warning disable xUnit1004 // Test methods should not be skipped - [Theory(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] - [InlineData("V1")] + [Fact(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] #pragma warning restore xUnit1004 // Test methods should not be skipped public Task Https_HelloWorld_ClientCert_CoreCLR_X64_Portable(string ancmVersion) { - return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44302, sendClientCert: true, ancmVersion); + return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44302, sendClientCert: true, "V1"); } private async Task HttpsHelloWorldCerts(RuntimeFlavor runtimeFlavor, ApplicationType applicationType, int port, bool sendClientCert, string ancmVersion) diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj index 17aa40c7fb97..4f7d5dc698e3 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs index eda1493fbb90..29098ca70276 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.IISIntegration; using Microsoft.Extensions.Logging; +using Xunit; namespace TestSites { @@ -46,6 +47,7 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { if (context.User.Identity.IsAuthenticated) { + Assert.IsType(context.User); return context.Response.WriteAsync(context.User.Identity.AuthenticationType); } else diff --git a/src/Servers/IIS/version.props b/src/Servers/IIS/version.props deleted file mode 100644 index eb76a7c8eee8..000000000000 --- a/src/Servers/IIS/version.props +++ /dev/null @@ -1,18 +0,0 @@ - - - 2 - 1 - 7 - $(DotNetMajorVersion).$(DotNetMinorVersion).$(DotNetPatchVersion) - 12 - $(DotNetMinorVersion) - $(DotNetPatchVersion) - rtm - $(VersionPrefix) - $(VersionPrefix)-$(VersionSuffix)-final - t000 - a- - $(FeatureBranchVersionPrefix)$(VersionSuffix)-$([System.Text.RegularExpressions.Regex]::Replace('$(FeatureBranchVersionSuffix)', '[^\w-]', '-')) - $(VersionSuffix)-$(BuildNumber) - - diff --git a/version.props b/version.props index f0cbed211dab..addf0a3e5747 100644 --- a/version.props +++ b/version.props @@ -8,6 +8,10 @@ t000 $(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).$(AspNetCorePatchVersion) 0.1.$(AspNetCorePatchVersion) + + + 1$(AspNetCoreMajorVersion) + $(PreReleaseLabel)-$(BuildNumber) $(PreReleaseBrandingLabel) Build $(BuildNumber) From 3aefbbae079fbf8ae33470ca5fd797fa416f7eb8 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Mon, 10 Dec 2018 20:12:53 -0800 Subject: [PATCH 08/13] point to different version.props --- src/Servers/IIS/build/native.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Servers/IIS/build/native.targets b/src/Servers/IIS/build/native.targets index 1f6a52a1a05b..cf1e86d49089 100644 --- a/src/Servers/IIS/build/native.targets +++ b/src/Servers/IIS/build/native.targets @@ -1,5 +1,5 @@ - + From 8686a58aa79be0d755a52a4a32b2e85112aef483 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 12 Dec 2018 08:49:20 -0800 Subject: [PATCH 09/13] Cleanup tests and fix version information --- src/Servers/IIS/build/native.targets | 1 - .../AspNetCoreModuleV1/AspNetCore/resource.h | 2 +- .../OutOfProcess/HelloWorldTest.cs | 15 ++++++--------- .../OutOfProcess/HttpsTest.cs | 10 +++++----- .../OutOfProcess/NtlmAuthentationTest.cs | 18 +++++++----------- .../OutOfProcessWebSite.csproj | 1 - version.props | 2 ++ 7 files changed, 21 insertions(+), 28 deletions(-) diff --git a/src/Servers/IIS/build/native.targets b/src/Servers/IIS/build/native.targets index cf1e86d49089..6e4af1fe7e31 100644 --- a/src/Servers/IIS/build/native.targets +++ b/src/Servers/IIS/build/native.targets @@ -1,5 +1,4 @@ - diff --git a/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h index 493c3e2797f2..3545b36bbeda 100644 --- a/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h +++ b/src/Servers/IIS/src/AspNetCoreModuleV1/AspNetCore/resource.h @@ -7,7 +7,7 @@ #define IDS_SERVER_ERROR 1001 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs index 6eff64fa15db..fc5ab5abef5a 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HelloWorldTest.cs @@ -19,19 +19,16 @@ public HelloWorldTests(ITestOutputHelper output) : base(output) { } - [Theory(Skip = "Full framework web.config generation is currently incorrect. See https://github.com/aspnet/websdk/pull/322")] - [InlineData("V1")] - [InlineData("V2")] - public Task HelloWorld_IISExpress_Clr_X64_Portable(string ancmVersion) + [Fact(Skip = "Full framework web.config generation is currently incorrect. See https://github.com/aspnet/websdk/pull/322")] + public Task HelloWorld_IISExpress_Clr_X64_Portable() { - return HelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, ancmVersion); + return HelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, "V1"); } - [Theory] - [InlineData("V1")] - public Task HelloWorld_IISExpress_CoreClr_X64_Portable(string ancmVersion) + [Fact] + public Task HelloWorld_IISExpress_CoreClr_X64_Portable() { - return HelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, ancmVersion); + return HelloWorld(RuntimeFlavor.CoreClr, ApplicationType.Portable, "V1"); } private async Task HelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType applicationType, string ancmVersion) diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs index 81236fba2191..ab6aa0a315d2 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/HttpsTest.cs @@ -26,7 +26,7 @@ public HttpsTest(ITestOutputHelper output) : base(output) } [Fact] - public Task Https_HelloWorld_CLR_X64(string ancmVersion) + public Task Https_HelloWorld_CLR_X64() { return HttpsHelloWorld(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44396, "V1"); } @@ -96,13 +96,13 @@ private async Task HttpsHelloWorld(RuntimeFlavor runtimeFlavor, ApplicationType } [Fact] - public Task Https_HelloWorld_NoClientCert_CoreCLR_X64_Portable(string ancmVersion) + public Task Https_HelloWorld_NoClientCert_CoreCLR_X64_Portable() { return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable , port: 44397, sendClientCert: false, "V1"); } [Fact] - public Task Https_HelloWorld_NoClientCert_Clr_X64(string ancmVersion) + public Task Https_HelloWorld_NoClientCert_Clr_X64() { return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44398, sendClientCert: false, "V1"); } @@ -110,7 +110,7 @@ public Task Https_HelloWorld_NoClientCert_Clr_X64(string ancmVersion) #pragma warning disable xUnit1004 // Test methods should not be skipped [Fact(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] #pragma warning restore xUnit1004 // Test methods should not be skipped - public Task Https_HelloWorld_ClientCert_Clr_X64(string ancmVersion) + public Task Https_HelloWorld_ClientCert_Clr_X64() { return HttpsHelloWorldCerts(RuntimeFlavor.Clr, ApplicationType.Portable, port: 44301, sendClientCert: true, "V1"); } @@ -118,7 +118,7 @@ public Task Https_HelloWorld_ClientCert_Clr_X64(string ancmVersion) #pragma warning disable xUnit1004 // Test methods should not be skipped [Fact(Skip = "Manual test only, selecting a client cert is non-determanistic on different machines.")] #pragma warning restore xUnit1004 // Test methods should not be skipped - public Task Https_HelloWorld_ClientCert_CoreCLR_X64_Portable(string ancmVersion) + public Task Https_HelloWorld_ClientCert_CoreCLR_X64_Portable() { return HttpsHelloWorldCerts(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 44302, sendClientCert: true, "V1"); } diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs index 6ad5131d8204..a643a15bcbab 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/OutOfProcess/NtlmAuthentationTest.cs @@ -25,20 +25,16 @@ public NtlmAuthenticationTests(ITestOutputHelper output) : base(output) { } - [Theory(Skip = "Full framework web.config generation is currently incorrect. See https://github.com/aspnet/websdk/pull/322")] - [InlineData("V1")] - [InlineData("V2")] - public Task NtlmAuthentication_Clr_X64(string ancmVersion) + [Fact(Skip = "Full framework web.config generation is currently incorrect. See https://github.com/aspnet/websdk/pull/322")] + public Task NtlmAuthentication_Clr_X64_Portable() { - return NtlmAuthentication(RuntimeFlavor.Clr, ApplicationType.Portable, port: 5051, ancmVersion); + return NtlmAuthentication(RuntimeFlavor.Clr, ApplicationType.Portable, port: 5051, "V1"); } - [Theory] - [InlineData("V1")] - [InlineData("V2")] - public Task NtlmAuthentication_CoreClr_X64_Portable(string ancmVersion) + [Fact] + public Task NtlmAuthentication_CoreClr_X64_Portable() { - return NtlmAuthentication(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 5052, ancmVersion); + return NtlmAuthentication(RuntimeFlavor.CoreClr, ApplicationType.Portable, port: 5052, "V1"); } private async Task NtlmAuthentication(RuntimeFlavor runtimeFlavor, ApplicationType applicationType, int port, string ancmVersion) @@ -59,7 +55,7 @@ private async Task NtlmAuthentication(RuntimeFlavor runtimeFlavor, ApplicationTy additionalPublishParameters += " -r " + windowsRid; } - + var deploymentParameters = new DeploymentParameters(Helpers.GetOutOfProcessTestSitesPath(), serverType, runtimeFlavor, architecture) { ApplicationBaseUriHint = $"http://localhost:{port}", diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj index 4f7d5dc698e3..17aa40c7fb97 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -14,7 +14,6 @@ - diff --git a/version.props b/version.props index addf0a3e5747..08bb4a8c92c2 100644 --- a/version.props +++ b/version.props @@ -11,6 +11,8 @@ 1$(AspNetCoreMajorVersion) + $(AspNetCoreMinorVersion) + $(AspNetCorePatchVersion) $(PreReleaseLabel)-$(BuildNumber) $(PreReleaseBrandingLabel) Build $(BuildNumber) From 3af27e0ac723fb8d595b4d4c616a738dc1a8307f Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 12 Dec 2018 09:39:13 -0800 Subject: [PATCH 10/13] Readd xunit --- .../testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj index 17aa40c7fb97..4f7d5dc698e3 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -14,6 +14,7 @@ + From 5d0a22d4c4747673ba51b78a6098cca7a2bb4d5b Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 12 Dec 2018 10:07:35 -0800 Subject: [PATCH 11/13] Feedback --- .gitignore | 1 + eng/Dependencies.props | 2 +- .../IISIntegration.FunctionalTests.csproj | 3 - .../.gradle/4.9/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../.gradle/4.9/fileHashes/fileHashes.bin | Bin 18597 -> 0 bytes .../.gradle/4.9/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../.gradle/4.9/taskHistory/taskHistory.lock | Bin 17 -> 0 bytes .../buildOutputCleanup.lock | Bin 17 -> 0 bytes .../buildOutputCleanup/cache.properties | 2 - .../.gradle/vcsWorkingDirs/gc.properties | 0 .../signalr/build/libs/signalr-1.0.0-rtm.pom | 80 ------------------ 11 files changed, 2 insertions(+), 86 deletions(-) delete mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin delete mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin delete mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock delete mode 100644 src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock delete mode 100644 src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties delete mode 100644 src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties delete mode 100644 src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom diff --git a/.gitignore b/.gitignore index 39bacfa7c7e2..d022b0a7dfbc 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ scripts/tmp/ .tools/ launchSettings.json korebuild-lock.txt +.gradle/ diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 2fb22adc2394..b7b342f0e715 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -52,10 +52,10 @@ + - diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj b/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj index d3404c43de0e..58e9e115d7ed 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/IISIntegration.FunctionalTests.csproj @@ -10,9 +10,6 @@ - - - diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin b/src/SignalR/clients/java/signalr/.gradle/4.9/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin b/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.bin deleted file mode 100644 index 8d0f75d5a9e51585569d68c3a3f76fa2d87c4edf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18597 zcmeI%y-Gtd6ae6~iy)#G{GqFEMG?U#C@ZK0Yc6MG>njm4z8albj49d@SD_FB9AKiGLcZQXU} zIz_!v*2@^{jkISaK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0Rja6QeZhAR*!QwpIQ6z>#_HI`}%S4GP8X$(hZ@qb^Nyboo-ZFjdAgJ d$3y>m{qt)6sQI*i(YrZo6&?N5F@BzR`~dZXM+*P| diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock b/src/SignalR/clients/java/signalr/.gradle/4.9/fileHashes/fileHashes.lock deleted file mode 100644 index b12b378eb053b0d81f745f4be7ed2462583a2e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZSXu+P`2?cO8H00ArjDER|R diff --git a/src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock b/src/SignalR/clients/java/signalr/.gradle/4.9/taskHistory/taskHistory.lock deleted file mode 100644 index ed53ea70ed447105c1ca83ec6fcc80e75b32be09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQJJmK)E^XUGs3{U_7J(X3=qHw06HE7!~g&Q diff --git a/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties b/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index bbfebeb9b3b6..000000000000 --- a/src/SignalR/clients/java/signalr/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Fri Dec 07 17:30:44 PST 2018 -gradle.version=4.9 diff --git a/src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties b/src/SignalR/clients/java/signalr/.gradle/vcsWorkingDirs/gc.properties deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom b/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom deleted file mode 100644 index a2346e91d8a0..000000000000 --- a/src/SignalR/clients/java/signalr/build/libs/signalr-1.0.0-rtm.pom +++ /dev/null @@ -1,80 +0,0 @@ - - - 4.0.0 - com.microsoft.signalr - signalr - 1.0.0-rtm - com.microsoft.signalr:signalr - ASP.NET Core SignalR Client for Java applications - https://github.com/aspnet/SignalR - 2018 - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - microsoft - Microsoft - - - - scm:git:git://github.com/aspnet/SignalR.git - scm:git:git://github.com/aspnet/SignalR.git - http://github.com/aspnet/SignalR/tree/master - - - - io.reactivex.rxjava2 - rxjava - 2.2.2 - compile - - - com.google.code.gson - gson - 2.8.5 - runtime - - - com.squareup.okhttp3 - okhttp - 3.11.0 - runtime - - - org.slf4j - slf4j-api - 1.7.25 - runtime - - - org.junit.jupiter - junit-jupiter-params - 5.3.1 - test - - - org.slf4j - slf4j-jdk14 - 1.7.25 - test - - - org.junit.jupiter - junit-jupiter-api - 5.3.1 - test - - - org.junit.jupiter - junit-jupiter-engine - 5.3.1 - test - - - From 961e6c7c15f1f238d1c2c88cf23b4a51517ddbfc Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 12 Dec 2018 11:06:58 -0800 Subject: [PATCH 12/13] Update path --- .../test/IISIntegration.FunctionalTests/Utilities/Helpers.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs index 0071fda1b2d9..fcb5dda5ad9b 100644 --- a/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs +++ b/src/Servers/IIS/test/IISIntegration.FunctionalTests/Utilities/Helpers.cs @@ -19,8 +19,6 @@ public static string GetTestWebSitePath(string name) "..", // debug "..", // obj "..", // projectfolder - "src", - "servers", "iis", "test", "testassets", From ce566db62c3c28093a0678e57dfca8df687e8ba8 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Wed, 12 Dec 2018 11:49:53 -0800 Subject: [PATCH 13/13] Feedback --- .../testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj | 2 -- .../testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj index 4f7d5dc698e3..1b0837464341 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/OutOfProcessWebSite.csproj @@ -7,14 +7,12 @@ - - diff --git a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs index 29098ca70276..eda1493fbb90 100644 --- a/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs +++ b/src/Servers/IIS/test/testassets/OutOfProcessWebSite/StartupNtlmAuthentication.cs @@ -8,7 +8,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.IISIntegration; using Microsoft.Extensions.Logging; -using Xunit; namespace TestSites { @@ -47,7 +46,6 @@ public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) { if (context.User.Identity.IsAuthenticated) { - Assert.IsType(context.User); return context.Response.WriteAsync(context.User.Identity.AuthenticationType); } else