|
|
;begin_both /*++
Copyright (c) 1998-2002 Microsoft Corporation
Module Name:
HttpP.h
Abstract:
Private APIs and structs for HTTP.SYS
Author:
--*/
#ifndef __HTTPP_H__ #define __HTTPP_H__
#include <http.h>
#ifdef __cplusplus extern "C" { #endif // __cplusplus
// // Used by HttpInitialize & HttpTerminate // // HTTP_INITIALIZE_CLIENT - Initializes the HTTP API layer and driver for // client applications. // #define HTTP_INITIALIZE_CLIENT 0x00000004
// HTTP_SEND_REPONSE_RAW_HEADER - Specifies that a caller of // HttpSendResponseEntityBody() is intentionally omitting a call to // HttpSendHttpResponse() in order to bypass normal header processing. The // actual HTTP headers will be generated by the application and sent // as the initial part of the entity body. This flag should be passed // on the first call to HttpSendResponseEntityBody(), and not after. // #define HTTP_SEND_RESPONSE_FLAG_RAW_HEADER 0x00000004
// // Flags for HttpSendHttpRequest() & HttpSendRequestEntityBody() // #define HTTP_SEND_REQUEST_FLAG_MORE_DATA 0x00000001 #define HTTP_SEND_REQUEST_FLAG_VALID 0x00000001
// // HTTP_REQUEST_FLAG_DONT_PIPELINE - Requests that do not take entity bodies // (e.g., GETs, HEAD, etc) are pipelined when sent to a HTTP 1.1 server. This // flag allows the user to disable this feature. // #define HTTP_REQUEST_FLAG_DONT_PIPELINE 0x00000002
// // Values for HTTP_RESPONSE::Flags. Zero or more of these may be ORed together. // // HTTP_RESPONSE_FLAG_AUTH_BASIC - The response contains a Basic // authentication challenge. // // HTTP_RESPONSE_FLAG_AUTH_DIGEST - The response contains a Digest // authentication challenge. // // HTTP_RESPONSE_FLAG_AUTH_NTLM - The response contains an NTLM // authentication challenge. // // HTTP_RESPONSE_FLAG_AUTH_NEGOTIATE - The response contains a Negotiate // authentication challenge. // // HTTP_RESPONSE_FLAG_AUTH_KERBEROS - The response contains a Kerberos // authentication challenge. // // HTTP_RESPONSE_FLAG_MORE_DATA - There is more HTTP_RESPONSE to be read. // // HTTP_RESPONSE_FLAG_HEADER - The response contains at least 1 header // (known or unknown.) // // HTTP_RESPONSE_FLAG_ENTITY - The response contains at least one // entity chunk. // // HTTP_RESPONSE_FLAG_DRIVER - The response should be treated as if // it had been generated by the driver // #define HTTP_RESPONSE_FLAG_AUTH_BASIC 0x00000001 #define HTTP_RESPONSE_FLAG_AUTH_DIGEST 0x00000002 #define HTTP_RESPONSE_FLAG_AUTH_NTLM 0x00000004 #define HTTP_RESPONSE_FLAG_AUTH_NEGOTIATE 0x00000008 #define HTTP_RESPONSE_FLAG_AUTH_KERBEROS 0x00000010 #define HTTP_RESPONSE_FLAG_MORE_DATA 0x00000020 #define HTTP_RESPONSE_FLAG_HEADER 0x00000040 #define HTTP_RESPONSE_FLAG_ENTITY 0x00000080 #define HTTP_RESPONSE_FLAG_DRIVER 0x00000100
// // Generic option flags. These apply to application pools. // These are passed to HttpCreateHttpHandle. // // HTTP_OPTION_CONTROLLER - Opens the object that doesn't read data. //
#define HTTP_OPTION_CONTROLLER 0x00000001 #define HTTP_OPTION_VALID 0x00000001
typedef HTTP_OPAQUE_ID HTTP_CONFIG_GROUP_ID, *PHTTP_CONFIG_GROUP_ID;
// // Filters and SSL. //
// // Server Information/Parameters (HTTP client-side only) //
typedef struct _HTTP_CLIENT_SSL_CONTEXT { ULONG SslProtocolVersion; PVOID pClientCertContext; ULONG ServerCertValidation; ULONG ServerNameLength; WCHAR ServerName[ANYSIZE_ARRAY];
} HTTP_CLIENT_SSL_CONTEXT, *PHTTP_CLIENT_SSL_CONTEXT;
// // Data associated with raw transport connections. //
typedef struct _HTTP_RAW_CONNECTION_INFO { // // Connection ID. //
HTTP_RAW_CONNECTION_ID ConnectionId;
// // Transport address info. //
HTTP_TRANSPORT_ADDRESS Address;
// // Only used by the client-side. //
USHORT ClientSSLContextLength; PHTTP_CLIENT_SSL_CONTEXT pClientSSLContext;
// // Initial data. //
ULONG InitialDataSize; // size of initial data PVOID pInitialData; // pointer to initial data
} HTTP_RAW_CONNECTION_INFO, *PHTTP_RAW_CONNECTION_INFO;
// // Flags for HttpReceiveClientCertificate(). // // HTTP_RECEIVE_CLIENT_CERT_FLAG_MAP - Maps the client certificate to a token. //
#define HTTP_RECEIVE_CLIENT_CERT_FLAG_MAP 0x00000001 #define HTTP_RECEIVE_CLIENT_CERT_FLAG_VALID 0x00000001
// // Names of the filters. //
#define HTTP_SSL_SERVER_FILTER_CHANNEL_NAME L"SSLFilterChannel" #define HTTP_SSL_SERVER_FILTER_CHANNEL_NAME_LENGTH \ (sizeof(HTTP_SSL_SERVER_FILTER_CHANNEL_NAME)-sizeof(WCHAR))
#define HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME L"SSLClientFilterChannel" #define HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME_LENGTH \ (sizeof(HTTP_SSL_CLIENT_FILTER_CHANNEL_NAME)-sizeof(WCHAR))
// // Network QoS stuff. //
typedef ULONG HTTP_BANDWIDTH_LIMIT, *PHTTP_BANDWIDTH_LIMIT; typedef ULONG HTTP_CONNECTION_LIMIT, *PHTTP_CONNECTION_LIMIT;
// // Bandwidth throttling limit can not be set lower than the following // limit. The value is in bytes/sec. //
#define HTTP_MIN_ALLOWED_BANDWIDTH_THROTTLING_RATE (1024)
// // Distinguished value for bandwidth and connection limits indicating // "no limit". //
#define HTTP_LIMIT_INFINITE ((ULONG)-1L)
// // Enabled states. Used for configuration groups and the control channel. //
typedef enum _HTTP_ENABLED_STATE { HttpEnabledStateActive, HttpEnabledStateInactive,
HttpEnabledStateMaximum
} HTTP_ENABLED_STATE, *PHTTP_ENABLED_STATE;
// // AppPool Enabled states. //
typedef enum _HTTP_APP_POOL_ENABLED_STATE { HttpAppPoolEnabled, HttpAppPoolDisabled_RapidFailProtection, HttpAppPoolDisabled_AppPoolQueueFull, HttpAppPoolDisabled_ByAdministrator, HttpAppPoolDisabled_JobObjectFired,
HttpAppPoolEnabledMaximum
} HTTP_APP_POOL_ENABLED_STATE, *PHTTP_APP_POOL_ENABLED_STATE;
// // Load Balancer states. //
typedef enum _HTTP_LOAD_BALANCER_CAPABILITIES { HttpLoadBalancerBasicCapability = 1, HttpLoadBalancerSophisticatedCapability = 2, // default
HttpLoadBalancerMaximum
} HTTP_LOAD_BALANCER_CAPABILITIES, *PHTTP_LOAD_BALANCER_CAPABILITIES;
// // UTF8 Logging //
typedef BOOLEAN HTTP_CONTROL_CHANNEL_UTF8_LOGGING, *PHTTP_CONTROL_CHANNEL_UTF8_LOGGING;
// // Control channel query/set information classes used for the // HttpQueryControlChannelInformation() and HttpSetControlChannelInformation() // APIs. //
typedef enum _HTTP_CONTROL_CHANNEL_INFORMATION_CLASS { // // Query/set the master state. // // pControlChannelInformation points to a HTTP_ENABLED_STATE enum. //
HttpControlChannelStateInformation,
// // Query/set the default network bandwidth limit. // // pControlChannelInformation points to a HTTP_BANDWIDTH_LIMIT value. //
HttpControlChannelBandwidthInformation,
// // Query the default network connections limit. // // pControlChannelInformation points to a HTTP_CONNECTION_LIMIT value. //
HttpControlChannelConnectionInformation,
// // Set the handle used to communicate with the Filter/SSL process. // // Note this cannot be queried. //
HttpControlChannelFilterInformation,
// // Set the global Connection Timeout information // // pControlChannelInformation points to a // HTTP_CONTROL_CHANNEL_TIMEOUT_LIMIT structure. //
HttpControlChannelTimeoutInformation,
// // Set the UTF8 Logging property for all sites // // pControlChannelInformation points to a HTTP_CONTROL_CHANNEL_UTF8_LOGGING structure. // HttpControlChannelUTF8Logging,
// // Set the Binary Logging property for all cgroups belongs to this // control channel. This will effectively disables the conventional // logging. The pControlChannelInformation should point the binary // logging settings: HTTP_CONTROL_CHANNEL_BINARY_LOGGING. Please // note that when this is set, utf8 logging no longer applies since // http.sys doesn't do any string formatting. //
HttpControlChannelBinaryLogging,
// // Set the limit for number processes, below which we will still // complete Demand Start Irps. If the number of total active processes // across all AppPools associated with this control channel exceeds // this threshold, new requests that are queued to AppPools with a // pending Demand Start Irp will (1) not complete the Irp and // (2) will fail the request, returning 503 (Unavailable). // // pControlChannelInformation points to a // HTTP_CONTROL_CHANNEL_DEMAND_START_THRESHOLD structure. // HttpControlChannelDemandStartThreshold,
HttpControlChannelMaximumInformation
} HTTP_CONTROL_CHANNEL_INFORMATION_CLASS, *PHTTP_CONTROL_CHANNEL_INFORMATION_CLASS;
// // Default control channel property values. //
#define HTTP_CONTROL_CHANNEL_STATE_DEFAULT HttpEnabledStateInactive #define HTTP_CONTROL_CHANNEL_MAX_BANDWIDTH_DEFAULT HTTP_LIMIT_INFINITE
// // Application pool query/set information classes used for the // HttpQueryAppPoolInformation() and HttpSetAppPoolInformation() // APIs. //
typedef enum _HTTP_APP_POOL_INFORMATION_CLASS { // // Query/set the maximum number of queued new requests on // the application pool. // // pAppPoolInformation points to a LONG containing the maximum // number of queued requests. //
HttpAppPoolQueueLengthInformation,
// // Query/set the enabled state of the application pool. // // pAppPoolInformation points to a HTTP_APP_POOL_ENABLED_STATE enum. //
HttpAppPoolStateInformation,
// // Query/set the load balancer capabilities of the application pool. // // pAppPoolInformation points to a HTTP_LOAD_BALANCER_CAPABILITIES enum. //
HttpAppPoolLoadBalancerInformation,
// // Set the control channel associated with this application pool. // // pAppPoolInformation points to a HTTP_APP_POOL_CONTROL_CHANNEL structure //
HttpAppPoolControlChannelInformation,
HttpAppPoolMaximumInformation
} HTTP_APP_POOL_INFORMATION_CLASS, *PHTTP_APP_POOL_INFORMATION_CLASS;
// // Configuration group query/set information classes used for the // HttpQueryConfigGroupInformation() and HttpSetConfigGroupInformation() APIs. // Config Group inherit from control channel when cgroup is created. //
typedef enum _HTTP_CONFIG_GROUP_INFORMATION_CLASS { // // Query/set the current state of the configuration group. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_STATE structure // that receives the current state. //
HttpConfigGroupStateInformation,
// // Query/set the maximum network bandwidth allowed for the configuration // group. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_MAX_BANDWIDTH // structure specifying the maximum bytes per second allowed for the // container. //
HttpConfigGroupBandwidthInformation,
// // Query/set the maximum network connections allowed for the // configuration group. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_MAX_CONNECTIONS // structure containing the maximum number of network connections // allowed for the container. //
HttpConfigGroupConnectionInformation,
// // Set the application pool associated with the configuration group. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_APP_POOL // structure containing the HANDLE of the application pool to // associate. //
HttpConfigGroupAppPoolInformation,
// // Set the logging related config settings. // This allows WAS to supply logging config as a config group setting. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_LOGGING structure. // // Note: this cannot be queried. //
HttpConfigGroupLogInformation,
// // Set this information only on the root config object for the site. // // pConfigGroupInformation points to a HTTP_CONFIG_GROUP_SITE structure. //
HttpConfigGroupSiteInformation,
// // Set this information only on the root config object for the site. // // pConfigGroupInformation points to a DWORD that contains // the ConnectionTimeout value (in seconds) //
HttpConfigGroupConnectionTimeoutInformation,
HttpConfigGroupMaximumInformation
} HTTP_CONFIG_GROUP_INFORMATION_CLASS, *PHTTP_CONFIG_GROUP_INFORMATION_CLASS;
// // Generic configuration group property flags. Each structure defining a // property value must contain an element of this type. //
typedef struct _HTTP_PROPERTY_FLAGS { ULONG_PTR Present:1; // ULONG_PTR for alignment
} HTTP_PROPERTY_FLAGS, *PHTTP_PROPERTY_FLAGS;
// // Individual property values. //
// HttpControlChannelTimeoutInformation typedef struct _HTTP_CONTROL_CHANNEL_TIMEOUT_LIMIT { HTTP_PROPERTY_FLAGS Flags; ULONG ConnectionTimeout; // Seconds ULONG HeaderWaitTimeout; // Seconds ULONG MinFileKbSec; // Bytes/Second } HTTP_CONTROL_CHANNEL_TIMEOUT_LIMIT, *PHTTP_CONTROL_CHANNEL_TIMEOUT_LIMIT;
// HttpControlChannelDemandStartThreshold typedef struct _HTTP_CONTROL_CHANNEL_DEMAND_START_THRESHOLD { HTTP_PROPERTY_FLAGS Flags; ULONG DemandStartThreshold; // App Pool Processes } HTTP_CONTROL_CHANNEL_DEMAND_START_THRESHOLD, *PHTTP_CONTROL_CHANNEL_DEMAND_START_THRESHOLD;
// HttpAppPoolControlChannelInformation typedef struct _HTTP_APP_POOL_CONTROL_CHANNEL { HTTP_PROPERTY_FLAGS Flags; HANDLE ControlChannel; } HTTP_APP_POOL_CONTROL_CHANNEL, *PHTTP_APP_POOL_CONTROL_CHANNEL;
typedef struct _HTTP_CONFIG_GROUP_STATE { HTTP_PROPERTY_FLAGS Flags; HTTP_ENABLED_STATE State;
} HTTP_CONFIG_GROUP_STATE, *PHTTP_CONFIG_GROUP_STATE;
typedef struct _HTTP_CONFIG_GROUP_MAX_BANDWIDTH { HTTP_PROPERTY_FLAGS Flags; HTTP_BANDWIDTH_LIMIT MaxBandwidth;
} HTTP_CONFIG_GROUP_MAX_BANDWIDTH, *PHTTP_CONFIG_GROUP_MAX_BANDWIDTH;
typedef struct _HTTP_CONFIG_GROUP_MAX_CONNECTIONS { HTTP_PROPERTY_FLAGS Flags; HTTP_CONNECTION_LIMIT MaxConnections;
} HTTP_CONFIG_GROUP_MAX_CONNECTIONS, *PHTTP_CONFIG_GROUP_MAX_CONNECTIONS;
typedef struct _HTTP_CONTROL_CHANNEL_FILTER { HTTP_PROPERTY_FLAGS Flags; HANDLE FilterHandle; BOOLEAN FilterOnlySsl;
} HTTP_CONTROL_CHANNEL_FILTER, *PHTTP_CONTROL_CHANNEL_FILTER;
typedef struct _HTTP_CONFIG_GROUP_APP_POOL { HTTP_PROPERTY_FLAGS Flags; HANDLE AppPoolHandle;
} HTTP_CONFIG_GROUP_APP_POOL, *PHTTP_CONFIG_GROUP_APP_POOL;
typedef struct _HTTP_CONFIG_GROUP_SECURITY { HTTP_PROPERTY_FLAGS Flags; PSECURITY_DESCRIPTOR pSecurityDescriptor;
} HTTP_CONFIG_GROUP_SECURITY, *PHTTP_CONFIG_GROUP_SECURITY;
// // Log file truncation size can not be set lower than the following // limit. The value is in bytes. //
#define HTTP_MIN_ALLOWED_TRUNCATE_SIZE_FOR_LOG_FILE (1 * 1024 * 1024)
typedef enum _HTTP_LOGGING_TYPE { HttpLoggingTypeW3C, HttpLoggingTypeIIS, HttpLoggingTypeNCSA, HttpLoggingTypeRaw,
HttpLoggingTypeMaximum
} HTTP_LOGGING_TYPE, *PHTTP_LOGGING_TYPE;
typedef enum _HTTP_LOGGING_PERIOD { HttpLoggingPeriodMaxSize = 0, HttpLoggingPeriodDaily = 1, HttpLoggingPeriodWeekly = 2, HttpLoggingPeriodMonthly = 3, HttpLoggingPeriodHourly = 4,
HttpLoggingPeriodMaximum
} HTTP_LOGGING_PERIOD, *PHTTP_LOGGING_PERIOD;
typedef enum _HTTP_SELECTIVE_LOGGING_TYPE { HttpLogAllRequests, HttpLogSuccessfulRequests, HttpLogErrorRequests, HttpSelectiveLoggingMaximum } HTTP_SELECTIVE_LOGGING_TYPE, *PHTTP_SELECTIVE_LOGGING_TYPE;
typedef struct _HTTP_CONFIG_GROUP_LOGGING { // // To indicate if this property exists or not in the config group //
HTTP_PROPERTY_FLAGS Flags;
// // This is field's counterpart in the metabase is LogType //
BOOLEAN LoggingEnabled;
// // Indicates the Logging Format //
HTTP_LOGGING_TYPE LogFormat;
// // Indicates the exact directory where the log file // will be written to for a site. //
UNICODE_STRING LogFileDir;
// // Log Period in terms of HTTP_LOGGING_PERIOD // 0 = MAX SIZE, 1 = DAILY, 2 = WEEKLY, // 3 = MONTHLY, 4 = HOURLY //
ULONG LogPeriod;
// // Indicates the max size,in bytes,after which the // log file should be rotated. A value of -1 // (HTTP_LIMIT_INFINITE) indicates unlimited size. //
ULONG LogFileTruncateSize;
// // A bitmask indicating which fields to log when // LogFormat is set to W3C Extended //
ULONG LogExtFileFlags;
// // If this has been set then we recycle log files // based on the local time for this site. Default // should be FALSE. // BOOLEAN LocaltimeRollover;
// // Selective logging type. If HttpLogAllRequests // is picked all types of requests are logged. //
HTTP_SELECTIVE_LOGGING_TYPE SelectiveLogging;
} HTTP_CONFIG_GROUP_LOGGING, *PHTTP_CONFIG_GROUP_LOGGING;
// // When LogFormat is Raw (Binary) and logging settings are // configured through control channel for all sites, following // binary logging settings structure should be used. //
typedef struct _HTTP_CONTROL_CHANNEL_BINARY_LOGGING { // // To indicate if this property exist or not // in the config group //
HTTP_PROPERTY_FLAGS Flags;
// // This is field's counterpart in the metabase is // LogType //
BOOLEAN LoggingEnabled;
// // If this has been set then we recycle log files // based on the local time for this site. Default // should be FALSE. // BOOLEAN LocaltimeRollover;
// // Indicates the exact directory where the log file // will be written to for a site. //
UNICODE_STRING LogFileDir;
// // Log Period in terms of HTTP_LOGGING_PERIOD // 0 = MAX SIZE, 1 = DAILY, 2 = WEEKLY, // 3 = MONTHLY, 4 = HOURLY //
ULONG LogPeriod;
// // Indicates the max size,in bytes,after which the // log file should be rotated. A value of -1 // (HTTP_LIMIT_INFINITE) indicates unlimited size. //
ULONG LogFileTruncateSize;
} HTTP_CONTROL_CHANNEL_BINARY_LOGGING, * PHTTP_CONTROL_CHANNEL_BINARY_LOGGING;
// // HTTP_CONFIG_GROUP_SITE //
typedef struct _HTTP_CONFIG_GROUP_SITE { ULONG SiteId;
} HTTP_CONFIG_GROUP_SITE, *PHTTP_CONFIG_GROUP_SITE;
// // This structure holds all the necessary logging info. // Server App may pass this with last SendResponse or // SendEntityBody APIs.Unicode field lengths are in bytes. //
typedef struct _HTTP_LOG_FIELDS_DATA { USHORT UserNameLength; USHORT UriStemLength; USHORT ClientIpLength; USHORT ServerNameLength; USHORT ServiceNameLength; USHORT ServerIpLength; USHORT MethodLength; USHORT UriQueryLength; USHORT HostLength; USHORT UserAgentLength; USHORT CookieLength; USHORT ReferrerLength;
PCWSTR UserName; PCWSTR UriStem; PCSTR ClientIp; PCSTR ServerName; PCSTR ServiceName; PCSTR ServerIp; PCSTR Method; PCSTR UriQuery; PCSTR Host; PCSTR UserAgent; PCSTR Cookie; PCSTR Referrer;
USHORT ServerPort; USHORT ProtocolStatus; ULONG Win32Status;
HTTP_VERB MethodNum;
USHORT SubStatus;
} HTTP_LOG_FIELDS_DATA, *PHTTP_LOG_FIELDS_DATA;
// // For transfers between filters and upper levels. //
typedef enum _HTTP_FILTER_BUFFER_TYPE { HttpFilterBufferHttpStream, // both directions HttpFilterBufferSslInitInfo, // filter -> app HttpFilterBufferSslServerCert, // filter -> app (HTTP client only) HttpFilterBufferSslClientCert, // filter -> app HttpFilterBufferSslClientCertAndMap, // filter -> app HttpFilterBufferSslRenegotiate, // app -> filter HttpFilterBufferSslRenegotiateAndMap, // app -> filter HttpFilterBufferCloseConnection, // app -> filter HttpFilterBufferNotifyDisconnect, // filter -> app
HttpFilterBufferMaximum
} HTTP_FILTER_BUFFER_TYPE, *PHTTP_FILTER_BUFFER_TYPE;
// // The buffer transferred between filters and upper levels. //
typedef struct _HTTP_FILTER_BUFFER { HTTP_FILTER_BUFFER_TYPE BufferType;
ULONG BufferSize; PUCHAR pBuffer;
ULONGLONG Reserved;
} HTTP_FILTER_BUFFER, *PHTTP_FILTER_BUFFER;
// // Appends write buffer info to the filter buffer struct. This is used for // posting both a read and a write in a single IOCTL call. //
typedef struct _HTTP_FILTER_BUFFER_PLUS { HTTP_FILTER_BUFFER_TYPE BufferType;
ULONG BufferSize; PUCHAR pBuffer;
ULONGLONG Reserved;
ULONG WriteBufferSize; PUCHAR pWriteBuffer;
} HTTP_FILTER_BUFFER_PLUS, *PHTTP_FILTER_BUFFER_PLUS;
// // Counter Group. //
// // Counter property description. //
typedef struct _HTTP_PROP_DESC { ULONG Size; ULONG Offset; BOOLEAN WPZeros;
} HTTP_PROP_DESC, *PHTTP_PROP_DESC;
// // This enum defines the available counter groups. //
typedef enum _HTTP_COUNTER_GROUP { HttpCounterGroupSite, HttpCounterGroupGlobal,
HttpCounterGroupMaximum
} HTTP_COUNTER_GROUP, *PHTTP_COUNTER_GROUP;
// // This enum defines the type of global couters. //
typedef enum _HTTP_GLOBAL_COUNTER_ID { HttpGlobalCounterCurrentUrisCached, HttpGlobalCounterTotalUrisCached, HttpGlobalCounterUriCacheHits, HttpGlobalCounterUriCacheMisses, HttpGlobalCounterUriCacheFlushes, HttpGlobalCounterTotalFlushedUris,
HttpGlobalCounterMaximum
} HTTP_GLOBAL_COUNTER_ID, *PHTTP_GLOBAL_COUNTER_ID;
// // Global couters. //
typedef struct _HTTP_GLOBAL_COUNTERS { ULONG CurrentUrisCached; ULONG TotalUrisCached; ULONG UriCacheHits; ULONG UriCacheMisses; ULONG UriCacheFlushes; ULONG TotalFlushedUris;
} HTTP_GLOBAL_COUNTERS, *PHTTP_GLOBAL_COUNTERS;
// // This enum defines the type of site counters. // NB: HTTP_SITE_COUNTER_ID and HTTP_SITE_COUNTERS // must be in the same order //
typedef enum _HTTP_SITE_COUNTER_ID { HttpSiteCounterBytesSent, HttpSiteCounterBytesReceived, HttpSiteCounterBytesTransfered, HttpSiteCounterCurrentConns, HttpSiteCounterMaxConnections, HttpSiteCounterConnAttempts, HttpSiteCounterGetReqs, HttpSiteCounterHeadReqs, HttpSiteCounterAllReqs, HttpSiteCounterMeasuredIoBandwidthUsage, HttpSiteCounterCurrentBlockedBandwidthBytes, HttpSiteCounterTotalBlockedBandwidthBytes,
HttpSiteCounterMaximum
} HTTP_SITE_COUNTER_ID, *PHTTP_SITE_COUNTER_ID;
// // Site counters. //
typedef struct _HTTP_SITE_COUNTERS { ULONG SiteId; ULONGLONG BytesSent; ULONGLONG BytesReceived; ULONGLONG BytesTransfered; ULONG CurrentConns; ULONG MaxConnections; ULONG ConnAttempts; ULONG GetReqs; ULONG HeadReqs; ULONG AllReqs; ULONG MeasuredIoBandwidthUsage; ULONG CurrentBlockedBandwidthBytes; ULONG TotalBlockedBandwidthBytes;
} HTTP_SITE_COUNTERS, *PHTTP_SITE_COUNTERS;
// *************************************************************************** // // Data structures for Client APIs (Begin) // // ***************************************************************************
// // These are used for setting per-request config options. //
typedef enum _HTTP_REQUEST_CONFIG_ID { HttpRequestConfigAuthentication, HttpRequestConfigProxyAuthentication, HttpRequestConfigConnectionIndex,
HttpRequestConfigMaxConfigId
} HTTP_REQUEST_CONFIG_ID, *PHTTP_REQUEST_CONFIG_ID;
typedef struct _HTTP_REQUEST_CONFIG { HTTP_REQUEST_CONFIG_ID ObjectType; PVOID pValue; ULONG ValueLength;
} HTTP_REQUEST_CONFIG, *PHTTP_REQUEST_CONFIG;
typedef enum _HTTP_AUTH_TYPE { HttpAuthTypeAutoSelect = 0, HttpAuthTypeBasic, HttpAuthTypeDigest, HttpAuthTypeNTLM, HttpAuthTypeNegotiate, HttpAuthTypeKerberos, HttpAuthTypesCount } HTTP_AUTH_TYPE, *PHTTP_AUTH_TYPE;
#define HTTP_AUTH_FLAGS_DEFAULT_CREDENTIALS 0x00000001 #define HTTP_AUTH_FLAGS_VALID 0x00000001
// // The config object for HttpRequestConfigAuthentication, // HttpRequestConfigProxyAuthentication types. //
typedef struct _HTTP_AUTH_CREDENTIALS { HTTP_AUTH_TYPE AuthType;
ULONG AuthFlags;
USHORT UserNameLength; // In bytes, not including NUL USHORT PasswordLength; // In bytes, not including NUL USHORT DomainLength; // In bytes, not including NUL PCWSTR pUserName; PCWSTR pPassword; PCWSTR pDomain;
USHORT HeaderValueLength; PCSTR pHeaderValue; // The value of WWW-Authenticate header // or Proxy-Authenticate header as returned // by the server.
} HTTP_AUTH_CREDENTIALS, *PHTTP_AUTH_CREDENTIALS;
// // This is for setting configuration on a ServerContext - // Via HttpSetServerContextInformation & HttpQueryServerContextInformation. //
typedef enum _HTTP_SERVER_CONFIG_ID { HttpServerConfigConnectionCount, // set & query HttpServerConfigProxyPreAuthState, // set & query HttpServerConfigProxyPreAuthFlushCache, // only set HttpServerConfigPreAuthState, // set & query HttpServerConfigPreAuthFlushURICache, // only set HttpServerConfigIgnoreContinueState, // set & query HttpServerConfigConnectionTimeout, // set & query HttpServerConfigServerCert, // only query HttpServerConfigServerCertValidation, // set & query HttpServerConfigServerCertAccept, // only set HttpServerConfigSslProtocolVersion, // set & query HttpServerConfigClientCert, // set & query HttpServerConfigClientCertIssuerList, // only query
HttpServerConfigMaxInformation
} HTTP_SERVER_CONFIG_ID, *PHTTP_SERVER_CONFIG_ID;
// // Validate server certificate types //
typedef enum _HTTP_SSL_SERVER_CERT_VALIDATION { HttpSslServerCertValidationIgnore, HttpSslServerCertValidationManual, HttpSslServerCertValidationManualOnce, HttpSslServerCertValidationAutomatic,
HttpSslServerCertValidationMax
} HTTP_SSL_SERVER_CERT_VALIDATION, *PHTTP_SSL_SERVER_CERT_VALIDATION;
// // Server certificate information //
typedef struct _HTTP_SSL_CERT_ISSUER_INFO { ULONG IssuerCount; ULONG IssuerListLength; PVOID pIssuerList; } HTTP_SSL_CERT_ISSUER_INFO, *PHTTP_SSL_CERT_ISSUER_INFO;
typedef struct _HTTP_SSL_SERIALIZED_CERT { ULONG Flags;
#define HTTP_SSL_CERT_HASH_LENGTH 32
ULONG CertHashLength:8; UCHAR CertHash[HTTP_SSL_CERT_HASH_LENGTH];
PUCHAR pSerializedCert; ULONG SerializedCertLength;
PUCHAR pSerializedCertStore; ULONG SerializedCertStoreLength;
} HTTP_SSL_SERIALIZED_CERT, *PHTTP_SSL_SERIALIZED_CERT;
typedef struct _HTTP_SSL_SERVER_CERT_INFO { ULONG Status;
HTTP_SSL_CERT_ISSUER_INFO IssuerInfo;
HTTP_SSL_SERIALIZED_CERT Cert;
} HTTP_SSL_SERVER_CERT_INFO, *PHTTP_SSL_SERVER_CERT_INFO;
;end_both
;begin_public
// *************************************************************************** // // Data structures for Client APIs (End) // // ***************************************************************************
// // Define our API linkage. //
#if !defined(HTTPAPI_LINKAGE) #define HTTPAPI_LINKAGE DECLSPEC_IMPORT #endif // !HTTPAPI_LINKAGE
// // Control channel APIs. //
HTTPAPI_LINKAGE ULONG WINAPI HttpOpenControlChannel( OUT PHANDLE pControlChannelHandle, IN ULONG Options );
HTTPAPI_LINKAGE ULONG WINAPI HttpQueryControlChannelInformation( IN HANDLE ControlChannelHandle, IN HTTP_CONTROL_CHANNEL_INFORMATION_CLASS InformationClass, OUT PVOID pControlChannelInformation, IN ULONG Length, OUT PULONG pReturnLength OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpSetControlChannelInformation( IN HANDLE ControlChannelHandle, IN HTTP_CONTROL_CHANNEL_INFORMATION_CLASS InformationClass, IN PVOID pControlChannelInformation, IN ULONG Length );
// // Configuration Group APIs. //
HTTPAPI_LINKAGE ULONG WINAPI HttpCreateConfigGroup( IN HANDLE ControlChannelHandle, OUT PHTTP_CONFIG_GROUP_ID pConfigGroupId );
HTTPAPI_LINKAGE ULONG WINAPI HttpDeleteConfigGroup( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId );
HTTPAPI_LINKAGE ULONG WINAPI HttpAddUrlToConfigGroup( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId, IN PCWSTR pFullyQualifiedUrl, IN HTTP_URL_CONTEXT UrlContext );
HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveUrlFromConfigGroup( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId, IN PCWSTR pFullyQualifiedUrl );
HTTPAPI_LINKAGE ULONG WINAPI HttpRemoveAllUrlsFromConfigGroup( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId );
HTTPAPI_LINKAGE ULONG WINAPI HttpQueryConfigGroupInformation( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId, IN HTTP_CONFIG_GROUP_INFORMATION_CLASS InformationClass, OUT PVOID pConfigGroupInformation, IN ULONG Length, OUT PULONG pReturnLength OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpSetConfigGroupInformation( IN HANDLE ControlChannelHandle, IN HTTP_CONFIG_GROUP_ID ConfigGroupId, IN HTTP_CONFIG_GROUP_INFORMATION_CLASS InformationClass, IN PVOID pConfigGroupInformation, IN ULONG Length );
// // Application Pool manipulation APIs. //
HTTPAPI_LINKAGE ULONG WINAPI HttpCreateAppPool( OUT PHANDLE pAppPoolHandle, IN PCWSTR pAppPoolName, IN LPSECURITY_ATTRIBUTES pSecurityAttributes OPTIONAL, IN ULONG Options );
HTTPAPI_LINKAGE ULONG WINAPI HttpOpenAppPool( OUT PHANDLE pAppPoolHandle, IN PCWSTR pAppPoolName, IN ULONG Options );
HTTPAPI_LINKAGE ULONG WINAPI HttpShutdownAppPool( IN HANDLE AppPoolHandle );
HTTPAPI_LINKAGE ULONG WINAPI HttpQueryAppPoolInformation( IN HANDLE AppPoolHandle, IN HTTP_APP_POOL_INFORMATION_CLASS InformationClass, OUT PVOID pAppPoolInformation, IN ULONG Length, OUT PULONG pReturnLength OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpSetAppPoolInformation( IN HANDLE AppPoolHandle, IN HTTP_APP_POOL_INFORMATION_CLASS InformationClass, IN PVOID pAppPoolInformation, IN ULONG Length );
// // Demand start notifications. //
HTTPAPI_LINKAGE ULONG WINAPI HttpWaitForDemandStart( IN HANDLE AppPoolHandle, IN OUT PVOID pBuffer OPTIONAL, IN ULONG BufferLength OPTIONAL, IN PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
// // API calls for SSL/Filter helper process. //
HTTPAPI_LINKAGE ULONG WINAPI HttpCreateFilter( OUT PHANDLE pFilterHandle, IN PCWSTR pFilterName, IN LPSECURITY_ATTRIBUTES pSecurityAttributes OPTIONAL, IN ULONG Options );
HTTPAPI_LINKAGE ULONG WINAPI HttpOpenFilter( OUT PHANDLE pFilterHandle, IN PCWSTR pFilterName, IN ULONG Options );
HTTPAPI_LINKAGE ULONG WINAPI HttpShutdownFilter( IN HANDLE FilterHandle );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterAccept( IN HANDLE FilterHandle, OUT PHTTP_RAW_CONNECTION_INFO pRawConnectionInfo, IN ULONG RawConnectionInfoSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterClose( IN HANDLE FilterHandle, IN HTTP_RAW_CONNECTION_ID ConnectionId, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterRawWriteAndAppRead( IN HANDLE FilterHandle, IN OUT PHTTP_FILTER_BUFFER_PLUS pHttpBufferPlus, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterAppWriteAndRawRead( IN HANDLE FilterHandle, IN OUT PHTTP_FILTER_BUFFER_PLUS pHttpBufferPlus, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterRawRead( IN HANDLE FilterHandle, IN HTTP_RAW_CONNECTION_ID ConnectionId, OUT PVOID pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL ); HTTPAPI_LINKAGE ULONG WINAPI HttpFilterRawWrite( IN HANDLE FilterHandle, IN HTTP_RAW_CONNECTION_ID ConnectionId, IN PVOID pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterAppRead( IN HANDLE FilterHandle, IN HTTP_RAW_CONNECTION_ID ConnectionId, IN OUT PHTTP_FILTER_BUFFER pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpFilterAppWrite( IN HANDLE FilterHandle, IN HTTP_RAW_CONNECTION_ID ConnectionId, IN OUT PHTTP_FILTER_BUFFER pBuffer, IN ULONG BufferSize, OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
// // Counter Group APIs. //
HTTPAPI_LINKAGE ULONG WINAPI HttpGetCounters( IN HANDLE ControlChannelHandle, IN HTTP_COUNTER_GROUP CounterGroup, IN OUT PULONG pCounterBlockSize, IN OUT PVOID pCounterBlocks, OUT PULONG pNumInstances OPTIONAL );
// // HTTP client APIs //
HTTPAPI_LINKAGE ULONG WINAPI HttpInitializeServerContext( IN USHORT ServerNameLength, IN PWSTR pServerName, IN USHORT ProxyLength OPTIONAL, IN PWSTR pProxy OPTIONAL, IN ULONG ServerFlags OPTIONAL, IN PVOID pReserved, OUT PHANDLE pServerHandle );
HTTPAPI_LINKAGE ULONG WINAPI HttpSendHttpRequest( IN HANDLE ServerHandle, IN PHTTP_REQUEST pHttpRequest, IN ULONG HttpRequestFlags, IN USHORT RequestConfigCount OPTIONAL, IN PHTTP_REQUEST_CONFIG pRequestConfig OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL, IN ULONG ResponseBufferLength OPTIONAL, OUT PHTTP_RESPONSE pResponseBuffer OPTIONAL, IN ULONG Reserved, // must be 0 OUT PVOID pReserved, // must be NULL OUT PULONG pBytesReceived OPTIONAL, OUT PHTTP_REQUEST_ID pRequestID );
HTTPAPI_LINKAGE ULONG WINAPI HttpSendRequestEntityBody( IN HANDLE ServerHandle, IN HTTP_REQUEST_ID RequestID, IN ULONG Flags, IN USHORT EntityBodyCount, IN PHTTP_DATA_CHUNK pHttpEntityBody, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpReceiveHttpResponse( IN HANDLE ServerHandle, IN HTTP_REQUEST_ID RequestID, IN ULONG Flags, IN ULONG ResponseBufferLength, OUT PHTTP_RESPONSE pResponseBuffer, IN ULONG Reserved, // must be 0 OUT PVOID pReserved, // must be NULL OUT PULONG pBytesReceived OPTIONAL, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpSetServerContextInformation( IN HANDLE ServerHandle, IN HTTP_SERVER_CONFIG_ID ConfigId, IN PVOID pInputBuffer, IN ULONG InputBufferLength, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpQueryServerContextInformation( IN HANDLE ServerHandle, IN HTTP_SERVER_CONFIG_ID ConfigId, IN PVOID pReserved1, IN ULONG Reserved2, OUT PVOID pOutputBuffer, IN ULONG OutputBufferLength, OUT PULONG pReturnLength, IN LPOVERLAPPED pOverlapped OPTIONAL );
HTTPAPI_LINKAGE ULONG WINAPI HttpCancelHttpRequest( IN HANDLE ServerHandle, IN HTTP_REQUEST_ID RequestID, IN ULONG Flags, IN LPOVERLAPPED pOverlapped OPTIONAL );
;end_public
;begin_both
#ifdef __cplusplus } // extern "C" #endif // __cplusplus
#endif // __HTTPP_H__
;end_both
|