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.
 
 
 
 
 
 

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_