/*
* ModSecurity for Apache 2.x, http://www.modsecurity.org/
* Copyright (c) 2004-2013 Trustwave Holdings, Inc. (http://www.trustwave.com/)
*
* You may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* If any of the files related to licensing are missing or if you have any
* other questions related to licensing please contact Trustwave Holdings, Inc.
* directly using the email address security@modsecurity.org.
*/
#ifndef __MODULE_FACTORY_H__
#define __MODULE_FACTORY_H__
// Factory class for CMyHttpModule.
// This class is responsible for creating instances
// of CMyHttpModule for each request.
class CMyHttpModuleFactory : public IHttpModuleFactory
{
CMyHttpModule * m_pModule;
CRITICAL_SECTION m_csLock;
public:
CMyHttpModuleFactory()
{
m_pModule = NULL;
InitializeCriticalSection(&m_csLock);
}
virtual
HRESULT
GetHttpModule(
OUT CHttpModule **ppModule,
IN IModuleAllocator *
)
{
HRESULT hr = S_OK;
if ( ppModule == NULL )
{
hr = HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER );
goto Finished;
}
EnterCriticalSection(&m_csLock);
if(m_pModule == NULL)
{
m_pModule = new CMyHttpModule();
if ( m_pModule == NULL )
{
hr = HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
goto Finished;
}
}
LeaveCriticalSection(&m_csLock);
*ppModule = m_pModule;
Finished:
return hr;
}
virtual
void
Terminate()
{
if ( m_pModule != NULL )
{
//m_pModule->WriteEventViewerLog("Module terminated.");
delete m_pModule;
m_pModule = NULL;
}
delete this;
}
};
#endif