http.h 29 KB

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