master
  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
 16extern "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_ */