Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

195 lines
4.3 KiB

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
UploadServer.cpp
Abstract:
This file contains the implementation of the stubs needed
by an ISAPI extension.
Revision History:
Davide Massarenti (Dmassare) 04/20/99
created
******************************************************************************/
#include "stdafx.h"
#include <initguid.h>
#include "UploadServerCustom_i.c"
////////////////////////////////////////////////////////////////////////////////
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()
////////////////////////////////////////////////////////////////////////////////
HANDLE g_Heap;
CISAPIconfig g_Config;
MPC::NTEvent g_NTEvents;
static CRITICAL_SECTION g_CritSec;
static BOOL g_Initialized;
static WCHAR g_AppName [] = L"UploadServer";
static WCHAR g_RegistryBase[] = L"SOFTWARE\\Microsoft\\UploadLibrary\\Settings";
BOOL WINAPI DllMain( HINSTANCE hinstDLL ,
DWORD fdwReason ,
LPVOID lpvReserved )
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
g_Heap = HeapCreate( 0, 0, 0 ); if(g_Heap == NULL) return FALSE;
InitializeCriticalSection( &g_CritSec );
g_Initialized = false;
_Module.Init( ObjectMap, hinstDLL );
break;
case DLL_PROCESS_DETACH:
_Module.Term();
if(g_Initialized)
{
;
}
DeleteCriticalSection( &g_CritSec );
HeapDestroy( g_Heap );
break;
}
return TRUE;
}
DWORD WINAPI HttpExtensionProc( LPEXTENSION_CONTROL_BLOCK pECB )
{
__ULT_FUNC_ENTRY("HttpExtensionProc");
DWORD dwRes;
if(pECB->lpszQueryString)
{
//
// Exit if there's a query string beginning with DEBUG
//
if(!strncmp( pECB->lpszQueryString, "DEBUG", 5 ))
{
return HSE_STATUS_ERROR;
}
}
//
// Process the request.
//
try
{
MPCHttpContext* ptr = new MPCHttpContext();
dwRes = ptr->Init( pECB );
}
catch(...)
{
__ULT_TRACE_ERROR( UPLOADLIBID, "Upload Server raised an exception. Gracefully exiting..." );
(void)g_NTEvents.LogEvent( EVENTLOG_ERROR_TYPE, PCHUL_ERR_EXCEPTION,
L"" , // %1 = SERVER
L"HttpExtensionProc", // %2 = CLIENT
NULL );
dwRes = HSE_STATUS_ERROR;
}
return dwRes;
}
BOOL WINAPI GetExtensionVersion( HSE_VERSION_INFO* pVer )
{
BOOL fRes = TRUE;
// Create the extension version string, and
// copy string to HSE_VERSION_INFO structure
pVer->dwExtensionVersion = MAKELONG( HSE_VERSION_MINOR, HSE_VERSION_MAJOR );
// Copy description string into HSE_VERSION_INFO structure
strcpy( pVer->lpszExtensionDesc, "My ISAPI Extension" );
//
// Load config settings if it's the first time we are invoked.
//
if(g_Initialized == FALSE)
{
EnterCriticalSection( &g_CritSec );
if(g_Initialized == FALSE)
{
g_Initialized = TRUE;
__MPC_TRACE_INIT();
(void)g_NTEvents.Init ( g_AppName );
(void)g_Config .SetRoot( g_RegistryBase );
if(FAILED(g_Config.Load()))
{
(void)g_NTEvents.LogEvent( EVENTLOG_ERROR_TYPE, PCHUL_ERR_NOCONFIG, NULL );
fRes = FALSE;
}
}
LeaveCriticalSection( &g_CritSec );
}
(void)g_NTEvents.LogEvent( EVENTLOG_INFORMATION_TYPE, PCHUL_SUCCESS_STARTED, NULL );
return fRes;
}
BOOL WINAPI TerminateExtension( DWORD dwFlags )
{
(void)g_NTEvents.LogEvent( EVENTLOG_INFORMATION_TYPE, PCHUL_SUCCESS_STOPPED, NULL );
__MPC_TRACE_TERM();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
void WINAPI PurgeEngine(void)
{
__MPC_TRACE_INIT();
(void)g_NTEvents.Init ( g_AppName );
(void)g_Config .SetRoot( g_RegistryBase );
if(FAILED(g_Config.Load()))
{
(void)g_NTEvents.LogEvent( EVENTLOG_ERROR_TYPE, PCHUL_ERR_NOCONFIG, NULL );
}
else
{
MPCPurgeEngine mpcpe;
mpcpe.Process();
}
__MPC_TRACE_TERM();
}