1{ 2 This file is part of the Free Component Library (FCL) 3 Copyright (c) 2017-2018 by the Free Pascal development team 4 5 Windows HTTP Server API based TCustomWebApplication 6 7 See the file COPYING.FPC, included in this distribution, 8 for details about the copyright. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13 14 **********************************************************************} 15 16{ 17 Header of original file http.h: 18 19/*++ 20 21Copyright (c) 1998-2002 Microsoft Corporation 22 23Module Name: 24 25 Http.h 26 27Abstract: 28 29 This header corresponds to the HTTP API specification 30 31Revision History: 32 33--*/ 34 35} 36 37unit HttpApi; 38interface 39 40{ 41 Automatically converted by H2Pas 1.0.0 from .\packages\fcl-web\examples\echo\httpsys\http.h 42 The following command line parameters were used: 43 -D 44 -w 45 -u 46 HttpApi 47 -l 48 httpapi.dll 49 -o 50 .\packages\fcl-web\examples\echo\httpsys\httpapi.pp 51 -s 52 .\packages\fcl-web\examples\echo\httpsys\http.h 53} 54 55{$MODE OBJFPC} 56 57 uses 58 Windows, WinSock2; 59 60 const 61 External_library='httpapi.dll'; {Setup as you need} 62 63{$IFDEF FPC} 64{$PACKRECORDS C} 65{$ENDIF} 66 67 const 68 HTTP_INITIALIZE_SERVER = $00000001; 69 HTTP_INITIALIZE_CONFIG = $00000002; 70 HTTP_DEMAND_CBT = $00000004; 71 72{%REGION Windows Vista and newer } 73 74 type 75 _HTTP_SERVER_PROPERTY = (HttpServerAuthenticationProperty := 0, 76 HttpServerLoggingProperty := 1,HttpServerQosProperty := 2, 77 HttpServerTimeoutsProperty := 3,HttpServerQueueLengthProperty := 4, 78 HttpServerStateProperty := 5,HttpServer503VerbosityProperty := 6, 79 HttpServerBindingProperty := 7,HttpServerExtendedAuthenticationProperty := 8, 80 HttpServerListenEndpointProperty := 9, 81 HttpServerChannelBindProperty := 10, 82 HttpServerProtectionLevelProperty := 11 83 ); 84 HTTP_SERVER_PROPERTY = _HTTP_SERVER_PROPERTY; 85 PHTTP_SERVER_PROPERTY = ^_HTTP_SERVER_PROPERTY; 86 87 const 88 HTTP_MAX_SERVER_QUEUE_LENGTH = $7FFFFFFF; 89 HTTP_MIN_SERVER_QUEUE_LENGTH = 1; 90 91 type 92 _HTTP_PROPERTY_FLAGS = record 93 flag0 : word; 94 end; 95 HTTP_PROPERTY_FLAGS = _HTTP_PROPERTY_FLAGS; 96 PHTTP_PROPERTY_FLAGS = ^_HTTP_PROPERTY_FLAGS; 97 98 const 99 bm__HTTP_PROPERTY_FLAGS_Present = $1; 100 bp__HTTP_PROPERTY_FLAGS_Present = 0; 101 102 function Present(var a : _HTTP_PROPERTY_FLAGS) : ULONG; 103 procedure set_Present(var a : _HTTP_PROPERTY_FLAGS; __Present : ULONG); 104 105 type 106 _HTTP_ENABLED_STATE = (HttpEnabledStateActive,HttpEnabledStateInactive 107 ); 108 HTTP_ENABLED_STATE = _HTTP_ENABLED_STATE; 109 PHTTP_ENABLED_STATE = ^_HTTP_ENABLED_STATE; 110 111 _HTTP_STATE_INFO = record 112 Flags : HTTP_PROPERTY_FLAGS; 113 State : HTTP_ENABLED_STATE; 114 end; 115 HTTP_STATE_INFO = _HTTP_STATE_INFO; 116 PHTTP_STATE_INFO = ^_HTTP_STATE_INFO; 117 118 _HTTP_503_RESPONSE_VERBOSITY = (Http503ResponseVerbosityBasic,Http503ResponseVerbosityLimited, 119 Http503ResponseVerbosityFull); 120 HTTP_503_RESPONSE_VERBOSITY = _HTTP_503_RESPONSE_VERBOSITY; 121 PHTTP_503_RESPONSE_VERBOSITY = ^_HTTP_503_RESPONSE_VERBOSITY; 122 123 _HTTP_QOS_SETTING_TYPE = (HttpQosSettingTypeBandwidth,HttpQosSettingTypeConnectionLimit, 124 HttpQosSettingTypeFlowRate); 125 HTTP_QOS_SETTING_TYPE = _HTTP_QOS_SETTING_TYPE; 126 PHTTP_QOS_SETTING_TYPE = ^_HTTP_QOS_SETTING_TYPE; 127 128 _HTTP_QOS_SETTING_INFO = record 129 QosType : HTTP_QOS_SETTING_TYPE; 130 QosSetting : PVOID; 131 end; 132 HTTP_QOS_SETTING_INFO = _HTTP_QOS_SETTING_INFO; 133 PHTTP_QOS_SETTING_INFO = ^_HTTP_QOS_SETTING_INFO; 134 135 _HTTP_CONNECTION_LIMIT_INFO = record 136 Flags : HTTP_PROPERTY_FLAGS; 137 MaxConnections : ULONG; 138 end; 139 HTTP_CONNECTION_LIMIT_INFO = _HTTP_CONNECTION_LIMIT_INFO; 140 PHTTP_CONNECTION_LIMIT_INFO = ^_HTTP_CONNECTION_LIMIT_INFO; 141 142 _HTTP_BANDWIDTH_LIMIT_INFO = record 143 Flags : HTTP_PROPERTY_FLAGS; 144 MaxBandwidth : ULONG; 145 end; 146 HTTP_BANDWIDTH_LIMIT_INFO = _HTTP_BANDWIDTH_LIMIT_INFO; 147 PHTTP_BANDWIDTH_LIMIT_INFO = ^_HTTP_BANDWIDTH_LIMIT_INFO; 148 149 _HTTP_FLOWRATE_INFO = record 150 Flags : HTTP_PROPERTY_FLAGS; 151 MaxBandwidth : ULONG; 152 MaxPeakBandwidth : ULONG; 153 BurstSize : ULONG; 154 end; 155 HTTP_FLOWRATE_INFO = _HTTP_FLOWRATE_INFO; 156 PHTTP_FLOWRATE_INFO = ^_HTTP_FLOWRATE_INFO; 157 158 const 159 HTTP_MIN_ALLOWED_BANDWIDTH_THROTTLING_RATE: ULONG = 1024; 160 161 HTTP_LIMIT_INFINITE: ULONG = ULONG(-1); 162 163 164 type 165 _HTTP_SERVICE_CONFIG_TIMEOUT_KEY = (IdleConnectionTimeout := 0,HeaderWaitTimeout 166 ); 167 HTTP_SERVICE_CONFIG_TIMEOUT_KEY = _HTTP_SERVICE_CONFIG_TIMEOUT_KEY; 168 PHTTP_SERVICE_CONFIG_TIMEOUT_KEY = ^_HTTP_SERVICE_CONFIG_TIMEOUT_KEY; 169 170 HTTP_SERVICE_CONFIG_TIMEOUT_PARAM = USHORT; 171 PHTTP_SERVICE_CONFIG_TIMEOUT_PARAM = ^HTTP_SERVICE_CONFIG_TIMEOUT_PARAM; 172 173 _HTTP_SERVICE_CONFIG_TIMEOUT_SET = record 174 KeyDesc : HTTP_SERVICE_CONFIG_TIMEOUT_KEY; 175 ParamDesc : HTTP_SERVICE_CONFIG_TIMEOUT_PARAM; 176 end; 177 HTTP_SERVICE_CONFIG_TIMEOUT_SET = _HTTP_SERVICE_CONFIG_TIMEOUT_SET; 178 PHTTP_SERVICE_CONFIG_TIMEOUT_SET = ^_HTTP_SERVICE_CONFIG_TIMEOUT_SET; 179 180 _HTTP_TIMEOUT_LIMIT_INFO = record 181 Flags : HTTP_PROPERTY_FLAGS; 182 EntityBody : USHORT; 183 DrainEntityBody : USHORT; 184 RequestQueue : USHORT; 185 IdleConnection : USHORT; 186 HeaderWait : USHORT; 187 MinSendRate : ULONG; 188 end; 189 HTTP_TIMEOUT_LIMIT_INFO = _HTTP_TIMEOUT_LIMIT_INFO; 190 PHTTP_TIMEOUT_LIMIT_INFO = ^_HTTP_TIMEOUT_LIMIT_INFO; 191 192 _HTTP_LISTEN_ENDPOINT_INFO = record 193 Flags : HTTP_PROPERTY_FLAGS; 194 EnableSharing : BOOLEAN; 195 end; 196 HTTP_LISTEN_ENDPOINT_INFO = _HTTP_LISTEN_ENDPOINT_INFO; 197 PHTTP_LISTEN_ENDPOINT_INFO = ^_HTTP_LISTEN_ENDPOINT_INFO; 198 199 _HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS = record 200 DomainNameLength : USHORT; 201 DomainName : PWSTR; 202 RealmLength : USHORT; 203 Realm : PWSTR; 204 end; 205 HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS = _HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS; 206 PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS = ^_HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS; 207 208 _HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS = record 209 RealmLength : USHORT; 210 Realm : PWSTR; 211 end; 212 HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS = _HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS; 213 PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS = ^_HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS; 214 215 const 216 HTTP_AUTH_ENABLE_BASIC = $00000001; 217 HTTP_AUTH_ENABLE_DIGEST = $00000002; 218 HTTP_AUTH_ENABLE_NTLM = $00000004; 219 HTTP_AUTH_ENABLE_NEGOTIATE = $00000008; 220 HTTP_AUTH_ENABLE_KERBEROS = $00000010; 221 HTTP_AUTH_ENABLE_ALL = (((HTTP_AUTH_ENABLE_BASIC or HTTP_AUTH_ENABLE_DIGEST) or HTTP_AUTH_ENABLE_NTLM) or HTTP_AUTH_ENABLE_NEGOTIATE) or HTTP_AUTH_ENABLE_KERBEROS; 222 223 HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING = $01; 224 HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL = $02; 225 226 type 227 _HTTP_SERVER_AUTHENTICATION_INFO = record 228 Flags : HTTP_PROPERTY_FLAGS; 229 AuthSchemes : ULONG; 230 ReceiveMutualAuth : BOOLEAN; 231 ReceiveContextHandle : BOOLEAN; 232 DisableNTLMCredentialCaching : BOOLEAN; 233 ExFlags : UCHAR; 234 DigestParams : HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS; 235 BasicParams : HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS; 236 end; 237 HTTP_SERVER_AUTHENTICATION_INFO = _HTTP_SERVER_AUTHENTICATION_INFO; 238 PHTTP_SERVER_AUTHENTICATION_INFO = ^_HTTP_SERVER_AUTHENTICATION_INFO; 239 240{%REGION Windows 7 and newer } 241 242 type 243 _HTTP_SERVICE_BINDING_TYPE = (HttpServiceBindingTypeNone := 0,HttpServiceBindingTypeW, 244 HttpServiceBindingTypeA); 245 HTTP_SERVICE_BINDING_TYPE = _HTTP_SERVICE_BINDING_TYPE; 246 247 _HTTP_SERVICE_BINDING_BASE = record 248 _Type : HTTP_SERVICE_BINDING_TYPE; 249 end; 250 HTTP_SERVICE_BINDING_BASE = _HTTP_SERVICE_BINDING_BASE; 251 PHTTP_SERVICE_BINDING_BASE = ^_HTTP_SERVICE_BINDING_BASE; 252 253 _HTTP_SERVICE_BINDING_A = record 254 Base : HTTP_SERVICE_BINDING_BASE; 255 Buffer : PCHAR; 256 BufferSize : ULONG; 257 end; 258 HTTP_SERVICE_BINDING_A = _HTTP_SERVICE_BINDING_A; 259 PHTTP_SERVICE_BINDING_A = ^_HTTP_SERVICE_BINDING_A; 260 261 _HTTP_SERVICE_BINDING_W = record 262 Base : HTTP_SERVICE_BINDING_BASE; 263 Buffer : PWCHAR; 264 BufferSize : ULONG; 265 end; 266 HTTP_SERVICE_BINDING_W = _HTTP_SERVICE_BINDING_W; 267 PHTTP_SERVICE_BINDING_W = ^_HTTP_SERVICE_BINDING_W; 268 269 _HTTP_AUTHENTICATION_HARDENING_LEVELS = (HttpAuthenticationHardeningLegacy := 0, 270 HttpAuthenticationHardeningMedium,HttpAuthenticationHardeningStrict 271 ); 272 HTTP_AUTHENTICATION_HARDENING_LEVELS = _HTTP_AUTHENTICATION_HARDENING_LEVELS; 273 274 const 275 HTTP_CHANNEL_BIND_PROXY = $1; 276 HTTP_CHANNEL_BIND_PROXY_COHOSTING = $20; 277 HTTP_CHANNEL_BIND_NO_SERVICE_NAME_CHECK = $2; 278 HTTP_CHANNEL_BIND_DOTLESS_SERVICE = $4; 279 HTTP_CHANNEL_BIND_SECURE_CHANNEL_TOKEN = $8; 280 HTTP_CHANNEL_BIND_CLIENT_SERVICE = $10; 281 282 type 283 _HTTP_CHANNEL_BIND_INFO = record 284 Hardening : HTTP_AUTHENTICATION_HARDENING_LEVELS; 285 Flags : ULONG; 286 ServiceNames : ^PHTTP_SERVICE_BINDING_BASE; 287 NumberOfServiceNames : ULONG; 288 end; 289 HTTP_CHANNEL_BIND_INFO = _HTTP_CHANNEL_BIND_INFO; 290 PHTTP_CHANNEL_BIND_INFO = ^_HTTP_CHANNEL_BIND_INFO; 291 292 _HTTP_REQUEST_CHANNEL_BIND_STATUS = record 293 ServiceName : PHTTP_SERVICE_BINDING_BASE; 294 ChannelToken : PUCHAR; 295 ChannelTokenSize : ULONG; 296 Flags : ULONG; 297 end; 298 HTTP_REQUEST_CHANNEL_BIND_STATUS = _HTTP_REQUEST_CHANNEL_BIND_STATUS; 299 PHTTP_REQUEST_CHANNEL_BIND_STATUS = ^_HTTP_REQUEST_CHANNEL_BIND_STATUS; 300 301{%ENDREGION} 302 303 type 304 _HTTP_REQUEST_TOKEN_BINDING_INFO = record 305 TokenBinding : PUCHAR; 306 TokenBindingSize : ULONG; 307 TlsUnique : PUCHAR; 308 TlsUniqueSize : ULONG; 309 KeyType : PWSTR; 310 end; 311 HTTP_REQUEST_TOKEN_BINDING_INFO = _HTTP_REQUEST_TOKEN_BINDING_INFO; 312 PHTTP_REQUEST_TOKEN_BINDING_INFO = ^_HTTP_REQUEST_TOKEN_BINDING_INFO; 313 314 const 315 HTTP_LOG_FIELD_DATE = $00000001; 316 HTTP_LOG_FIELD_TIME = $00000002; 317 HTTP_LOG_FIELD_CLIENT_IP = $00000004; 318 HTTP_LOG_FIELD_USER_NAME = $00000008; 319 HTTP_LOG_FIELD_SITE_NAME = $00000010; 320 HTTP_LOG_FIELD_COMPUTER_NAME = $00000020; 321 HTTP_LOG_FIELD_SERVER_IP = $00000040; 322 HTTP_LOG_FIELD_METHOD = $00000080; 323 HTTP_LOG_FIELD_URI_STEM = $00000100; 324 HTTP_LOG_FIELD_URI_QUERY = $00000200; 325 HTTP_LOG_FIELD_STATUS = $00000400; 326 HTTP_LOG_FIELD_WIN32_STATUS = $00000800; 327 HTTP_LOG_FIELD_BYTES_SENT = $00001000; 328 HTTP_LOG_FIELD_BYTES_RECV = $00002000; 329 HTTP_LOG_FIELD_TIME_TAKEN = $00004000; 330 HTTP_LOG_FIELD_SERVER_PORT = $00008000; 331 HTTP_LOG_FIELD_USER_AGENT = $00010000; 332 HTTP_LOG_FIELD_COOKIE = $00020000; 333 HTTP_LOG_FIELD_REFERER = $00040000; 334 HTTP_LOG_FIELD_VERSION = $00080000; 335 HTTP_LOG_FIELD_HOST = $00100000; 336 HTTP_LOG_FIELD_SUB_STATUS = $00200000; 337 HTTP_LOG_FIELD_STREAM_ID = $08000000; 338 HTTP_LOG_FIELD_CLIENT_PORT = $00400000; 339 HTTP_LOG_FIELD_URI = $00800000; 340 HTTP_LOG_FIELD_SITE_ID = $01000000; 341 HTTP_LOG_FIELD_REASON = $02000000; 342 HTTP_LOG_FIELD_QUEUE_NAME = $04000000; 343 344 type 345 _HTTP_LOGGING_TYPE = (HttpLoggingTypeW3C,HttpLoggingTypeIIS, 346 HttpLoggingTypeNCSA,HttpLoggingTypeRaw 347 ); 348 HTTP_LOGGING_TYPE = _HTTP_LOGGING_TYPE; 349 PHTTP_LOGGING_TYPE = ^_HTTP_LOGGING_TYPE; 350 351 _HTTP_LOGGING_ROLLOVER_TYPE = (HttpLoggingRolloverSize,HttpLoggingRolloverDaily, 352 HttpLoggingRolloverWeekly,HttpLoggingRolloverMonthly, 353 HttpLoggingRolloverHourly); 354 HTTP_LOGGING_ROLLOVER_TYPE = _HTTP_LOGGING_ROLLOVER_TYPE; 355 PHTTP_LOGGING_ROLLOVER_TYPE = ^_HTTP_LOGGING_ROLLOVER_TYPE; 356 357 const 358 HTTP_MIN_ALLOWED_LOG_FILE_ROLLOVER_SIZE : ULONG = ULONG((1*1024)*1024); 359 360 HTTP_LOGGING_FLAG_LOCAL_TIME_ROLLOVER = $00000001; 361 HTTP_LOGGING_FLAG_USE_UTF8_CONVERSION = $00000002; 362 HTTP_LOGGING_FLAG_LOG_ERRORS_ONLY = $00000004; 363 HTTP_LOGGING_FLAG_LOG_SUCCESS_ONLY = $00000008; 364 365 type 366 _HTTP_LOGGING_INFO = record 367 Flags : HTTP_PROPERTY_FLAGS; 368 LoggingFlags : ULONG; 369 SoftwareName : PCWSTR; 370 SoftwareNameLength : USHORT; 371 DirectoryNameLength : USHORT; 372 DirectoryName : PCWSTR; 373 Format : HTTP_LOGGING_TYPE; 374 Fields : ULONG; 375 pExtFields : PVOID; 376 NumOfExtFields : USHORT; 377 MaxRecordSize : USHORT; 378 RolloverType : HTTP_LOGGING_ROLLOVER_TYPE; 379 RolloverSize : ULONG; 380 pSecurityDescriptor : PSECURITY_DESCRIPTOR; 381 end; 382 HTTP_LOGGING_INFO = _HTTP_LOGGING_INFO; 383 PHTTP_LOGGING_INFO = ^_HTTP_LOGGING_INFO; 384 385 _HTTP_BINDING_INFO = record 386 Flags : HTTP_PROPERTY_FLAGS; 387 RequestQueueHandle : HANDLE; 388 end; 389 HTTP_BINDING_INFO = _HTTP_BINDING_INFO; 390 PHTTP_BINDING_INFO = ^_HTTP_BINDING_INFO; 391 392{%ENDREGION} 393 394{%REGION Windows 7 and newer} 395 396 type 397 _HTTP_PROTECTION_LEVEL_TYPE = (HttpProtectionLevelUnrestricted,HttpProtectionLevelEdgeRestricted, 398 HttpProtectionLevelRestricted); 399 HTTP_PROTECTION_LEVEL_TYPE = _HTTP_PROTECTION_LEVEL_TYPE; 400 PHTTP_PROTECTION_LEVEL_TYPE = ^_HTTP_PROTECTION_LEVEL_TYPE; 401 402 _HTTP_PROTECTION_LEVEL_INFO = record 403 Flags : HTTP_PROPERTY_FLAGS; 404 Level : HTTP_PROTECTION_LEVEL_TYPE; 405 end; 406 HTTP_PROTECTION_LEVEL_INFO = _HTTP_PROTECTION_LEVEL_INFO; 407 PHTTP_PROTECTION_LEVEL_INFO = ^_HTTP_PROTECTION_LEVEL_INFO; 408{%ENDREGION} 409 410{%REGION Windows Vista and newer } 411 412 const 413 HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING = $00000001; 414 HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER = $00000002; 415 416{%ENDREGION} 417 418 const 419 HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY = $00000001; 420 HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY = $00000002; 421 422{%REGION Windows Vista and newer} 423 424 const 425 HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER = $00000001; 426 427{%ENDREGION} 428 429 const 430 HTTP_SEND_RESPONSE_FLAG_DISCONNECT = $00000001; 431 HTTP_SEND_RESPONSE_FLAG_MORE_DATA = $00000002; 432 HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA = $00000004; 433 HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING = $00000008; 434 HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES = $00000020; 435 HTTP_SEND_RESPONSE_FLAG_OPAQUE = $00000040; 436 HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE = $00000001; 437 438 type 439 HTTP_OPAQUE_ID = ULONGLONG; 440 PHTTP_OPAQUE_ID = ^HTTP_OPAQUE_ID; 441 442 HTTP_REQUEST_ID = HTTP_OPAQUE_ID; 443 PHTTP_REQUEST_ID = ^HTTP_REQUEST_ID; 444 445 HTTP_CONNECTION_ID = HTTP_OPAQUE_ID; 446 PHTTP_CONNECTION_ID = ^HTTP_CONNECTION_ID; 447 448 HTTP_RAW_CONNECTION_ID = HTTP_OPAQUE_ID; 449 PHTTP_RAW_CONNECTION_ID = ^HTTP_RAW_CONNECTION_ID; 450 451{%REGION Windows Vista and newer} 452 453 type 454 HTTP_URL_GROUP_ID = HTTP_OPAQUE_ID; 455 PHTTP_URL_GROUP_ID = ^HTTP_URL_GROUP_ID; 456 457 HTTP_SERVER_SESSION_ID = HTTP_OPAQUE_ID; 458 PHTTP_SERVER_SESSION_ID = ^HTTP_SERVER_SESSION_ID; 459 460{%ENDREGION} 461 462 const 463 HTTP_NULL_ID = QWord(0); 464 465function HTTP_IS_NULL_ID(pid: HTTP_OPAQUE_ID): Boolean; inline; 466procedure HTTP_SET_NULL_ID(var pid: HTTP_OPAQUE_ID); inline; 467(* error 468#define HTTP_NULL_ID (0ui64) 469in define line 892 *) 470(* error 471#define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID == *(pid)) 472in define line 893 *) 473(* error 474#define HTTP_SET_NULL_ID(pid) ( *(pid) = HTTP_NULL_ID) 475in define line 894 *) 476 477 { was #define dname def_expr } 478 const 479 HTTP_BYTE_RANGE_TO_EOF : ULONGLONG = ULONGLONG(-(1)); 480 481 482 type 483 _HTTP_BYTE_RANGE = record 484 StartingOffset : ULARGE_INTEGER; 485 Length : ULARGE_INTEGER; 486 end; 487 HTTP_BYTE_RANGE = _HTTP_BYTE_RANGE; 488 PHTTP_BYTE_RANGE = ^_HTTP_BYTE_RANGE; 489 490 _HTTP_VERSION = record 491 MajorVersion : USHORT; 492 MinorVersion : USHORT; 493 end; 494 HTTP_VERSION = _HTTP_VERSION; 495 PHTTP_VERSION = ^_HTTP_VERSION; 496 497const 498 HTTP_VERSION_UNKNOWN: HTTP_VERSION = ( MajorVersion: 0; MinorVersion: 0 ); 499 HTTP_VERSION_0_9: HTTP_VERSION = ( MajorVersion: 0; MinorVersion: 9 ); 500 HTTP_VERSION_1_0: HTTP_VERSION = ( MajorVersion: 1; MinorVersion: 0 ); 501 HTTP_VERSION_1_1: HTTP_VERSION = ( MajorVersion: 1; MinorVersion: 1 ); 502 HTTP_VERSION_2_0: HTTP_VERSION = ( MajorVersion: 2; MinorVersion: 0 ); 503 504procedure HTTP_SET_VERSION(out version: HTTP_VERSION; major, minor: USHORT); inline; 505function HTTP_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; inline; 506function HTTP_GREATER_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; inline; 507function HTTP_LESS_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; inline; 508function HTTP_NOT_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; inline; 509function HTTP_GREATER_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor : USHORT) : Boolean; 510function HTTP_LESS_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor : USHORT) : Boolean; 511 512type 513 _HTTP_VERB = (HttpVerbUnparsed,HttpVerbUnknown,HttpVerbInvalid, 514 HttpVerbOPTIONS,HttpVerbGET,HttpVerbHEAD, 515 HttpVerbPOST,HttpVerbPUT,HttpVerbDELETE, 516 HttpVerbTRACE,HttpVerbCONNECT,HttpVerbTRACK, 517 HttpVerbMOVE,HttpVerbCOPY,HttpVerbPROPFIND, 518 HttpVerbPROPPATCH,HttpVerbMKCOL,HttpVerbLOCK, 519 HttpVerbUNLOCK,HttpVerbSEARCH,HttpVerbMaximum 520 ); 521 HTTP_VERB = _HTTP_VERB; 522 PHTTP_VERB = ^_HTTP_VERB; 523 524 _HTTP_HEADER_ID = (HttpHeaderCacheControl := 0,HttpHeaderConnection := 1, 525 HttpHeaderDate := 2,HttpHeaderKeepAlive := 3, 526 HttpHeaderPragma := 4,HttpHeaderTrailer := 5, 527 HttpHeaderTransferEncoding := 6,HttpHeaderUpgrade := 7, 528 HttpHeaderVia := 8,HttpHeaderWarning := 9, 529 HttpHeaderAllow := 10,HttpHeaderContentLength := 11, 530 HttpHeaderContentType := 12,HttpHeaderContentEncoding := 13, 531 HttpHeaderContentLanguage := 14,HttpHeaderContentLocation := 15, 532 HttpHeaderContentMd5 := 16,HttpHeaderContentRange := 17, 533 HttpHeaderExpires := 18,HttpHeaderLastModified := 19, 534 HttpHeaderAccept := 20,HttpHeaderAcceptCharset := 21, 535 HttpHeaderAcceptEncoding := 22,HttpHeaderAcceptLanguage := 23, 536 HttpHeaderAuthorization := 24,HttpHeaderCookie := 25, 537 HttpHeaderExpect := 26,HttpHeaderFrom := 27, 538 HttpHeaderHost := 28,HttpHeaderIfMatch := 29, 539 HttpHeaderIfModifiedSince := 30,HttpHeaderIfNoneMatch := 31, 540 HttpHeaderIfRange := 32,HttpHeaderIfUnmodifiedSince := 33, 541 HttpHeaderMaxForwards := 34,HttpHeaderProxyAuthorization := 35, 542 HttpHeaderReferer := 36,HttpHeaderRange := 37, 543 HttpHeaderTe := 38,HttpHeaderTranslate := 39, 544 HttpHeaderUserAgent := 40,HttpHeaderRequestMaximum := 41 545 ); 546 HTTP_HEADER_ID = _HTTP_HEADER_ID; 547 PHTTP_HEADER_ID = ^_HTTP_HEADER_ID; 548 549const 550 HttpHeaderAcceptRanges = HttpHeaderAccept; 551 HttpHeaderAge = HttpHeaderAcceptCharset; 552 HttpHeaderEtag = HttpHeaderAcceptEncoding; 553 HttpHeaderLocation = HttpHeaderAcceptLanguage; 554 HttpHeaderProxyAuthenticate = HttpHeaderAuthorization; 555 HttpHeaderRetryAfter = HttpHeaderCookie; 556 HttpHeaderServer = HttpHeaderExpect; 557 HttpHeaderSetCookie = HttpHeaderFrom; 558 HttpHeaderVary = HttpHeaderHost; 559 HttpHeaderWwwAuthenticate = HttpHeaderIfMatch; 560 HttpHeaderResponseMaximum = HttpHeaderIfModifiedSince; 561 HttpHeaderMaximum = HttpHeaderRequestMaximum; 562 563type 564 _HTTP_KNOWN_HEADER = record 565 RawValueLength : USHORT; 566 pRawValue : PCSTR; 567 end; 568 HTTP_KNOWN_HEADER = _HTTP_KNOWN_HEADER; 569 PHTTP_KNOWN_HEADER = ^_HTTP_KNOWN_HEADER; 570 571 _HTTP_UNKNOWN_HEADER = record 572 NameLength : USHORT; 573 RawValueLength : USHORT; 574 pName : PCSTR; 575 pRawValue : PCSTR; 576 end; 577 HTTP_UNKNOWN_HEADER = _HTTP_UNKNOWN_HEADER; 578 PHTTP_UNKNOWN_HEADER = ^_HTTP_UNKNOWN_HEADER; 579 580{%REGION Windows Vista and newer} 581 582type 583 _HTTP_LOG_DATA_TYPE = (HttpLogDataTypeFields := 0); 584 HTTP_LOG_DATA_TYPE = _HTTP_LOG_DATA_TYPE; 585 PHTTP_LOG_DATA_TYPE = ^_HTTP_LOG_DATA_TYPE; 586 587 _HTTP_LOG_DATA = record 588 _Type : HTTP_LOG_DATA_TYPE; 589 end; 590 HTTP_LOG_DATA = _HTTP_LOG_DATA; 591 PHTTP_LOG_DATA = ^_HTTP_LOG_DATA; 592 593 _HTTP_LOG_FIELDS_DATA = record 594 Base : HTTP_LOG_DATA; 595 UserNameLength : USHORT; 596 UriStemLength : USHORT; 597 ClientIpLength : USHORT; 598 ServerNameLength : USHORT; 599 ServiceNameLength : USHORT; 600 ServerIpLength : USHORT; 601 MethodLength : USHORT; 602 UriQueryLength : USHORT; 603 HostLength : USHORT; 604 UserAgentLength : USHORT; 605 CookieLength : USHORT; 606 ReferrerLength : USHORT; 607 UserName : PWCHAR; 608 UriStem : PWCHAR; 609 ClientIp : PCHAR; 610 ServerName : PCHAR; 611 ServiceName : PCHAR; 612 ServerIp : PCHAR; 613 Method : PCHAR; 614 UriQuery : PCHAR; 615 Host : PCHAR; 616 UserAgent : PCHAR; 617 Cookie : PCHAR; 618 Referrer : PCHAR; 619 ServerPort : USHORT; 620 ProtocolStatus : USHORT; 621 Win32Status : ULONG; 622 MethodNum : HTTP_VERB; 623 SubStatus : USHORT; 624 end; 625 HTTP_LOG_FIELDS_DATA = _HTTP_LOG_FIELDS_DATA; 626 PHTTP_LOG_FIELDS_DATA = ^_HTTP_LOG_FIELDS_DATA; 627 628{%ENDREGION} 629 630type 631 _HTTP_DATA_CHUNK_TYPE = (HttpDataChunkFromMemory,HttpDataChunkFromFileHandle, 632 HttpDataChunkFromFragmentCache,HttpDataChunkFromFragmentCacheEx, 633 HttpDataChunkMaximum); 634 HTTP_DATA_CHUNK_TYPE = _HTTP_DATA_CHUNK_TYPE; 635 PHTTP_DATA_CHUNK_TYPE = ^_HTTP_DATA_CHUNK_TYPE; 636 637 HTTP_DATA_CHUNK_FROM_MEMORY = record 638 pBuffer : PVOID; 639 BufferLength : ULONG; 640 end; 641 642 HTTP_DATA_CHUNK_FROM_FILE_HANDLE = record 643 ByteRange : HTTP_BYTE_RANGE; 644 FileHandle : HANDLE; 645 end; 646 647 HTTP_DATA_CHUNK_FROM_FRAGMENT_CACHE = record 648 FragmentNameLength : USHORT; 649 pFragmentName : PCWSTR; 650 end; 651 652 HTTP_DATA_CHUNK_FROM_FRAGMENT_CACHE_EX = record 653 ByteRange : HTTP_BYTE_RANGE; 654 pFragmentName : PCWSTR; 655 end; 656 657 _HTTP_DATA_CHUNK = record 658 DataChunkType : HTTP_DATA_CHUNK_TYPE; 659 case LongInt of 660 1: (FromMemory : HTTP_DATA_CHUNK_FROM_MEMORY); 661 2: (FromFileHandle : HTTP_DATA_CHUNK_FROM_FILE_HANDLE); 662 3: (FromFragmentCache : HTTP_DATA_CHUNK_FROM_FRAGMENT_CACHE); 663 4: (FromFragmentCacheEx : HTTP_DATA_CHUNK_FROM_FRAGMENT_CACHE_EX); 664 end; 665 HTTP_DATA_CHUNK = _HTTP_DATA_CHUNK; 666 PHTTP_DATA_CHUNK = ^_HTTP_DATA_CHUNK; 667 668 _HTTP_REQUEST_HEADERS = record 669 UnknownHeaderCount : USHORT; 670 pUnknownHeaders : PHTTP_UNKNOWN_HEADER; 671 TrailerCount : USHORT; 672 pTrailers : PHTTP_UNKNOWN_HEADER; 673 KnownHeaders : array[0..Ord(HttpHeaderRequestMaximum)-1] of HTTP_KNOWN_HEADER; 674 end; 675 HTTP_REQUEST_HEADERS = _HTTP_REQUEST_HEADERS; 676 PHTTP_REQUEST_HEADERS = ^_HTTP_REQUEST_HEADERS; 677 678 _HTTP_RESPONSE_HEADERS = record 679 UnknownHeaderCount : USHORT; 680 pUnknownHeaders : PHTTP_UNKNOWN_HEADER; 681 TrailerCount : USHORT; 682 pTrailers : PHTTP_UNKNOWN_HEADER; 683 KnownHeaders : array[0..Ord(HttpHeaderResponseMaximum)-1] of HTTP_KNOWN_HEADER; 684 end; 685 HTTP_RESPONSE_HEADERS = _HTTP_RESPONSE_HEADERS; 686 PHTTP_RESPONSE_HEADERS = ^_HTTP_RESPONSE_HEADERS; 687 688 _HTTP_TRANSPORT_ADDRESS = record 689 pRemoteAddress : PSOCKADDR; 690 pLocalAddress : PSOCKADDR; 691 end; 692 HTTP_TRANSPORT_ADDRESS = _HTTP_TRANSPORT_ADDRESS; 693 PHTTP_TRANSPORT_ADDRESS = ^_HTTP_TRANSPORT_ADDRESS; 694 695 _HTTP_COOKED_URL = record 696 FullUrlLength : USHORT; 697 HostLength : USHORT; 698 AbsPathLength : USHORT; 699 QueryStringLength : USHORT; 700 pFullUrl : PCWSTR; 701 pHost : PCWSTR; 702 pAbsPath : PCWSTR; 703 pQueryString : PCWSTR; 704 end; 705 HTTP_COOKED_URL = _HTTP_COOKED_URL; 706 PHTTP_COOKED_URL = ^_HTTP_COOKED_URL; 707 708 HTTP_URL_CONTEXT = ULONGLONG; 709 710{%REGION Windows Vista and newer} 711 712const 713 HTTP_URL_FLAG_REMOVE_ALL = $00000001; 714 715type 716 _HTTP_AUTH_STATUS = (HttpAuthStatusSuccess,HttpAuthStatusNotAuthenticated, 717 HttpAuthStatusFailure); 718 HTTP_AUTH_STATUS = _HTTP_AUTH_STATUS; 719 PHTTP_AUTH_STATUS = ^_HTTP_AUTH_STATUS; 720 721 _HTTP_REQUEST_AUTH_TYPE = (HttpRequestAuthTypeNone := 0,HttpRequestAuthTypeBasic, 722 HttpRequestAuthTypeDigest,HttpRequestAuthTypeNTLM, 723 HttpRequestAuthTypeNegotiate,HttpRequestAuthTypeKerberos 724 ); 725 HTTP_REQUEST_AUTH_TYPE = _HTTP_REQUEST_AUTH_TYPE; 726 PHTTP_REQUEST_AUTH_TYPE = ^_HTTP_REQUEST_AUTH_TYPE; 727 728{%ENDREGION} 729 730type 731 _HTTP_SSL_CLIENT_CERT_INFO = record 732 CertFlags : ULONG; 733 CertEncodedSize : ULONG; 734 pCertEncoded : PUCHAR; 735 Token : HANDLE; 736 CertDeniedByMapper : BOOLEAN; 737 end; 738 HTTP_SSL_CLIENT_CERT_INFO = _HTTP_SSL_CLIENT_CERT_INFO; 739 PHTTP_SSL_CLIENT_CERT_INFO = ^_HTTP_SSL_CLIENT_CERT_INFO; 740 741{%REGION Windows 7 and newer } 742 743const 744 HTTP_RECEIVE_SECURE_CHANNEL_TOKEN = $1; 745 746{%ENDREGION} 747 748type 749 _HTTP_SSL_INFO = record 750 ServerCertKeySize : USHORT; 751 ConnectionKeySize : USHORT; 752 ServerCertIssuerSize : ULONG; 753 ServerCertSubjectSize : ULONG; 754 pServerCertIssuer : PCSTR; 755 pServerCertSubject : PCSTR; 756 pClientCertInfo : PHTTP_SSL_CLIENT_CERT_INFO; 757 SslClientCertNegotiated : ULONG; 758 end; 759 HTTP_SSL_INFO = _HTTP_SSL_INFO; 760 PHTTP_SSL_INFO = ^_HTTP_SSL_INFO; 761 762 _HTTP_SSL_PROTOCOL_INFO = record 763 Protocol : ULONG; 764 CipherType : ULONG; 765 CipherStrength : ULONG; 766 HashType : ULONG; 767 HashStrength : ULONG; 768 KeyExchangeType : ULONG; 769 KeyExchangeStrength : ULONG; 770 end; 771 HTTP_SSL_PROTOCOL_INFO = _HTTP_SSL_PROTOCOL_INFO; 772 PHTTP_SSL_PROTOCOL_INFO = ^_HTTP_SSL_PROTOCOL_INFO; 773 774{%REGION Windows Vista and newer } 775 776type 777 _HTTP_REQUEST_INFO_TYPE = (HttpRequestInfoTypeAuth,HttpRequestInfoTypeChannelBind, 778 HttpRequestInfoTypeSslProtocol,HttpRequestInfoTypeSslTokenBinding 779 ); 780 HTTP_REQUEST_INFO_TYPE = _HTTP_REQUEST_INFO_TYPE; 781 PHTTP_REQUEST_INFO_TYPE = ^_HTTP_REQUEST_INFO_TYPE; 782 783 _HTTP_REQUEST_INFO = record 784 InfoType : HTTP_REQUEST_INFO_TYPE; 785 InfoLength : ULONG; 786 pInfo : PVOID; 787 end; 788 HTTP_REQUEST_INFO = _HTTP_REQUEST_INFO; 789 PHTTP_REQUEST_INFO = ^_HTTP_REQUEST_INFO; 790{$ifndef __SECSTATUS_DEFINED__} 791 792type 793 SECURITY_STATUS = LONG; 794{$define __SECSTATUS_DEFINED__} 795{$endif} 796 797const 798 HTTP_REQUEST_AUTH_FLAG_TOKEN_FOR_CACHED_CRED = $00000001; 799 800type 801 _HTTP_REQUEST_AUTH_INFO = record 802 AuthStatus : HTTP_AUTH_STATUS; 803 SecStatus : SECURITY_STATUS; 804 Flags : ULONG; 805 AuthType : HTTP_REQUEST_AUTH_TYPE; 806 AccessToken : HANDLE; 807 ContextAttributes : ULONG; 808 PackedContextLength : ULONG; 809 PackedContextType : ULONG; 810 PackedContext : PVOID; 811 MutualAuthDataLength : ULONG; 812 pMutualAuthData : PCHAR; 813 PackageNameLength : USHORT; 814 pPackageName : PWSTR; 815 end; 816 HTTP_REQUEST_AUTH_INFO = _HTTP_REQUEST_AUTH_INFO; 817 PHTTP_REQUEST_AUTH_INFO = ^_HTTP_REQUEST_AUTH_INFO; 818 819{%ENDREGION} 820 821type 822 _HTTP_REQUEST_V1 = object 823 Flags : ULONG; 824 ConnectionId : HTTP_CONNECTION_ID; 825 RequestId : HTTP_REQUEST_ID; 826 UrlContext : HTTP_URL_CONTEXT; 827 Version : HTTP_VERSION; 828 Verb : HTTP_VERB; 829 UnknownVerbLength : USHORT; 830 RawUrlLength : USHORT; 831 pUnknownVerb : PCSTR; 832 pRawUrl : PCSTR; 833 CookedUrl : HTTP_COOKED_URL; 834 Address : HTTP_TRANSPORT_ADDRESS; 835 Headers : HTTP_REQUEST_HEADERS; 836 BytesReceived : ULONGLONG; 837 EntityChunkCount : USHORT; 838 pEntityChunks : PHTTP_DATA_CHUNK; 839 RawConnectionId : HTTP_RAW_CONNECTION_ID; 840 pSslInfo : PHTTP_SSL_INFO; 841 end; 842 HTTP_REQUEST_V1 = _HTTP_REQUEST_V1; 843 PHTTP_REQUEST_V1 = ^_HTTP_REQUEST_V1; 844 845{%REGION Windows Vista and newer } 846 847type 848 { the C code uses an anonymous struct here to avoid duplication... :/ } 849 _HTTP_REQUEST_V2 = object(_HTTP_REQUEST_V1) 850 RequestInfoCount : USHORT; 851 pRequestInfo : PHTTP_REQUEST_INFO; 852 end; 853 HTTP_REQUEST_V2 = _HTTP_REQUEST_V2; 854 PHTTP_REQUEST_V2 = ^_HTTP_REQUEST_V2; 855 856 HTTP_REQUEST = HTTP_REQUEST_V2; 857{%ENDREGION} 858 859{%REGION Older than Windows Vista } 860 861{type 862 HTTP_REQUEST = HTTP_REQUEST_V1;} 863 864{%ENDREGION} 865 866type 867 PHTTP_REQUEST = ^HTTP_REQUEST; 868 869const 870 HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS = $00000001; 871 HTTP_REQUEST_FLAG_IP_ROUTED = $00000002; 872 HTTP_REQUEST_FLAG_HTTP2 = $00000004; 873 874type 875 _HTTP_RESPONSE_V1 = object 876 Flags : ULONG; 877 Version : HTTP_VERSION; 878 StatusCode : USHORT; 879 ReasonLength : USHORT; 880 pReason : PCSTR; 881 Headers : HTTP_RESPONSE_HEADERS; 882 EntityChunkCount : USHORT; 883 pEntityChunks : PHTTP_DATA_CHUNK; 884 end; 885 HTTP_RESPONSE_V1 = _HTTP_RESPONSE_V1; 886 PHTTP_RESPONSE_V1 = ^_HTTP_RESPONSE_V1; 887 888{%REGION Windows Vista and newer } 889 890const 891 HTTP_RESPONSE_FLAG_MULTIPLE_ENCODINGS_AVAILABLE = $00000001; 892 893type 894 _HTTP_RESPONSE_INFO_TYPE = (HttpResponseInfoTypeMultipleKnownHeaders, 895 HttpResponseInfoTypeAuthenticationProperty, 896 HttpResponseInfoTypeQoSProperty,HttpResponseInfoTypeChannelBind 897 ); 898 HTTP_RESPONSE_INFO_TYPE = _HTTP_RESPONSE_INFO_TYPE; 899 PHTTP_RESPONSE_INFO_TYPE = _HTTP_RESPONSE_INFO_TYPE; 900 901 _HTTP_RESPONSE_INFO = record 902 _Type : HTTP_RESPONSE_INFO_TYPE; 903 Length : ULONG; 904 pInfo : PVOID; 905 end; 906 HTTP_RESPONSE_INFO = _HTTP_RESPONSE_INFO; 907 PHTTP_RESPONSE_INFO = ^_HTTP_RESPONSE_INFO; 908 909const 910 HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER = $00000001; 911 912type 913 _HTTP_MULTIPLE_KNOWN_HEADERS = record 914 HeaderId : HTTP_HEADER_ID; 915 Flags : ULONG; 916 KnownHeaderCount : USHORT; 917 KnownHeaders : PHTTP_KNOWN_HEADER; 918 end; 919 HTTP_MULTIPLE_KNOWN_HEADERS = _HTTP_MULTIPLE_KNOWN_HEADERS; 920 PHTTP_MULTIPLE_KNOWN_HEADERS = ^_HTTP_MULTIPLE_KNOWN_HEADERS; 921 922 { the C code uses an anonymous struct here to avoid duplication... :/ } 923 _HTTP_RESPONSE_V2 = object(_HTTP_RESPONSE_V1) 924 ResponseInfoCount : USHORT; 925 pResponseInfo : PHTTP_RESPONSE_INFO; 926 end; 927 HTTP_RESPONSE_V2 = _HTTP_RESPONSE_V2; 928 PHTTP_RESPONSE_V2 = ^_HTTP_RESPONSE_V2; 929 930 HTTP_RESPONSE = HTTP_RESPONSE_V2; 931 932{%ENDREGION} 933 934{%REGION Older than Windows Vista} 935 936{type 937 HTTP_RESPONSE = HTTP_RESPONSE_V1;} 938 939{%ENDREGION} 940 941type 942 PHTTP_RESPONSE = ^HTTP_RESPONSE; 943 944 _HTTPAPI_VERSION = record 945 HttpApiMajorVersion : USHORT; 946 HttpApiMinorVersion : USHORT; 947 end; 948 HTTPAPI_VERSION = _HTTPAPI_VERSION; 949 PHTTPAPI_VERSION = ^_HTTPAPI_VERSION; 950 951const 952 HTTPAPI_VERSION_2: HTTPAPI_VERSION = ( HttpApiMajorVersion: 2; HttpApiMinorVersion: 0 ); 953 HTTPAPI_VERSION_1: HTTPAPI_VERSION = ( HttpApiMajorVersion: 1; HttpApiMinorVersion: 0 ); 954 955 function HTTPAPI_EQUAL_VERSION(constref version: HTTPAPI_VERSION; major, minor: USHORT): Boolean; inline; 956 function HTTPAPI_GREATER_VERSION(constref version: HTTPAPI_VERSION; major, minor: USHORT): Boolean; inline; 957 function HTTPAPI_LESS_VERSION(constref version: HTTPAPI_VERSION; major, minor: USHORT): Boolean; inline; 958 function HTTPAPI_VERSION_GREATER_OR_EQUAL(constref version: HTTPAPI_VERSION; major, minor: USHORT) : Boolean; inline; 959 960 961 type 962 _HTTP_CACHE_POLICY_TYPE = (HttpCachePolicyNocache,HttpCachePolicyUserInvalidates, 963 HttpCachePolicyTimeToLive,HttpCachePolicyMaximum 964 ); 965 HTTP_CACHE_POLICY_TYPE = _HTTP_CACHE_POLICY_TYPE; 966 PHTTP_CACHE_POLICY_TYPE = ^_HTTP_CACHE_POLICY_TYPE; 967 968 _HTTP_CACHE_POLICY = record 969 Policy : HTTP_CACHE_POLICY_TYPE; 970 SecondsToLive : ULONG; 971 end; 972 HTTP_CACHE_POLICY = _HTTP_CACHE_POLICY; 973 PHTTP_CACHE_POLICY = ^_HTTP_CACHE_POLICY; 974 975 type 976 _HTTP_SERVICE_CONFIG_ID = ( 977 HttpServiceConfigIPListenList, 978 HttpServiceConfigSSLCertInfo, 979 HttpServiceConfigUrlAclInfo, 980 HttpServiceConfigTimeout, 981 HttpServiceConfigCache, 982{%REGION Windows 8 and newer } 983 HttpServiceConfigSslSniCertInfo, 984 HttpServiceConfigSslCcsCertInfo, 985{%ENDREGION} 986 HttpServiceConfigMax 987 ); 988 HTTP_SERVICE_CONFIG_ID = _HTTP_SERVICE_CONFIG_ID; 989 PHTTP_SERVICE_CONFIG_ID = ^_HTTP_SERVICE_CONFIG_ID; 990 991 _HTTP_SERVICE_CONFIG_QUERY_TYPE = (HttpServiceConfigQueryExact,HttpServiceConfigQueryNext, 992 HttpServiceConfigQueryMax); 993 HTTP_SERVICE_CONFIG_QUERY_TYPE = _HTTP_SERVICE_CONFIG_QUERY_TYPE; 994 PHTTP_SERVICE_CONFIG_QUERY_TYPE = ^_HTTP_SERVICE_CONFIG_QUERY_TYPE; 995 996 _HTTP_SERVICE_CONFIG_SSL_KEY = record 997 pIpPort : PSOCKADDR; 998 end; 999 HTTP_SERVICE_CONFIG_SSL_KEY = _HTTP_SERVICE_CONFIG_SSL_KEY; 1000 PHTTP_SERVICE_CONFIG_SSL_KEY = ^_HTTP_SERVICE_CONFIG_SSL_KEY; 1001 1002{%REGION Windows 8 and newer } 1003 1004 type 1005 _HTTP_SERVICE_CONFIG_SSL_SNI_KEY = record 1006 IpPort : SOCKADDR_STORAGE; 1007 Host : PWSTR; 1008 end; 1009 HTTP_SERVICE_CONFIG_SSL_SNI_KEY = _HTTP_SERVICE_CONFIG_SSL_SNI_KEY; 1010 PHTTP_SERVICE_CONFIG_SSL_SNI_KEY = ^_HTTP_SERVICE_CONFIG_SSL_SNI_KEY; 1011 1012 _HTTP_SERVICE_CONFIG_SSL_CCS_KEY = record 1013 LocalAddress : SOCKADDR_STORAGE; 1014 end; 1015 HTTP_SERVICE_CONFIG_SSL_CCS_KEY = _HTTP_SERVICE_CONFIG_SSL_CCS_KEY; 1016 PHTTP_SERVICE_CONFIG_SSL_CCS_KEY = ^_HTTP_SERVICE_CONFIG_SSL_CCS_KEY; 1017 1018{%ENDREGION} 1019 1020 type 1021 _HTTP_SERVICE_CONFIG_SSL_PARAM = record 1022 SslHashLength : ULONG; 1023 pSslHash : PVOID; 1024 AppId : GUID; 1025 pSslCertStoreName : PWSTR; 1026 DefaultCertCheckMode : DWORD; 1027 DefaultRevocationFreshnessTime : DWORD; 1028 DefaultRevocationUrlRetrievalTimeout : DWORD; 1029 pDefaultSslCtlIdentifier : PWSTR; 1030 pDefaultSslCtlStoreName : PWSTR; 1031 DefaultFlags : DWORD; 1032 end; 1033 HTTP_SERVICE_CONFIG_SSL_PARAM = _HTTP_SERVICE_CONFIG_SSL_PARAM; 1034 PHTTP_SERVICE_CONFIG_SSL_PARAM = ^_HTTP_SERVICE_CONFIG_SSL_PARAM; 1035 1036 const 1037 HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER = $00000001; 1038 HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT = $00000002; 1039 1040{%REGION Older than Windows Vista } 1041 1042 const 1043 HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER = $00000004; 1044 1045{%ENDREGION} 1046 1047 const 1048 HTTP_SERVICE_CONFIG_SSL_FLAG_REJECT = $00000008; 1049 1050 type 1051 _HTTP_SERVICE_CONFIG_SSL_SET = record 1052 KeyDesc : HTTP_SERVICE_CONFIG_SSL_KEY; 1053 ParamDesc : HTTP_SERVICE_CONFIG_SSL_PARAM; 1054 end; 1055 HTTP_SERVICE_CONFIG_SSL_SET = _HTTP_SERVICE_CONFIG_SSL_SET; 1056 PHTTP_SERVICE_CONFIG_SSL_SET = ^_HTTP_SERVICE_CONFIG_SSL_SET; 1057 1058{%REGION Windows 8 and newer} 1059 1060 type 1061 _HTTP_SERVICE_CONFIG_SSL_SNI_SET = record 1062 KeyDesc : HTTP_SERVICE_CONFIG_SSL_SNI_KEY; 1063 ParamDesc : HTTP_SERVICE_CONFIG_SSL_PARAM; 1064 end; 1065 HTTP_SERVICE_CONFIG_SSL_SNI_SET = _HTTP_SERVICE_CONFIG_SSL_SNI_SET; 1066 PHTTP_SERVICE_CONFIG_SSL_SNI_SET = ^_HTTP_SERVICE_CONFIG_SSL_SNI_SET; 1067 1068 _HTTP_SERVICE_CONFIG_SSL_CCS_SET = record 1069 KeyDesc : HTTP_SERVICE_CONFIG_SSL_CCS_KEY; 1070 ParamDesc : HTTP_SERVICE_CONFIG_SSL_PARAM; 1071 end; 1072 HTTP_SERVICE_CONFIG_SSL_CCS_SET = _HTTP_SERVICE_CONFIG_SSL_CCS_SET; 1073 PHTTP_SERVICE_CONFIG_SSL_CCS_SET = ^_HTTP_SERVICE_CONFIG_SSL_CCS_SET; 1074 1075{%ENDREGION} 1076 1077 type 1078 _HTTP_SERVICE_CONFIG_SSL_QUERY = record 1079 QueryDesc : HTTP_SERVICE_CONFIG_QUERY_TYPE; 1080 KeyDesc : HTTP_SERVICE_CONFIG_SSL_KEY; 1081 dwToken : DWORD; 1082 end; 1083 HTTP_SERVICE_CONFIG_SSL_QUERY = _HTTP_SERVICE_CONFIG_SSL_QUERY; 1084 PHTTP_SERVICE_CONFIG_SSL_QUERY = ^_HTTP_SERVICE_CONFIG_SSL_QUERY; 1085 1086{%REGION Windows 8 and newer } 1087 1088 type 1089 _HTTP_SERVICE_CONFIG_SSL_SNI_QUERY = record 1090 QueryDesc : HTTP_SERVICE_CONFIG_QUERY_TYPE; 1091 KeyDesc : HTTP_SERVICE_CONFIG_SSL_SNI_KEY; 1092 dwToken : DWORD; 1093 end; 1094 HTTP_SERVICE_CONFIG_SSL_SNI_QUERY = _HTTP_SERVICE_CONFIG_SSL_SNI_QUERY; 1095 PHTTP_SERVICE_CONFIG_SSL_SNI_QUERY = ^_HTTP_SERVICE_CONFIG_SSL_SNI_QUERY; 1096 1097 _HTTP_SERVICE_CONFIG_SSL_CCS_QUERY = record 1098 QueryDesc : HTTP_SERVICE_CONFIG_QUERY_TYPE; 1099 KeyDesc : HTTP_SERVICE_CONFIG_SSL_CCS_KEY; 1100 dwToken : DWORD; 1101 end; 1102 HTTP_SERVICE_CONFIG_SSL_CCS_QUERY = _HTTP_SERVICE_CONFIG_SSL_CCS_QUERY; 1103 PHTTP_SERVICE_CONFIG_SSL_CCS_QUERY = ^_HTTP_SERVICE_CONFIG_SSL_CCS_QUERY; 1104 1105{%ENDREGION} 1106 1107 type 1108 _HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM = record 1109 AddrLength : USHORT; 1110 pAddress : PSOCKADDR; 1111 end; 1112 HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM = _HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM; 1113 PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM = ^_HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM; 1114 1115 _HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY = record 1116 AddrCount : ULONG; 1117 AddrList : array[0..(ANYSIZE_ARRAY)-1] of SOCKADDR_STORAGE; 1118 end; 1119 HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY = _HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY; 1120 PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY = ^_HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY; 1121 1122 _HTTP_SERVICE_CONFIG_URLACL_KEY = record 1123 pUrlPrefix : PWSTR; 1124 end; 1125 HTTP_SERVICE_CONFIG_URLACL_KEY = _HTTP_SERVICE_CONFIG_URLACL_KEY; 1126 PHTTP_SERVICE_CONFIG_URLACL_KEY = ^_HTTP_SERVICE_CONFIG_URLACL_KEY; 1127 1128 _HTTP_SERVICE_CONFIG_URLACL_PARAM = record 1129 pStringSecurityDescriptor : PWSTR; 1130 end; 1131 HTTP_SERVICE_CONFIG_URLACL_PARAM = _HTTP_SERVICE_CONFIG_URLACL_PARAM; 1132 PHTTP_SERVICE_CONFIG_URLACL_PARAM = ^_HTTP_SERVICE_CONFIG_URLACL_PARAM; 1133 1134 _HTTP_SERVICE_CONFIG_URLACL_SET = record 1135 KeyDesc : HTTP_SERVICE_CONFIG_URLACL_KEY; 1136 ParamDesc : HTTP_SERVICE_CONFIG_URLACL_PARAM; 1137 end; 1138 HTTP_SERVICE_CONFIG_URLACL_SET = _HTTP_SERVICE_CONFIG_URLACL_SET; 1139 PHTTP_SERVICE_CONFIG_URLACL_SET = ^_HTTP_SERVICE_CONFIG_URLACL_SET; 1140 1141 _HTTP_SERVICE_CONFIG_URLACL_QUERY = record 1142 QueryDesc : HTTP_SERVICE_CONFIG_QUERY_TYPE; 1143 KeyDesc : HTTP_SERVICE_CONFIG_URLACL_KEY; 1144 dwToken : DWORD; 1145 end; 1146 HTTP_SERVICE_CONFIG_URLACL_QUERY = _HTTP_SERVICE_CONFIG_URLACL_QUERY; 1147 PHTTP_SERVICE_CONFIG_URLACL_QUERY = ^_HTTP_SERVICE_CONFIG_URLACL_QUERY; 1148 1149 _HTTP_SERVICE_CONFIG_CACHE_KEY = (MaxCacheResponseSize := 0,CacheRangeChunkSize 1150 ); 1151 HTTP_SERVICE_CONFIG_CACHE_KEY = _HTTP_SERVICE_CONFIG_CACHE_KEY; 1152 PHTTP_SERVICE_CONFIG_CACHE_KEY = ^_HTTP_SERVICE_CONFIG_CACHE_KEY; 1153 1154 HTTP_SERVICE_CONFIG_CACHE_PARAM = ULONG; 1155 PHTTP_SERVICE_CONFIG_CACHE_PARAM = ^HTTP_SERVICE_CONFIG_CACHE_PARAM; 1156 1157 HTTP_SERVICE_CONFIG_CACHE_SET = record 1158 KeyDesc : HTTP_SERVICE_CONFIG_CACHE_KEY; 1159 ParamDesc : HTTP_SERVICE_CONFIG_CACHE_PARAM; 1160 end; 1161 PHTTP_SERVICE_CONFIG_CACHE_SET = ^HTTP_SERVICE_CONFIG_CACHE_SET; 1162 1163{$ifdef InLazIDE} 1164{$macro on} 1165{$define winapi:=stdcall} 1166{$endif} 1167 1168function HttpInitialize(Version: HTTPAPI_VERSION; Flags: ULONG; pReserved: PVOID): ULONG; WinApi; external External_library name 'HttpInitialize'; 1169function HttpTerminate(Flags: ULONG; pReserved: PVOID): ULONG; WinApi; external External_library name 'HttpTerminate'; 1170function HttpCreateHttpHandle(RequestQueueHandle: PHANDLE; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateHttpHandle'; 1171function HttpCreateHttpHandle(out RequestQueueHandle: HANDLE; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateHttpHandle'; 1172 1173{%REGION Windows Vista and newer } 1174 1175function HttpCreateRequestQueue(Version: HTTPAPI_VERSION; Name: PCWSTR; SecurityAttributes: PSECURITYATTRIBUTES; Flags: ULONG; RequestQueueHandle: PHANDLE): ULONG; WinApi; external External_library name 'HttpCreateRequestQueue'; 1176function HttpCreateRequestQueue(Version: HTTPAPI_VERSION; Name: PCWSTR; SecurityAttributes: PSECURITYATTRIBUTES; Flags: ULONG; out RequestQueueHandle: HANDLE): ULONG; WinApi; external External_library name 'HttpCreateRequestQueue'; 1177function HttpCloseRequestQueue(RequestQueueHandle: HANDLE): ULONG; WinApi; external External_library name 'HttpCloseRequestQueue'; 1178function HttpSetRequestQueueProperty(RequestQueueHandle: HANDLE; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG; Reserved1: ULONG; Reserved2: PVOID): ULONG; WinApi; external External_library name 'HttpSetRequestQueueProperty'; 1179function HttpQueryRequestQueueProperty(RequestQueueProperty: HANDLE; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG; Reserved1: ULONG; ReturnLength: PULONG; Reserved2: PVOID): ULONG; WinApi; external External_library name 'HttpQueryRequestQueueProperty'; 1180function HttpShutdownRequestQueue(RequestQueueHandle: HANDLE): ULONG; WinApi; external External_library name 'HttpShutdownRequestQueue'; 1181 1182{%ENDREGION} 1183 1184function HttpReceiveClientCertificate(RequestQueueHandle: HANDLE; ConnectionId: HTTP_CONNECTION_ID; Flags: ULONG; SslClientCertInfo: PHTTP_SSL_CLIENT_CERT_INFO; SslClientCertInfoSize: ULONG; BytesReceived: PULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpReceiveClientCertificate'; 1185 1186{%REGION Windows Vista and newer } 1187 1188function HttpCreateServerSession(Version: HTTPAPI_VERSION; ServerSessionId: PHTTP_SERVER_SESSION_ID; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateServerSession'; 1189function HttpCreateServerSession(Version: HTTPAPI_VERSION; out ServerSessionId: HTTP_SERVER_SESSION_ID; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateServerSession'; 1190function HttpCloseServerSession(ServerSessionId: HTTP_SERVER_SESSION_ID): ULONG; WinApi; external External_library name 'HttpCloseServerSession'; 1191function HttpQueryServerSessionProperty(ServerSessionId: HTTP_SERVER_SESSION_ID; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG; ReturnLength: PULONG): ULONG; WinApi; external External_library name 'HttpQueryServerSessionProperty'; 1192function HttpSetServerSessionProperty(ServerSessionId: HTTP_SERVER_SESSION_ID; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG): ULONG; WinApi; external External_library name 'HttpSetServerSessionProperty'; 1193 1194{%ENDREGION} 1195 1196function HttpAddUrl(RequestQueueHandle: HANDLE; FullyQualifiedUrl: PCWSTR; Reserved: PVOID): ULONG; WinApi; external External_library name 'HttpAddUrl'; 1197function HttpRemoveUrl(RequestQueueHandle: HANDLE; FullyQualifiedUrl: PCWSTR): ULONG; WinApi; external External_library name 'HttpRemoveUrl'; 1198 1199{%REGION Windows Vista and newer } 1200 1201function HttpCreateUrlGroup(ServerSessionId: HTTP_SERVER_SESSION_ID; pUrlGroupId: PHTTP_URL_GROUP_ID; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateUrlGroup'; 1202function HttpCreateUrlGroup(ServerSessionId: HTTP_SERVER_SESSION_ID; out pUrlGroupId: HTTP_URL_GROUP_ID; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpCreateUrlGroup'; 1203function HttpCloseUrlGroup(UrlGroupId: HTTP_URL_GROUP_ID): ULONG; WinApi; external External_library name 'HttpCloseUrlGroup'; 1204function HttpAddUrlToUrlGroup(UrlGroupId: HTTP_URL_GROUP_ID; pFullyQualifiedUrl: PCWSTR; UrlContext: HTTP_URL_CONTEXT; Reserved: ULONG): ULONG; WinApi; external External_library name 'HttpAddUrlToUrlGroup'; 1205function HttpRemoveUrlFromUrlGroup(UrlGroupId: HTTP_URL_GROUP_ID; pFullyQualifiedUrl: PCWSTR; Flags: ULONG): ULONG; WinApi; external External_library name 'HttpRemoveUrlFromUrlGroup'; 1206function HttpSetUrlGroupProperty(UrlGroupId: HTTP_URL_GROUP_ID; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG): ULONG; WinApi; external External_library name 'HttpSetUrlGroupProperty'; 1207function HttpQueryUrlGroupProperty(UrlGroupId: HTTP_URL_GROUP_ID; _Property: HTTP_SERVER_PROPERTY; PropertyInformation: PVOID; PropertyInformationLength: ULONG; ReturnLength: PULONG): ULONG; WinApi; external External_library name 'HttpQueryUrlGroupProperty'; 1208 1209{%ENDREGION} 1210 1211{%REGION Windows 8 and newer } 1212 1213function HttpPrepareUrl(Reserved: PVOID; Flags: ULONG; Url: PCWSTR; out PreparedUrl: PWSTR): ULONG; WinApi; external External_library name 'HttpPrepareUrl'; 1214 1215{%ENDREGION} 1216 1217function HttpReceiveHttpRequest(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; RequestBuffer: PHTTP_REQUEST; RequestBufferLength: ULONG; BytesReturned: PULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpReceiveHttpRequest'; 1218function HttpReceiveRequestEntityBody(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; EntityBuffer: PVOID; EntityBufferLength: ULONG; BytesReturned: PULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpReceiveRequestEntityBody'; 1219 1220{%REGION Windows Vista and newer } 1221 1222function HttpSendHttpResponse(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; HttpResponse: PHTTP_RESPONSE; CachePolicy: PHTTP_CACHE_POLICY; BytesSent: PULONG; Reserved1: PVOID; Reserved2: ULONG; Overlapped: LPOVERLAPPED; LogData: PHTTP_LOG_DATA): ULONG; WinApi; external External_library name 'HttpSendHttpResponse'; 1223 1224{%ENDREGION} 1225 1226{%REGION Older than Windows Vista } 1227 1228//function HttpSendHttpResponse(ReqQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; pHttpResponse: PHTTP_RESPONSE; pReserved1: PVOID; pBytesSent: PULONG; pReserved2: PVOID; Reserved3: ULONG; Overlapped: LPOVERLAPPED; pReserved4: PVOID): ULONG; WinApi; external External_library name 'HttpSendHttpResponse'; 1229 1230{%ENDREGION} 1231 1232{%REGION Windows Vista and newer } 1233 1234function HttpSendResponseEntityBody(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; EntityChunkCount: USHORT; EntityChunks: PHTTP_DATA_CHUNK; BytesSent: PULONG; Reserved1: PVOID; Reserved2: PULONG; Overlapped: LPOVERLAPPED; LogData: PHTTP_LOG_DATA): ULONG; WinApi; external External_library name 'HttpSendResponseEntityBody'; 1235 1236{%ENDREGION} 1237 1238{%REGION Older than Windows Vista } 1239 1240//function HttpSendResponseEntityBody(ReqQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Flags: ULONG; EntityChunkCount: USHORT; pEntityChunks: PHTTP_DATA_CHUNK; pBytesSent: PULONG; pReserved1: PVOID; Reserved2: PULONG; Overlapped: LPOVERLAPPED; pReserved3: PVOID): ULONG; WinApi; external External_library name 'HttpSendResponseEntityBody'; 1241 1242{%ENDREGION} 1243 1244function HttpDeclarePush(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Verb: HTTP_VERB; Path: PCWSTR; Query: PCSTR; Headers: PHTTP_REQUEST_HEADERS): ULONG; WinApi; external External_library name 'HttpDeclarePush'; 1245function HttpWaitForDisconnect(RequestQueueHandle: HANDLE; ConnectionId: HTTP_CONNECTION_ID; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpWaitForDisconnect'; 1246 1247{%REGION Windows Vista and newer } 1248 1249function HttpWaitForDisconnectEx(RequestQueueHandle: HANDLE; ConnectionId: HTTP_CONNECTION_ID; Reserved: ULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpWaitForDisconnectEx'; 1250function HttpCancelHttpRequest(RequestQueueHandle: HANDLE; RequestId: HTTP_REQUEST_ID; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpCancelHttpRequest'; 1251function HttpWaitForDemandStart(RequestQueueHandle: HANDLE; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpWaitForDemandStart'; 1252 1253{%ENDREGION} 1254 1255function HttpFlushResponseCache(RequestQueueHandle: HANDLE; UrlPrefix: PCWSTR; Flags: ULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpFlushResponseCache'; 1256function HttpAddFragmentToCache(RequestQueueHandle: HANDLE; UrlPrefix: PCWSTR; DataChunk: PHTTP_DATA_CHUNK; CachePolicy: PHTTP_CACHE_POLICY; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpAddFragmentToCache'; 1257function HttpReadFragmentFromCache(RequestQueueHandle: HANDLE; UrlPrefix: PCWSTR; ByteRange: PHTTP_BYTE_RANGE; Buffer: PVOID; BufferLength: ULONG; BytesRead: PULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpReadFragmentFromCache'; 1258 1259function HttpSetServiceConfiguration(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; pConfigInformation: PVOID; ConfigInformationLength: ULONG; pOverlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpSetServiceConfiguration'; 1260function HttpDeleteServiceConfiguration(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; pConfigInformation: PVOID; ConfigInformationLength: ULONG; pOverlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpDeleteServiceConfiguration'; 1261function HttpQueryServiceConfiguration(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; pInput: PVOID; InputLength: ULONG; pOutput: PVOID; OutputLength: ULONg; pReturnLength: PULONG; pOverlapped: LPOVERLAPPED): ULONG; WinApi; external External_library name 'HttpQueryServiceConfiguration'; 1262{ this is only available from Windows 10 version 1703 on, so handle that in the 1263 implementation; ideally this would be marked with "delayed" } 1264function HttpUpdateServiceConfiguration(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; ConfigInfo: PVOID; ConfigInfoLength: ULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; 1265 1266implementation 1267 1268 uses 1269 SysUtils; 1270 1271 function Present(var a : _HTTP_PROPERTY_FLAGS) : ULONG; 1272 begin 1273 Present:=(a.flag0 and bm__HTTP_PROPERTY_FLAGS_Present) shr bp__HTTP_PROPERTY_FLAGS_Present; 1274 end; 1275 1276 procedure set_Present(var a : _HTTP_PROPERTY_FLAGS; __Present : ULONG); 1277 begin 1278 a.flag0:=a.flag0 or ((__Present shl bp__HTTP_PROPERTY_FLAGS_Present) and bm__HTTP_PROPERTY_FLAGS_Present); 1279 end; 1280 1281 function HTTP_IS_NULL_ID(pid: HTTP_OPAQUE_ID): Boolean; 1282 begin 1283 HTTP_IS_NULL_ID := pid = HTTP_NULL_ID; 1284 end; 1285 1286 procedure HTTP_SET_NULL_ID(var pid: HTTP_OPAQUE_ID); 1287 begin 1288 pid := HTTP_NULL_ID; 1289 end; 1290 1291 procedure HTTP_SET_VERSION(out version: HTTP_VERSION; major, minor: USHORT); 1292 begin 1293 version.MajorVersion := major; 1294 version.MinorVersion := minor; 1295 end; 1296 1297 function HTTP_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; 1298 begin 1299 HTTP_EQUAL_VERSION := (version.MajorVersion = major) and (version.MinorVersion = minor); 1300 end; 1301 1302 function HTTP_GREATER_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; 1303 begin 1304 HTTP_GREATER_VERSION := (version.MajorVersion > major) or ((version.MajorVersion = major) and (version.MinorVersion > minor)); 1305 end; 1306 1307 function HTTP_LESS_VERSION(constref version: HTTP_VERSION; major, minor: USHORT): Boolean; 1308 begin 1309 HTTP_LESS_VERSION := (version.MajorVersion < major) or ((version.MajorVersion = major) and (version.MinorVersion < minor)); 1310 end; 1311 1312 function HTTP_NOT_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor : USHORT) : Boolean; 1313 begin 1314 HTTP_NOT_EQUAL_VERSION := not (HTTP_EQUAL_VERSION(version, major, minor)); 1315 end; 1316 1317 function HTTP_GREATER_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor : USHORT) : Boolean; 1318 begin 1319 HTTP_GREATER_EQUAL_VERSION := not (HTTP_LESS_VERSION(version, major, minor)); 1320 end; 1321 1322 function HTTP_LESS_EQUAL_VERSION(constref version: HTTP_VERSION; major, minor : USHORT) : Boolean; 1323 begin 1324 HTTP_LESS_EQUAL_VERSION := not (HTTP_GREATER_VERSION(version, major, minor)); 1325 end; 1326 1327 function HTTPAPI_EQUAL_VERSION(constref version: HTTPAPI_VERSION; major, minor : USHORT) : Boolean; 1328 begin 1329 HTTPAPI_EQUAL_VERSION := (version.HttpApiMajorVersion = major) and (version.HttpApiMinorVersion = minor); 1330 end; 1331 1332 function HTTPAPI_GREATER_VERSION(constref version: HTTPAPI_VERSION; major, minor: USHORT): Boolean; 1333 begin 1334 HTTPAPI_GREATER_VERSION := (version.HttpApiMajorVersion > major) or ((version.HttpApiMajorVersion = major) and (version.HttpApiMinorVersion > minor)); 1335 end; 1336 1337 function HTTPAPI_LESS_VERSION(constref version: HTTPAPI_VERSION; major, minor: USHORT): Boolean; 1338 begin 1339 HTTPAPI_LESS_VERSION := (version.HttpApiMajorVersion < major) or ((version.HttpApiMajorVersion = major) and (version.HttpApiMinorVersion < minor)); 1340 end; 1341 1342 function HTTPAPI_VERSION_GREATER_OR_EQUAL(constref version: HTTPAPI_VERSION; major, minor : USHORT) : Boolean; 1343 begin 1344 HTTPAPI_VERSION_GREATER_OR_EQUAL := not (HTTPAPI_LESS_VERSION(version,major,minor)); 1345 end; 1346 1347 type 1348 TUpdateServiceConfigurationFunc = function(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; ConfigInfo: PVOID; ConfigInfoLength: ULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; 1349 1350 var 1351 gLibCS: CRITICAL_SECTION; 1352 gLibHandle: THandle = NilHandle; 1353 gUpdateServiceConfigurationChecked: Boolean = False; 1354 gUpdateServiceConfigurationFunc: TUpdateServiceConfigurationFunc = Nil; 1355 1356 function HttpUpdateServiceConfiguration(ServiceHandle: HANDLE; ConfigId: HTTP_SERVICE_CONFIG_ID; ConfigInfo: PVOID; ConfigInfoLength: ULONG; Overlapped: LPOVERLAPPED): ULONG; WinApi; 1357 begin 1358 if not gUpdateServiceConfigurationChecked then begin 1359 EnterCriticalSection(gLibCS); 1360 try 1361 if not gUpdateServiceConfigurationChecked then begin 1362 gLibHandle := LoadLibrary(External_library); 1363 if gLibHandle <> NilHandle then 1364 gUpdateServiceConfigurationFunc := TUpdateServiceConfigurationFunc(GetProcAddress(gLibHandle, 'HttpUpdateServiceConfiguration')) 1365 else begin 1366 FreeLibrary(gLibHandle); 1367 gLibHandle := NilHandle; 1368 end; 1369 gUpdateServiceConfigurationChecked := True; 1370 end; 1371 finally 1372 LeaveCriticalSection(gLibCS); 1373 end; 1374 end; 1375 if not Assigned(gUpdateServiceConfigurationFunc) then 1376 raise EOSError.Create(SysErrorMessage(ERROR_PROC_NOT_FOUND)); 1377 Result := gUpdateServiceConfigurationFunc(ServiceHandle, ConfigId, ConfigInfo, ConfigInfoLength, Overlapped); 1378 end; 1379 1380initialization 1381 InitializeCriticalSection(gLibCS); 1382finalization 1383 DoneCriticalSection(gLibCS); 1384 if gLibHandle <> NilHandle then 1385 FreeLibrary(gLibHandle); 1386end. 1387