261 lines
8.5 KiB
C
261 lines
8.5 KiB
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the w64 mingw-runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER within this package.
|
|
*/
|
|
#ifndef _HTTPEXT_H_
|
|
#define _HTTPEXT_H_
|
|
|
|
#include <windows.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define HSE_VERSION_MAJOR 6
|
|
#define HSE_VERSION_MINOR 0
|
|
#define HSE_LOG_BUFFER_LEN 80
|
|
#define HSE_MAX_EXT_DLL_NAME_LEN 256
|
|
|
|
#define HSE_VERSION MAKELONG(HSE_VERSION_MINOR,HSE_VERSION_MAJOR)
|
|
|
|
#define HSE_STATUS_SUCCESS 1
|
|
#define HSE_STATUS_SUCCESS_AND_KEEP_CONN 2
|
|
#define HSE_STATUS_PENDING 3
|
|
#define HSE_STATUS_ERROR 4
|
|
|
|
#define HSE_REQ_BASE 0
|
|
#define HSE_REQ_SEND_URL_REDIRECT_RESP (HSE_REQ_BASE + 1)
|
|
#define HSE_REQ_SEND_URL (HSE_REQ_BASE + 2)
|
|
#define HSE_REQ_SEND_RESPONSE_HEADER (HSE_REQ_BASE + 3)
|
|
#define HSE_REQ_DONE_WITH_SESSION (HSE_REQ_BASE + 4)
|
|
#define HSE_REQ_END_RESERVED 1000
|
|
|
|
#define HSE_REQ_MAP_URL_TO_PATH (HSE_REQ_END_RESERVED+1)
|
|
#define HSE_REQ_GET_SSPI_INFO (HSE_REQ_END_RESERVED+2)
|
|
#define HSE_APPEND_LOG_PARAMETER (HSE_REQ_END_RESERVED+3)
|
|
#define HSE_REQ_IO_COMPLETION (HSE_REQ_END_RESERVED+5)
|
|
#define HSE_REQ_TRANSMIT_FILE (HSE_REQ_END_RESERVED+6)
|
|
#define HSE_REQ_REFRESH_ISAPI_ACL (HSE_REQ_END_RESERVED+7)
|
|
#define HSE_REQ_IS_KEEP_CONN (HSE_REQ_END_RESERVED+8)
|
|
#define HSE_REQ_ASYNC_READ_CLIENT (HSE_REQ_END_RESERVED+10)
|
|
#define HSE_REQ_GET_IMPERSONATION_TOKEN (HSE_REQ_END_RESERVED+11)
|
|
#define HSE_REQ_MAP_URL_TO_PATH_EX (HSE_REQ_END_RESERVED+12)
|
|
#define HSE_REQ_ABORTIVE_CLOSE (HSE_REQ_END_RESERVED+14)
|
|
#define HSE_REQ_GET_CERT_INFO_EX (HSE_REQ_END_RESERVED+15)
|
|
#define HSE_REQ_SEND_RESPONSE_HEADER_EX (HSE_REQ_END_RESERVED+16)
|
|
#define HSE_REQ_CLOSE_CONNECTION (HSE_REQ_END_RESERVED+17)
|
|
#define HSE_REQ_IS_CONNECTED (HSE_REQ_END_RESERVED+18)
|
|
#define HSE_REQ_MAP_UNICODE_URL_TO_PATH (HSE_REQ_END_RESERVED+23)
|
|
#define HSE_REQ_MAP_UNICODE_URL_TO_PATH_EX (HSE_REQ_END_RESERVED+24)
|
|
#define HSE_REQ_EXEC_UNICODE_URL (HSE_REQ_END_RESERVED+25)
|
|
#define HSE_REQ_EXEC_URL (HSE_REQ_END_RESERVED+26)
|
|
#define HSE_REQ_GET_EXEC_URL_STATUS (HSE_REQ_END_RESERVED+27)
|
|
#define HSE_REQ_SEND_CUSTOM_ERROR (HSE_REQ_END_RESERVED+28)
|
|
#define HSE_REQ_IS_IN_PROCESS (HSE_REQ_END_RESERVED+30)
|
|
#define HSE_REQ_REPORT_UNHEALTHY (HSE_REQ_END_RESERVED+32)
|
|
#define HSE_REQ_NORMALIZE_URL (HSE_REQ_END_RESERVED+33)
|
|
#define HSE_REQ_VECTOR_SEND (HSE_REQ_END_RESERVED+37)
|
|
#define HSE_REQ_GET_ANONYMOUS_TOKEN (HSE_REQ_END_RESERVED+38)
|
|
#define HSE_REQ_GET_CACHE_INVALIDATION_CALLBACK (HSE_REQ_END_RESERVED+40)
|
|
#define HSE_REQ_GET_UNICODE_ANONYMOUS_TOKEN (HSE_REQ_END_RESERVED+41)
|
|
#define HSE_REQ_GET_TRACE_INFO (HSE_REQ_END_RESERVED+42)
|
|
|
|
#define HSE_TERM_ADVISORY_UNLOAD 0x00000001
|
|
#define HSE_TERM_MUST_UNLOAD 0x00000002
|
|
|
|
#define HSE_IO_SYNC 0x00000001
|
|
#define HSE_IO_ASYNC 0x00000002
|
|
#define HSE_IO_DISCONNECT_AFTER_SEND 0x00000004
|
|
#define HSE_IO_SEND_HEADERS 0x00000008
|
|
#define HSE_IO_NODELAY 0x00001000
|
|
|
|
#define HSE_IO_FINAL_SEND 0x00000010
|
|
#define HSE_IO_CACHE_RESPONSE 0x00000020
|
|
|
|
typedef LPVOID HCONN;
|
|
|
|
typedef struct _HSE_VERSION_INFO {
|
|
DWORD dwExtensionVersion;
|
|
CHAR lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN];
|
|
} HSE_VERSION_INFO,*LPHSE_VERSION_INFO;
|
|
|
|
typedef struct _EXTENSION_CONTROL_BLOCK {
|
|
DWORD cbSize;
|
|
DWORD dwVersion;
|
|
HCONN ConnID;
|
|
DWORD dwHttpStatusCode;
|
|
CHAR lpszLogData[HSE_LOG_BUFFER_LEN];
|
|
LPSTR lpszMethod;
|
|
LPSTR lpszQueryString;
|
|
LPSTR lpszPathInfo;
|
|
LPSTR lpszPathTranslated;
|
|
|
|
DWORD cbTotalBytes;
|
|
DWORD cbAvailable;
|
|
LPBYTE lpbData;
|
|
LPSTR lpszContentType;
|
|
WINBOOL (WINAPI *GetServerVariable) (HCONN hConn,LPSTR lpszVariableName,LPVOID lpvBuffer,LPDWORD lpdwSize);
|
|
WINBOOL (WINAPI *WriteClient) (HCONN ConnID,LPVOID Buffer,LPDWORD lpdwBytes,DWORD dwReserved);
|
|
WINBOOL (WINAPI *ReadClient) (HCONN ConnID,LPVOID lpvBuffer,LPDWORD lpdwSize);
|
|
WINBOOL (WINAPI *ServerSupportFunction)(HCONN hConn,DWORD dwHSERequest,LPVOID lpvBuffer,LPDWORD lpdwSize,LPDWORD lpdwDataType);
|
|
} EXTENSION_CONTROL_BLOCK,*LPEXTENSION_CONTROL_BLOCK;
|
|
|
|
#define HSE_URL_FLAGS_READ 0x00000001
|
|
#define HSE_URL_FLAGS_WRITE 0x00000002
|
|
#define HSE_URL_FLAGS_EXECUTE 0x00000004
|
|
#define HSE_URL_FLAGS_SSL 0x00000008
|
|
#define HSE_URL_FLAGS_DONT_CACHE 0x00000010
|
|
#define HSE_URL_FLAGS_NEGO_CERT 0x00000020
|
|
#define HSE_URL_FLAGS_REQUIRE_CERT 0x00000040
|
|
#define HSE_URL_FLAGS_MAP_CERT 0x00000080
|
|
#define HSE_URL_FLAGS_SSL128 0x00000100
|
|
#define HSE_URL_FLAGS_SCRIPT 0x00000200
|
|
|
|
#define HSE_URL_FLAGS_MASK 0x000003ff
|
|
|
|
typedef struct _HSE_URL_MAPEX_INFO {
|
|
CHAR lpszPath[MAX_PATH];
|
|
DWORD dwFlags;
|
|
DWORD cchMatchingPath;
|
|
DWORD cchMatchingURL;
|
|
DWORD dwReserved1;
|
|
DWORD dwReserved2;
|
|
} HSE_URL_MAPEX_INFO,*LPHSE_URL_MAPEX_INFO;
|
|
|
|
typedef struct _HSE_UNICODE_URL_MAPEX_INFO {
|
|
WCHAR lpszPath[MAX_PATH];
|
|
DWORD dwFlags;
|
|
DWORD cchMatchingPath;
|
|
DWORD cchMatchingURL;
|
|
} HSE_UNICODE_URL_MAPEX_INFO,*LPHSE_UNICODE_URL_MAPEX_INFO;
|
|
|
|
typedef VOID (WINAPI *PFN_HSE_IO_COMPLETION)(EXTENSION_CONTROL_BLOCK *pECB,PVOID pContext,DWORD cbIO,DWORD dwError);
|
|
|
|
typedef struct _HSE_TF_INFO {
|
|
PFN_HSE_IO_COMPLETION pfnHseIO;
|
|
PVOID pContext;
|
|
HANDLE hFile;
|
|
LPCSTR pszStatusCode;
|
|
DWORD BytesToWrite;
|
|
DWORD Offset;
|
|
PVOID pHead;
|
|
DWORD HeadLength;
|
|
PVOID pTail;
|
|
DWORD TailLength;
|
|
DWORD dwFlags;
|
|
} HSE_TF_INFO,*LPHSE_TF_INFO;
|
|
|
|
typedef struct _HSE_SEND_HEADER_EX_INFO {
|
|
LPCSTR pszStatus;
|
|
LPCSTR pszHeader;
|
|
DWORD cchStatus;
|
|
DWORD cchHeader;
|
|
WINBOOL fKeepConn;
|
|
} HSE_SEND_HEADER_EX_INFO,*LPHSE_SEND_HEADER_EX_INFO;
|
|
|
|
#define HSE_EXEC_URL_NO_HEADERS 0x02
|
|
#define HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR 0x04
|
|
#define HSE_EXEC_URL_IGNORE_VALIDATION_AND_RANGE 0x10
|
|
#define HSE_EXEC_URL_DISABLE_CUSTOM_ERROR 0x20
|
|
#define HSE_EXEC_URL_SSI_CMD 0x40
|
|
|
|
typedef struct _HSE_EXEC_URL_USER_INFO {
|
|
HANDLE hImpersonationToken;
|
|
LPSTR pszCustomUserName;
|
|
LPSTR pszCustomAuthType;
|
|
} HSE_EXEC_URL_USER_INFO,*LPHSE_EXEC_URL_USER_INFO;
|
|
|
|
typedef struct _HSE_EXEC_URL_ENTITY_INFO {
|
|
DWORD cbAvailable;
|
|
LPVOID lpbData;
|
|
} HSE_EXEC_URL_ENTITY_INFO,*LPHSE_EXEC_URL_ENTITY_INFO;
|
|
|
|
typedef struct _HSE_EXEC_URL_STATUS {
|
|
USHORT uHttpStatusCode;
|
|
USHORT uHttpSubStatus;
|
|
DWORD dwWin32Error;
|
|
} HSE_EXEC_URL_STATUS,*LPHSE_EXEC_URL_STATUS;
|
|
|
|
typedef struct _HSE_EXEC_URL_INFO {
|
|
LPSTR pszUrl;
|
|
LPSTR pszMethod;
|
|
LPSTR pszChildHeaders;
|
|
LPHSE_EXEC_URL_USER_INFO pUserInfo;
|
|
LPHSE_EXEC_URL_ENTITY_INFO pEntity;
|
|
DWORD dwExecUrlFlags;
|
|
} HSE_EXEC_URL_INFO,*LPHSE_EXEC_URL_INFO;
|
|
|
|
typedef struct _HSE_EXEC_UNICODE_URL_USER_INFO {
|
|
HANDLE hImpersonationToken;
|
|
LPWSTR pszCustomUserName;
|
|
LPSTR pszCustomAuthType;
|
|
} HSE_EXEC_UNICODE_URL_USER_INFO,*LPHSE_EXEC_UNICODE_URL_USER_INFO;
|
|
|
|
typedef struct _HSE_EXEC_UNICODE_URL_INFO {
|
|
LPWSTR pszUrl;
|
|
LPSTR pszMethod;
|
|
LPSTR pszChildHeaders;
|
|
LPHSE_EXEC_UNICODE_URL_USER_INFO pUserInfo;
|
|
LPHSE_EXEC_URL_ENTITY_INFO pEntity;
|
|
DWORD dwExecUrlFlags;
|
|
} HSE_EXEC_UNICODE_URL_INFO,*LPHSE_EXEC_UNICODE_URL_INFO;
|
|
|
|
typedef struct _HSE_CUSTOM_ERROR_INFO {
|
|
CHAR *pszStatus;
|
|
USHORT uHttpSubError;
|
|
WINBOOL fAsync;
|
|
} HSE_CUSTOM_ERROR_INFO,*LPHSE_CUSTOM_ERROR_INFO;
|
|
|
|
#define HSE_VECTOR_ELEMENT_TYPE_MEMORY_BUFFER 0
|
|
#define HSE_VECTOR_ELEMENT_TYPE_FILE_HANDLE 1
|
|
|
|
typedef struct _HSE_VECTOR_ELEMENT {
|
|
DWORD ElementType;
|
|
PVOID pvContext;
|
|
ULONGLONG cbOffset;
|
|
ULONGLONG cbSize;
|
|
} HSE_VECTOR_ELEMENT,*LPHSE_VECTOR_ELEMENT;
|
|
|
|
typedef struct _HSE_RESPONSE_VECTOR {
|
|
DWORD dwFlags;
|
|
LPSTR pszStatus;
|
|
LPSTR pszHeaders;
|
|
DWORD nElementCount;
|
|
LPHSE_VECTOR_ELEMENT lpElementArray;
|
|
} HSE_RESPONSE_VECTOR,*LPHSE_RESPONSE_VECTOR;
|
|
|
|
typedef HRESULT (WINAPI *PFN_HSE_CACHE_INVALIDATION_CALLBACK)(WCHAR *pszUrl);
|
|
|
|
#include <wincrypt.h>
|
|
|
|
typedef struct _CERT_CONTEXT_EX {
|
|
CERT_CONTEXT CertContext;
|
|
DWORD cbAllocated;
|
|
DWORD dwCertificateFlags;
|
|
} CERT_CONTEXT_EX;
|
|
|
|
typedef struct _HSE_TRACE_INFO {
|
|
WINBOOL fTraceRequest;
|
|
BYTE TraceContextId[16];
|
|
DWORD dwReserved1;
|
|
DWORD dwReserved2;
|
|
} HSE_TRACE_INFO,*LPHSE_TRACE_INFO;
|
|
|
|
#define HSE_APP_FLAG_IN_PROCESS 0
|
|
#define HSE_APP_FLAG_ISOLATED_OOP 1
|
|
#define HSE_APP_FLAG_POOLED_OOP 2
|
|
|
|
WINBOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer);
|
|
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB);
|
|
WINBOOL WINAPI TerminateExtension(DWORD dwFlags);
|
|
|
|
typedef WINBOOL (WINAPI *PFN_GETEXTENSIONVERSION)(HSE_VERSION_INFO *pVer);
|
|
typedef DWORD (WINAPI *PFN_HTTPEXTENSIONPROC)(EXTENSION_CONTROL_BLOCK *pECB);
|
|
typedef WINBOOL (WINAPI *PFN_TERMINATEEXTENSION)(DWORD dwFlags);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|