123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736 |
- /**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the mingw-w64 runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
- #ifndef __HTTP_H__
- #define __HTTP_H__
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #define SECURITY_WIN32
- #include <sspi.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define HTTP_INITIALIZE_SERVER 0x00000001
- #define HTTP_INITIALIZE_CONFIG 0x00000002
- #define HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY 0x00000001
- #define HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER 0x00000001
- #define HTTP_SEND_RESPONSE_FLAG_DISCONNECT 0x00000001
- #define HTTP_SEND_RESPONSE_FLAG_MORE_DATA 0x00000002
- #define HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA 0x00000004
- #define HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE 0x00000001
- typedef ULONGLONG HTTP_OPAQUE_ID,*PHTTP_OPAQUE_ID;
- typedef HTTP_OPAQUE_ID HTTP_REQUEST_ID,*PHTTP_REQUEST_ID;
- typedef HTTP_OPAQUE_ID HTTP_CONNECTION_ID,*PHTTP_CONNECTION_ID;
- typedef HTTP_OPAQUE_ID HTTP_RAW_CONNECTION_ID,*PHTTP_RAW_CONNECTION_ID;
- typedef HTTP_OPAQUE_ID HTTP_URL_GROUP_ID, *PHTTP_URL_GROUP_ID;
- typedef HTTP_OPAQUE_ID HTTP_SERVER_SESSION_ID, *PHTTP_SERVER_SESSION_ID;
- #define HTTP_NULL_ID (0ull)
- #define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID==*(pid))
- #define HTTP_SET_NULL_ID(pid) (*(pid) = HTTP_NULL_ID)
- #define HTTP_BYTE_RANGE_TO_EOF ((ULONGLONG)-1)
- typedef struct _HTTP_BYTE_RANGE {
- ULARGE_INTEGER StartingOffset;
- ULARGE_INTEGER Length;
- } HTTP_BYTE_RANGE,*PHTTP_BYTE_RANGE;
- typedef struct _HTTP_VERSION {
- USHORT MajorVersion;
- USHORT MinorVersion;
- } HTTP_VERSION,*PHTTP_VERSION;
- #define HTTP_VERSION_UNKNOWN { 0,0 }
- #define HTTP_VERSION_0_9 { 0,9 }
- #define HTTP_VERSION_1_0 { 1,0 }
- #define HTTP_VERSION_1_1 { 1,1 }
- #define HTTP_SET_VERSION(version,major,minor) do { (version).MajorVersion = (major); (version).MinorVersion = (minor); } while (0,0)
- #define HTTP_EQUAL_VERSION(version,major,minor) ((version).MajorVersion==(major) && (version).MinorVersion==(minor))
- #define HTTP_GREATER_VERSION(version,major,minor) ((version).MajorVersion > (major) || ((version).MajorVersion==(major) && (version).MinorVersion > (minor)))
- #define HTTP_LESS_VERSION(version,major,minor) ((version).MajorVersion < (major) || ((version).MajorVersion==(major) && (version).MinorVersion < (minor)))
- #define HTTP_NOT_EQUAL_VERSION(version,major,minor) (!HTTP_EQUAL_VERSION(version,major,minor))
- #define HTTP_GREATER_EQUAL_VERSION(version,major,minor) (!HTTP_LESS_VERSION(version,major,minor))
- #define HTTP_LESS_EQUAL_VERSION(version,major,minor) (!HTTP_GREATER_VERSION(version,major,minor))
- typedef enum _HTTP_VERB {
- HttpVerbUnparsed = 0,
- HttpVerbUnknown,HttpVerbInvalid,HttpVerbOPTIONS,HttpVerbGET,HttpVerbHEAD,HttpVerbPOST,HttpVerbPUT,HttpVerbDELETE,
- HttpVerbTRACE,HttpVerbCONNECT,HttpVerbTRACK,HttpVerbMOVE,HttpVerbCOPY,HttpVerbPROPFIND,HttpVerbPROPPATCH,HttpVerbMKCOL,HttpVerbLOCK,
- HttpVerbUNLOCK,HttpVerbSEARCH,HttpVerbMaximum
- } HTTP_VERB,*PHTTP_VERB;
- typedef enum _HTTP_HEADER_ID {
- HttpHeaderCacheControl = 0,HttpHeaderConnection = 1,HttpHeaderDate = 2,HttpHeaderKeepAlive = 3,HttpHeaderPragma = 4,HttpHeaderTrailer = 5,
- HttpHeaderTransferEncoding = 6,HttpHeaderUpgrade = 7,HttpHeaderVia = 8,HttpHeaderWarning = 9,HttpHeaderAllow = 10,HttpHeaderContentLength = 11,
- HttpHeaderContentType = 12,HttpHeaderContentEncoding = 13,HttpHeaderContentLanguage = 14,HttpHeaderContentLocation = 15,HttpHeaderContentMd5 = 16,
- HttpHeaderContentRange = 17,HttpHeaderExpires = 18,HttpHeaderLastModified = 19,HttpHeaderAccept = 20,HttpHeaderAcceptCharset = 21,
- HttpHeaderAcceptEncoding = 22,HttpHeaderAcceptLanguage = 23,HttpHeaderAuthorization = 24,HttpHeaderCookie = 25,HttpHeaderExpect = 26,
- HttpHeaderFrom = 27,HttpHeaderHost = 28,HttpHeaderIfMatch = 29,HttpHeaderIfModifiedSince = 30,HttpHeaderIfNoneMatch = 31,HttpHeaderIfRange = 32,
- HttpHeaderIfUnmodifiedSince = 33,HttpHeaderMaxForwards = 34,HttpHeaderProxyAuthorization = 35,HttpHeaderReferer = 36,HttpHeaderRange = 37,
- HttpHeaderTe = 38,HttpHeaderTranslate = 39,HttpHeaderUserAgent = 40,HttpHeaderRequestMaximum = 41,HttpHeaderAcceptRanges = 20,HttpHeaderAge = 21,
- HttpHeaderEtag = 22,HttpHeaderLocation = 23,HttpHeaderProxyAuthenticate = 24,HttpHeaderRetryAfter = 25,HttpHeaderServer = 26,
- HttpHeaderSetCookie = 27,HttpHeaderVary = 28,HttpHeaderWwwAuthenticate = 29,HttpHeaderResponseMaximum = 30,HttpHeaderMaximum = 41
- } HTTP_HEADER_ID,*PHTTP_HEADER_ID;
- typedef struct _HTTP_KNOWN_HEADER {
- USHORT RawValueLength;
- PCSTR pRawValue;
- } HTTP_KNOWN_HEADER,*PHTTP_KNOWN_HEADER;
- typedef struct _HTTP_UNKNOWN_HEADER {
- USHORT NameLength;
- USHORT RawValueLength;
- PCSTR pName;
- PCSTR pRawValue;
- } HTTP_UNKNOWN_HEADER,*PHTTP_UNKNOWN_HEADER;
- typedef enum _HTTP_DATA_CHUNK_TYPE {
- HttpDataChunkFromMemory = 0,
- HttpDataChunkFromFileHandle,
- HttpDataChunkFromFragmentCache,
- HttpDataChunkFromFragmentCacheEx,
- HttpDataChunkMaximum
- } HTTP_DATA_CHUNK_TYPE,*PHTTP_DATA_CHUNK_TYPE;
- typedef struct _HTTP_DATA_CHUNK {
- HTTP_DATA_CHUNK_TYPE DataChunkType;
- __C89_NAMELESS union {
- struct {
- PVOID pBuffer;
- ULONG BufferLength;
- } FromMemory;
- struct {
- HTTP_BYTE_RANGE ByteRange;
- HANDLE FileHandle;
- } FromFileHandle;
- struct {
- USHORT FragmentNameLength;
- PCWSTR pFragmentName;
- } FromFragmentCache;
- };
- } HTTP_DATA_CHUNK,*PHTTP_DATA_CHUNK;
- typedef struct _HTTP_REQUEST_HEADERS {
- USHORT UnknownHeaderCount;
- PHTTP_UNKNOWN_HEADER pUnknownHeaders;
- USHORT TrailerCount;
- PHTTP_UNKNOWN_HEADER pTrailers;
- HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderRequestMaximum];
- } HTTP_REQUEST_HEADERS,*PHTTP_REQUEST_HEADERS;
- typedef struct _HTTP_RESPONSE_HEADERS {
- USHORT UnknownHeaderCount;
- PHTTP_UNKNOWN_HEADER pUnknownHeaders;
- USHORT TrailerCount;
- PHTTP_UNKNOWN_HEADER pTrailers;
- HTTP_KNOWN_HEADER KnownHeaders[HttpHeaderResponseMaximum];
- } HTTP_RESPONSE_HEADERS,*PHTTP_RESPONSE_HEADERS;
- typedef struct _HTTP_TRANSPORT_ADDRESS {
- PSOCKADDR pRemoteAddress;
- PSOCKADDR pLocalAddress;
- } HTTP_TRANSPORT_ADDRESS,*PHTTP_TRANSPORT_ADDRESS;
- typedef struct _HTTP_COOKED_URL {
- USHORT FullUrlLength;
- USHORT HostLength;
- USHORT AbsPathLength;
- USHORT QueryStringLength;
- PCWSTR pFullUrl;
- PCWSTR pHost;
- PCWSTR pAbsPath;
- PCWSTR pQueryString;
- } HTTP_COOKED_URL,*PHTTP_COOKED_URL;
- typedef ULONGLONG HTTP_URL_CONTEXT;
- typedef struct _HTTP_SSL_CLIENT_CERT_INFO {
- ULONG CertFlags;
- ULONG CertEncodedSize;
- PUCHAR pCertEncoded;
- HANDLE Token;
- BOOLEAN CertDeniedByMapper;
- } HTTP_SSL_CLIENT_CERT_INFO,*PHTTP_SSL_CLIENT_CERT_INFO;
- typedef struct _HTTP_SSL_INFO {
- USHORT ServerCertKeySize;
- USHORT ConnectionKeySize;
- ULONG ServerCertIssuerSize;
- ULONG ServerCertSubjectSize;
- PCSTR pServerCertIssuer;
- PCSTR pServerCertSubject;
- PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo;
- ULONG SslClientCertNegotiated;
- } HTTP_SSL_INFO,*PHTTP_SSL_INFO;
- typedef struct _HTTP_REQUEST_V1 {
- ULONG Flags;
- HTTP_CONNECTION_ID ConnectionId;
- HTTP_REQUEST_ID RequestId;
- HTTP_URL_CONTEXT UrlContext;
- HTTP_VERSION Version;
- HTTP_VERB Verb;
- USHORT UnknownVerbLength;
- USHORT RawUrlLength;
- PCSTR pUnknownVerb;
- PCSTR pRawUrl;
- HTTP_COOKED_URL CookedUrl;
- HTTP_TRANSPORT_ADDRESS Address;
- HTTP_REQUEST_HEADERS Headers;
- ULONGLONG BytesReceived;
- USHORT EntityChunkCount;
- PHTTP_DATA_CHUNK pEntityChunks;
- HTTP_RAW_CONNECTION_ID RawConnectionId;
- PHTTP_SSL_INFO pSslInfo;
- } HTTP_REQUEST_V1, *PHTTP_REQUEST_V1;
- typedef enum _HTTP_REQUEST_INFO_TYPE {
- HttpRequestInfoTypeAuth = 0
- } HTTP_REQUEST_INFO_TYPE, *PHTTP_REQUEST_INFO_TYPE;
- typedef struct _HTTP_REQUEST_INFO {
- HTTP_REQUEST_INFO_TYPE InfoType;
- ULONG InfoLength;
- PVOID pInfo;
- } HTTP_REQUEST_INFO, *PHTTP_REQUEST_INFO;
- #ifdef __cplusplus
- typedef struct _HTTP_REQUEST_V2 : HTTP_REQUEST_V1 {
- USHORT RequestInfoCount;
- PHTTP_REQUEST_INFO pRequestInfo;
- } HTTP_REQUEST_V2, *PHTTP_REQUEST_V2;
- #else
- typedef struct _HTTP_REQUEST_V2 {
- /* struct HTTP_REQUEST_V1; */
- __C89_NAMELESS struct {
- ULONG Flags;
- HTTP_CONNECTION_ID ConnectionId;
- HTTP_REQUEST_ID RequestId;
- HTTP_URL_CONTEXT UrlContext;
- HTTP_VERSION Version;
- HTTP_VERB Verb;
- USHORT UnknownVerbLength;
- USHORT RawUrlLength;
- PCSTR pUnknownVerb;
- PCSTR pRawUrl;
- HTTP_COOKED_URL CookedUrl;
- HTTP_TRANSPORT_ADDRESS Address;
- HTTP_REQUEST_HEADERS Headers;
- ULONGLONG BytesReceived;
- USHORT EntityChunkCount;
- PHTTP_DATA_CHUNK pEntityChunks;
- HTTP_RAW_CONNECTION_ID RawConnectionId;
- PHTTP_SSL_INFO pSslInfo;
- };
- USHORT RequestInfoCount;
- PHTTP_REQUEST_INFO pRequestInfo;
- } HTTP_REQUEST_V2, *PHTTP_REQUEST_V2;
- #endif
- #if (_WIN32_WINNT >= 0x0600)
- typedef HTTP_REQUEST_V2 HTTP_REQUEST, *PHTTP_REQUEST;
- #else
- typedef HTTP_REQUEST_V1 HTTP_REQUEST, *PHTTP_REQUEST;
- #endif
- #define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001
- typedef struct _HTTP_RESPONSE_V1 {
- ULONG Flags;
- HTTP_VERSION Version;
- USHORT StatusCode;
- USHORT ReasonLength;
- PCSTR pReason;
- HTTP_RESPONSE_HEADERS Headers;
- USHORT EntityChunkCount;
- PHTTP_DATA_CHUNK pEntityChunks;
- } HTTP_RESPONSE_V1,*PHTTP_RESPONSE_V1;
- typedef enum _HTTP_RESPONSE_INFO_TYPE {
- HttpResponseInfoTypeMultipleKnownHeaders = 0,
- HttpResponseInfoTypeAuthenticationProperty,
- HttpResponseInfoTypeQosProperty,
- HttpResponseInfoTypeChannelBind
- } HTTP_RESPONSE_INFO_TYPE, *PHTTP_RESPONSE_INFO_TYPE;
- typedef struct _HTTP_RESPONSE_INFO {
- HTTP_RESPONSE_INFO_TYPE Type;
- ULONG Length;
- PVOID pInfo;
- } HTTP_RESPONSE_INFO, *PHTTP_RESPONSE_INFO;
- #ifdef __cplusplus
- typedef struct _HTTP_RESPONSE_V2 : HTTP_RESPONSE_V1 {
- USHORT ResponseInfoCount;
- PHTTP_RESPONSE_INFO pResponseInfo;
- } HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2;
- #else
- typedef struct _HTTP_RESPONSE_V2 {
- /* struct HTTP_RESPONSE_V1; */
- __C89_NAMELESS struct {
- ULONG Flags;
- HTTP_VERSION Version;
- USHORT StatusCode;
- USHORT ReasonLength;
- PCSTR pReason;
- HTTP_RESPONSE_HEADERS Headers;
- USHORT EntityChunkCount;
- PHTTP_DATA_CHUNK pEntityChunks;
- };
- USHORT ResponseInfoCount;
- PHTTP_RESPONSE_INFO pResponseInfo;
- } HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2;
- #endif
- #if (_WIN32_WINNT >= 0x0600)
- typedef HTTP_RESPONSE_V2 HTTP_RESPONSE, *PHTTP_RESPONSE;
- #else
- typedef HTTP_RESPONSE_V1 HTTP_RESPONSE, *PHTTP_RESPONSE;
- #endif /* _WIN32_WINNT >= 0x0600 */
- typedef enum _HTTP_CACHE_POLICY_TYPE {
- HttpCachePolicyNocache = 0,
- HttpCachePolicyUserInvalidates,
- HttpCachePolicyTimeToLive,
- HttpCachePolicyMaximum
- } HTTP_CACHE_POLICY_TYPE,*PHTTP_CACHE_POLICY_TYPE;
- typedef struct _HTTP_CACHE_POLICY {
- HTTP_CACHE_POLICY_TYPE Policy;
- ULONG SecondsToLive;
- } HTTP_CACHE_POLICY, *PHTTP_CACHE_POLICY;
- typedef enum _HTTP_SERVICE_CONFIG_ID {
- HttpServiceConfigIPListenList = 0,
- HttpServiceConfigSSLCertInfo,
- HttpServiceConfigUrlAclInfo,
- HttpServiceConfigMax
- } HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID;
- typedef enum _HTTP_SERVICE_CONFIG_QUERY_TYPE {
- HttpServiceConfigQueryExact = 0,
- HttpServiceConfigQueryNext,
- HttpServiceConfigQueryMax
- } HTTP_SERVICE_CONFIG_QUERY_TYPE,*PHTTP_SERVICE_CONFIG_QUERY_TYPE;
- typedef struct _HTTP_SERVICE_CONFIG_SSL_KEY {
- PSOCKADDR pIpPort;
- } HTTP_SERVICE_CONFIG_SSL_KEY,*PHTTP_SERVICE_CONFIG_SSL_KEY;
- typedef struct _HTTP_SERVICE_CONFIG_SSL_PARAM {
- ULONG SslHashLength;
- PVOID pSslHash;
- GUID AppId;
- PWSTR pSslCertStoreName;
- DWORD DefaultCertCheckMode;
- DWORD DefaultRevocationFreshnessTime;
- DWORD DefaultRevocationUrlRetrievalTimeout;
- PWSTR pDefaultSslCtlIdentifier;
- PWSTR pDefaultSslCtlStoreName;
- DWORD DefaultFlags;
- } HTTP_SERVICE_CONFIG_SSL_PARAM,*PHTTP_SERVICE_CONFIG_SSL_PARAM;
- #define HTTP_SERVICE_CONFIG_SSL_FLAG_USE_DS_MAPPER 0x00000001
- #define HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT 0x00000002
- #define HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER 0x00000004
- typedef struct _HTTP_SERVICE_CONFIG_SSL_SET {
- HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;
- HTTP_SERVICE_CONFIG_SSL_PARAM ParamDesc;
- } HTTP_SERVICE_CONFIG_SSL_SET,*PHTTP_SERVICE_CONFIG_SSL_SET;
- typedef struct _HTTP_SERVICE_CONFIG_SSL_QUERY {
- HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;
- HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;
- DWORD dwToken;
- } HTTP_SERVICE_CONFIG_SSL_QUERY,*PHTTP_SERVICE_CONFIG_SSL_QUERY;
- typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM {
- USHORT AddrLength;
- PSOCKADDR pAddress;
- } HTTP_SERVICE_CONFIG_IP_LISTEN_PARAM,*PHTTP_SERVICE_CONFIG_IP_LISTEN_PARAM;
- typedef struct _HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY {
- ULONG AddrCount;
- SOCKADDR_STORAGE AddrList[ANYSIZE_ARRAY];
- } HTTP_SERVICE_CONFIG_IP_LISTEN_QUERY,*PHTTP_SERVICE_CONFIG_IP_LISTEN_QUERY;
- typedef struct _HTTP_SERVICE_CONFIG_URLACL_KEY {
- PWSTR pUrlPrefix;
- } HTTP_SERVICE_CONFIG_URLACL_KEY,*PHTTP_SERVICE_CONFIG_URLACL_KEY;
- typedef struct _HTTP_SERVICE_CONFIG_URLACL_PARAM {
- PWSTR pStringSecurityDescriptor;
- } HTTP_SERVICE_CONFIG_URLACL_PARAM,*PHTTP_SERVICE_CONFIG_URLACL_PARAM;
- typedef struct _HTTP_SERVICE_CONFIG_URLACL_SET {
- HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;
- HTTP_SERVICE_CONFIG_URLACL_PARAM ParamDesc;
- } HTTP_SERVICE_CONFIG_URLACL_SET,*PHTTP_SERVICE_CONFIG_URLACL_SET;
- typedef struct _HTTP_SERVICE_CONFIG_URLACL_QUERY {
- HTTP_SERVICE_CONFIG_QUERY_TYPE QueryDesc;
- HTTP_SERVICE_CONFIG_URLACL_KEY KeyDesc;
- DWORD dwToken;
- } HTTP_SERVICE_CONFIG_URLACL_QUERY,*PHTTP_SERVICE_CONFIG_URLACL_QUERY;
- #if !defined(HTTPAPI_LINKAGE)
- #ifdef HTTPAPI_LINKAGE_EXPORT
- #define DECLSPEC_EXPORT __declspec(dllexport)
- #define HTTPAPI_LINKAGE DECLSPEC_EXPORT
- #else
- #define HTTPAPI_LINKAGE DECLSPEC_IMPORT
- #endif
- #endif
- typedef struct _HTTPAPI_VERSION {
- USHORT HttpApiMajorVersion;
- USHORT HttpApiMinorVersion;
- } HTTPAPI_VERSION,*PHTTPAPI_VERSION;
- #define HTTPAPI_VERSION_1 {1,0}
- HTTPAPI_LINKAGE ULONG WINAPI HttpInitialize(HTTPAPI_VERSION Version,ULONG Flags,PVOID pReserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpTerminate(ULONG Flags,PVOID pReserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCreateHttpHandle(PHANDLE pReqQueueHandle,ULONG Options);
- 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);
- HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PVOID pReserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrl(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix);
- HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveHttpRequest(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PHTTP_REQUEST pRequestBuffer,ULONG RequestBufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveRequestEntityBody(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,ULONG Flags,PVOID pBuffer,ULONG BufferLength,PULONG pBytesReceived,LPOVERLAPPED pOverlapped);
- 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);
- 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);
- HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDisconnect(HANDLE ReqQueueHandle,HTTP_CONNECTION_ID ConnectionId,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpFlushResponseCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,ULONG Flags,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpAddFragmentToCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_DATA_CHUNK pDataChunk,PHTTP_CACHE_POLICY pCachePolicy,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpReadFragmentFromCache(HANDLE ReqQueueHandle,PCWSTR pUrlPrefix,PHTTP_BYTE_RANGE pByteRange,PVOID pBuffer,ULONG BufferLength,PULONG pBytesRead,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpSetServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpDeleteServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pConfigInformation,ULONG ConfigInformationLength,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServiceConfiguration(HANDLE ServiceHandle,HTTP_SERVICE_CONFIG_ID ConfigId,PVOID pInputConfigInformation,ULONG InputConfigInformationLength,PVOID pOutputConfigInformation,ULONG OutputConfigInformationLength,PULONG pReturnLength,LPOVERLAPPED pOverlapped);
- #if (_WIN32_WINNT >= 0x0600)
- #define HTTP_VERSION_2_0 { 2, 0 }
- #define HTTPAPI_VERSION_2 { 2, 0 }
- typedef enum _HTTP_503_RESPONSE_VERBOSITY {
- Http503ResponseVerbosityBasic = 0,
- Http503ResponseVerbosityLimited,
- Http503ResponseVerbosityFull
- } HTTP_503_RESPONSE_VERBOSITY, *PHTTP_503_RESPONSE_VERBOSITY;
- typedef enum _HTTP_ENABLED_STATE {
- HttpEnabledStateActive = 0,
- HttpEnabledStateInactive
- } HTTP_ENABLED_STATE, *PHTTP_ENABLED_STATE;
- typedef enum _HTTP_LOGGING_ROLLOVER_TYPE {
- HttpLoggingRolloverSize = 0,
- HttpLoggingRolloverDaily,
- HttpLoggingRolloverWeekly,
- HttpLoggingRolloverMonthly,
- HttpLoggingRolloverHourly
- } HTTP_LOGGING_ROLLOVER_TYPE, *PHTTP_LOGGING_ROLLOVER_TYPE;
- typedef enum _HTTP_LOGGING_TYPE {
- HttpLoggingTypeW3C = 0,
- HttpLoggingTypeIIS,
- HttpLoggingTypeNCSA,
- HttpLoggingTypeRaw
- } HTTP_LOGGING_TYPE, *PHTTP_LOGGING_TYPE;
- typedef enum _HTTP_QOS_SETTING_TYPE {
- HttpQosSettingTypeBandwidth = 0,
- HttpQosSettingTypeConnectionLimit,
- HttpQosSettingTypeFlowRate
- } HTTP_QOS_SETTING_TYPE, *PHTTP_QOS_SETTING_TYPE;
- typedef enum _HTTP_SERVER_PROPERTY {
- HttpServerAuthenticationProperty = 0,
- HttpServerLoggingProperty,
- HttpServerQosProperty,
- HttpServerTimeoutsProperty,
- HttpServerQueueLengthProperty,
- HttpServerStateProperty,
- HttpServer503VerbosityProperty,
- HttpServerBindingProperty,
- HttpServerExtendedAuthenticationProperty,
- HttpServerListenEndpointProperty,
- HttpServerChannelBindProperty
- } HTTP_SERVER_PROPERTY, *PHTTP_SERVER_PROPERTY;
- typedef enum _HTTP_AUTHENTICATION_HARDENING_LEVELS {
- HttpAuthenticationHardeningLegacy = 0,
- HttpAuthenticationHardeningMedium = 1,
- HttpAuthenticationHardeningStrict = 2
- } HTTP_AUTHENTICATION_HARDENING_LEVELS;
- typedef enum _HTTP_SERVICE_BINDING_TYPE {
- HttpServiceBindingTypeNone = 0,
- HttpServiceBindingTypeW = 1,
- HttpServiceBindingTypeA = 2
- } HTTP_SERVICE_BINDING_TYPE;
- typedef enum _HTTP_LOG_DATA_TYPE {
- HttpLogDataTypeFields = 0
- } HTTP_LOG_DATA_TYPE, *PHTTP_LOG_DATA_TYPE;
- typedef struct _HTTP_LOG_DATA {
- HTTP_LOG_DATA_TYPE Type;
- } HTTP_LOG_DATA, *PHTTP_LOG_DATA;
- typedef enum _HTTP_REQUEST_AUTH_TYPE {
- HttpRequestAuthTypeNone = 0,
- HttpRequestAuthTypeBasic,
- HttpRequestAuthTypeDigest,
- HttpRequestAuthTypeNTLM,
- HttpRequestAuthTypeNegotiate,
- HttpRequestAuthTypeKerberos
- } HTTP_REQUEST_AUTH_TYPE, *PHTTP_REQUEST_AUTH_TYPE;
- typedef enum _HTTP_AUTH_STATUS {
- HttpAuthStatusSuccess = 0,
- HttpAuthStatusNotAuthenticated,
- HttpAuthStatusFailure
- } HTTP_AUTH_STATUS, *PHTTP_AUTH_STATUS;
- typedef enum _HTTP_SERVICE_CONFIG_TIMEOUT_KEY {
- IdleConnectionTimeout = 0,
- HeaderWaitTimeout
- } HTTP_SERVICE_CONFIG_TIMEOUT_KEY, *PHTTP_SERVICE_CONFIG_TIMEOUT_KEY;
- typedef USHORT HTTP_SERVICE_CONFIG_TIMEOUT_PARAM, *PHTTP_SERVICE_CONFIG_TIMEOUT_PARAM;
- typedef struct _HTTP_PROPERTY_FLAGS {
- ULONG Present:1;
- } HTTP_PROPERTY_FLAGS, *PHTTP_PROPERTY_FLAGS;
- typedef struct _HTTP_CONNECTION_LIMIT_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- ULONG MaxConnections;
- } HTTP_CONNECTION_LIMIT_INFO, *PHTTP_CONNECTION_LIMIT_INFO;
- typedef struct _HTTP_STATE_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- HTTP_ENABLED_STATE State;
- } HTTP_STATE_INFO, *PHTTP_STATE_INFO;
- typedef struct _HTTP_QOS_SETTING_INFO {
- HTTP_QOS_SETTING_TYPE QosType;
- PVOID QosSetting;
- } HTTP_QOS_SETTING_INFO, *PHTTP_QOS_SETTING_INFO;
- typedef struct _HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS {
- USHORT DomainNameLength;
- PWSTR DomainName;
- USHORT RealmLength;
- PWSTR Realm;
- } HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS, *PHTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS;
- typedef struct _HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS {
- USHORT RealmLength;
- PWSTR Realm;
- } HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS, *PHTTP_SERVER_AUTHENTICATION_BASIC_PARAMS;
- typedef struct _HTTP_SERVER_AUTHENTICATION_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- ULONG AuthSchemes;
- BOOLEAN ReceiveMutualAuth;
- BOOLEAN ReceiveContextHandle;
- BOOLEAN DisableNTLMCredentialCaching;
- UCHAR ExFlags;
- HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS DigestParams;
- HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS BasicParams;
- } HTTP_SERVER_AUTHENTICATION_INFO, *PHTTP_SERVER_AUTHENTICATION_INFO;
- typedef struct _HTTP_LOGGING_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- ULONG LoggingFlags;
- PCWSTR SoftwareName;
- USHORT SoftwareNameLength;
- USHORT DirectoryNameLength;
- PCWSTR DirectoryName;
- HTTP_LOGGING_TYPE Format;
- ULONG Fields;
- PVOID pExtFields;
- USHORT NumOfExtFields;
- USHORT MaxRecordSize;
- HTTP_LOGGING_ROLLOVER_TYPE RolloverType;
- ULONG RolloverSize;
- PSECURITY_DESCRIPTOR pSecurityDescriptor;
- } HTTP_LOGGING_INFO, *PHTTP_LOGGING_INFO;
- typedef struct _HTTP_TIMEOUT_LIMIT_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- USHORT EntityBody;
- USHORT DrainEntityBody;
- USHORT RequestQueue;
- USHORT IdleConnection;
- USHORT HeaderWait;
- ULONG MinSendRate;
- } HTTP_TIMEOUT_LIMIT_INFO, *PHTTP_TIMEOUT_LIMIT_INFO;
- typedef struct _HTTP_SERVICE_BINDING_BASE {
- HTTP_SERVICE_BINDING_TYPE Type;
- } HTTP_SERVICE_BINDING_BASE, *PHTTP_SERVICE_BINDING_BASE;
- typedef struct _HTTP_CHANNEL_BIND_INFO {
- HTTP_AUTHENTICATION_HARDENING_LEVELS Hardening;
- ULONG Flags;
- PHTTP_SERVICE_BINDING_BASE *ServiceNames;
- ULONG NumberOfServiceNames;
- } HTTP_CHANNEL_BIND_INFO, *PHTTP_CHANNEL_BIND_INFO;
- typedef struct _HTTP_REQUEST_CHANNEL_BIND_STATUS {
- PHTTP_SERVICE_BINDING_BASE ServiceName;
- PUCHAR ChannelToken;
- ULONG ChannelTokenSize;
- ULONG Flags;
- } HTTP_REQUEST_CHANNEL_BIND_STATUS, *PHTTP_REQUEST_CHANNEL_BIND_STATUS;
- typedef struct _HTTP_SERVICE_BINDING_A {
- HTTP_SERVICE_BINDING_BASE Base;
- PCHAR Buffer;
- ULONG BufferSize;
- } HTTP_SERVICE_BINDING_A, *PHTTP_SERVICE_BINDING_A;
- typedef struct _HTTP_SERVICE_BINDING_W {
- HTTP_SERVICE_BINDING_BASE Base;
- PWCHAR Buffer;
- ULONG BufferSize;
- } HTTP_SERVICE_BINDING_W, *PHTTP_SERVICE_BINDING_W;
- /* TODO: Is there the abstract unicode type HTTP_SERVICE_BINDING present, too? */
- typedef struct _HTTP_LOG_FIELDS_DATA {
- HTTP_LOG_DATA Base;
- USHORT UserNameLength;
- USHORT UriStemLength;
- USHORT ClientIpLength;
- USHORT ServerNameLength;
- USHORT ServerIpLength;
- USHORT MethodLength;
- USHORT UriQueryLength;
- USHORT HostLength;
- USHORT UserAgentLength;
- USHORT CookieLength;
- USHORT ReferrerLength;
- PWCHAR UserName;
- PWCHAR UriStem;
- PCHAR ClientIp;
- PCHAR ServerName;
- PCHAR ServiceName;
- PCHAR ServerIp;
- PCHAR Method;
- PCHAR UriQuery;
- PCHAR Host;
- PCHAR UserAgent;
- PCHAR Cookie;
- PCHAR Referrer;
- USHORT ServerPort;
- USHORT ProtocolStatus;
- ULONG Win32Status;
- HTTP_VERB MethodNum;
- USHORT SubStatus;
- } HTTP_LOG_FIELDS_DATA, *PHTTP_LOG_FIELDS_DATA;
- typedef struct _HTTP_REQUEST_AUTH_INFO {
- HTTP_AUTH_STATUS AuthStatus;
- SECURITY_STATUS SecStatus;
- ULONG Flags;
- HTTP_REQUEST_AUTH_TYPE AuthType;
- HANDLE AccessToken;
- ULONG ContextAttributes;
- ULONG PackedContextLength;
- ULONG PackedContextType;
- PVOID PackedContext;
- ULONG MutualAuthDataLength;
- PCHAR pMutualAuthData;
- } HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO;
- typedef struct _HTTP_MULTIPLE_KNOWN_HEADERS {
- HTTP_HEADER_ID HeaderId;
- ULONG Flags;
- USHORT KnownHeaderCount;
- PHTTP_KNOWN_HEADER KnownHeaders;
- } HTTP_MULTIPLE_KNOWN_HEADERS, *PHTTP_MULTIPLE_KNOWN_HEADERS;
- typedef struct _HTTP_SERVICE_CONFIG_TIMEOUT_SET {
- HTTP_SERVICE_CONFIG_TIMEOUT_KEY KeyDesc;
- HTTP_SERVICE_CONFIG_TIMEOUT_PARAM ParamDesc;
- } HTTP_SERVICE_CONFIG_TIMEOUT_SET, *PHTTP_SERVICE_CONFIG_TIMEOUT_SET;
- typedef struct _HTTP_BANDWIDTH_LIMIT_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- ULONG MaxBandwidth;
- } HTTP_BANDWIDTH_LIMIT_INFO, *PHTTP_BANDWIDTH_LIMIT_INFO;
- typedef struct _HTTP_BINDING_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- HANDLE RequestQueueHandle;
- } HTTP_BINDING_INFO, *PHTTP_BINDING_INFO;
- typedef struct _HTTP_LISTEN_ENDPOINT_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- BOOLEAN EnableSharing;
- } HTTP_LISTEN_ENDPOINT_INFO, *PHTTP_LISTEN_ENDPOINT_INFO;
- HTTPAPI_LINKAGE ULONG WINAPI HttpSetRequestQueueProperty(HANDLE Handle,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,ULONG Reserved,PVOID pReserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpQueryRequestQueueProperty(HANDLE Handle,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,ULONG Reserved,PULONG pReturnLength,PVOID pReserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCreateRequestQueue(HTTPAPI_VERSION Version,PCWSTR pName,PSECURITY_ATTRIBUTES pSecurityAttributes,ULONG Flags,PHANDLE pReqQueueHandle);
- HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrlToUrlGroup(HTTP_URL_GROUP_ID UrlGroupId,PCWSTR pFullyQualifiedUrl,HTTP_URL_CONTEXT UrlContext,ULONG Reserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCancelHttpRequest(HANDLE ReqQueueHandle,HTTP_REQUEST_ID RequestId,LPOVERLAPPED pOverlapped);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCloseRequestQueue(HANDLE ReqQueueHandle);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCloseServerSession(HTTP_SERVER_SESSION_ID ServerSessionId);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCloseUrlGroup(HTTP_URL_GROUP_ID UrlGroupId);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCreateServerSession(HTTPAPI_VERSION Version,PHTTP_SERVER_SESSION_ID pServerSessionId,ULONG Reserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpCreateUrlGroup(HTTP_SERVER_SESSION_ID ServerSessionId,PHTTP_URL_GROUP_ID pUrlGroupId,ULONG Reserved);
- HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServerSessionProperty(HTTP_SERVER_SESSION_ID ServerSessionId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,PULONG pReturnLength);
- HTTPAPI_LINKAGE ULONG WINAPI HttpQueryUrlGroupProperty(HTTP_URL_GROUP_ID UrlGroupId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength,PULONG pReturnLength);
- HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrlFromUrlGroup(HTTP_URL_GROUP_ID UrlGroupId,PCWSTR pFullyQualifiedUrl,ULONG Flags);
- HTTPAPI_LINKAGE ULONG WINAPI HttpSetServerSessionProperty(HTTP_SERVER_SESSION_ID ServerSessionId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength);
- HTTPAPI_LINKAGE ULONG WINAPI HttpSetUrlGroupProperty(HTTP_URL_GROUP_ID UrlGroupId,HTTP_SERVER_PROPERTY Property,PVOID pPropertyInformation,ULONG PropertyInformationLength);
- HTTPAPI_LINKAGE ULONG WINAPI HttpShutdownRequestQueue(HANDLE ReqQueueHandle);
- HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDemandStart(HANDLE ReqQueueHandle,LPOVERLAPPED pOverlapped);
- #if (_WIN32_WINNT >= 0x0601)
- typedef ULONG HTTP_SERVICE_CONFIG_CACHE_PARAM;
- typedef enum _HTTP_SERVICE_CONFIG_CACHE_KEY {
- MaxCacheResponseSize = 0,
- CacheRangeChunkSize
- } HTTP_SERVICE_CONFIG_CACHE_KEY;
- typedef struct _HTTP_FLOWRATE_INFO {
- HTTP_PROPERTY_FLAGS Flags;
- ULONG MaxBandwidth;
- ULONG MaxPeakBandwidth;
- ULONG BurstSize;
- } HTTP_FLOWRATE_INFO, *PHTTP_FLOWRATE_INFO;
- typedef struct _HTTP_SERVICE_CONFIG_CACHE_SET {
- HTTP_SERVICE_CONFIG_CACHE_KEY KeyDesc;
- HTTP_SERVICE_CONFIG_CACHE_PARAM ParamDesc;
- } HTTP_SERVICE_CONFIG_CACHE_SET, *PHTTP_SERVICE_CONFIG_CACHE_SET;
- #endif /*(_WIN32_WINNT >= 0x0601)*/
- #endif /*(_WIN32_WINNT >= 0x0600)*/
- #ifdef __cplusplus
- }
- #endif
- #endif /* __HTTP_H__ */
|