Headers diff for httpapi.dll between 5.2.3790.3959-Windows 5.0 and 6.0.6001.18000-Windows 6.0 versions



 http.h (5.2.3790.3959-Windows 5.0)   http.h (6.0.6001.18000-Windows 6.0) 
skipping to change at line 21 skipping to change at line 21
This header corresponds to the HTTP API specification This header corresponds to the HTTP API specification
Revision History: Revision History:
--*/ --*/
#ifndef __HTTP_H__ #ifndef __HTTP_H__
#define __HTTP_H__ #define __HTTP_H__
#pragma once
#if _WIN32_WINNT >= 0x0501
//
// HTTPAPI is available on
//
// a) WinXP SP2 and higher
// b) Windows 2003 and higher
// c) Longhorn and higher.
//
#include <winsock2.h> #include <winsock2.h>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif // __cplusplus #endif // __cplusplus
// //
// Flags for HttpInitialize() and HttpTerminate() // Flags for HttpInitialize() and HttpTerminate().
// //
// //
// HTTP_INITIALIZE_SERVER - Initializes the HTTP API layer and driver for // HTTP_INITIALIZE_SERVER - Initializes the HTTP API layer and driver for
// server applications. // applications using server APIs.
// //
// HTTP_INITIALIZE_CONFIG - Initializes the HTTP API layer and driver for // HTTP_INITIALIZE_CONFIG - Initializes the HTTP API layer and driver for
// applications that will modify the HTTP // applications using HTTP configuration APIs.
// configuration. //
// //
// Notes - // Notes -
// //
// 1. These flags can be used in combination. // 1. These flags can be used in combination.
// //
// 2. HttpTerminate() must be called for each call to HttpInitialize() made // 2. HttpTerminate() must be called for each call to HttpInitialize() made
// with each flag set when invoking HttpInitialize. For example, one // with each flag set when invoking HttpInitialize. For example, one
// could make two calls to HttpInitialize() setting HTTP_INITIALIZE_SERVER // could make two calls to HttpInitialize() setting HTTP_INITIALIZE_SERVER
// the first time and HTTP_INITIALIZE_CONFIG the second time. One call // the first time and HTTP_INITIALIZE_CONFIG the second time. One call
// to HttpTerminate() with both flags set suffices to clean up both // to HttpTerminate() with both flags set suffices to clean up both
// calls to HttpInitialize(). // calls to HttpInitialize().
// //
#define HTTP_INITIALIZE_SERVER 0x00000001 #define HTTP_INITIALIZE_SERVER 0x00000001
#define HTTP_INITIALIZE_CONFIG 0x00000002 #define HTTP_INITIALIZE_CONFIG 0x00000002
#if _WIN32_WINNT >= 0x0600
//
// Following section defines the properties supported by the
// server side HTTP API.
//
typedef enum _HTTP_SERVER_PROPERTY
{
//
// Used for enabling server side authentication.
//
HttpServerAuthenticationProperty,
//
// Used for enabling logging.
//
HttpServerLoggingProperty,
//
// Used for setting QoS properties.
//
HttpServerQosProperty,
//
// Used for configuring timeouts.
//
HttpServerTimeoutsProperty,
//
// Used for limiting request queue lengths.
//
HttpServerQueueLengthProperty,
//
// Used for manipulating the state.
//
HttpServerStateProperty,
//
// Used for modifying the verbosity level of 503 type responses
// generated by server side API.
//
HttpServer503VerbosityProperty,
//
// Used for manipulating Url Group to Request Queue association.
//
HttpServerBindingProperty
} HTTP_SERVER_PROPERTY, *PHTTP_SERVER_PROPERTY;
#define HTTP_MAX_SERVER_QUEUE_LENGTH 0x7FFFFFFF
#define HTTP_MIN_SERVER_QUEUE_LENGTH 1
//
// Generic property flags. Each structure defining a property info typically
// contain an element of this type.
//
typedef struct _HTTP_PROPERTY_FLAGS
{
ULONG Present:1;
} HTTP_PROPERTY_FLAGS, *PHTTP_PROPERTY_FLAGS;
//
// Enabled state.
//
typedef enum _HTTP_ENABLED_STATE
{
HttpEnabledStateActive,
HttpEnabledStateInactive,
} HTTP_ENABLED_STATE, *PHTTP_ENABLED_STATE;
typedef struct _HTTP_STATE_INFO
{
HTTP_PROPERTY_FLAGS Flags;
HTTP_ENABLED_STATE State;
} HTTP_STATE_INFO, *PHTTP_STATE_INFO;
//
// Defines the verbosity level for a request queue which will be used
// when sending "503 - Service Unavailable" type error responses. Note that
// this setting only affects the error responses generated internally
// by HTTPAPI.
//
typedef enum _HTTP_503_RESPONSE_VERBOSITY
{
//
// Instead of sending a 503 response, the connection will be reset.
// This is the default behavior.
//
Http503ResponseVerbosityBasic,
//
// Will send a 503 w/ a generic reason phrase.
//
Http503ResponseVerbosityLimited,
//
// Will send a 503 w/ a detailed reason phrase.
//
Http503ResponseVerbosityFull
} HTTP_503_RESPONSE_VERBOSITY, *PHTTP_503_RESPONSE_VERBOSITY;
//
// Network QoS related.
//
typedef enum _HTTP_QOS_SETTING_TYPE
{
HttpQosSettingTypeBandwidth,
HttpQosSettingTypeConnectionLimit
} HTTP_QOS_SETTING_TYPE, *PHTTP_QOS_SETTING_TYPE;
typedef struct _HTTP_QOS_SETTING_INFO
{
HTTP_QOS_SETTING_TYPE QosType;
PVOID QosSetting;
} HTTP_QOS_SETTING_INFO, *PHTTP_QOS_SETTING_INFO;
typedef struct _HTTP_CONNECTION_LIMIT_INFO
{
HTTP_PROPERTY_FLAGS Flags;
ULONG MaxConnections;
} HTTP_CONNECTION_LIMIT_INFO, *PHTTP_CONNECTION_LIMIT_INFO;
typedef struct _HTTP_BANDWIDTH_LIMIT_INFO
{
HTTP_PROPERTY_FLAGS Flags;
ULONG MaxBandwidth;
} HTTP_BANDWIDTH_LIMIT_INFO, *PHTTP_BANDWIDTH_LIMIT_INFO;
//
// Bandwidth throttling limit can not be set lower than the following
// number. The value is in bytes/sec.
//
#define HTTP_MIN_ALLOWED_BANDWIDTH_THROTTLING_RATE ((ULONG)1024)
//
// Distinguished value for bandwidth, connection limits and logging rollover
// size indicating "no limit".
//
#define HTTP_LIMIT_INFINITE ((ULONG)-1)
//
// Timeout information.
//
//
// For manipulating global timeout settings.
// These timers run when connection does not belong to any application.
// Value zero is not allowed for driver wide timeout settings.
//
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;
//
// To set a timeout value use the set structure. To query/delete use the key
// directly. When you query a timeout value the output buffer must be exactly
// the sizeof param.
//
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;
//
// For manipulating application specific timeout settings.
// These timers run when there's a request being processed on a connection
// and HTTPAPI has already associated the request with an application.
// Setting a timeout value to zero will cause HTTPAPI to revert to default.
//
typedef struct _HTTP_TIMEOUT_LIMIT_INFO
{
HTTP_PROPERTY_FLAGS Flags;
//
// Timeouts configured in seconds.
//
USHORT EntityBody;
USHORT DrainEntityBody;
USHORT RequestQueue;
//
// Following two timeouts are only enforced after first request on
// connection is routed to the application. These will not manipulate
// the driver wide timeouts.
//
USHORT IdleConnection;
USHORT HeaderWait;
//
// Timeouts configured in bytes/second.
// This timer can be turned off by setting it to MAXULONG.
//
ULONG MinSendRate;
} HTTP_TIMEOUT_LIMIT_INFO, *PHTTP_TIMEOUT_LIMIT_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;
//
// Definitions used for setting server side authentication property.
//
#define HTTP_AUTH_ENABLE_BASIC (0x00000001)
#define HTTP_AUTH_ENABLE_DIGEST (0x00000002)
#define HTTP_AUTH_ENABLE_NTLM (0x00000004)
#define HTTP_AUTH_ENABLE_NEGOTIATE (0x00000008)
#define HTTP_AUTH_ENABLE_ALL \
(HTTP_AUTH_ENABLE_BASIC |\
HTTP_AUTH_ENABLE_DIGEST |\
HTTP_AUTH_ENABLE_NTLM |\
HTTP_AUTH_ENABLE_NEGOTIATE)
C_ASSERT(HTTP_AUTH_ENABLE_NEGOTIATE > HTTP_AUTH_ENABLE_NTLM);
C_ASSERT(HTTP_AUTH_ENABLE_NTLM > HTTP_AUTH_ENABLE_DIGEST);
C_ASSERT(HTTP_AUTH_ENABLE_DIGEST > HTTP_AUTH_ENABLE_BASIC);
typedef struct _HTTP_SERVER_AUTHENTICATION_INFO
{
HTTP_PROPERTY_FLAGS Flags;
ULONG AuthSchemes;
BOOLEAN ReceiveMutualAuth;
BOOLEAN ReceiveContextHandle;
BOOLEAN DisableNTLMCredentialCaching;
HTTP_SERVER_AUTHENTICATION_DIGEST_PARAMS DigestParams;
HTTP_SERVER_AUTHENTICATION_BASIC_PARAMS BasicParams;
} HTTP_SERVER_AUTHENTICATION_INFO, *PHTTP_SERVER_AUTHENTICATION_INFO;
//
// Definitions used for setting logging property.
//
//
// The known log fields recognized/supported by HTTPAPI. Following fields
// are used for W3C logging. Subset of them are also used for error
// logging.
//
#define HTTP_LOG_FIELD_DATE 0x00000001
#define HTTP_LOG_FIELD_TIME 0x00000002
#define HTTP_LOG_FIELD_CLIENT_IP 0x00000004
#define HTTP_LOG_FIELD_USER_NAME 0x00000008
#define HTTP_LOG_FIELD_SITE_NAME 0x00000010
#define HTTP_LOG_FIELD_COMPUTER_NAME 0x00000020
#define HTTP_LOG_FIELD_SERVER_IP 0x00000040
#define HTTP_LOG_FIELD_METHOD 0x00000080
#define HTTP_LOG_FIELD_URI_STEM 0x00000100
#define HTTP_LOG_FIELD_URI_QUERY 0x00000200
#define HTTP_LOG_FIELD_STATUS 0x00000400
#define HTTP_LOG_FIELD_WIN32_STATUS 0x00000800
#define HTTP_LOG_FIELD_BYTES_SENT 0x00001000
#define HTTP_LOG_FIELD_BYTES_RECV 0x00002000
#define HTTP_LOG_FIELD_TIME_TAKEN 0x00004000
#define HTTP_LOG_FIELD_SERVER_PORT 0x00008000
#define HTTP_LOG_FIELD_USER_AGENT 0x00010000
#define HTTP_LOG_FIELD_COOKIE 0x00020000
#define HTTP_LOG_FIELD_REFERER 0x00040000
#define HTTP_LOG_FIELD_VERSION 0x00080000
#define HTTP_LOG_FIELD_HOST 0x00100000
#define HTTP_LOG_FIELD_SUB_STATUS 0x00200000
//
// Fields that are used only for error logging.
//
#define HTTP_LOG_FIELD_CLIENT_PORT 0x00400000
#define HTTP_LOG_FIELD_URI 0x00800000
#define HTTP_LOG_FIELD_SITE_ID 0x01000000
#define HTTP_LOG_FIELD_REASON 0x02000000
#define HTTP_LOG_FIELD_QUEUE_NAME 0x04000000
//
// Defines the logging type.
//
typedef enum _HTTP_LOGGING_TYPE
{
HttpLoggingTypeW3C,
HttpLoggingTypeIIS,
HttpLoggingTypeNCSA,
HttpLoggingTypeRaw
} HTTP_LOGGING_TYPE, *PHTTP_LOGGING_TYPE;
//
// Defines the rollover type for log files.
//
typedef enum _HTTP_LOGGING_ROLLOVER_TYPE
{
HttpLoggingRolloverSize,
HttpLoggingRolloverDaily,
HttpLoggingRolloverWeekly,
HttpLoggingRolloverMonthly,
HttpLoggingRolloverHourly
} HTTP_LOGGING_ROLLOVER_TYPE, *PHTTP_LOGGING_ROLLOVER_TYPE;
//
// Log file rollover size can not be set lower than the following
// limit. The value is in bytes.
//
#define HTTP_MIN_ALLOWED_LOG_FILE_ROLLOVER_SIZE ((ULONG)(1 * 1024 * 1024))
//
// Logging option flags. When used in the logging configuration alters
// some default logging behaviour.
//
// HTTP_LOGGING_FLAG_LOCAL_TIME_ROLLOVER - This flag is used to change
// the log file rollover to happen by local time based. By default
// log file rollovers happen by GMT time.
//
// HTTP_LOGGING_FLAG_USE_UTF8_CONVERSION - When set the unicode fields
// will be converted to UTF8 multibytes when writting to the log
// files. When this flag is not present, the local code page
// conversion happens.
//
// HTTP_LOGGING_FLAG_LOG_ERRORS_ONLY -
// HTTP_LOGGING_FLAG_LOG_SUCCESS_ONLY - These two flags are used to
// to do selective logging. If neither of them are present both
// types of requests will be logged. Only one these flags can be
// set at a time. They are mutually exclusive.
//
#define HTTP_LOGGING_FLAG_LOCAL_TIME_ROLLOVER (0x00000001)
#define HTTP_LOGGING_FLAG_USE_UTF8_CONVERSION (0x00000002)
#define HTTP_LOGGING_FLAG_LOG_ERRORS_ONLY (0x00000004)
#define HTTP_LOGGING_FLAG_LOG_SUCCESS_ONLY (0x00000008)
//
// Configuration structure used for setting the logging property.
//
typedef struct _HTTP_LOGGING_INFO
{
//
// Specifies whether this property exists or not.
//
HTTP_PROPERTY_FLAGS Flags;
//
// Optional logging flags.
//
ULONG LoggingFlags;
//
// Optional informatonal software directive string for W3C type logging. Not
// used for other types of logging. If nothing is provided here HTTPAPI will
// log a default string. Any arbitrary string could be used here to identify
// the application. Length cannot be greater than MAX_PATH. Lenght is in
// bytes.
//
PCWSTR SoftwareName;
USHORT SoftwareNameLength;
//
// Log file directory must be a fully qualified path.
// Length must be in number of bytes.
//
USHORT DirectoryNameLength;
PCWSTR DirectoryName;
//
// Specifies the format for the log files.
//
HTTP_LOGGING_TYPE Format;
//
// Bitmask value indicates which fields to be logged
// if the log format is set to W3C. This must be the 'bitwise or'
// of the HTTP_LOG_FIELD_... values.
//
ULONG Fields;
//
// Following fields are reserved they must be NULL and zero..
//
PVOID pExtFields;
USHORT NumOfExtFields;
//
// Reserved must be zero.
//
USHORT MaxRecordSize;
//
// Defines the rollover type for the log files.
//
HTTP_LOGGING_ROLLOVER_TYPE RolloverType;
//
// Indicates the maximum size (in bytes) after which
// the log files should be rolled over. A value of -1
// (HTTP_LIMIT_INFINITE) indicates an unlimited size.
// This value is discarded if rollover type is not set to
// HttpLoggingRolloverSize.
//
ULONG RolloverSize;
//
// Specifies the security descriptor to be applied to
// the log files and the sub-directories. If null we will
// inherit the system default. This security descriptor must
// be self-relative.
//
PSECURITY_DESCRIPTOR pSecurityDescriptor;
} HTTP_LOGGING_INFO, *PHTTP_LOGGING_INFO;
//
// Binding information.
//
typedef struct _HTTP_BINDING_INFO
{
HTTP_PROPERTY_FLAGS Flags;
HANDLE RequestQueueHandle;
} HTTP_BINDING_INFO, *PHTTP_BINDING_INFO;
//
// Definitions for request queue manipulation.
//
// These flags are used with HttpCreateRequestQueue() API.
//
// HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING - To open an existing request
// queue. The request queue name must be supplied.
//
// HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER - Creates the request queue and
// marks that the caller process is not willing to do send/receive (HTTP I/O)on
// the handle directly.
//
#define HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING (0x00000001)
#define HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER (0x00000002)
#endif // _WIN32_WINNT >= 0x0600
// //
// Flags for HttpReceiveHttpRequest(). // Flags for HttpReceiveHttpRequest().
// //
// HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY - Specifies that the caller would like // HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY - Specifies that the caller would like
// any available entity body to be copied along with the protocol headers. // any available entity body to be copied along with the protocol headers.
// //
// HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY - Specifies that the caller would like
// all of the entity bodies to be copied along with the protocol headers.
//
#define HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY 0x00000001 #define HTTP_RECEIVE_REQUEST_FLAG_COPY_BODY 0x00000001
#define HTTP_RECEIVE_REQUEST_FLAG_FLUSH_BODY 0x00000002
#if _WIN32_WINNT >= 0x0600
//
// Flags for HttpReceiveRequestEntityBody().
//
// HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER - Specifies that the
// caller would like the buffer to get filled up with entity bodies unless
// there are no more entity bodies to be copied.
//
#define HTTP_RECEIVE_REQUEST_ENTITY_BODY_FLAG_FILL_BUFFER 0x00000001
#endif // _WIN32_WINNT >= 0x0600
// //
// Flags for HttpSendHttpResponse() and HttpSendResponseEntityBody(). // Flags for HttpSendHttpResponse() and HttpSendResponseEntityBody().
// //
// HTTP_SEND_RESPONSE_FLAG_DISCONNECT - Specifies that the network connection // HTTP_SEND_RESPONSE_FLAG_DISCONNECT - Specifies that the network connection
// should be disconnected immediately after sending the response, overriding // should be disconnected immediately after sending the response, overriding
// the HTTP protocol's persistent connection features, such as // the HTTP protocol's persistent connection features, such as
// "Connection: keep-alive". // "Connection: keep-alive".
// //
// HTTP_SEND_RESPONSE_FLAG_MORE_DATA - Specifies that additional entity body // HTTP_SEND_RESPONSE_FLAG_MORE_DATA - Specifies that additional entity body
// data will be sent by the caller. // data will be sent by the caller.
// //
// HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA - Specifies that a caller wants the // HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA - Specifies that a caller wants the
// response to complete as soon as possible at the cost by buffering partial // response to complete as soon as possible at the cost of buffering partial
// or the entire response. // or the entire response.
// //
// HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING - Specifies that a caller wants to
// enable the TCP nagling algorithm for this particular send.
//
#define HTTP_SEND_RESPONSE_FLAG_DISCONNECT 0x00000001 #define HTTP_SEND_RESPONSE_FLAG_DISCONNECT 0x00000001
#define HTTP_SEND_RESPONSE_FLAG_MORE_DATA 0x00000002 #define HTTP_SEND_RESPONSE_FLAG_MORE_DATA 0x00000002
#define HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA 0x00000004 #define HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA 0x00000004
#define HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING 0x00000008
// //
// Flags for HttpFlushResponseCache(). // Flags for HttpFlushResponseCache().
// //
// HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE - Flushes the specified URL and all // HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE - Flushes the specified URL and all
// hierarchally-related sub-URLs from the response or fragment cache. // hierarchally-related sub-URLs from the response or fragment cache.
// //
#define HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE 0x00000001 #define HTTP_FLUSH_RESPONSE_FLAG_RECURSIVE 0x00000001
// //
// Opaque identifiers for various kernel objects. // Opaque identifiers for various HTTPAPI objects.
// //
typedef ULONGLONG HTTP_OPAQUE_ID, *PHTTP_OPAQUE_ID; typedef ULONGLONG HTTP_OPAQUE_ID, *PHTTP_OPAQUE_ID;
typedef HTTP_OPAQUE_ID HTTP_REQUEST_ID, *PHTTP_REQUEST_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_CONNECTION_ID, *PHTTP_CONNECTION_ID;
typedef HTTP_OPAQUE_ID HTTP_RAW_CONNECTION_ID, *PHTTP_RAW_CONNECTION_ID; typedef HTTP_OPAQUE_ID HTTP_RAW_CONNECTION_ID, *PHTTP_RAW_CONNECTION_ID;
#if _WIN32_WINNT >= 0x0600
typedef HTTP_OPAQUE_ID HTTP_URL_GROUP_ID, *PHTTP_URL_GROUP_ID;
typedef HTTP_OPAQUE_ID HTTP_SERVER_SESSION_ID, *PHTTP_SERVER_SESSION_ID;
#endif // _WIN32_WINNT >= 0x0600
//
// Macros for opaque identifier manipulations.
//
#define HTTP_NULL_ID (0ui64) #define HTTP_NULL_ID (0ui64)
#define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID == *(pid)) #define HTTP_IS_NULL_ID(pid) (HTTP_NULL_ID == *(pid))
#define HTTP_SET_NULL_ID(pid) (*(pid) = HTTP_NULL_ID) #define HTTP_SET_NULL_ID(pid) (*(pid) = HTTP_NULL_ID)
// //
// This structure defines a file byte range. // This structure defines a file byte range.
// //
// If the Length field is HTTP_BYTE_RANGE_TO_EOF then the remainder of the // If the Length field is HTTP_BYTE_RANGE_TO_EOF then the remainder of the
// file (everything after StartingOffset) is sent. // file (everything after StartingOffset) is sent.
// //
skipping to change at line 310 skipping to change at line 860
typedef struct _HTTP_UNKNOWN_HEADER typedef struct _HTTP_UNKNOWN_HEADER
{ {
USHORT NameLength; // in bytes not including the NUL USHORT NameLength; // in bytes not including the NUL
USHORT RawValueLength; // in bytes not including the NUL USHORT RawValueLength; // in bytes not including the NUL
PCSTR pName; // The header name (minus the ':' character) PCSTR pName; // The header name (minus the ':' character)
PCSTR pRawValue; // The header value PCSTR pRawValue; // The header value
} HTTP_UNKNOWN_HEADER, *PHTTP_UNKNOWN_HEADER; } HTTP_UNKNOWN_HEADER, *PHTTP_UNKNOWN_HEADER;
#if _WIN32_WINNT >= 0x0600
//
// Log fields data structure is used for logging a request. This structure must
// be provided along with an HttpSendHttpResponse or HttpSendResponseEntityBody
// call that concludes the send.
//
// Base structure is for future versioning.
typedef enum _HTTP_LOG_DATA_TYPE
{
HttpLogDataTypeFields = 0
} HTTP_LOG_DATA_TYPE, *PHTTP_LOG_DATA_TYPE;
// should we DECLSPEC_ALIGN(4 or 8) == DECLSPEC_POINTERALIGN?
typedef struct _HTTP_LOG_DATA
{
HTTP_LOG_DATA_TYPE Type;
} HTTP_LOG_DATA, *PHTTP_LOG_DATA;
// Current log fields data structure for of type HttpLogDataTypeFields.
typedef struct _HTTP_LOG_FIELDS_DATA
{
HTTP_LOG_DATA Base;
USHORT UserNameLength;
USHORT UriStemLength;
USHORT ClientIpLength;
USHORT ServerNameLength;
USHORT ServiceNameLength;
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;
#endif // _WIN32_WINNT >= 0x0600
// //
// This enum defines a data source for a particular chunk of data. // This enum defines a data source for a particular chunk of data.
// //
typedef enum _HTTP_DATA_CHUNK_TYPE typedef enum _HTTP_DATA_CHUNK_TYPE
{ {
HttpDataChunkFromMemory, HttpDataChunkFromMemory,
HttpDataChunkFromFileHandle, HttpDataChunkFromFileHandle,
HttpDataChunkFromFragmentCache, HttpDataChunkFromFragmentCache,
HttpDataChunkFromFragmentCacheEx,
HttpDataChunkMaximum HttpDataChunkMaximum
} HTTP_DATA_CHUNK_TYPE, *PHTTP_DATA_CHUNK_TYPE; } HTTP_DATA_CHUNK_TYPE, *PHTTP_DATA_CHUNK_TYPE;
// //
// This structure describes an individual data chunk. // This structure describes an individual data chunk.
// //
typedef struct _HTTP_DATA_CHUNK typedef struct _HTTP_DATA_CHUNK
skipping to change at line 375 skipping to change at line 994
// From-fragment cache data chunk. // From-fragment cache data chunk.
// //
struct struct
{ {
USHORT FragmentNameLength; // in bytes not including the NUL USHORT FragmentNameLength; // in bytes not including the NUL
PCWSTR pFragmentName; PCWSTR pFragmentName;
} FromFragmentCache; } FromFragmentCache;
//
// From-fragment cache data chunk that specifies a byte range.
//
struct
{
HTTP_BYTE_RANGE ByteRange;
PCWSTR pFragmentName; // NULL-terminated string
} FromFragmentCacheEx;
}; };
} HTTP_DATA_CHUNK, *PHTTP_DATA_CHUNK; } HTTP_DATA_CHUNK, *PHTTP_DATA_CHUNK;
// //
// HTTP API doesn't support 16 bit applications.
// Neither WIN32 nor _WIN64 was defined.
//
C_ASSERT(TYPE_ALIGNMENT(HTTP_DATA_CHUNK) == sizeof(ULONGLONG));
//
// Structure defining format of request headers. // Structure defining format of request headers.
// //
typedef struct _HTTP_REQUEST_HEADERS typedef struct _HTTP_REQUEST_HEADERS
{ {
// //
// The array of unknown HTTP headers and the number of // The array of unknown HTTP headers and the number of
// entries in the array. // entries in the array.
// //
skipping to change at line 474 skipping to change at line 1111
USHORT QueryStringLength; // in bytes (no NUL) USHORT QueryStringLength; // in bytes (no NUL)
PCWSTR pFullUrl; // points to "http://hostname:port/abs/.../path?query" PCWSTR pFullUrl; // points to "http://hostname:port/abs/.../path?query"
PCWSTR pHost; // points to the first char in the hostname PCWSTR pHost; // points to the first char in the hostname
PCWSTR pAbsPath; // Points to the 3rd '/' char PCWSTR pAbsPath; // Points to the 3rd '/' char
PCWSTR pQueryString; // Points to the 1st '?' char or NULL PCWSTR pQueryString; // Points to the 1st '?' char or NULL
} HTTP_COOKED_URL, *PHTTP_COOKED_URL; } HTTP_COOKED_URL, *PHTTP_COOKED_URL;
// //
// An opaque context for URLs // An opaque context for URL manipulation.
// //
typedef ULONGLONG HTTP_URL_CONTEXT; typedef ULONGLONG HTTP_URL_CONTEXT;
#if _WIN32_WINNT >= 0x0600
//
// Optional flags for URL manipulation functions.
//
// HTTP_URL_FLAG_REMOVE_ALL : When this flag is used
// when removing a Url from a url group, regardless of
// the passed URL, all of the Urls from the url group
// will be removed.
//
#define HTTP_URL_FLAG_REMOVE_ALL 0x00000001
//
// Request Authentication related.
//
typedef enum _HTTP_AUTH_STATUS
{
HttpAuthStatusSuccess,
HttpAuthStatusNotAuthenticated,
HttpAuthStatusFailure
} HTTP_AUTH_STATUS, *PHTTP_AUTH_STATUS;
typedef enum _HTTP_REQUEST_AUTH_TYPE
{
HttpRequestAuthTypeNone = 0,
HttpRequestAuthTypeBasic,
HttpRequestAuthTypeDigest,
HttpRequestAuthTypeNTLM,
HttpRequestAuthTypeNegotiate
} HTTP_REQUEST_AUTH_TYPE, *PHTTP_REQUEST_AUTH_TYPE;
#endif // _WIN32_WINNT >= 0x0600
// //
// SSL Client certificate information. // SSL Client certificate information.
// //
typedef struct _HTTP_SSL_CLIENT_CERT_INFO typedef struct _HTTP_SSL_CLIENT_CERT_INFO
{ {
ULONG CertFlags; ULONG CertFlags;
ULONG CertEncodedSize; ULONG CertEncodedSize;
PUCHAR pCertEncoded; PUCHAR pCertEncoded;
HANDLE Token; HANDLE Token;
skipping to change at line 512 skipping to change at line 1186
ULONG ServerCertSubjectSize; ULONG ServerCertSubjectSize;
PCSTR pServerCertIssuer; PCSTR pServerCertIssuer;
PCSTR pServerCertSubject; PCSTR pServerCertSubject;
PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo; PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo;
ULONG SslClientCertNegotiated; ULONG SslClientCertNegotiated;
} HTTP_SSL_INFO, *PHTTP_SSL_INFO; } HTTP_SSL_INFO, *PHTTP_SSL_INFO;
#if _WIN32_WINNT >= 0x0600
// //
// The structure of an HTTP request. // Generic request information type.
// //
typedef struct _HTTP_REQUEST typedef enum _HTTP_REQUEST_INFO_TYPE
{
HttpRequestInfoTypeAuth
} 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;
#ifndef __SECSTATUS_DEFINED__
typedef LONG SECURITY_STATUS;
#define __SECSTATUS_DEFINED__
#endif // __SECSTATUS_DEFINED__
//
// Authentication request info structure
//
#define HTTP_REQUEST_AUTH_FLAG_TOKEN_FOR_CACHED_CRED (0x00000001)
typedef struct _HTTP_REQUEST_AUTH_INFO
{
HTTP_AUTH_STATUS AuthStatus;
SECURITY_STATUS SecStatus;
ULONG Flags;
HTTP_REQUEST_AUTH_TYPE AuthType;
HANDLE AccessToken;
ULONG ContextAttributes;
//
// Optional serialized context.
//
ULONG PackedContextLength;
ULONG PackedContextType;
PVOID PackedContext;
//
// Optional mutual authentication data and its length in bytes.
//
ULONG MutualAuthDataLength;
PCHAR pMutualAuthData;
//
// For SSPI based schemes the package name is returned. Length does
// not include the terminating null and it is in bytes.
//
USHORT PackageNameLength;
PWSTR pPackageName;
} HTTP_REQUEST_AUTH_INFO, *PHTTP_REQUEST_AUTH_INFO;
#endif // _WIN32_WINNT >= 0x0600
//
// The structure of an HTTP request for downlevel OS
//
typedef struct _HTTP_REQUEST_V1
{ {
// //
// Request flags (see HTTP_REQUEST_FLAG_* definitions below). // Request flags (see HTTP_REQUEST_FLAG_* definitions below).
// //
ULONG Flags; ULONG Flags;
// //
// An opaque request identifier. These values are used by the driver // An opaque request identifier. These values are used by the driver
// to correlate outgoing responses with incoming requests. // to correlate outgoing responses with incoming requests.
skipping to change at line 614 skipping to change at line 1358
USHORT EntityChunkCount; USHORT EntityChunkCount;
PHTTP_DATA_CHUNK pEntityChunks; PHTTP_DATA_CHUNK pEntityChunks;
// //
// SSL connection information. // SSL connection information.
// //
HTTP_RAW_CONNECTION_ID RawConnectionId; HTTP_RAW_CONNECTION_ID RawConnectionId;
PHTTP_SSL_INFO pSslInfo; PHTTP_SSL_INFO pSslInfo;
} HTTP_REQUEST, *PHTTP_REQUEST; } HTTP_REQUEST_V1, *PHTTP_REQUEST_V1;
#if _WIN32_WINNT >= 0x0600
// Longhorn
//
// Version 2.0 members are defined here
// N.B. One must define V2 elements in two places :(
// This is due to the fact that C++ doesn't allow anonymous
// structure declarations and one must use structure
// inheritance instead.
//
#ifdef __cplusplus
typedef struct _HTTP_REQUEST_V2 : _HTTP_REQUEST_V1
{
//
// Version 1.0 members are inherited
// Version 2.0 members are declared below
//
//
// Additional Request Informations.
//
USHORT RequestInfoCount;
PHTTP_REQUEST_INFO pRequestInfo;
} HTTP_REQUEST_V2, *PHTTP_REQUEST_V2;
#else // __cplusplus
typedef struct _HTTP_REQUEST_V2
{
struct _HTTP_REQUEST_V1; // Anonymous structure
//
// Version 2.0 members are declared below
//
//
// Additional Request Informations.
//
USHORT RequestInfoCount;
PHTTP_REQUEST_INFO pRequestInfo;
} HTTP_REQUEST_V2, *PHTTP_REQUEST_V2;
#endif // __cplusplus
typedef HTTP_REQUEST_V2 HTTP_REQUEST;
#else // _WIN32_WINNT >= 0x0600
typedef HTTP_REQUEST_V1 HTTP_REQUEST;
#endif // _WIN32_WINNT >= 0x0600
typedef HTTP_REQUEST * PHTTP_REQUEST;
// //
// Values for HTTP_REQUEST::Flags. Zero or more of these may be ORed together. // Values for HTTP_REQUEST::Flags. Zero or more of these may be ORed together.
// //
// HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS - there is more entity body // HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS - there is more entity body
// to be read for this request. Otherwise, there is no entity body or // to be read for this request. Otherwise, there is no entity body or
// all of the entity body was copied into pEntityChunks. // all of the entity body was copied into pEntityChunks.
// HTTP_REQUEST_FLAG_IP_ROUTED - This flag indicates that the request has been
// routed based on host plus ip or ip binding.This is a hint for the application
// to include the local ip while flushing kernel cache entries build for this
// request if any.
// //
#define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001 #define HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS 0x00000001
#define HTTP_REQUEST_FLAG_IP_ROUTED 0x00000002
// //
// This structure describes an HTTP response. // This structure describes an HTTP response.
// //
typedef struct _HTTP_RESPONSE typedef struct _HTTP_RESPONSE_V1
{ {
//
// Response flags (see HTTP_RESPONSE_FLAG_* definitions below).
//
ULONG Flags; ULONG Flags;
// //
// The raw HTTP protocol version number. // The raw HTTP protocol version number.
// //
HTTP_VERSION Version; HTTP_VERSION Version;
// //
// The HTTP status code (e.g., 200). // The HTTP status code (e.g., 200).
skipping to change at line 667 skipping to change at line 1479
HTTP_RESPONSE_HEADERS Headers; HTTP_RESPONSE_HEADERS Headers;
// //
// pEntityChunks points to an array of EntityChunkCount HTTP_DATA_CHUNKs. // pEntityChunks points to an array of EntityChunkCount HTTP_DATA_CHUNKs.
// //
USHORT EntityChunkCount; USHORT EntityChunkCount;
PHTTP_DATA_CHUNK pEntityChunks; PHTTP_DATA_CHUNK pEntityChunks;
} HTTP_RESPONSE, *PHTTP_RESPONSE; } HTTP_RESPONSE_V1, *PHTTP_RESPONSE_V1;
#if _WIN32_WINNT >= 0x0600
// Longhorn
typedef enum _HTTP_RESPONSE_INFO_TYPE
{
HttpResponseInfoTypeMultipleKnownHeaders
} 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;
#define HTTP_RESPONSE_INFO_FLAGS_PRESERVE_ORDER 0x00000001
//
// This structure allows the provision of providing multiple known headers.
//
typedef struct _HTTP_MULTIPLE_KNOWN_HEADERS
{
//
// Known header id.
//
HTTP_HEADER_ID HeaderId;
ULONG Flags;
//
// Number of headers of the same category.
//
USHORT KnownHeaderCount;
//
// Array of known header structures.
//
PHTTP_KNOWN_HEADER KnownHeaders;
} HTTP_MULTIPLE_KNOWN_HEADERS,
*PHTTP_MULTIPLE_KNOWN_HEADERS;
//
// Version 2.0 members are defined here
// N.B. One must define V2 elements in two places :(
// This is due to the fact that C++ doesn't allow anonymous
// structure declarations and one must use structure
// inheritance instead.
//
#ifdef __cplusplus
typedef struct _HTTP_RESPONSE_V2 : _HTTP_RESPONSE_V1
{
//
// Version 1.0 members are inherited
// Version 2.0 members are declared below
//
USHORT ResponseInfoCount;
PHTTP_RESPONSE_INFO pResponseInfo;
} HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2;
#else // __cplusplus
typedef struct _HTTP_RESPONSE_V2
{
struct _HTTP_RESPONSE_V1;
//
// Version 2.0 members are declared below
//
USHORT ResponseInfoCount;
PHTTP_RESPONSE_INFO pResponseInfo;
} HTTP_RESPONSE_V2, *PHTTP_RESPONSE_V2;
#endif // __cplusplus
typedef HTTP_RESPONSE_V2 HTTP_RESPONSE;
#else // _WIN32_WINNT >= 0x0600
typedef HTTP_RESPONSE_V1 HTTP_RESPONSE;
#endif // _WIN32_WINNT >= 0x0600
typedef HTTP_RESPONSE *PHTTP_RESPONSE;
//
// Api Version. This is used to ensure compatibility between applications and
// httpapi.dll and http.sys.
//
// This must not be confused with the HTTP Protocol version.
//
typedef struct _HTTPAPI_VERSION
{
USHORT HttpApiMajorVersion;
USHORT HttpApiMinorVersion;
} HTTPAPI_VERSION, *PHTTPAPI_VERSION;
#if _WIN32_WINNT >= 0x0600
// Longhorn
#define HTTPAPI_VERSION_2 { 2, 0 }
#endif // _WIN32_WINNT >= 0x0600
#define HTTPAPI_VERSION_1 { 1, 0 }
#define HTTPAPI_EQUAL_VERSION(version, major, minor) \
((version).HttpApiMajorVersion == (major) && \
(version).HttpApiMinorVersion == (minor))
#define HTTPAPI_GREATER_VERSION(version, major, minor) \
((version).HttpApiMajorVersion > (major) || \
((version).HttpApiMajorVersion == (major) && \
(version).HttpApiMinorVersion > (minor)))
#define HTTPAPI_LESS_VERSION(version, major, minor) \
((version).HttpApiMajorVersion < (major) || \
((version).HttpApiMajorVersion == (major) && \
(version).HttpApiMinorVersion < (minor)))
#define HTTPAPI_VERSION_GREATER_OR_EQUAL( version, major, minor) \
(!HTTPAPI_LESS_VERSION(version, major, minor))
// //
// Cache control. // Cache control.
// //
// //
// This enum defines the available cache policies. // This enum defines the available cache policies.
// //
typedef enum _HTTP_CACHE_POLICY_TYPE typedef enum _HTTP_CACHE_POLICY_TYPE
skipping to change at line 708 skipping to change at line 1656
// //
// Enum that is used with HttpSetServiceConfiguration(), // Enum that is used with HttpSetServiceConfiguration(),
// HttpQueryServiceConfiguration(), and HttpDeleteServiceConfiguration() APIs. // HttpQueryServiceConfiguration(), and HttpDeleteServiceConfiguration() APIs.
// //
typedef enum _HTTP_SERVICE_CONFIG_ID typedef enum _HTTP_SERVICE_CONFIG_ID
{ {
HttpServiceConfigIPListenList, // Set, Query & Delete. HttpServiceConfigIPListenList, // Set, Query & Delete.
HttpServiceConfigSSLCertInfo, // Set, Query & Delete. HttpServiceConfigSSLCertInfo, // Set, Query & Delete.
HttpServiceConfigUrlAclInfo, // Set, Query & Delete. HttpServiceConfigUrlAclInfo, // Set, Query & Delete.
HttpServiceConfigTimeout, // Set, Query & Delete.
HttpServiceConfigMax HttpServiceConfigMax
} HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID; } HTTP_SERVICE_CONFIG_ID, *PHTTP_SERVICE_CONFIG_ID;
// //
// Generic Query enum that can be used with HttpQueryServiceConfiguration() // Generic Query enum that can be used with HttpQueryServiceConfiguration()
// //
typedef enum _HTTP_SERVICE_CONFIG_QUERY_TYPE typedef enum _HTTP_SERVICE_CONFIG_QUERY_TYPE
{ {
skipping to change at line 802 skipping to change at line 1751
// //
// Default Flags - see HTTP_SERVICE_CONFIG_SSL_FLAG* below. // Default Flags - see HTTP_SERVICE_CONFIG_SSL_FLAG* below.
// //
DWORD DefaultFlags; DWORD DefaultFlags;
} HTTP_SERVICE_CONFIG_SSL_PARAM, *PHTTP_SERVICE_CONFIG_SSL_PARAM; } 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_USE_DS_MAPPER 0x00000001
#define HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT 0x00000002 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NEGOTIATE_CLIENT_CERT 0x00000002
#if _WIN32_WINNT < 0x0600
#define HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER 0x00000004 #define HTTP_SERVICE_CONFIG_SSL_FLAG_NO_RAW_FILTER 0x00000004
#endif // _WIN32_WINNT < 0x0600
// //
// This data structure is used by HttpSetServiceConfiguration() for the // This data structure is used by HttpSetServiceConfiguration() for the
// config ID HttpServiceConfigSSLCertInfo. It's used to add a new record // config ID HttpServiceConfigSSLCertInfo. It's used to add a new record
// to the SSL store. // to the SSL store.
// //
typedef struct _HTTP_SERVICE_CONFIG_SSL_SET typedef struct _HTTP_SERVICE_CONFIG_SSL_SET
{ {
HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc; HTTP_SERVICE_CONFIG_SSL_KEY KeyDesc;
skipping to change at line 934 skipping to change at line 1885
// //
#if !defined(HTTPAPI_LINKAGE) #if !defined(HTTPAPI_LINKAGE)
#define HTTPAPI_LINKAGE DECLSPEC_IMPORT #define HTTPAPI_LINKAGE DECLSPEC_IMPORT
#endif // !HTTPAPI_LINKAGE #endif // !HTTPAPI_LINKAGE
// //
// Initialize/Terminate APIs. // Initialize/Terminate APIs.
// //
//
// Version number to be passed to HttpInitialize(). This is used to ensure
// compatibility between applications and httpapi.dll and http.sys.
//
// This must not be confused with the HTTP Protocol version.
//
typedef struct _HTTPAPI_VERSION
{
USHORT HttpApiMajorVersion;
USHORT HttpApiMinorVersion;
} HTTPAPI_VERSION, *PHTTPAPI_VERSION;
#define HTTPAPI_VERSION_1 {1, 0}
// NOTE: MUST be called once before all other APIs // NOTE: MUST be called once before all other APIs
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpInitialize( HttpInitialize(
IN HTTPAPI_VERSION Version, IN HTTPAPI_VERSION Version,
IN ULONG Flags, IN ULONG Flags,
IN OUT PVOID pReserved // must be NULL __reserved IN OUT PVOID pReserved
); );
// NOTE: MUST be called after final API call returns. // NOTE: MUST be called after final API call returns.
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpTerminate( HttpTerminate(
IN ULONG Flags, IN ULONG Flags,
IN OUT PVOID pReserved // must be NULL __reserved IN OUT PVOID pReserved
); );
// //
// HTTP Request Queue handle // HTTP Request Queue manipulation APIs.
//
// This API is maintained for backward competibility for the first
// version of the HTTPAPI and should not be used. Instead the new
// HttpCreateRequestQueue() API must be used.
//
// Use CloseHandle() to release the handles returned by
// HttpCreateHttpHandle() API.
// //
// NOTE: call CloseHandle() to release.
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpCreateHttpHandle( HttpCreateHttpHandle(
OUT PHANDLE pReqQueueHandle, OUT PHANDLE pReqQueueHandle,
IN ULONG Options // Reserved must be 0 __reserved IN ULONG Reserved
); );
#if _WIN32_WINNT >= 0x0600
//
// Extended Request Queue manipulation APIs.
//
// Use HttpCloseRequestQueue() API to close the handles
// created by the HttpCreateRequestQueue API.
//
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCreateRequestQueue(
IN HTTPAPI_VERSION Version,
IN PCWSTR pName OPTIONAL,
IN PSECURITY_ATTRIBUTES pSecurityAttributes OPTIONAL,
IN ULONG Flags OPTIONAL,
OUT PHANDLE pReqQueueHandle
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCloseRequestQueue(
IN HANDLE ReqQueueHandle
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpSetRequestQueueProperty(
IN HANDLE Handle,
IN HTTP_SERVER_PROPERTY Property,
__in_bcount(PropertyInformationLength) IN PVOID pPropertyInformation,
IN ULONG PropertyInformationLength,
__reserved IN ULONG Reserved,
__reserved IN PVOID pReserved
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpQueryRequestQueueProperty(
IN HANDLE Handle,
IN HTTP_SERVER_PROPERTY Property,
__out_bcount_part(PropertyInformationLength, *pReturnLength)
OUT PVOID pPropertyInformation,
IN ULONG PropertyInformationLength,
__reserved IN ULONG Reserved,
__out_opt OUT PULONG pReturnLength OPTIONAL,
__reserved IN PVOID pReserved
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpShutdownRequestQueue(
IN HANDLE ReqQueueHandle
);
#endif // _WIN32_WINNT >= 0x0600
// //
// SSL APIs. // SSL APIs.
// //
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpReceiveClientCertificate( HttpReceiveClientCertificate(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_CONNECTION_ID ConnectionId, IN HTTP_CONNECTION_ID ConnectionId,
IN ULONG Flags, IN ULONG Flags,
__out_bcount_part(SslClientCertInfoSize, *pBytesReceived)
OUT PHTTP_SSL_CLIENT_CERT_INFO pSslClientCertInfo, OUT PHTTP_SSL_CLIENT_CERT_INFO pSslClientCertInfo,
IN ULONG SslClientCertInfoSize, IN ULONG SslClientCertInfoSize,
OUT PULONG pBytesReceived OPTIONAL, __out_opt OUT PULONG pBytesReceived OPTIONAL,
IN LPOVERLAPPED pOverlapped IN LPOVERLAPPED pOverlapped OPTIONAL
); );
#if _WIN32_WINNT >= 0x0600
// //
// URL Configuration APIs. // Server Session APIs.
//
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCreateServerSession(
IN HTTPAPI_VERSION Version,
OUT PHTTP_SERVER_SESSION_ID pServerSessionId,
__reserved IN ULONG Reserved
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCloseServerSession(
IN HTTP_SERVER_SESSION_ID ServerSessionId
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpQueryServerSessionProperty(
IN HTTP_SERVER_SESSION_ID ServerSessionId,
IN HTTP_SERVER_PROPERTY Property,
__out_bcount_part(PropertyInformationLength, *pReturnLength)
OUT PVOID pPropertyInformation,
IN ULONG PropertyInformationLength,
__out_opt OUT PULONG pReturnLength OPTIONAL
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpSetServerSessionProperty(
IN HTTP_SERVER_SESSION_ID ServerSessionId,
IN HTTP_SERVER_PROPERTY Property,
__in_bcount(PropertyInformationLength) IN PVOID pPropertyInformation,
IN ULONG PropertyInformationLength
);
#endif // _WIN32_WINNT >= 0x0600
//
// Url Configuration APIs. Can only be used for V1 request queues.
// //
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpAddUrl( HttpAddUrl(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN PCWSTR pUrlPrefix, IN PCWSTR pFullyQualifiedUrl,
IN PVOID pReserved // must be NULL __reserved IN PVOID pReserved
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpRemoveUrl( HttpRemoveUrl(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN PCWSTR pUrlPrefix IN PCWSTR pFullyQualifiedUrl
);
#if _WIN32_WINNT >= 0x0600
//
// Url Group APIs.
//
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCreateUrlGroup(
IN HTTP_SERVER_SESSION_ID ServerSessionId,
OUT PHTTP_URL_GROUP_ID pUrlGroupId,
__reserved IN ULONG Reserved
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCloseUrlGroup(
IN HTTP_URL_GROUP_ID UrlGroupId
); );
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpAddUrlToUrlGroup(
IN HTTP_URL_GROUP_ID UrlGroupId,
IN PCWSTR pFullyQualifiedUrl,
IN HTTP_URL_CONTEXT UrlContext OPTIONAL,
__reserved IN ULONG Reserved
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpRemoveUrlFromUrlGroup(
IN HTTP_URL_GROUP_ID UrlGroupId,
IN PCWSTR pFullyQualifiedUrl,
IN ULONG Flags
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpSetUrlGroupProperty(
IN HTTP_URL_GROUP_ID UrlGroupId,
IN HTTP_SERVER_PROPERTY Property,
__in_bcount(PropertyInformationLength) IN PVOID pPropertyInformation,
IN ULONG PropertyInformationLength
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpQueryUrlGroupProperty(
IN HTTP_URL_GROUP_ID UrlGroupId,
IN HTTP_SERVER_PROPERTY Property,
__out_bcount_part(PropertyInformationLength, *pReturnLength)
OUT PVOID pPropertyInformation,
IN ULONG PropertyInformationLength,
__out_opt OUT PULONG pReturnLength OPTIONAL
);
#endif // _WIN32_WINNT >= 0x0600
// //
// HTTP Server I/O APIs. // HTTP Server I/O APIs.
// //
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpReceiveHttpRequest( HttpReceiveHttpRequest(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId, IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags, IN ULONG Flags,
OUT PHTTP_REQUEST pRequestBuffer, __out_bcount_part(RequestBufferLength, *pBytesReceived)
IN ULONG RequestBufferLength, OUT PHTTP_REQUEST pRequestBuffer,
OUT PULONG pBytesReceived OPTIONAL, IN ULONG RequestBufferLength,
IN LPOVERLAPPED pOverlapped OPTIONAL __out_opt OUT PULONG pBytesReceived OPTIONAL,
IN LPOVERLAPPED pOverlapped OPTIONAL
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpReceiveRequestEntityBody( HttpReceiveRequestEntityBody(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId, IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags, IN ULONG Flags,
OUT PVOID pBuffer, __out_bcount_part(BufferLength, *pBytesReceived) OUT PVOID pBuffer,
IN ULONG BufferLength, IN ULONG BufferLength,
OUT PULONG pBytesReceived OPTIONAL, __out_opt OUT PULONG pBytesReceived OPTIONAL,
IN LPOVERLAPPED pOverlapped OPTIONAL IN LPOVERLAPPED pOverlapped OPTIONAL
); );
#if _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpSendHttpResponse( HttpSendHttpResponse(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId, IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags, IN ULONG Flags,
IN PHTTP_RESPONSE pHttpResponse, IN PHTTP_RESPONSE pHttpResponse,
IN PVOID pReserved1 OPTIONAL, // must be NULL IN PHTTP_CACHE_POLICY pCachePolicy OPTIONAL,
OUT PULONG pBytesSent OPTIONAL, OUT PULONG pBytesSent OPTIONAL,
OUT PVOID pReserved2 OPTIONAL, // must be NULL OUT PVOID pReserved1 OPTIONAL, // must be NULL
IN ULONG Reserved3 OPTIONAL, // must be 0 IN ULONG Reserved2 OPTIONAL, // must be 0
IN LPOVERLAPPED pOverlapped OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL,
IN PVOID pReserved4 OPTIONAL // must be NULL IN PHTTP_LOG_DATA pLogData OPTIONAL
); );
#else // _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpSendHttpResponse(
IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags,
IN PHTTP_RESPONSE pHttpResponse,
IN PVOID pReserved1 OPTIONAL, // must be NULL
OUT PULONG pBytesSent OPTIONAL,
OUT PVOID pReserved2 OPTIONAL, // must be NULL
IN ULONG Reserved3 OPTIONAL, // must be 0
IN LPOVERLAPPED pOverlapped OPTIONAL,
IN PVOID pReserved4 OPTIONAL // must be NULL
);
#endif // _WIN32_WINNT >= 0x0600
#if _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpSendResponseEntityBody( HttpSendResponseEntityBody(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId, IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags, IN ULONG Flags,
IN USHORT EntityChunkCount OPTIONAL, IN USHORT EntityChunkCount OPTIONAL,
IN PHTTP_DATA_CHUNK pEntityChunks OPTIONAL, __in_ecount_opt(EntityChunkCount)
OUT PULONG pBytesSent OPTIONAL, IN PHTTP_DATA_CHUNK pEntityChunks OPTIONAL,
OUT PVOID pReserved1 OPTIONAL, // must be NULL OUT PULONG pBytesSent OPTIONAL,
IN ULONG Reserved2 OPTIONAL, // must be 0 OUT PVOID pReserved1 OPTIONAL, // must be NULL
IN LPOVERLAPPED pOverlapped OPTIONAL, IN ULONG Reserved2 OPTIONAL, // must be 0
IN PVOID pReserved3 OPTIONAL // must be NULL IN LPOVERLAPPED pOverlapped OPTIONAL,
IN PHTTP_LOG_DATA pLogData OPTIONAL
);
#else // _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpSendResponseEntityBody(
IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId,
IN ULONG Flags,
IN USHORT EntityChunkCount OPTIONAL,
__in_ecount_opt(EntityChunkCount)
IN PHTTP_DATA_CHUNK pEntityChunks OPTIONAL,
OUT PULONG pBytesSent OPTIONAL,
OUT PVOID pReserved1 OPTIONAL, // must be NULL
IN ULONG Reserved2 OPTIONAL, // must be 0
IN LPOVERLAPPED pOverlapped OPTIONAL,
IN PVOID pReserved3 OPTIONAL // must be NULL
); );
#endif // _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpWaitForDisconnect( HttpWaitForDisconnect(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN HTTP_CONNECTION_ID ConnectionId, IN HTTP_CONNECTION_ID ConnectionId,
IN LPOVERLAPPED pOverlapped OPTIONAL IN LPOVERLAPPED pOverlapped OPTIONAL
); );
#if _WIN32_WINNT >= 0x0600
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpCancelHttpRequest(
IN HANDLE ReqQueueHandle,
IN HTTP_REQUEST_ID RequestId,
IN LPOVERLAPPED pOverlapped OPTIONAL
);
HTTPAPI_LINKAGE
ULONG
WINAPI
HttpWaitForDemandStart(
IN HANDLE ReqQueueHandle,
IN LPOVERLAPPED pOverlapped OPTIONAL
);
#endif // _WIN32_WINNT >= 0x0600
// //
// Cache manipulation APIs. // Cache manipulation APIs.
// //
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpFlushResponseCache( HttpFlushResponseCache(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN PCWSTR pUrlPrefix, IN PCWSTR pUrlPrefix,
IN ULONG Flags, IN ULONG Flags,
IN LPOVERLAPPED pOverlapped OPTIONAL IN LPOVERLAPPED pOverlapped OPTIONAL
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpAddFragmentToCache( HttpAddFragmentToCache(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN PCWSTR pUrlPrefix, IN PCWSTR pUrlPrefix,
IN PHTTP_DATA_CHUNK pDataChunk, IN PHTTP_DATA_CHUNK pDataChunk,
IN PHTTP_CACHE_POLICY pCachePolicy, IN PHTTP_CACHE_POLICY pCachePolicy,
IN LPOVERLAPPED pOverlapped OPTIONAL IN LPOVERLAPPED pOverlapped OPTIONAL
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpReadFragmentFromCache( HttpReadFragmentFromCache(
IN HANDLE ReqQueueHandle, IN HANDLE ReqQueueHandle,
IN PCWSTR pUrlPrefix, IN PCWSTR pUrlPrefix,
IN PHTTP_BYTE_RANGE pByteRange OPTIONAL, IN PHTTP_BYTE_RANGE pByteRange OPTIONAL,
OUT PVOID pBuffer, __out_bcount_part(BufferLength, *pBytesRead) OUT PVOID pBuffer,
IN ULONG BufferLength, IN ULONG BufferLength,
OUT PULONG pBytesRead OPTIONAL, OUT PULONG pBytesRead OPTIONAL,
IN LPOVERLAPPED pOverlapped OPTIONAL IN LPOVERLAPPED pOverlapped OPTIONAL
); );
// //
// Server configuration APIs // Server configuration APIs
// //
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpSetServiceConfiguration( HttpSetServiceConfiguration(
IN HANDLE ServiceHandle, // Reserved, MUST be NULL __reserved IN HANDLE ServiceHandle,
IN HTTP_SERVICE_CONFIG_ID ConfigId, IN HTTP_SERVICE_CONFIG_ID ConfigId,
IN PVOID pConfigInformation, __in_bcount(ConfigInformationLength) IN PVOID pConfigInformation,
IN ULONG ConfigInformationLength, IN ULONG ConfigInformationLength,
IN LPOVERLAPPED pOverlapped // Reserved, MUST be NULL __reserved IN LPOVERLAPPED pOverlapped
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpDeleteServiceConfiguration( HttpDeleteServiceConfiguration(
IN HANDLE ServiceHandle, // Reserved, MUST be NULL __reserved IN HANDLE ServiceHandle,
IN HTTP_SERVICE_CONFIG_ID ConfigId, IN HTTP_SERVICE_CONFIG_ID ConfigId,
IN PVOID pConfigInformation, __in_bcount(ConfigInformationLength) IN PVOID pConfigInformation,
IN ULONG ConfigInformationLength, IN ULONG ConfigInformationLength,
IN LPOVERLAPPED pOverlapped // Reserved, MUST be NULL __reserved IN LPOVERLAPPED pOverlapped
); );
HTTPAPI_LINKAGE HTTPAPI_LINKAGE
ULONG ULONG
WINAPI WINAPI
HttpQueryServiceConfiguration( HttpQueryServiceConfiguration(
IN HANDLE ServiceHandle, // Reserved, MUST be NULL __reserved IN HANDLE ServiceHandle,
IN HTTP_SERVICE_CONFIG_ID ConfigId, IN HTTP_SERVICE_CONFIG_ID ConfigId,
IN PVOID pInputConfigInformation OPTIONAL, __in_bcount_opt(InputConfigInformationLength)
IN ULONG InputConfigInformationLength OPTIONAL, IN PVOID pInputConfigInformation OPTIONAL,
IN OUT PVOID pOutputConfigInformation, IN ULONG InputConfigInformationLength OPTIONAL,
IN ULONG OutputConfigInformationLength, __out_bcount_part_opt(OutputConfigInformationLength, *pReturnLength)
OUT PULONG pReturnLength, OUT PVOID pOutputConfigInformation OPTIONAL,
IN LPOVERLAPPED pOverlapped // Reserved, MUST be NULL IN ULONG OutputConfigInformationLength OPTIONAL,
__out_opt OUT PULONG pReturnLength OPTIONAL,
__reserved IN LPOVERLAPPED pOverlapped
); );
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif // __cplusplus #endif // __cplusplus
#endif // _WIN32_WINNT >= 0x0501
#endif // __HTTP_H__ #endif // __HTTP_H__
 End of changes. 60 change blocks. 
118 lines changed or deleted 1305 lines changed or added

This html diff was produced by rfcdiff 1.41.