// 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 "applicationinfo.h" #include "irequesthandler.h" #include "applicationmanager.h" #include "DisconnectHandler.h" extern HTTP_MODULE_ID g_pModuleId; class ASPNET_CORE_PROXY_MODULE : NonCopyable, public CHttpModule { public: ASPNET_CORE_PROXY_MODULE(HTTP_MODULE_ID moduleId, std::shared_ptr applicationManager) noexcept; ~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; __override REQUEST_NOTIFICATION_STATUS OnAsyncCompletion( IHttpContext * pHttpContext, DWORD dwNotification, BOOL fPostNotification, IHttpEventProvider * pProvider, IHttpCompletionInfo * pCompletionInfo ) override; void NotifyDisconnect() const; private: std::shared_ptr m_pApplicationManager; std::shared_ptr m_pApplicationInfo; std::unique_ptr m_pHandler; HTTP_MODULE_ID m_moduleId; DisconnectHandler * m_pDisconnectHandler; }; class ASPNET_CORE_PROXY_MODULE_FACTORY : NonCopyable, public IHttpModuleFactory { public: ASPNET_CORE_PROXY_MODULE_FACTORY(HTTP_MODULE_ID moduleId, std::shared_ptr applicationManager) noexcept; virtual ~ASPNET_CORE_PROXY_MODULE_FACTORY() = default; HRESULT GetHttpModule( CHttpModule ** ppModule, IModuleAllocator * pAllocator ) override; VOID Terminate() noexcept override; private: std::shared_ptr m_pApplicationManager; HTTP_MODULE_ID m_moduleId; };