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