httpext.h (9624B) - Raw
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_ */