windows-nt/Source/XPSP1/NT/inetsrv/iis/iisrearc/iisplus/ulw3/generalhandler.cxx
2020-09-26 16:20:57 +08:00

137 lines
2.3 KiB
C++

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name :
generalhandler.cxx
Abstract:
A general purpose error sending handler. This cleans up some of the
logic needed to allow DetermineHandler() to send HTTP errors.
Author:
Bilal Alam (balam) 7-Jan-2000
Environment:
Win32 - User Mode
Project:
ULW3.DLL
--*/
#include "precomp.hxx"
#include "generalhandler.hxx"
ALLOC_CACHE_HANDLER * W3_GENERAL_HANDLER::sm_pachGeneralHandlers;
CONTEXT_STATUS
W3_GENERAL_HANDLER::DoWork(
VOID
)
/*++
Routine Description:
Send the configured error response to the client
Return Value:
HRESULT
--*/
{
HRESULT hr;
W3_CONTEXT *pW3Context = QueryW3Context();
DBG_ASSERT( pW3Context != NULL );
//
// Setup the error response and send it
//
pW3Context->QueryResponse()->SetStatus( _httpStatus, _httpSubError );
hr = pW3Context->SendResponse( W3_FLAG_ASYNC );
if ( FAILED( hr ) )
{
pW3Context->SetErrorStatus( hr );
pW3Context->QueryResponse()->SetStatus( HttpStatusServerError );
return CONTEXT_STATUS_CONTINUE;
}
return CONTEXT_STATUS_PENDING;
}
// static
HRESULT
W3_GENERAL_HANDLER::Initialize(
VOID
)
/*++
Routine Description:
Global initialization routine for W3_GENERAL_HANDLERs
Arguments:
None
Return Value:
HRESULT
--*/
{
ALLOC_CACHE_CONFIGURATION acConfig;
HRESULT hr = NO_ERROR;
//
// Setup allocation lookaside
//
acConfig.nConcurrency = 1;
acConfig.nThreshold = 100;
acConfig.cbSize = sizeof( W3_GENERAL_HANDLER );
DBG_ASSERT( sm_pachGeneralHandlers == NULL );
sm_pachGeneralHandlers = new ALLOC_CACHE_HANDLER( "W3_GENERAL_HANDLER",
&acConfig );
if ( sm_pachGeneralHandlers == NULL )
{
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
return NO_ERROR;
}
// static
VOID
W3_GENERAL_HANDLER::Terminate(
VOID
)
/*++
Routine Description:
Terminate MAIN_CONTEXT globals
Arguments:
None
Return Value:
None
--*/
{
if ( sm_pachGeneralHandlers != NULL )
{
delete sm_pachGeneralHandlers;
sm_pachGeneralHandlers = NULL;
}
}