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 __HTTP_H__ 7 #define __HTTP_H__ 8 9 #include <winsock2.h> 10 #include <ws2tcpip.h> 11 12 #define SECURITY_WIN32 13 #include <sspi.h> 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 #define HTTP_INITIALIZE_SERVER 0x00000001 20 #define HTTP_INITIALIZE_CONFIG 0x00000002 21 22 #define HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY 0x00000001 23 #define HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER 0x00000001 24 25 #define HTTP_SEND_RESPONSE_FLAG_DISCONNECT 0x00000001 26 #define HTTP_SEND_RESPONSE_FLAG_MORE_DATA 0x00000002 27 #define HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA 0x00000004 28 29 #define HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE 0x00000001 30 31 typedef ULONGLONG HTTP_OPAQUE_ID,*PHTTP_OPAQUE_ID; 32 33 typedef HTTP_OPAQUE_ID HTTP_REQUEST_ID,*PHTTP_REQUEST_ID; 34 typedef HTTP_OPAQUE_ID HTTP_CONNECTION_ID,*PHTTP_CONNECTION_ID; 35 typedef HTTP_OPAQUE_ID HTTP_RAW_CONNECTION_ID,*PHTTP_RAW_CONNECTION_ID; 36 typedef HTTP_OPAQUE_ID HTTP_URL_GROUP_ID, *PHTTP_URL_GROUP_ID; 37 typedef HTTP_OPAQUE_ID HTTP_SERVER_SESSION_ID, *PHTTP_SERVER_SESSION_ID; 38 39 #define HTTP_NULL_ID (0ull) 40 #define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID==*(pid)) 41 #define HTTP_SET_NULL_ID(pid) (*(pid) = HTTP_NULL_ID) 42 43 #define HTTP_BYTE_RANGE_TO_EOF ((ULONGLONG)-1) 44 45 typedef struct _HTTP_BYTE_RANGE { 46 ULARGE_INTEGER StartingOffset; 47 ULARGE_INTEGER Length; 48 } HTTP_BYTE_RANGE,*PHTTP_BYTE_RANGE; 49 50 typedef struct _HTTP_VERSION { 51 USHORT MajorVersion; 52 USHORT MinorVersion; 53 } HTTP_VERSION,*PHTTP_VERSION; 54 55 #define HTTP_VERSION_UNKNOWN { 0,0 } 56 #define HTTP_VERSION_0_9 { 0,9 } 57 #define HTTP_VERSION_1_0 { 1,0 } 58 #define HTTP_VERSION_1_1 { 1,1 } 59 60 #define HTTP_SET_VERSION(version,major,minor) do { (version).MajorVersion = (major); (version).MinorVersion = (minor); } while (0,0) 61 #define HTTP_EQUAL_VERSION(version,major,minor) ((version).MajorVersion==(major) && (version).MinorVersion==(minor)) 62 #define HTTP_GREATER_VERSION(version,major,minor) ((version).MajorVersion > (major) || ((version).MajorVersion==(major) && (version).MinorVersion > (minor))) 63 #define HTTP_LESS_VERSION(version,major,minor) ((version).MajorVersion < (major) || ((version).MajorVersion==(major) && (version).MinorVersion < (minor))) 64 #define HTTP_NOT_EQUAL_VERSION(version,major,minor) (!HTTP_EQUAL_VERSION(version,major,minor)) 65 #define HTTP_GREATER_EQUAL_VERSION(version,major,minor) (!HTTP_LESS_VERSION(version,major,minor)) 66 #define HTTP_LESS_EQUAL_VERSION(version,major,minor) (!HTTP_GREATER_VERSION(version,major,minor)) 67 68 typedef enum _HTTP_VERB { 69 HttpVerbUnparsed = 0, 70 HttpVerbUnknown,HttpVerbInvalid,HttpVerbOPTIONS,HttpVerbGET,HttpVerbHEAD,HttpVerbPOST,HttpVerbPUT,HttpVerbDELETE, 71 HttpVerbTRACE,HttpVerbCONNECT,HttpVerbTRACK,HttpVerbMOVE,HttpVerbCOPY,HttpVerbPROPFIND,HttpVerbPROPPATCH,HttpVerbMKCOL,HttpVerbLOCK, 72 HttpVerbUNLOCK,HttpVerbSEARCH,HttpVerbMaximum 73 } HTTP_VERB,*PHTTP_VERB; 74 75 typedef enum _HTTP_HEADER_ID { 76 HttpHeaderCacheControl = 0,HttpHeaderConnection = 1,HttpHeaderDate = 2,HttpHeaderKeepAlive = 3,HttpHeaderPragma = 4,HttpHeaderTrailer = 5, 77 HttpHeaderTransferEncoding = 6,HttpHeaderUpgrade = 7,HttpHeaderVia = 8,HttpHeaderWarning = 9,HttpHeaderAllow = 10,HttpHeaderContentLength = 11, 78 HttpHeaderContentType = 12,HttpHeaderContentEncoding = 13,HttpHeaderContentLanguage = 14,HttpHeaderContentLocation = 15,HttpHeaderContentMd5 = 16, 79 HttpHeaderContentRange = 17,HttpHeaderExpires = 18,HttpHeaderLastModified = 19,HttpHeaderAccept = 20,HttpHeaderAcceptCharset = 21, 80 HttpHeaderAcceptEncoding = 22,HttpHeaderAcceptLanguage = 23,HttpHeaderAuthorization = 24,HttpHeaderCookie = 25,HttpHeaderExpect = 26, 81 HttpHeaderFrom = 27,HttpHeaderHost = 28,HttpHeaderIfMatch = 29,HttpHeaderIfModifiedSince = 30,HttpHeaderIfNoneMatch = 31,HttpHeaderIfRange = 32, 82 HttpHeaderIfUnmodifiedSince = 33,HttpHeaderMaxForwards = 34,HttpHeaderProxyAuthorization = 35,HttpHeaderReferer = 36,HttpHeaderRange = 37, 83 HttpHeaderTe = 38,HttpHeaderTranslate = 39,HttpHeaderUserAgent = 40,HttpHeaderRequestMaximum = 41,HttpHeaderAcceptRanges = 20,HttpHeaderAge = 21, 84 HttpHeaderEtag = 22,HttpHeaderLocation = 23,HttpHeaderProxyAuthenticate = 24,HttpHeaderRetryAfter = 25,HttpHeaderServer = 26, 85 HttpHeaderSetCookie = 27,HttpHeaderVary = 28,HttpHeaderWwwAuthenticate = 29,HttpHeaderResponseMaximum = 30,HttpHeaderMaximum = 41 86 } HTTP_HEADER_ID,*PHTTP_HEADER_ID; 87 88 typedef struct _HTTP_KNOWN_HEADER { 89 USHORT RawValueLength; 90 PCSTR pRawValue; 91 } HTTP_KNOWN_HEADER,*PHTTP_KNOWN_HEADER; 92 93 typedef struct _HTTP_UNKNOWN_HEADER { 94 USHORT NameLength; 95 USHORT RawValueLength; 96 PCSTR pName; 97 PCSTR pRawValue; 98 } HTTP_UNKNOWN_HEADER,*PHTTP_UNKNOWN_HEADER; 99 100 typedef enum _HTTP_DATA_CHUNK_TYPE { 101 HttpDataChunkFromMemory = 0, 102 HttpDataChunkFromFileHandle, 103 HttpDataChunkFromFragmentCache, 104 HttpDataChunkFromFragmentCacheEx, 105 HttpDataChunkMaximum 106 } HTTP_DATA_CHUNK_TYPE,*PHTTP_DATA_CHUNK_TYPE; 107 108 typedef struct _HTTP_DATA_CHUNK { 109 HTTP_DATA_CHUNK_TYPE DataChunkType; 110 __C89_NAMELESS union { 111 struct { 112 PVOID pBuffer; 113 ULONG BufferLength; 114 } FromMemory; 115 struct { 116 HTTP_BYTE_RANGE ByteRange; 117 HANDLE FileHandle; 118 } FromFileHandle; 119 struct { 120 USHORT FragmentNameLength; 121 PCWSTR pFragmentName; 122 } FromFragmentCache; 123 }; 124 } HTTP_DATA_CHUNK,*PHTTP_DATA_CHUNK; 125 126 typedef struct _HTTP_REQUEST_HEADERS { 127 USHORT UnknownHeaderCount; 128 PHTTP_UNKNOWN_HEADER pUnknownHeaders; 129 USHORT TrailerCount; 130 PHTTP_UNKNOWN_HEADER pTrailers; 131 HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderRequestMaximum]; 132 } HTTP_REQUEST_HEADERS,*PHTTP_REQUEST_HEADERS; 133 134 typedef struct _HTTP_RESPONSE_HEADERS { 135 USHORT UnknownHeaderCount; 136 PHTTP_UNKNOWN_HEADER pUnknownHeaders; 137 USHORT TrailerCount; 138 PHTTP_UNKNOWN_HEADER pTrailers; 139 HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderResponseMaximum]; 140 } HTTP_RESPONSE_HEADERS,*PHTTP_RESPONSE_HEADERS; 141 142 typedef struct _HTTP_TRANSPORT_ADDRESS { 143 PSOCKADDR pRemoteAddress; 144 PSOCKADDR pLocalAddress; 145 } HTTP_TRANSPORT_ADDRESS,*PHTTP_TRANSPORT_ADDRESS; 146 147 typedef struct _HTTP_COOKED_URL { 148 USHORT FullUrlLength; 149 USHORT HostLength; 150 USHORT AbsPathLength; 151 USHORT QueryStringLength; 152 PCWSTR pFullUrl; 153 PCWSTR pHost; 154 PCWSTR pAbsPath; 155 PCWSTR pQueryString; 156 } HTTP_COOKED_URL,*PHTTP_COOKED_URL; 157 158 typedef ULONGLONG HTTP_URL_CONTEXT; 159 160 typedef struct _HTTP_SSL_CLIENT_CERT_INFO { 161 ULONG CertFlags; 162 ULONG CertEncodedSize; 163 PUCHAR pCertEncoded; 164 HANDLE Token; 165 BOOLEAN CertDeniedByMapper; 166 } HTTP_SSL_CLIENT_CERT_INFO,*PHTTP_SSL_CLIENT_CERT_INFO; 167 168 typedef struct _HTTP_SSL_INFO { 169 USHORT ServerCertKeySize; 170 USHORT ConnectionKeySize; 171 ULONG ServerCertIssuerSize; 172 ULONG ServerCertSubjectSize; 173 PCSTR pServerCertIssuer; 174 PCSTR pServerCertSubject; 175 PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo; 176 ULONG SslClientCertNegotiated; 177 } HTTP_SSL_INFO,*PHTTP_SSL_INFO; 178 179 typedef struct _HTTP_REQUEST_V1 { 180 ULONG Flags; 181 HTTP_CONNECTION_ID ConnectionId; 182 HTTP_REQUEST_ID RequestId; 183 HTTP_URL_CONTEXT UrlContext; 184 HTTP_VERSION Version; 185 HTTP_VERB Verb; 186 USHORT UnknownVerbLength; 187 USHORT RawUrlLength; 188 PCSTR pUnknownVerb; 189 PCSTR pRawUrl; 190 HTTP_COOKED_URL CookedUrl; 191 HTTP_TRANSPORT_ADDRESS Address; 192 HTTP_REQUEST_HEADERS Headers; 193 ULONGLONG BytesReceived; 194 USHORT EntityChunkCount; 195 PHTTP_DATA_CHUNK pEntityChunks; 196 HTTP_RAW_CONNECTION_ID RawConnectionId; 197 PHTTP_SSL_INFO pSslInfo; 198 } HTTP_REQUEST_V1, *PHTTP_REQUEST_V1; 199 200 typedef enum _HTTP_REQUEST_INFO_TYPE { 201 HttpRequestInfoTypeAuth = 0 202 } HTTP_REQUEST_INFO_TYPE, *PHTTP_REQUEST_INFO_TYPE; 203 204 typedef struct _HTTP_REQUEST_INFO { 205 HTTP_REQUEST_INFO_TYPE InfoType; 206 ULONG InfoLength; 207 PVOID pInfo; 208 } HTTP_REQUEST_INFO, *PHTTP_REQUEST_INFO; 209 210 #ifdef __cplusplus 211 typedef struct _HTTP_REQUEST_V2 : HTTP_REQUEST_V1 { 212 USHORT RequestInfoCount; 213 PHTTP_REQUEST_INFO pRequestInfo; 214 } HTTP_REQUEST_V2, *PHTTP_REQUEST_V2; 215 #else 216 typedef struct _HTTP_REQUEST_V2 { 217 /* struct HTTP_REQUEST_V1; */ 218 __C89_NAMELESS struct { 219 ULONG Flags; 220 HTTP_CONNECTION_ID ConnectionId; 221 HTTP_REQUEST_ID RequestId; 222 HTTP_URL_CONTEXT UrlContext; 223 HTTP_VERSION Version; 224 HTTP_VERB Verb; 225 USHORT UnknownVerbLength; 226 USHORT RawUrlLength; 227 PCSTR pUnknownVerb; 228 PCSTR pRawUrl; 229 HTTP_COOKED_URL CookedUrl; 230 HTTP_TRANSPORT_ADDRESS Address; 231 HTTP_REQUEST_HEADERS Headers; 232 ULONGLONG BytesReceived; 233 USHORT EntityChunkCount; 234 PHTTP_DATA_CHUNK pEntityChunks; 235 HTTP_RAW_CONNECTION_ID RawConnectionId; 236 PHTTP_SSL_INFO pSslInfo; 237 }; 238 USHORT RequestInfoCount; 239 PHTTP_REQUEST_INFO pRequestInfo; 240 } HTTP_REQUEST_V2, *PHTTP_REQUEST_V2; 241 #endif 242 243 #if (_WIN32_WINNT >= 0x0600) 244 typedef HTTP_REQUEST_V2 HTTP_REQUEST, *PHTTP_REQUEST; 245 #else 246 typedef HTTP_REQUEST_V1 HTTP_REQUEST, *PHTTP_REQUEST; 247 #endif 248 249 #define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001 250 251 typedef struct _HTTP_RESPONSE_V1 { 252 ULONG Flags; 253 HTTP_VERSION Version; 254 USHORT StatusCode; 255 USHORT ReasonLength; 256 PCSTR pReason; 257 HTTP_RESPONSE_HEADERS Headers; 258 USHORT EntityChunkCount; 259 PHTTP_DATA_CHUNK pEntityChunks; 260 } HTTP_RESPONSE_V1,*PHTTP_RESPONSE_V1; 261 262 typedef enum _HTTP_RESPONSE_INFO_TYPE { 263 HttpResponseInfoTypeMultipleKnownHeaders = 0, 264 HttpResponseInfoTypeAuthenticationProperty, 265 HttpResponseInfoTypeQosProperty, 266 HttpResponseInfoTypeChannelBind 267 } HTTP_RESPONSE_INFO_TYPE, *PHTTP_RESPONSE_INFO_TYPE; 268 269 typedef struct _HTTP_RESPONSE_INFO { 270 HTTP_RESPONSE_INFO_TYPE Type; 271 ULONG Length; 272 PVOID pInfo; 273 } HTTP_RESPONSE_INFO, *PHTTP_RESPONSE_INFO; 274 275 #ifdef __cplusplus 276 typedef struct _HTTP_RESPONSE_V2 : HTTP_RESPONSE_V1 { 277 USHORT ResponseInfoCount; 278 PHTTP_RESPONSE_INFO pResponseInfo; 279 } HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2; 280 #else 281 typedef struct _HTTP_RESPONSE_V2 { 282 /* struct HTTP_RESPONSE_V1; */ 283 __C89_NAMELESS struct { 284 ULONG Flags; 285 HTTP_VERSION Version; 286 USHORT StatusCode; 287 USHORT ReasonLength; 288 PCSTR pReason; 289 HTTP_RESPONSE_HEADERS Headers; 290 USHORT EntityChunkCount; 291 PHTTP_DATA_CHUNK pEntityChunks; 292 }; 293 USHORT ResponseInfoCount; 294 PHTTP_RESPONSE_INFO pResponseInfo; 295 } HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2; 296 #endif 297 298 #if (_WIN32_WINNT >= 0x0600) 299 typedef HTTP_RESPONSE_V2 HTTP_RESPONSE, *PHTTP_RESPONSE; 300 #else 301 typedef HTTP_RESPONSE_V1 HTTP_RESPONSE, *PHTTP_RESPONSE; 302 #endif /* _WIN32_WINNT >= 0x0600 */ 303 304 typedef enum _HTTP_CACHE_POLICY_TYPE { 305 HttpCachePolicyNocache = 0, 306 HttpCachePolicyUserInvalidates, 307 HttpCachePolicyTimeToLive, 308 HttpCachePolicyMaximum 309 } HTTP_CACHE_POLICY_TYPE,*PHTTP_CACHE_POLICY_TYPE; 310 311 typedef struct _HTTP_CACHE_POLICY { 312 HTTP_CACHE_POLICY_TYPE Policy; 313 ULONG SecondsToLive; 314 } HTTP_CACHE_POLICY, *PHTTP_CACHE_POLICY; 315 316 typedef enum _HTTP_SERVICE_CONFIG_ID { 317 HttpServiceConfigIPListenList = 0, 318 HttpServiceConfigSSLCertInfo, 319 HttpServiceConfigUrlAclInfo, 320 HttpServiceConfigMax 321 } HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID; 322 323 typedef enum _HTTP_SERVICE_CONFIG_QUERY_TYPE { 324 HttpServiceConfigQueryExact = 0, 325 HttpServiceConfigQueryNext, 326 HttpServiceConfigQueryMax 327 } HTTP_SERVICE_CONFIG_QUERY_TYPE,*PHTTP_SERVICE_CONFIG_QUERY_TYPE; 328 329 typedef struct _HTTP_SERVICE_CONFIG_SSL_KEY { 330 PSOCKADDR pIpPort; 331 } HTTP_SERVICE_CONFIG_SSL_KEY,*PHTTP_SERVICE_CONFIG_SSL_KEY; 332 333 typedef struct _HTTP_SERVICE_CONFIG_SSL_PARAM { 334 ULONG SslHashLength; 335 PVOID pSslHash; 336 GUID AppId; 337 PWSTR pSslCertStoreName; 338 DWORD DefaultCertCheckMode; 339 DWORD DefaultRevocationFreshnessTime; 340 DWORD DefaultRevocationUrlRetrievalTimeout; 341 PWSTR pDefaultSslCtlIdentifier; 342 PWSTR pDefaultSslCtlStoreName; 343 DWORD DefaultFlags; 344 } HTTP_SERVICE_CONFIG_SSL_PARAM,*PHTTP_SERVICE_CONFIG_SSL_PARAM; 345 346 #define HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER 0x00000001 347 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT 0x00000002 348 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER 0x00000004 349 350 typedef struct _HTTP_SERVICE_CONFIG_SSL_SET { 351 HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc; 352 HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc; 353 } HTTP_SERVICE_CONFIG_SSL_SET,*PHTTP_SERVICE_CONFIG_SSL_SET; 354 355 typedef struct _HTTP_SERVICE_CONFIG_SSL_QUERY { 356 HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc; 357 HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc; 358 DWORD dwToken; 359 } HTTP_SERVICE_CONFIG_SSL_QUERY,*PHTTP_SERVICE_CONFIG_SSL_QUERY; 360 361 typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM { 362 USHORT AddrLength; 363 PSOCKADDR pAddress; 364 } HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM,*PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM; 365 366 typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY { 367 ULONG AddrCount; 368 SOCKADDR_STORAGE AddrList[ANYSIZE_ARRAY]; 369 } HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY,*PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY; 370 371 typedef struct _HTTP_SERVICE_CONFIG_URLACL_KEY { 372 PWSTR pUrlPrefix; 373 } HTTP_SERVICE_CONFIG_URLACL_KEY,*PHTTP_SERVICE_CONFIG_URLACL_KEY; 374 375 typedef struct _HTTP_SERVICE_CONFIG_URLACL_PARAM { 376 PWSTR pStringSecurityDescriptor; 377 } HTTP_SERVICE_CONFIG_URLACL_PARAM,*PHTTP_SERVICE_CONFIG_URLACL_PARAM; 378 379 typedef struct _HTTP_SERVICE_CONFIG_URLACL_SET { 380 HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc; 381 HTTP_SERVICE_CONFIG_URLACL_PARAM ParamDesc; 382 } HTTP_SERVICE_CONFIG_URLACL_SET,*PHTTP_SERVICE_CONFIG_URLACL_SET; 383 384 typedef struct _HTTP_SERVICE_CONFIG_URLACL_QUERY { 385 HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc; 386 HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc; 387 DWORD dwToken; 388 } HTTP_SERVICE_CONFIG_URLACL_QUERY,*PHTTP_SERVICE_CONFIG_URLACL_QUERY; 389 390 #if !defined(HTTPAPI_LINKAGE) 391 #ifdef HTTPAPI_LINKAGE_EXPORT 392 #define DECLSPEC_EXPORT __declspec(dllexport) 393 #define HTTPAPI_LINKAGE DECLSPEC_EXPORT 394 #else 395 #define HTTPAPI_LINKAGE DECLSPEC_IMPORT 396 #endif 397 #endif 398 399 typedef struct _HTTPAPI_VERSION { 400 USHORT HttpApiMajorVersion; 401 USHORT HttpApiMinorVersion; 402 } HTTPAPI_VERSION,*PHTTPAPI_VERSION; 403 404 #define HTTPAPI_VERSION_1 {1,0} 405 406 HTTPAPI_LINKAGE ULONG WINAPI HttpInitialize(HTTPAPI_VERSION Version,ULONG Flags,PVOID pReserved); 407 HTTPAPI_LINKAGE ULONG WINAPI HttpTerminate(ULONG Flags,PVOID pReserved); 408 HTTPAPI_LINKAGE ULONG WINAPI HttpCreateHttpHandle(PHANDLE pReqQueueHandle,ULONG Options); 409 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); 410 HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PVOID pReserved); 411 HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix); 412 HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveHttpRequest(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PHTTP_REQUEST pRequestBuffer,ULONG RequestBufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped); 413 HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveRequestEntityBody(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PVOID pBuffer,ULONG BufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped); 414 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); 415 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); 416 HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDisconnect(HANDLE ReqQueueHandle,HTTP_CONNECTION_ID ConnectionId,LPOVERLAPPED pOverlapped); 417 HTTPAPI_LINKAGE ULONG WINAPI HttpFlushResponseCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,ULONG Flags,LPOVERLAPPED pOverlapped); 418 HTTPAPI_LINKAGE ULONG WINAPI HttpAddFragmentToCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_DATA_CHUNK pDataChunk,PHTTP_CACHE_POLICY pCachePolicy,LPOVERLAPPED pOverlapped); 419 HTTPAPI_LINKAGE ULONG WINAPI HttpReadFragmentFromCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_BYTE_RANGE pByteRange,PVOID pBuffer,ULONG BufferLength,PULONG pBytesRead,LPOVERLAPPED pOverlapped); 420 HTTPAPI_LINKAGE ULONG WINAPI HttpSetServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped); 421 HTTPAPI_LINKAGE ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped); 422 HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pInputConfigInformation,ULONG InputConfigInformationLength,PVOID pOutputConfigInformation,ULONG OutputConfigInformationLength,PULONG pReturnLength,LPOVERLAPPED pOverlapped); 423 424 #if (_WIN32_WINNT >= 0x0600) 425 #define HTTP_VERSION_2_0 { 2, 0 } 426 #define HTTPAPI_VERSION_2 { 2, 0 } 427 428 typedef enum _HTTP_503_RESPONSE_VERBOSITY { 429 Http503ResponseVerbosityBasic = 0, 430 Http503ResponseVerbosityLimited, 431 Http503ResponseVerbosityFull 432 } HTTP_503_RESPONSE_VERBOSITY, *PHTTP_503_RESPONSE_VERBOSITY; 433 434 typedef enum _HTTP_ENABLED_STATE { 435 HttpEnabledStateActive = 0, 436 HttpEnabledStateInactive 437 } HTTP_ENABLED_STATE, *PHTTP_ENABLED_STATE; 438 439 typedef enum _HTTP_LOGGING_ROLLOVER_TYPE { 440 HttpLoggingRolloverSize = 0, 441 HttpLoggingRolloverDaily, 442 HttpLoggingRolloverWeekly, 443 HttpLoggingRolloverMonthly, 444 HttpLoggingRolloverHourly 445 } HTTP_LOGGING_ROLLOVER_TYPE, *PHTTP_LOGGING_ROLLOVER_TYPE; 446 447 typedef enum _HTTP_LOGGING_TYPE { 448 HttpLoggingTypeW3C = 0, 449 HttpLoggingTypeIIS, 450 HttpLoggingTypeNCSA, 451 HttpLoggingTypeRaw 452 } HTTP_LOGGING_TYPE, *PHTTP_LOGGING_TYPE; 453 454 typedef enum _HTTP_QOS_SETTING_TYPE { 455 HttpQosSettingTypeBandwidth = 0, 456 HttpQosSettingTypeConnectionLimit, 457 HttpQosSettingTypeFlowRate 458 } HTTP_QOS_SETTING_TYPE, *PHTTP_QOS_SETTING_TYPE; 459 460 typedef enum _HTTP_SERVER_PROPERTY { 461 HttpServerAuthenticationProperty = 0, 462 HttpServerLoggingProperty, 463 HttpServerQosProperty, 464 HttpServerTimeoutsProperty, 465 HttpServerQueueLengthProperty, 466 HttpServerStateProperty, 467 HttpServer503VerbosityProperty, 468 HttpServerBindingProperty, 469 HttpServerExtendedAuthenticationProperty, 470 HttpServerListenEndpointProperty, 471 HttpServerChannelBindProperty 472 } HTTP_SERVER_PROPERTY, *PHTTP_SERVER_PROPERTY; 473 474 typedef enum _HTTP_AUTHENTICATION_HARDENING_LEVELS { 475 HttpAuthenticationHardeningLegacy = 0, 476 HttpAuthenticationHardeningMedium = 1, 477 HttpAuthenticationHardeningStrict = 2 478 } HTTP_AUTHENTICATION_HARDENING_LEVELS; 479 480 typedef enum _HTTP_SERVICE_BINDING_TYPE { 481 HttpServiceBindingTypeNone = 0, 482 HttpServiceBindingTypeW = 1, 483 HttpServiceBindingTypeA = 2 484 } HTTP_SERVICE_BINDING_TYPE; 485 486 typedef enum _HTTP_LOG_DATA_TYPE { 487 HttpLogDataTypeFields = 0 488 } HTTP_LOG_DATA_TYPE, *PHTTP_LOG_DATA_TYPE; 489 490 typedef struct _HTTP_LOG_DATA { 491 HTTP_LOG_DATA_TYPE Type; 492 } HTTP_LOG_DATA, *PHTTP_LOG_DATA; 493 494 typedef enum _HTTP_REQUEST_AUTH_TYPE { 495 HttpRequestAuthTypeNone = 0, 496 HttpRequestAuthTypeBasic, 497 HttpRequestAuthTypeDigest, 498 HttpRequestAuthTypeNTLM, 499 HttpRequestAuthTypeNegotiate, 500 HttpRequestAuthTypeKerberos 501 } HTTP_REQUEST_AUTH_TYPE, *PHTTP_REQUEST_AUTH_TYPE; 502 503 typedef enum _HTTP_AUTH_STATUS { 504 HttpAuthStatusSuccess = 0, 505 HttpAuthStatusNotAuthenticated, 506 HttpAuthStatusFailure 507 } HTTP_AUTH_STATUS, *PHTTP_AUTH_STATUS; 508 509 typedef enum _HTTP_SERVICE_CONFIG_TIMEOUT_KEY { 510 IdleConnectionTimeout = 0, 511 HeaderWaitTimeout 512 } HTTP_SERVICE_CONFIG_TIMEOUT_KEY, *PHTTP_SERVICE_CONFIG_TIMEOUT_KEY; 513 514 typedef USHORT HTTP_SERVICE_CONFIG_TIMEOUT_PARAM, *PHTTP_SERVICE_CONFIG_TIMEOUT_PARAM; 515 516 typedef struct _HTTP_PROPERTY_FLAGS { 517 ULONG Present:1; 518 } HTTP_PROPERTY_FLAGS, *PHTTP_PROPERTY_FLAGS; 519 520 typedef struct _HTTP_CONNECTION_LIMIT_INFO { 521 HTTP_PROPERTY_FLAGS Flags; 522 ULONG MaxConnections; 523 } HTTP_CONNECTION_LIMIT_INFO, *PHTTP_CONNECTION_LIMIT_INFO; 524 525 typedef struct _HTTP_STATE_INFO { 526 HTTP_PROPERTY_FLAGS Flags; 527 HTTP_ENABLED_STATE State; 528 } HTTP_STATE_INFO, *PHTTP_STATE_INFO; 529 530 typedef struct _HTTP_QOS_SETTING_INFO { 531 HTTP_QOS_SETTING_TYPE QosType; 532 PVOID QosSetting; 533 } HTTP_QOS_SETTING_INFO, *PHTTP_QOS_SETTING_INFO; 534 535 typedef struct _HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS { 536 USHORT DomainNameLength; 537 PWSTR DomainName; 538 USHORT RealmLength; 539 PWSTR Realm; 540 } HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS, *PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS; 541 542 typedef struct _HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS { 543 USHORT RealmLength; 544 PWSTR Realm; 545 } HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS, *PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS; 546 547 typedef struct _HTTP_SERVER_AUTHENTICATION_INFO { 548 HTTP_PROPERTY_FLAGS Flags; 549 ULONG AuthSchemes; 550 BOOLEAN ReceiveMutualAuth; 551 BOOLEAN ReceiveContextHandle; 552 BOOLEAN DisableNTLMCredentialCaching; 553 UCHAR ExFlags; 554 HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS DigestParams; 555 HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS BasicParams; 556 } HTTP_SERVER_AUTHENTICATION_INFO, *PHTTP_SERVER_AUTHENTICATION_INFO; 557 558 typedef struct _HTTP_LOGGING_INFO { 559 HTTP_PROPERTY_FLAGS Flags; 560 ULONG LoggingFlags; 561 PCWSTR SoftwareName; 562 USHORT SoftwareNameLength; 563 USHORT DirectoryNameLength; 564 PCWSTR DirectoryName; 565 HTTP_LOGGING_TYPE Format; 566 ULONG Fields; 567 PVOID pExtFields; 568 USHORT NumOfExtFields; 569 USHORT MaxRecordSize; 570 HTTP_LOGGING_ROLLOVER_TYPE RolloverType; 571 ULONG RolloverSize; 572 PSECURITY_DESCRIPTOR pSecurityDescriptor; 573 } HTTP_LOGGING_INFO, *PHTTP_LOGGING_INFO; 574 575 typedef struct _HTTP_TIMEOUT_LIMIT_INFO { 576 HTTP_PROPERTY_FLAGS Flags; 577 USHORT EntityBody; 578 USHORT DrainEntityBody; 579 USHORT RequestQueue; 580 USHORT IdleConnection; 581 USHORT HeaderWait; 582 ULONG MinSendRate; 583 } HTTP_TIMEOUT_LIMIT_INFO, *PHTTP_TIMEOUT_LIMIT_INFO; 584 585 typedef struct _HTTP_SERVICE_BINDING_BASE { 586 HTTP_SERVICE_BINDING_TYPE Type; 587 } HTTP_SERVICE_BINDING_BASE, *PHTTP_SERVICE_BINDING_BASE; 588 589 typedef struct _HTTP_CHANNEL_BIND_INFO { 590 HTTP_AUTHENTICATION_HARDENING_LEVELS Hardening; 591 ULONG Flags; 592 PHTTP_SERVICE_BINDING_BASE *ServiceNames; 593 ULONG NumberOfServiceNames; 594 } HTTP_CHANNEL_BIND_INFO, *PHTTP_CHANNEL_BIND_INFO; 595 596 typedef struct _HTTP_REQUEST_CHANNEL_BIND_STATUS { 597 PHTTP_SERVICE_BINDING_BASE ServiceName; 598 PUCHAR ChannelToken; 599 ULONG ChannelTokenSize; 600 ULONG Flags; 601 } HTTP_REQUEST_CHANNEL_BIND_STATUS, *PHTTP_REQUEST_CHANNEL_BIND_STATUS; 602 603 typedef struct _HTTP_SERVICE_BINDING_A { 604 HTTP_SERVICE_BINDING_BASE Base; 605 PCHAR Buffer; 606 ULONG BufferSize; 607 } HTTP_SERVICE_BINDING_A, *PHTTP_SERVICE_BINDING_A; 608 609 typedef struct _HTTP_SERVICE_BINDING_W { 610 HTTP_SERVICE_BINDING_BASE Base; 611 PWCHAR Buffer; 612 ULONG BufferSize; 613 } HTTP_SERVICE_BINDING_W, *PHTTP_SERVICE_BINDING_W; 614 615 /* TODO: Is there the abstract unicode type HTTP_SERVICE_BINDING present, too? */ 616 617 typedef struct _HTTP_LOG_FIELDS_DATA { 618 HTTP_LOG_DATA Base; 619 USHORT UserNameLength; 620 USHORT UriStemLength; 621 USHORT ClientIpLength; 622 USHORT ServerNameLength; 623 USHORT ServerIpLength; 624 USHORT MethodLength; 625 USHORT UriQueryLength; 626 USHORT HostLength; 627 USHORT UserAgentLength; 628 USHORT CookieLength; 629 USHORT ReferrerLength; 630 PWCHAR UserName; 631 PWCHAR UriStem; 632 PCHAR ClientIp; 633 PCHAR ServerName; 634 PCHAR ServiceName; 635 PCHAR ServerIp; 636 PCHAR Method; 637 PCHAR UriQuery; 638 PCHAR Host; 639 PCHAR UserAgent; 640 PCHAR Cookie; 641 PCHAR Referrer; 642 USHORT ServerPort; 643 USHORT ProtocolStatus; 644 ULONG Win32Status; 645 HTTP_VERB MethodNum; 646 USHORT SubStatus; 647 } HTTP_LOG_FIELDS_DATA, *PHTTP_LOG_FIELDS_DATA; 648 649 typedef struct _HTTP_REQUEST_AUTH_INFO { 650 HTTP_AUTH_STATUS AuthStatus; 651 SECURITY_STATUS SecStatus; 652 ULONG Flags; 653 HTTP_REQUEST_AUTH_TYPE AuthType; 654 HANDLE AccessToken; 655 ULONG ContextAttributes; 656 ULONG PackedContextLength; 657 ULONG PackedContextType; 658 PVOID PackedContext; 659 ULONG MutualAuthDataLength; 660 PCHAR pMutualAuthData; 661 } HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO; 662 663 typedef struct _HTTP_MULTIPLE_KNOWN_HEADERS { 664 HTTP_HEADER_ID HeaderId; 665 ULONG Flags; 666 USHORT KnownHeaderCount; 667 PHTTP_KNOWN_HEADER KnownHeaders; 668 } HTTP_MULTIPLE_KNOWN_HEADERS, *PHTTP_MULTIPLE_KNOWN_HEADERS; 669 670 typedef struct _HTTP_SERVICE_CONFIG_TIMEOUT_SET { 671 HTTP_SERVICE_CONFIG_TIMEOUT_KEY KeyDesc; 672 HTTP_SERVICE_CONFIG_TIMEOUT_PARAM ParamDesc; 673 } HTTP_SERVICE_CONFIG_TIMEOUT_SET, *PHTTP_SERVICE_CONFIG_TIMEOUT_SET; 674 675 typedef struct _HTTP_BANDWIDTH_LIMIT_INFO { 676 HTTP_PROPERTY_FLAGS Flags; 677 ULONG MaxBandwidth; 678 } HTTP_BANDWIDTH_LIMIT_INFO, *PHTTP_BANDWIDTH_LIMIT_INFO; 679 680 typedef struct _HTTP_BINDING_INFO { 681 HTTP_PROPERTY_FLAGS Flags; 682 HANDLE RequestQueueHandle; 683 } HTTP_BINDING_INFO, *PHTTP_BINDING_INFO; 684 685 typedef struct _HTTP_LISTEN_ENDPOINT_INFO { 686 HTTP_PROPERTY_FLAGS Flags; 687 BOOLEAN EnableSharing; 688 } HTTP_LISTEN_ENDPOINT_INFO, *PHTTP_LISTEN_ENDPOINT_INFO; 689 690 HTTPAPI_LINKAGE ULONG WINAPI HttpSetRequestQueueProperty(HANDLE Handle,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,ULONG Reserved,PVOID pReserved); 691 HTTPAPI_LINKAGE ULONG WINAPI HttpQueryRequestQueueProperty(HANDLE Handle,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,ULONG Reserved,PULONG pReturnLength,PVOID pReserved); 692 HTTPAPI_LINKAGE ULONG WINAPI HttpCreateRequestQueue(HTTPAPI_VERSION Version,PCWSTR pName,PSECURITY_ATTRIBUTES pSecurityAttributes,ULONG Flags,PHANDLE pReqQueueHandle); 693 HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrlToUrlGroup(HTTP_URL_GROUP_ID UrlGroupId,PCWSTR pFullyQualifiedUrl,HTTP_URL_CONTEXT UrlContext,ULONG Reserved); 694 HTTPAPI_LINKAGE ULONG WINAPI HttpCancelHttpRequest(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,LPOVERLAPPED pOverlapped); 695 HTTPAPI_LINKAGE ULONG WINAPI HttpCloseRequestQueue(HANDLE ReqQueueHandle); 696 HTTPAPI_LINKAGE ULONG WINAPI HttpCloseServerSession(HTTP_SERVER_SESSION_ID ServerSessionId); 697 HTTPAPI_LINKAGE ULONG WINAPI HttpCloseUrlGroup(HTTP_URL_GROUP_ID UrlGroupId); 698 HTTPAPI_LINKAGE ULONG WINAPI HttpCreateServerSession(HTTPAPI_VERSION Version,PHTTP_SERVER_SESSION_ID pServerSessionId,ULONG Reserved); 699 HTTPAPI_LINKAGE ULONG WINAPI HttpCreateUrlGroup(HTTP_SERVER_SESSION_ID ServerSessionId,PHTTP_URL_GROUP_ID pUrlGroupId,ULONG Reserved); 700 HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServerSessionProperty(HTTP_SERVER_SESSION_ID ServerSessionId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,PULONG pReturnLength); 701 HTTPAPI_LINKAGE ULONG WINAPI HttpQueryUrlGroupProperty(HTTP_URL_GROUP_ID UrlGroupId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,PULONG pReturnLength); 702 HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrlFromUrlGroup(HTTP_URL_GROUP_ID UrlGroupId,PCWSTR pFullyQualifiedUrl,ULONG Flags); 703 HTTPAPI_LINKAGE ULONG WINAPI HttpSetServerSessionProperty(HTTP_SERVER_SESSION_ID ServerSessionId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength); 704 HTTPAPI_LINKAGE ULONG WINAPI HttpSetUrlGroupProperty(HTTP_URL_GROUP_ID UrlGroupId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength); 705 HTTPAPI_LINKAGE ULONG WINAPI HttpShutdownRequestQueue(HANDLE ReqQueueHandle); 706 HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDemandStart(HANDLE ReqQueueHandle,LPOVERLAPPED pOverlapped); 707 708 #if (_WIN32_WINNT >= 0x0601) 709 typedef ULONG HTTP_SERVICE_CONFIG_CACHE_PARAM; 710 711 typedef enum _HTTP_SERVICE_CONFIG_CACHE_KEY { 712 MaxCacheResponseSize = 0, 713 CacheRangeChunkSize 714 } HTTP_SERVICE_CONFIG_CACHE_KEY; 715 716 typedef struct _HTTP_FLOWRATE_INFO { 717 HTTP_PROPERTY_FLAGS Flags; 718 ULONG MaxBandwidth; 719 ULONG MaxPeakBandwidth; 720 ULONG BurstSize; 721 } HTTP_FLOWRATE_INFO, *PHTTP_FLOWRATE_INFO; 722 723 typedef struct _HTTP_SERVICE_CONFIG_CACHE_SET { 724 HTTP_SERVICE_CONFIG_CACHE_KEY KeyDesc; 725 HTTP_SERVICE_CONFIG_CACHE_PARAM ParamDesc; 726 } HTTP_SERVICE_CONFIG_CACHE_SET, *PHTTP_SERVICE_CONFIG_CACHE_SET; 727 728 #endif /*(_WIN32_WINNT >= 0x0601)*/ 729 730 #endif /*(_WIN32_WINNT >= 0x0600)*/ 731 732 #ifdef __cplusplus 733 } 734 #endif 735 736 #endif /* __HTTP_H__ */ 737