/*++ Copyright (c) 1999-2000 Microsoft Corporation Module Name: ulatq.h Abstract: Exported ULATQ.DLL routines. ULATQ contains the thread queue and UL support routines for IISPLUS. Author: Taylor Weiss (TaylorW) 15-Dec-1999 Revision History: --*/ #ifndef _ULATQ_H_ #define _ULATQ_H_ // // The magic context that makes the world turn // typedef VOID* ULATQ_CONTEXT; // // Some callbacks specified by user of ULATQ to catch certain events // typedef VOID (*PFN_ULATQ_NEW_REQUEST) ( ULATQ_CONTEXT pContext ); typedef VOID (*PFN_ULATQ_IO_COMPLETION) ( PVOID pvContext, DWORD cbWritten, DWORD dwCompletionStatus, OVERLAPPED * lpo ); typedef VOID (*PFN_ULATQ_DISCONNECT) ( PVOID pvContext ); typedef VOID (*PFN_ULATQ_ON_SHUTDOWN) ( BOOL fImmediate ); typedef HRESULT (* PFN_ULATQ_COLLECT_PERF_COUNTERS)( OUT PBYTE * ppCounterData, OUT DWORD * pdwCounterData ); typedef struct _ULATQ_CONFIG { PFN_ULATQ_IO_COMPLETION pfnIoCompletion; PFN_ULATQ_NEW_REQUEST pfnNewRequest; PFN_ULATQ_DISCONNECT pfnDisconnect; PFN_ULATQ_ON_SHUTDOWN pfnOnShutdown; PFN_ULATQ_COLLECT_PERF_COUNTERS pfnCollectCounters; } ULATQ_CONFIG, *PULATQ_CONFIG; // // ULATQ_CONTEXT properties // typedef enum { ULATQ_PROPERTY_COMPLETION_CONTEXT = 0, ULATQ_PROPERTY_HTTP_REQUEST, ULATQ_PROPERTY_APP_POOL_ID, ULATQ_PROPERTY_IS_COMMAND_LINE_LAUNCH, ULATQ_PROPERTY_DO_CENTRAL_BINARY_LOGGING } ULATQ_CONTEXT_PROPERTY_ID; HRESULT UlAtqInitialize( INT argc, LPWSTR argv[], ULATQ_CONFIG * pConfig ); HRESULT UlAtqStartListen( VOID ); VOID UlAtqTerminate( HRESULT hrToSend ); VOID * UlAtqGetContextProperty( ULATQ_CONTEXT pContext, ULATQ_CONTEXT_PROPERTY_ID ContextPropertyId ); VOID UlAtqSetContextProperty( ULATQ_CONTEXT pContext, ULATQ_CONTEXT_PROPERTY_ID ContextPropertyId, PVOID pvData ); VOID * UlAtqAllocateMemory( ULATQ_CONTEXT pContext, DWORD cbData ); VOID UlAtqFreeContext( ULATQ_CONTEXT pContext ); HRESULT UlAtqSendEntityBody( ULATQ_CONTEXT pContext, BOOL fAsync, DWORD dwFlags, USHORT cChunks, HTTP_DATA_CHUNK * pChunks, DWORD *pcbSent, HTTP_LOG_FIELDS_DATA *pUlLogData ); HRESULT UlAtqReceiveEntityBody( ULATQ_CONTEXT pContext, BOOL fAsync, DWORD dwFlags, VOID * pBuffer, DWORD cbBuffer, DWORD * pBytesReceived ); HRESULT UlAtqSendHttpResponse( ULATQ_CONTEXT pContext, BOOL fAsync, DWORD dwFlags, HTTP_RESPONSE * pResponse, HTTP_CACHE_POLICY * pCachePolicy, DWORD * pcbSent, HTTP_LOG_FIELDS_DATA * pUlLogData ); HRESULT UlAtqWaitForDisconnect( HTTP_CONNECTION_ID connectionId, BOOL fAsync, VOID * pvContext, BOOL * pfAlreadyCompleted = NULL ); HRESULT UlAtqReceiveClientCertificate( ULATQ_CONTEXT pContext, BOOL fAsync, BOOL fDoCertMap, HTTP_SSL_CLIENT_CERT_INFO **ppClientCertInfo ); HRESULT UlAtqInduceShutdown( BOOL fImmediate ); HRESULT UlAtqFlushUlCache( WCHAR * pszURLPrefix ); VOID UlAtqSetUnhealthy( VOID ); HRESULT UlAtqAddFragmentToCache( HTTP_DATA_CHUNK * pDataChunk, WCHAR * pszFragmentName); HRESULT UlAtqReadFragmentFromCache( WCHAR * pszFragmentName, BYTE * pvBuffer, DWORD cbSize, DWORD * pcbCopied); HRESULT UlAtqRemoveFragmentFromCache( WCHAR * pszFragmentName); #endif // _ULATQ_H_