| 1 | /** |
| 2 | * This file has no copyright assigned and is placed in the Public Domain. |
| 3 | * This file is part of the mingw-w64 runtime package. |
| 4 | * No warranty is given; refer to the file DISCLAIMER.PD within this package. |
| 5 | */ |
| 6 | #ifndef _HTTPEXT_H_ |
| 7 | #define _HTTPEXT_H_ |
| 8 | |
| 9 | #include <winapifamily.h> |
| 10 | |
| 11 | #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) |
| 12 | |
| 13 | #include <windows.h> |
| 14 | |
| 15 | #ifdef __cplusplus |
| 16 | extern "C" { |
| 17 | #endif |
| 18 | |
| 19 | #define HSE_VERSION_MAJOR 6 |
| 20 | #define HSE_VERSION_MINOR 0 |
| 21 | #define HSE_LOG_BUFFER_LEN 80 |
| 22 | #define HSE_MAX_EXT_DLL_NAME_LEN 256 |
| 23 | |
| 24 | #define HSE_VERSION MAKELONG(HSE_VERSION_MINOR,HSE_VERSION_MAJOR) |
| 25 | |
| 26 | #define HSE_STATUS_SUCCESS 1 |
| 27 | #define HSE_STATUS_SUCCESS_AND_KEEP_CONN 2 |
| 28 | #define HSE_STATUS_PENDING 3 |
| 29 | #define HSE_STATUS_ERROR 4 |
| 30 | |
| 31 | #define HSE_REQ_BASE 0 |
| 32 | #define HSE_REQ_SEND_URL_REDIRECT_RESP (HSE_REQ_BASE + 1) |
| 33 | #define HSE_REQ_SEND_URL (HSE_REQ_BASE + 2) |
| 34 | #define HSE_REQ_SEND_RESPONSE_HEADER (HSE_REQ_BASE + 3) |
| 35 | #define HSE_REQ_DONE_WITH_SESSION (HSE_REQ_BASE + 4) |
| 36 | #define HSE_REQ_END_RESERVED 1000 |
| 37 | |
| 38 | #define HSE_REQ_MAP_URL_TO_PATH (HSE_REQ_END_RESERVED+1) |
| 39 | #define HSE_REQ_GET_SSPI_INFO (HSE_REQ_END_RESERVED+2) |
| 40 | #define HSE_APPEND_LOG_PARAMETER (HSE_REQ_END_RESERVED+3) |
| 41 | #define HSE_REQ_IO_COMPLETION (HSE_REQ_END_RESERVED+5) |
| 42 | #define HSE_REQ_TRANSMIT_FILE (HSE_REQ_END_RESERVED+6) |
| 43 | #define HSE_REQ_REFRESH_ISAPI_ACL (HSE_REQ_END_RESERVED+7) |
| 44 | #define HSE_REQ_IS_KEEP_CONN (HSE_REQ_END_RESERVED+8) |
| 45 | #define HSE_REQ_ASYNC_READ_CLIENT (HSE_REQ_END_RESERVED+10) |
| 46 | #define HSE_REQ_GET_IMPERSONATION_TOKEN (HSE_REQ_END_RESERVED+11) |
| 47 | #define HSE_REQ_MAP_URL_TO_PATH_EX (HSE_REQ_END_RESERVED+12) |
| 48 | #define HSE_REQ_ABORTIVE_CLOSE (HSE_REQ_END_RESERVED+14) |
| 49 | #define HSE_REQ_GET_CERT_INFO_EX (HSE_REQ_END_RESERVED+15) |
| 50 | #define HSE_REQ_SEND_RESPONSE_HEADER_EX (HSE_REQ_END_RESERVED+16) |
| 51 | #define HSE_REQ_CLOSE_CONNECTION (HSE_REQ_END_RESERVED+17) |
| 52 | #define HSE_REQ_IS_CONNECTED (HSE_REQ_END_RESERVED+18) |
| 53 | #define HSE_REQ_MAP_UNICODE_URL_TO_PATH (HSE_REQ_END_RESERVED+23) |
| 54 | #define HSE_REQ_MAP_UNICODE_URL_TO_PATH_EX (HSE_REQ_END_RESERVED+24) |
| 55 | #define HSE_REQ_EXEC_UNICODE_URL (HSE_REQ_END_RESERVED+25) |
| 56 | #define HSE_REQ_EXEC_URL (HSE_REQ_END_RESERVED+26) |
| 57 | #define HSE_REQ_GET_EXEC_URL_STATUS (HSE_REQ_END_RESERVED+27) |
| 58 | #define HSE_REQ_SEND_CUSTOM_ERROR (HSE_REQ_END_RESERVED+28) |
| 59 | #define HSE_REQ_IS_IN_PROCESS (HSE_REQ_END_RESERVED+30) |
| 60 | #define HSE_REQ_REPORT_UNHEALTHY (HSE_REQ_END_RESERVED+32) |
| 61 | #define HSE_REQ_NORMALIZE_URL (HSE_REQ_END_RESERVED+33) |
| 62 | #define HSE_REQ_VECTOR_SEND (HSE_REQ_END_RESERVED+37) |
| 63 | #define HSE_REQ_GET_ANONYMOUS_TOKEN (HSE_REQ_END_RESERVED+38) |
| 64 | #define HSE_REQ_GET_CACHE_INVALIDATION_CALLBACK (HSE_REQ_END_RESERVED+40) |
| 65 | #define HSE_REQ_GET_UNICODE_ANONYMOUS_TOKEN (HSE_REQ_END_RESERVED+41) |
| 66 | #define HSE_REQ_GET_TRACE_INFO (HSE_REQ_END_RESERVED+42) |
| 67 | #define HSE_REQ_SET_FLUSH_FLAG (HSE_REQ_END_RESERVED+43) |
| 68 | #define HSE_REQ_GET_TRACE_INFO_EX (HSE_REQ_END_RESERVED+44) |
| 69 | #define HSE_REQ_RAISE_TRACE_EVENT (HSE_REQ_END_RESERVED+45) |
| 70 | #define HSE_REQ_GET_CONFIG_OBJECT (HSE_REQ_END_RESERVED+46) |
| 71 | #define HSE_REQ_GET_WORKER_PROCESS_SETTINGS (HSE_REQ_END_RESERVED+47) |
| 72 | #define HSE_REQ_GET_PROTOCOL_MANAGER_CUSTOM_INTERFACE_CALLBACK (HSE_REQ_END_RESERVED+48) |
| 73 | #define HSE_REQ_CANCEL_IO (HSE_REQ_END_RESERVED+49) |
| 74 | #define HSE_REQ_GET_CHANNEL_BINDING_TOKEN (HSE_REQ_END_RESERVED+50) |
| 75 | |
| 76 | #define HSE_TERM_ADVISORY_UNLOAD 0x00000001 |
| 77 | #define HSE_TERM_MUST_UNLOAD 0x00000002 |
| 78 | |
| 79 | #define HSE_IO_SYNC 0x00000001 |
| 80 | #define HSE_IO_ASYNC 0x00000002 |
| 81 | #define HSE_IO_DISCONNECT_AFTER_SEND 0x00000004 |
| 82 | #define HSE_IO_SEND_HEADERS 0x00000008 |
| 83 | #define HSE_IO_NODELAY 0x00001000 |
| 84 | |
| 85 | #define HSE_IO_FINAL_SEND 0x00000010 |
| 86 | #define HSE_IO_CACHE_RESPONSE 0x00000020 |
| 87 | #define HSE_IO_TRY_SKIP_CUSTOM_ERRORS 0x00000040 |
| 88 | |
| 89 | typedef LPVOID HCONN; |
| 90 | |
| 91 | typedef struct _HSE_VERSION_INFO { |
| 92 | DWORD dwExtensionVersion; |
| 93 | CHAR lpszExtensionDesc[HSE_MAX_EXT_DLL_NAME_LEN]; |
| 94 | } HSE_VERSION_INFO,*LPHSE_VERSION_INFO; |
| 95 | |
| 96 | typedef struct _EXTENSION_CONTROL_BLOCK { |
| 97 | DWORD cbSize; |
| 98 | DWORD dwVersion; |
| 99 | HCONN ConnID; |
| 100 | DWORD dwHttpStatusCode; |
| 101 | CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; |
| 102 | LPSTR lpszMethod; |
| 103 | LPSTR lpszQueryString; |
| 104 | LPSTR lpszPathInfo; |
| 105 | LPSTR lpszPathTranslated; |
| 106 | |
| 107 | DWORD cbTotalBytes; |
| 108 | DWORD cbAvailable; |
| 109 | LPBYTE lpbData; |
| 110 | LPSTR lpszContentType; |
| 111 | WINBOOL (WINAPI *GetServerVariable) (HCONN hConn,LPSTR lpszVariableName,LPVOID lpvBuffer,LPDWORD lpdwSize); |
| 112 | WINBOOL (WINAPI *WriteClient) (HCONN ConnID,LPVOID Buffer,LPDWORD lpdwBytes,DWORD dwReserved); |
| 113 | WINBOOL (WINAPI *ReadClient) (HCONN ConnID,LPVOID lpvBuffer,LPDWORD lpdwSize); |
| 114 | WINBOOL (WINAPI *ServerSupportFunction)(HCONN hConn,DWORD dwHSERequest,LPVOID lpvBuffer,LPDWORD lpdwSize,LPDWORD lpdwDataType); |
| 115 | } EXTENSION_CONTROL_BLOCK,*LPEXTENSION_CONTROL_BLOCK; |
| 116 | |
| 117 | #define HSE_URL_FLAGS_READ 0x00000001 |
| 118 | #define HSE_URL_FLAGS_WRITE 0x00000002 |
| 119 | #define HSE_URL_FLAGS_EXECUTE 0x00000004 |
| 120 | #define HSE_URL_FLAGS_SSL 0x00000008 |
| 121 | #define HSE_URL_FLAGS_DONT_CACHE 0x00000010 |
| 122 | #define HSE_URL_FLAGS_NEGO_CERT 0x00000020 |
| 123 | #define HSE_URL_FLAGS_REQUIRE_CERT 0x00000040 |
| 124 | #define HSE_URL_FLAGS_MAP_CERT 0x00000080 |
| 125 | #define HSE_URL_FLAGS_SSL128 0x00000100 |
| 126 | #define HSE_URL_FLAGS_SCRIPT 0x00000200 |
| 127 | |
| 128 | #define HSE_URL_FLAGS_MASK 0x000003ff |
| 129 | |
| 130 | typedef struct _HSE_URL_MAPEX_INFO { |
| 131 | CHAR lpszPath[MAX_PATH]; |
| 132 | DWORD dwFlags; |
| 133 | DWORD cchMatchingPath; |
| 134 | DWORD cchMatchingURL; |
| 135 | DWORD dwReserved1; |
| 136 | DWORD dwReserved2; |
| 137 | } HSE_URL_MAPEX_INFO,*LPHSE_URL_MAPEX_INFO; |
| 138 | |
| 139 | typedef struct _HSE_UNICODE_URL_MAPEX_INFO { |
| 140 | WCHAR lpszPath[MAX_PATH]; |
| 141 | DWORD dwFlags; |
| 142 | DWORD cchMatchingPath; |
| 143 | DWORD cchMatchingURL; |
| 144 | } HSE_UNICODE_URL_MAPEX_INFO,*LPHSE_UNICODE_URL_MAPEX_INFO; |
| 145 | |
| 146 | typedef VOID (WINAPI *PFN_HSE_IO_COMPLETION)(EXTENSION_CONTROL_BLOCK *pECB,PVOID pContext,DWORD cbIO,DWORD dwError); |
| 147 | |
| 148 | typedef struct _HSE_TF_INFO { |
| 149 | PFN_HSE_IO_COMPLETION pfnHseIO; |
| 150 | PVOID pContext; |
| 151 | HANDLE hFile; |
| 152 | LPCSTR pszStatusCode; |
| 153 | DWORD BytesToWrite; |
| 154 | DWORD Offset; |
| 155 | PVOID pHead; |
| 156 | DWORD HeadLength; |
| 157 | PVOID pTail; |
| 158 | DWORD TailLength; |
| 159 | DWORD dwFlags; |
| 160 | } HSE_TF_INFO,*LPHSE_TF_INFO; |
| 161 | |
| 162 | typedef struct _HSE_SEND_HEADER_EX_INFO { |
| 163 | LPCSTR pszStatus; |
| 164 | LPCSTR pszHeader; |
| 165 | DWORD cchStatus; |
| 166 | DWORD cchHeader; |
| 167 | WINBOOL fKeepConn; |
| 168 | } HSE_SEND_HEADER_EX_INFO,*LPHSE_SEND_HEADER_EX_INFO; |
| 169 | |
| 170 | #define HSE_EXEC_URL_NO_HEADERS 0x02 |
| 171 | #define HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR 0x04 |
| 172 | #define HSE_EXEC_URL_IGNORE_VALIDATION_AND_RANGE 0x10 |
| 173 | #define HSE_EXEC_URL_DISABLE_CUSTOM_ERROR 0x20 |
| 174 | #define HSE_EXEC_URL_SSI_CMD 0x40 |
| 175 | #define HSE_EXEC_URL_HTTP_CACHE_ELIGIBLE 0x80 |
| 176 | |
| 177 | typedef struct _HSE_EXEC_URL_USER_INFO { |
| 178 | HANDLE hImpersonationToken; |
| 179 | LPSTR pszCustomUserName; |
| 180 | LPSTR pszCustomAuthType; |
| 181 | } HSE_EXEC_URL_USER_INFO,*LPHSE_EXEC_URL_USER_INFO; |
| 182 | |
| 183 | typedef struct _HSE_EXEC_URL_ENTITY_INFO { |
| 184 | DWORD cbAvailable; |
| 185 | LPVOID lpbData; |
| 186 | } HSE_EXEC_URL_ENTITY_INFO,*LPHSE_EXEC_URL_ENTITY_INFO; |
| 187 | |
| 188 | typedef struct _HSE_EXEC_URL_STATUS { |
| 189 | USHORT uHttpStatusCode; |
| 190 | USHORT uHttpSubStatus; |
| 191 | DWORD dwWin32Error; |
| 192 | } HSE_EXEC_URL_STATUS,*LPHSE_EXEC_URL_STATUS; |
| 193 | |
| 194 | typedef struct _HSE_EXEC_URL_INFO { |
| 195 | LPSTR pszUrl; |
| 196 | LPSTR pszMethod; |
| 197 | LPSTR pszChildHeaders; |
| 198 | LPHSE_EXEC_URL_USER_INFO pUserInfo; |
| 199 | LPHSE_EXEC_URL_ENTITY_INFO pEntity; |
| 200 | DWORD dwExecUrlFlags; |
| 201 | } HSE_EXEC_URL_INFO,*LPHSE_EXEC_URL_INFO; |
| 202 | |
| 203 | typedef struct _HSE_EXEC_UNICODE_URL_USER_INFO { |
| 204 | HANDLE hImpersonationToken; |
| 205 | LPWSTR pszCustomUserName; |
| 206 | LPSTR pszCustomAuthType; |
| 207 | } HSE_EXEC_UNICODE_URL_USER_INFO,*LPHSE_EXEC_UNICODE_URL_USER_INFO; |
| 208 | |
| 209 | typedef struct _HSE_EXEC_UNICODE_URL_INFO { |
| 210 | LPWSTR pszUrl; |
| 211 | LPSTR pszMethod; |
| 212 | LPSTR pszChildHeaders; |
| 213 | LPHSE_EXEC_UNICODE_URL_USER_INFO pUserInfo; |
| 214 | LPHSE_EXEC_URL_ENTITY_INFO pEntity; |
| 215 | DWORD dwExecUrlFlags; |
| 216 | } HSE_EXEC_UNICODE_URL_INFO,*LPHSE_EXEC_UNICODE_URL_INFO; |
| 217 | |
| 218 | typedef struct _HSE_CUSTOM_ERROR_INFO { |
| 219 | CHAR *pszStatus; |
| 220 | USHORT uHttpSubError; |
| 221 | WINBOOL fAsync; |
| 222 | } HSE_CUSTOM_ERROR_INFO,*LPHSE_CUSTOM_ERROR_INFO; |
| 223 | |
| 224 | #define HSE_VECTOR_ELEMENT_TYPE_MEMORY_BUFFER 0 |
| 225 | #define HSE_VECTOR_ELEMENT_TYPE_FILE_HANDLE 1 |
| 226 | |
| 227 | typedef struct _HSE_VECTOR_ELEMENT { |
| 228 | DWORD ElementType; |
| 229 | PVOID pvContext; |
| 230 | ULONGLONG cbOffset; |
| 231 | ULONGLONG cbSize; |
| 232 | } HSE_VECTOR_ELEMENT,*LPHSE_VECTOR_ELEMENT; |
| 233 | |
| 234 | typedef struct _HSE_RESPONSE_VECTOR { |
| 235 | DWORD dwFlags; |
| 236 | LPSTR pszStatus; |
| 237 | LPSTR pszHeaders; |
| 238 | DWORD nElementCount; |
| 239 | LPHSE_VECTOR_ELEMENT lpElementArray; |
| 240 | } HSE_RESPONSE_VECTOR,*LPHSE_RESPONSE_VECTOR; |
| 241 | |
| 242 | typedef HRESULT (WINAPI *PFN_HSE_CACHE_INVALIDATION_CALLBACK)(WCHAR *pszUrl); |
| 243 | |
| 244 | #include <wincrypt.h> |
| 245 | |
| 246 | typedef struct _CERT_CONTEXT_EX { |
| 247 | CERT_CONTEXT CertContext; |
| 248 | DWORD cbAllocated; |
| 249 | DWORD dwCertificateFlags; |
| 250 | } CERT_CONTEXT_EX; |
| 251 | |
| 252 | typedef struct _HSE_TRACE_INFO { |
| 253 | WINBOOL fTraceRequest; |
| 254 | BYTE TraceContextId[16]; |
| 255 | DWORD dwReserved1; |
| 256 | DWORD dwReserved2; |
| 257 | } HSE_TRACE_INFO,*LPHSE_TRACE_INFO; |
| 258 | |
| 259 | typedef HRESULT (WINAPI *PFN_HSE_GET_PROTOCOL_MANAGER_CUSTOM_INTERFACE_CALLBACK)(LPCWSTR pszProtocolManagerDll, LPCWSTR pszProtocolManagerDllInitFunction, DWORD dwCustomInterfaceId, PVOID *ppCustomInterface ); |
| 260 | |
| 261 | #define HSE_APP_FLAG_IN_PROCESS 0 |
| 262 | #define HSE_APP_FLAG_ISOLATED_OOP 1 |
| 263 | #define HSE_APP_FLAG_POOLED_OOP 2 |
| 264 | |
| 265 | WINBOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer); |
| 266 | DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB); |
| 267 | WINBOOL WINAPI TerminateExtension(DWORD dwFlags); |
| 268 | |
| 269 | typedef WINBOOL (WINAPI *PFN_GETEXTENSIONVERSION)(HSE_VERSION_INFO *pVer); |
| 270 | typedef DWORD (WINAPI *PFN_HTTPEXTENSIONPROC)(EXTENSION_CONTROL_BLOCK *pECB); |
| 271 | typedef WINBOOL (WINAPI *PFN_TERMINATEEXTENSION)(DWORD dwFlags); |
| 272 | |
| 273 | #ifdef __cplusplus |
| 274 | } |
| 275 | #endif |
| 276 | |
| 277 | #endif /* WINAPI_PARTITION_DESKTOP */ |
| 278 | |
| 279 | #endif /* _HTTPEXT_H_ */ |