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.
143 lines
3.0 KiB
143 lines
3.0 KiB
//+-----------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (c) Microsoft Corporation
|
|
//
|
|
// File: kpcontext.cxx
|
|
//
|
|
// Contents: Routines for managing contexts.
|
|
//
|
|
// History: 10-Jul-2001 t-ryanj Created
|
|
//
|
|
//------------------------------------------------------------------------
|
|
#include "kpcontext.h"
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: KpAcquireContext
|
|
//
|
|
// Synopsis: Creates a context for the http session associated with
|
|
// pECB. This context should be released with KpReleaseContext.
|
|
//
|
|
// Effects:
|
|
//
|
|
// Arguments: pECB - Extension control block provided by ISAPI
|
|
//
|
|
// Requires:
|
|
//
|
|
// Returns: The context.
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
PKPCONTEXT
|
|
KpAcquireContext(
|
|
LPEXTENSION_CONTROL_BLOCK pECB
|
|
)
|
|
{
|
|
DebugLog( DEB_TRACE, "%s(%d): Acquiring context.\n", __FILE__, __LINE__ );
|
|
|
|
//
|
|
// Alloc memory for the context.
|
|
//
|
|
|
|
PKPCONTEXT pContext = (PKPCONTEXT)KpAlloc( sizeof( KPCONTEXT ) );
|
|
|
|
ZeroMemory( pContext, sizeof( KPCONTEXT ) );
|
|
|
|
if( pContext )
|
|
{
|
|
pContext->databuf = (LPBYTE)KpAlloc( pECB->cbTotalBytes );
|
|
if( !pContext->databuf )
|
|
goto Error;
|
|
|
|
//
|
|
// Populate with initial context settings.
|
|
//
|
|
|
|
pContext->pECB = pECB;
|
|
pContext->buflen = pECB->cbTotalBytes;
|
|
pContext->dwStatus = KP_HTTP_READ;
|
|
|
|
//
|
|
// Copy the data we have
|
|
//
|
|
|
|
memcpy( pContext->databuf, pECB->lpbData, pECB->cbAvailable );
|
|
|
|
//
|
|
// Remember how much more data we have.
|
|
//
|
|
|
|
pContext->emptybytes = pContext->buflen - pECB->cbAvailable;
|
|
}
|
|
|
|
Cleanup:
|
|
return pContext;
|
|
|
|
Error:
|
|
if( pContext )
|
|
{
|
|
if( pContext->databuf )
|
|
KpFree( pContext->databuf );
|
|
|
|
KpFree( pContext );
|
|
|
|
pContext = NULL;
|
|
}
|
|
|
|
goto Cleanup;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: KpReleaseContext
|
|
//
|
|
// Synopsis: Releases a context and frees its resources.
|
|
//
|
|
// Effects:
|
|
//
|
|
// Arguments: pContext
|
|
//
|
|
// Requires:
|
|
//
|
|
// Returns:
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
VOID
|
|
KpReleaseContext(
|
|
PKPCONTEXT pContext
|
|
)
|
|
{
|
|
DebugLog( DEB_TRACE, "%s(%d): Releasing context.\n", __FILE__, __LINE__ );
|
|
|
|
if( pContext->KdcSock )
|
|
closesocket(pContext->KdcSock);
|
|
|
|
//
|
|
// Release the HTTP connection.
|
|
//
|
|
|
|
if( pContext->pECB )
|
|
{
|
|
pContext->pECB->ServerSupportFunction( pContext->pECB->ConnID,
|
|
HSE_REQ_DONE_WITH_SESSION,
|
|
NULL,
|
|
NULL,
|
|
NULL );
|
|
pContext->pECB = NULL;
|
|
}
|
|
|
|
if( pContext->databuf )
|
|
KpFree( pContext->databuf );
|
|
|
|
//
|
|
// Free the memory.
|
|
//
|
|
|
|
KpFree( pContext );
|
|
}
|
|
|