httpapi.pp 52 KB

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