httpext.h 9.4 KB

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