comparison fuhtark_test/include/winapi/http.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
comparison
equal deleted inserted replaced
1499:1f58458b7ef7 1500:91c8c3b7cbf0
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER within this package.
5 */
6 #ifndef __HTTP_H__
7 #define __HTTP_H__
8
9 #include <winsock2.h>
10 #include <ws2tcpip.h>
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 #define HTTP_INITIALIZE_SERVER 0x00000001
17 #define HTTP_INITIALIZE_CONFIG 0x00000002
18
19 #define HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY 0x00000001
20
21 #define HTTP_SEND_RESPONSE_FLAG_DISCONNECT 0x00000001
22 #define HTTP_SEND_RESPONSE_FLAG_MORE_DATA 0x00000002
23 #define HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA 0x00000004
24
25 #define HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE 0x00000001
26
27 typedef ULONGLONG HTTP_OPAQUE_ID,*PHTTP_OPAQUE_ID;
28
29 typedef HTTP_OPAQUE_ID HTTP_REQUEST_ID,*PHTTP_REQUEST_ID;
30 typedef HTTP_OPAQUE_ID HTTP_CONNECTION_ID,*PHTTP_CONNECTION_ID;
31 typedef HTTP_OPAQUE_ID HTTP_RAW_CONNECTION_ID,*PHTTP_RAW_CONNECTION_ID;
32
33 #define HTTP_NULL_ID (0ui64)
34 #define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID==*(pid))
35 #define HTTP_SET_NULL_ID(pid) (*(pid) = HTTP_NULL_ID)
36
37 #define HTTP_BYTE_RANGE_TO_EOF ((ULONGLONG)-1)
38
39 typedef struct _HTTP_BYTE_RANGE {
40 ULARGE_INTEGER StartingOffset;
41 ULARGE_INTEGER Length;
42 } HTTP_BYTE_RANGE,*PHTTP_BYTE_RANGE;
43
44 typedef struct _HTTP_VERSION {
45 USHORT MajorVersion;
46 USHORT MinorVersion;
47 } HTTP_VERSION,*PHTTP_VERSION;
48
49 #define HTTP_VERSION_UNKNOWN { 0,0 }
50 #define HTTP_VERSION_0_9 { 0,9 }
51 #define HTTP_VERSION_1_0 { 1,0 }
52 #define HTTP_VERSION_1_1 { 1,1 }
53
54 #define HTTP_SET_VERSION(version,major,minor) do { (version).MajorVersion = (major); (version).MinorVersion = (minor); } while (0,0)
55 #define HTTP_EQUAL_VERSION(version,major,minor) ((version).MajorVersion==(major) && (version).MinorVersion==(minor))
56 #define HTTP_GREATER_VERSION(version,major,minor) ((version).MajorVersion > (major) || ((version).MajorVersion==(major) && (version).MinorVersion > (minor)))
57 #define HTTP_LESS_VERSION(version,major,minor) ((version).MajorVersion < (major) || ((version).MajorVersion==(major) && (version).MinorVersion < (minor)))
58 #define HTTP_NOT_EQUAL_VERSION(version,major,minor) (!HTTP_EQUAL_VERSION(version,major,minor))
59 #define HTTP_GREATER_EQUAL_VERSION(version,major,minor) (!HTTP_LESS_VERSION(version,major,minor))
60 #define HTTP_LESS_EQUAL_VERSION(version,major,minor) (!HTTP_GREATER_VERSION(version,major,minor))
61
62 typedef enum _HTTP_VERB {
63 HttpVerbUnparsed,HttpVerbUnknown,HttpVerbInvalid,HttpVerbOPTIONS,HttpVerbGET,HttpVerbHEAD,HttpVerbPOST,HttpVerbPUT,HttpVerbDELETE,
64 HttpVerbTRACE,HttpVerbCONNECT,HttpVerbTRACK,HttpVerbMOVE,HttpVerbCOPY,HttpVerbPROPFIND,HttpVerbPROPPATCH,HttpVerbMKCOL,HttpVerbLOCK,
65 HttpVerbUNLOCK,HttpVerbSEARCH,HttpVerbMaximum
66 } HTTP_VERB,*PHTTP_VERB;
67
68 typedef enum _HTTP_HEADER_ID {
69 HttpHeaderCacheControl = 0,HttpHeaderConnection = 1,HttpHeaderDate = 2,HttpHeaderKeepAlive = 3,HttpHeaderPragma = 4,HttpHeaderTrailer = 5,
70 HttpHeaderTransferEncoding = 6,HttpHeaderUpgrade = 7,HttpHeaderVia = 8,HttpHeaderWarning = 9,HttpHeaderAllow = 10,HttpHeaderContentLength = 11,
71 HttpHeaderContentType = 12,HttpHeaderContentEncoding = 13,HttpHeaderContentLanguage = 14,HttpHeaderContentLocation = 15,HttpHeaderContentMd5 = 16,
72 HttpHeaderContentRange = 17,HttpHeaderExpires = 18,HttpHeaderLastModified = 19,HttpHeaderAccept = 20,HttpHeaderAcceptCharset = 21,
73 HttpHeaderAcceptEncoding = 22,HttpHeaderAcceptLanguage = 23,HttpHeaderAuthorization = 24,HttpHeaderCookie = 25,HttpHeaderExpect = 26,
74 HttpHeaderFrom = 27,HttpHeaderHost = 28,HttpHeaderIfMatch = 29,HttpHeaderIfModifiedSince = 30,HttpHeaderIfNoneMatch = 31,HttpHeaderIfRange = 32,
75 HttpHeaderIfUnmodifiedSince = 33,HttpHeaderMaxForwards = 34,HttpHeaderProxyAuthorization = 35,HttpHeaderReferer = 36,HttpHeaderRange = 37,
76 HttpHeaderTe = 38,HttpHeaderTranslate = 39,HttpHeaderUserAgent = 40,HttpHeaderRequestMaximum = 41,HttpHeaderAcceptRanges = 20,HttpHeaderAge = 21,
77 HttpHeaderEtag = 22,HttpHeaderLocation = 23,HttpHeaderProxyAuthenticate = 24,HttpHeaderRetryAfter = 25,HttpHeaderServer = 26,
78 HttpHeaderSetCookie = 27,HttpHeaderVary = 28,HttpHeaderWwwAuthenticate = 29,HttpHeaderResponseMaximum = 30,HttpHeaderMaximum = 41
79 } HTTP_HEADER_ID,*PHTTP_HEADER_ID;
80
81 typedef struct _HTTP_KNOWN_HEADER {
82 USHORT RawValueLength;
83 PCSTR pRawValue;
84 } HTTP_KNOWN_HEADER,*PHTTP_KNOWN_HEADER;
85
86 typedef struct _HTTP_UNKNOWN_HEADER {
87 USHORT NameLength;
88 USHORT RawValueLength;
89 PCSTR pName;
90 PCSTR pRawValue;
91 } HTTP_UNKNOWN_HEADER,*PHTTP_UNKNOWN_HEADER;
92
93 typedef enum _HTTP_DATA_CHUNK_TYPE {
94 HttpDataChunkFromMemory,HttpDataChunkFromFileHandle,HttpDataChunkFromFragmentCache,HttpDataChunkMaximum
95 } HTTP_DATA_CHUNK_TYPE,*PHTTP_DATA_CHUNK_TYPE;
96
97 typedef struct _HTTP_DATA_CHUNK {
98 HTTP_DATA_CHUNK_TYPE DataChunkType;
99 __MINGW_EXTENSION union {
100 struct {
101 PVOID pBuffer;
102 ULONG BufferLength;
103 } FromMemory;
104 struct {
105 HTTP_BYTE_RANGE ByteRange;
106 HANDLE FileHandle;
107 } FromFileHandle;
108 struct {
109 USHORT FragmentNameLength;
110 PCWSTR pFragmentName;
111 } FromFragmentCache;
112 };
113 } HTTP_DATA_CHUNK,*PHTTP_DATA_CHUNK;
114
115 typedef struct _HTTP_REQUEST_HEADERS {
116 USHORT UnknownHeaderCount;
117 PHTTP_UNKNOWN_HEADER pUnknownHeaders;
118 USHORT TrailerCount;
119 PHTTP_UNKNOWN_HEADER pTrailers;
120 HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderRequestMaximum];
121 } HTTP_REQUEST_HEADERS,*PHTTP_REQUEST_HEADERS;
122
123 typedef struct _HTTP_RESPONSE_HEADERS {
124 USHORT UnknownHeaderCount;
125 PHTTP_UNKNOWN_HEADER pUnknownHeaders;
126 USHORT TrailerCount;
127 PHTTP_UNKNOWN_HEADER pTrailers;
128 HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderResponseMaximum];
129 } HTTP_RESPONSE_HEADERS,*PHTTP_RESPONSE_HEADERS;
130
131 typedef struct _HTTP_TRANSPORT_ADDRESS {
132 PSOCKADDR pRemoteAddress;
133 PSOCKADDR pLocalAddress;
134 } HTTP_TRANSPORT_ADDRESS,*PHTTP_TRANSPORT_ADDRESS;
135
136 typedef struct _HTTP_COOKED_URL {
137 USHORT FullUrlLength;
138 USHORT HostLength;
139 USHORT AbsPathLength;
140 USHORT QueryStringLength;
141 PCWSTR pFullUrl;
142 PCWSTR pHost;
143 PCWSTR pAbsPath;
144 PCWSTR pQueryString;
145 } HTTP_COOKED_URL,*PHTTP_COOKED_URL;
146
147 typedef ULONGLONG HTTP_URL_CONTEXT;
148
149 typedef struct _HTTP_SSL_CLIENT_CERT_INFO {
150 ULONG CertFlags;
151 ULONG CertEncodedSize;
152 PUCHAR pCertEncoded;
153 HANDLE Token;
154 BOOLEAN CertDeniedByMapper;
155 } HTTP_SSL_CLIENT_CERT_INFO,*PHTTP_SSL_CLIENT_CERT_INFO;
156
157 typedef struct _HTTP_SSL_INFO {
158 USHORT ServerCertKeySize;
159 USHORT ConnectionKeySize;
160 ULONG ServerCertIssuerSize;
161 ULONG ServerCertSubjectSize;
162 PCSTR pServerCertIssuer;
163 PCSTR pServerCertSubject;
164 PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo;
165 ULONG SslClientCertNegotiated;
166 } HTTP_SSL_INFO,*PHTTP_SSL_INFO;
167
168 typedef struct _HTTP_REQUEST {
169 ULONG Flags;
170 HTTP_CONNECTION_ID ConnectionId;
171 HTTP_REQUEST_ID RequestId;
172 HTTP_URL_CONTEXT UrlContext;
173 HTTP_VERSION Version;
174 HTTP_VERB Verb;
175 USHORT UnknownVerbLength;
176 USHORT RawUrlLength;
177 PCSTR pUnknownVerb;
178 PCSTR pRawUrl;
179 HTTP_COOKED_URL CookedUrl;
180 HTTP_TRANSPORT_ADDRESS Address;
181 HTTP_REQUEST_HEADERS Headers;
182 ULONGLONG BytesReceived;
183 USHORT EntityChunkCount;
184 PHTTP_DATA_CHUNK pEntityChunks;
185 HTTP_RAW_CONNECTION_ID RawConnectionId;
186 PHTTP_SSL_INFO pSslInfo;
187 } HTTP_REQUEST,*PHTTP_REQUEST;
188
189 #define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001
190
191 typedef struct _HTTP_RESPONSE {
192 ULONG Flags;
193 HTTP_VERSION Version;
194 USHORT StatusCode;
195 USHORT ReasonLength;
196 PCSTR pReason;
197 HTTP_RESPONSE_HEADERS Headers;
198 USHORT EntityChunkCount;
199 PHTTP_DATA_CHUNK pEntityChunks;
200 } HTTP_RESPONSE,*PHTTP_RESPONSE;
201
202 typedef enum _HTTP_CACHE_POLICY_TYPE {
203 HttpCachePolicyNocache,HttpCachePolicyUserInvalidates,HttpCachePolicyTimeToLive,HttpCachePolicyMaximum
204 } HTTP_CACHE_POLICY_TYPE,*PHTTP_CACHE_POLICY_TYPE;
205
206 typedef struct _HTTP_CACHE_POLICY {
207 HTTP_CACHE_POLICY_TYPE Policy;
208 ULONG SecondsToLive;
209 } HTTP_CACHE_POLICY,*PHTTP_CACHE_POLICY;
210
211 typedef enum _HTTP_SERVICE_CONFIG_ID {
212 HttpServiceConfigIPListenList,HttpServiceConfigSSLCertInfo,HttpServiceConfigUrlAclInfo,HttpServiceConfigMax
213 } HTTP_SERVICE_CONFIG_ID,*PHTTP_SERVICE_CONFIG_ID;
214
215 typedef enum _HTTP_SERVICE_CONFIG_QUERY_TYPE {
216 HttpServiceConfigQueryExact,HttpServiceConfigQueryNext,HttpServiceConfigQueryMax
217 } HTTP_SERVICE_CONFIG_QUERY_TYPE,*PHTTP_SERVICE_CONFIG_QUERY_TYPE;
218
219 typedef struct _HTTP_SERVICE_CONFIG_SSL_KEY {
220 PSOCKADDR pIpPort;
221 } HTTP_SERVICE_CONFIG_SSL_KEY,*PHTTP_SERVICE_CONFIG_SSL_KEY;
222
223 typedef struct _HTTP_SERVICE_CONFIG_SSL_PARAM {
224 ULONG SslHashLength;
225 PVOID pSslHash;
226 GUID AppId;
227 PWSTR pSslCertStoreName;
228 DWORD DefaultCertCheckMode;
229 DWORD DefaultRevocationFreshnessTime;
230 DWORD DefaultRevocationUrlRetrievalTimeout;
231 PWSTR pDefaultSslCtlIdentifier;
232 PWSTR pDefaultSslCtlStoreName;
233 DWORD DefaultFlags;
234 } HTTP_SERVICE_CONFIG_SSL_PARAM,*PHTTP_SERVICE_CONFIG_SSL_PARAM;
235
236 #define HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER 0x00000001
237 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT 0x00000002
238 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER 0x00000004
239
240 typedef struct _HTTP_SERVICE_CONFIG_SSL_SET {
241 HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;
242 HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;
243 } HTTP_SERVICE_CONFIG_SSL_SET,*PHTTP_SERVICE_CONFIG_SSL_SET;
244
245 typedef struct _HTTP_SERVICE_CONFIG_SSL_QUERY {
246 HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;
247 HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;
248 DWORD dwToken;
249 } HTTP_SERVICE_CONFIG_SSL_QUERY,*PHTTP_SERVICE_CONFIG_SSL_QUERY;
250
251 typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM {
252 USHORT AddrLength;
253 PSOCKADDR pAddress;
254 } HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM,*PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM;
255
256 typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY {
257 ULONG AddrCount;
258 SOCKADDR_STORAGE AddrList[ANYSIZE_ARRAY];
259 } HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY,*PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY;
260
261 typedef struct _HTTP_SERVICE_CONFIG_URLACL_KEY {
262 PWSTR pUrlPrefix;
263 } HTTP_SERVICE_CONFIG_URLACL_KEY,*PHTTP_SERVICE_CONFIG_URLACL_KEY;
264
265 typedef struct _HTTP_SERVICE_CONFIG_URLACL_PARAM {
266 PWSTR pStringSecurityDescriptor;
267 } HTTP_SERVICE_CONFIG_URLACL_PARAM,*PHTTP_SERVICE_CONFIG_URLACL_PARAM;
268
269 typedef struct _HTTP_SERVICE_CONFIG_URLACL_SET {
270 HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;
271 HTTP_SERVICE_CONFIG_URLACL_PARAM ParamDesc;
272 } HTTP_SERVICE_CONFIG_URLACL_SET,*PHTTP_SERVICE_CONFIG_URLACL_SET;
273
274 typedef struct _HTTP_SERVICE_CONFIG_URLACL_QUERY {
275 HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;
276 HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;
277 DWORD dwToken;
278 } HTTP_SERVICE_CONFIG_URLACL_QUERY,*PHTTP_SERVICE_CONFIG_URLACL_QUERY;
279
280 #if !defined(HTTPAPI_LINKAGE)
281 #define HTTPAPI_LINKAGE DECLSPEC_IMPORT
282 #endif
283
284 typedef struct _HTTPAPI_VERSION {
285 USHORT HttpApiMajorVersion;
286 USHORT HttpApiMinorVersion;
287 } HTTPAPI_VERSION,*PHTTPAPI_VERSION;
288
289 #define HTTPAPI_VERSION_1 {1,0}
290
291 HTTPAPI_LINKAGE ULONG WINAPI HttpInitialize(HTTPAPI_VERSION Version,ULONG Flags,PVOID pReserved);
292 HTTPAPI_LINKAGE ULONG WINAPI HttpTerminate(ULONG Flags,PVOID pReserved);
293 HTTPAPI_LINKAGE ULONG WINAPI HttpCreateHttpHandle(PHANDLE pReqQueueHandle,ULONG Options);
294 HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveClientCertificate(HANDLE ReqQueueHandle,HTTP_CONNECTION_ID ConnectionId,ULONG Flags,PHTTP_SSL_CLIENT_CERT_INFO pSslClientCertInfo,ULONG SslClientCertInfoSize,PULONG pBytesReceived,LPOVERLAPPED pOverlapped);
295 HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PVOID pReserved);
296 HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix);
297 HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveHttpRequest(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PHTTP_REQUEST pRequestBuffer,ULONG RequestBufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped);
298 HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveRequestEntityBody(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PVOID pBuffer,ULONG BufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped);
299 HTTPAPI_LINKAGE ULONG WINAPI HttpSendHttpResponse(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PHTTP_RESPONSE pHttpResponse,PVOID pReserved1,PULONG pBytesSent,PVOID pReserved2,ULONG Reserved3,LPOVERLAPPED pOverlapped,PVOID pReserved4);
300 HTTPAPI_LINKAGE ULONG WINAPI HttpSendResponseEntityBody(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,USHORT EntityChunkCount,PHTTP_DATA_CHUNK pEntityChunks,PULONG pBytesSent,PVOID pReserved1,ULONG Reserved2,LPOVERLAPPED pOverlapped,PVOID pReserved3);
301 HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDisconnect(HANDLE ReqQueueHandle,HTTP_CONNECTION_ID ConnectionId,LPOVERLAPPED pOverlapped);
302 HTTPAPI_LINKAGE ULONG WINAPI HttpFlushResponseCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,ULONG Flags,LPOVERLAPPED pOverlapped);
303 HTTPAPI_LINKAGE ULONG WINAPI HttpAddFragmentToCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_DATA_CHUNK pDataChunk,PHTTP_CACHE_POLICY pCachePolicy,LPOVERLAPPED pOverlapped);
304 HTTPAPI_LINKAGE ULONG WINAPI HttpReadFragmentFromCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_BYTE_RANGE pByteRange,PVOID pBuffer,ULONG BufferLength,PULONG pBytesRead,LPOVERLAPPED pOverlapped);
305 HTTPAPI_LINKAGE ULONG WINAPI HttpSetServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped);
306 HTTPAPI_LINKAGE ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped);
307 HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pInputConfigInformation,ULONG InputConfigInformationLength,PVOID pOutputConfigInformation,ULONG OutputConfigInformationLength,PULONG pReturnLength,LPOVERLAPPED pOverlapped);
308
309 #ifdef __cplusplus
310 }
311 #endif
312 #endif