zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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_ */