mirror of https://github.com/tongzx/nt5src
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.
304 lines
5.5 KiB
304 lines
5.5 KiB
/*++
|
|
|
|
Copyright (c) 1999-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
sendresponsep.h
|
|
|
|
Abstract:
|
|
|
|
The private definition of response sending interfaces.
|
|
|
|
Author:
|
|
|
|
Michael Courage (mcourage) 15-Jun-1999
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _SENDRESPONSEP_H_
|
|
#define _SENDRESPONSEP_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Private constants.
|
|
//
|
|
|
|
//
|
|
// Convenience macro to test if a MDL describes locked memory.
|
|
//
|
|
|
|
#define IS_MDL_LOCKED(pmdl) (((pmdl)->MdlFlags & MDL_PAGES_LOCKED) != 0)
|
|
|
|
#define HEADER_CHUNK_COUNT 2
|
|
|
|
|
|
//
|
|
// Private prototypes.
|
|
//
|
|
|
|
ULONG
|
|
UlpComputeFixedHeaderSize(
|
|
IN PHTTP_RESPONSE pUserResponse
|
|
);
|
|
|
|
VOID
|
|
UlpComputeChunkBufferSizes(
|
|
IN ULONG ChunkCount,
|
|
IN PHTTP_DATA_CHUNK pDataChunks,
|
|
IN ULONG Flags,
|
|
OUT PULONG pAuxBufferSize,
|
|
OUT PULONG pCopiedMemorySize,
|
|
OUT PULONG pUncopiedMemorySize,
|
|
OUT PULONGLONG pFromFileSize
|
|
);
|
|
|
|
VOID
|
|
UlpDestroyCapturedResponse(
|
|
IN PUL_INTERNAL_RESPONSE pResponse
|
|
);
|
|
|
|
VOID
|
|
UlpSendHttpResponseWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
VOID
|
|
UlpCloseConnectionComplete(
|
|
IN PVOID pCompletionContext,
|
|
IN NTSTATUS Status,
|
|
IN ULONG_PTR Information
|
|
);
|
|
|
|
PUL_CHUNK_TRACKER
|
|
UlpAllocateChunkTracker(
|
|
IN UL_TRACKER_TYPE TrackerType,
|
|
IN CCHAR SendIrpStackSize,
|
|
IN CCHAR ReadIrpStackSize,
|
|
IN PUL_HTTP_CONNECTION pHttpConnection,
|
|
IN ULONG Flags,
|
|
IN PUL_INTERNAL_REQUEST pRequest,
|
|
IN PUL_INTERNAL_RESPONSE pResponse,
|
|
IN PUL_COMPLETION_ROUTINE pCompletionRoutine,
|
|
IN PVOID pCompletionContext
|
|
);
|
|
|
|
VOID
|
|
UlpFreeChunkTracker(
|
|
IN PUL_CHUNK_TRACKER pTracker
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendRequest(
|
|
IN PUL_CHUNK_TRACKER pTracker,
|
|
IN NTSTATUS Status
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendRequestWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendIrpEarly(
|
|
PUL_COMPLETION_ROUTINE pCompletionRoutine,
|
|
PVOID pCompletionContext,
|
|
NTSTATUS Status,
|
|
ULONGLONG BytesTransferred
|
|
);
|
|
|
|
NTSTATUS
|
|
UlpRestartMdlRead(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp,
|
|
IN PVOID pContext
|
|
);
|
|
|
|
VOID
|
|
UlpRestartMdlSend(
|
|
IN PVOID pCompletionContext,
|
|
IN NTSTATUS Status,
|
|
IN ULONG_PTR Information
|
|
);
|
|
|
|
VOID
|
|
UlpSendCompleteWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
VOID
|
|
UlpFreeMdlRuns(
|
|
IN OUT PUL_CHUNK_TRACKER pTracker
|
|
);
|
|
|
|
VOID
|
|
UlpIncrementChunkPointer(
|
|
IN OUT PUL_CHUNK_TRACKER pTracker
|
|
);
|
|
|
|
__inline
|
|
VOID
|
|
FASTCALL
|
|
UlpInitMdlRuns(
|
|
IN OUT PUL_CHUNK_TRACKER pTracker
|
|
)
|
|
{
|
|
pTracker->SendInfo.pMdlHead = NULL;
|
|
pTracker->SendInfo.pMdlLink = &pTracker->SendInfo.pMdlHead;
|
|
pTracker->SendInfo.MdlRunCount = 0;
|
|
pTracker->SendInfo.BytesBuffered = 0;
|
|
}
|
|
|
|
|
|
//
|
|
// read stuff into the cache
|
|
//
|
|
|
|
NTSTATUS
|
|
UlpBuildCacheEntry(
|
|
IN PUL_INTERNAL_REQUEST pRequest,
|
|
IN PUL_INTERNAL_RESPONSE pResponse,
|
|
IN PUL_APP_POOL_PROCESS pProcess,
|
|
IN ULONG Flags,
|
|
IN HTTP_CACHE_POLICY CachePolicy,
|
|
IN PUL_COMPLETION_ROUTINE pCompletionRoutine,
|
|
IN PVOID pCompletionContext
|
|
);
|
|
|
|
VOID
|
|
UlpBuildBuildTrackerWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
VOID
|
|
UlpBuildCacheEntryWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
NTSTATUS
|
|
UlpRestartCacheMdlRead(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp,
|
|
IN PVOID pContext
|
|
);
|
|
|
|
NTSTATUS
|
|
UlpRestartCacheMdlFree(
|
|
IN PDEVICE_OBJECT pDeviceObject,
|
|
IN PIRP pIrp,
|
|
IN PVOID pContext
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteCacheBuild(
|
|
IN PUL_CHUNK_TRACKER pTracker,
|
|
IN NTSTATUS Status
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteCacheBuildWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
|
|
//
|
|
// send cache entry across the wire
|
|
//
|
|
|
|
NTSTATUS
|
|
UlpSendCacheEntry(
|
|
PUL_HTTP_CONNECTION pHttpConnection,
|
|
ULONG Flags,
|
|
PUL_URI_CACHE_ENTRY pUriCacheEntry,
|
|
PUL_COMPLETION_ROUTINE pCompletionRoutine,
|
|
PVOID pCompletionContext,
|
|
PUL_LOG_DATA_BUFFER pLogData
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendCacheEntry(
|
|
IN PVOID pCompletionContext,
|
|
IN NTSTATUS Status,
|
|
IN ULONG_PTR Information
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendCacheEntry(
|
|
IN PVOID pCompletionContext,
|
|
IN NTSTATUS Status,
|
|
IN ULONG_PTR Information
|
|
);
|
|
|
|
VOID
|
|
UlpCompleteSendCacheEntryWorker(
|
|
IN PUL_WORK_ITEM pWorkItem
|
|
);
|
|
|
|
PUL_FULL_TRACKER
|
|
UlpAllocateCacheTracker(
|
|
IN CCHAR SendIrpStackSize
|
|
);
|
|
|
|
VOID
|
|
UlpFreeCacheTracker(
|
|
IN PUL_FULL_TRACKER pTracker
|
|
);
|
|
|
|
//
|
|
// utility
|
|
//
|
|
|
|
ULONG
|
|
UlpCheckCacheControlHeaders(
|
|
IN PUL_INTERNAL_REQUEST pRequest,
|
|
IN PUL_URI_CACHE_ENTRY pUriCacheEntry
|
|
);
|
|
|
|
BOOLEAN
|
|
UlpIsAcceptHeaderOk(
|
|
PUL_INTERNAL_REQUEST pRequest,
|
|
PUL_URI_CACHE_ENTRY pUriCacheEntry
|
|
);
|
|
|
|
VOID
|
|
UlpGetTypeAndSubType(
|
|
PSTR pStr,
|
|
ULONG StrLen,
|
|
PUL_CONTENT_TYPE pContentType
|
|
);
|
|
|
|
VOID
|
|
UlReferenceChunkTracker(
|
|
IN PUL_CHUNK_TRACKER pTracker
|
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
|
);
|
|
|
|
VOID
|
|
UlDereferenceChunkTracker(
|
|
IN PUL_CHUNK_TRACKER pTracker
|
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
|
);
|
|
|
|
#define UL_REFERENCE_CHUNK_TRACKER( pTracker ) \
|
|
UlReferenceChunkTracker( \
|
|
(pTracker) \
|
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
|
)
|
|
|
|
#define UL_DEREFERENCE_CHUNK_TRACKER( pTracker ) \
|
|
UlDereferenceChunkTracker( \
|
|
(pTracker) \
|
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
|
)
|
|
|
|
#ifdef __cplusplus
|
|
}; // extern "C"
|
|
#endif
|
|
|
|
#endif // _SENDRESPONSEP_H_
|