summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/httpfilt.h
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/httpfilt.h
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'public/sdk/inc/httpfilt.h')
-rw-r--r--public/sdk/inc/httpfilt.h471
1 files changed, 471 insertions, 0 deletions
diff --git a/public/sdk/inc/httpfilt.h b/public/sdk/inc/httpfilt.h
new file mode 100644
index 000000000..5613c150c
--- /dev/null
+++ b/public/sdk/inc/httpfilt.h
@@ -0,0 +1,471 @@
+/*++
+
+Copyright (c) 1995-1996 Microsoft Corporation
+
+Module Name:
+
+ httpfilt.h
+
+Abstract:
+
+ This module contains the Microsoft HTTP filter extension info
+
+Revision History:
+
+--*/
+
+#ifndef _HTTPFILT_H_
+#define _HTTPFILT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// Current version of the filter spec is 2.0
+//
+
+#define HTTP_FILTER_REVISION MAKELONG( 0, 2);
+
+#define SF_MAX_USERNAME (256+1)
+#define SF_MAX_PASSWORD (256+1)
+
+#define SF_MAX_FILTER_DESC_LEN (256+1)
+
+//
+// These values can be used with the pfnSFCallback function supplied in
+// the filter context structure
+//
+
+enum SF_REQ_TYPE
+{
+ //
+ // Sends a complete HTTP server response header including
+ // the status, server version, message time and MIME version.
+ //
+ // Server extensions should append other information at the end,
+ // such as Content-type, Content-length etc followed by an extra
+ // '\r\n'.
+ //
+ // pData - Zero terminated string pointing to optional
+ // status string (i.e., "401 Access Denied") or NULL for
+ // the default response of "200 OK".
+ //
+ // ul1 - Zero terminated string pointing to optional data to be
+ // appended and set with the header. If NULL, the header will
+ // be terminated with an empty line.
+ //
+
+ SF_REQ_SEND_RESPONSE_HEADER,
+
+ //
+ // If the server denies the HTTP request, add the specified headers
+ // to the server error response.
+ //
+ // This allows an authentication filter to advertise its services
+ // w/o filtering every request. Generally the headers will be
+ // WWW-Authenticate headers with custom authentication schemes but
+ // no restriction is placed on what headers may be specified.
+ //
+ // pData - Zero terminated string pointing to one or more header lines
+ // with terminating '\r\n'.
+ //
+
+ SF_REQ_ADD_HEADERS_ON_DENIAL,
+
+ //
+ // Only used by raw data filters that return SF_STATUS_READ_NEXT
+ //
+ // ul1 - size in bytes for the next read
+ //
+
+ SF_REQ_SET_NEXT_READ_SIZE,
+
+ //
+ // Used to indicate this request is a proxy request
+ //
+ // ul1 - The proxy flags to set
+ // 0x00000001 - This is a HTTP proxy request
+ //
+ //
+
+ SF_REQ_SET_PROXY_INFO,
+
+ //
+ // Returns the connection ID contained in the ConnID field of an
+ // ISAPI Application's Extension Control Block. This value can be used
+ // as a key to cooridinate shared data between Filters and Applications.
+ //
+ // pData - Pointer to DWORD that receives the connection ID.
+ //
+
+ SF_REQ_GET_CONNID
+};
+
+
+//
+// These values are returned by the filter entry point when a new request is
+// received indicating their interest in this particular request
+//
+
+enum SF_STATUS_TYPE
+{
+ //
+ // The filter has handled the HTTP request. The server should disconnect
+ // the session.
+ //
+
+ SF_STATUS_REQ_FINISHED = 0x8000000,
+
+ //
+ // Same as SF_STATUS_FINISHED except the server should keep the TCP
+ // session open if the option was negotiated
+ //
+
+ SF_STATUS_REQ_FINISHED_KEEP_CONN,
+
+ //
+ // The next filter in the notification chain should be called
+ //
+
+ SF_STATUS_REQ_NEXT_NOTIFICATION,
+
+ //
+ // This filter handled the notification. No other handles should be
+ // called for this particular notification type
+ //
+
+ SF_STATUS_REQ_HANDLED_NOTIFICATION,
+
+ //
+ // An error occurred. The server should use GetLastError() and indicate
+ // the error to the client
+ //
+
+ SF_STATUS_REQ_ERROR,
+
+ //
+ // The filter is an opaque stream filter and we're negotiating the
+ // session parameters. Only valid for raw read notification.
+ //
+
+ SF_STATUS_REQ_READ_NEXT
+};
+
+//
+// pvNotification points to this structure for all request notification types
+//
+
+typedef struct _HTTP_FILTER_CONTEXT
+{
+ DWORD cbSize;
+
+ //
+ // This is the structure revision level.
+ //
+
+ DWORD Revision;
+
+ //
+ // Private context information for the server.
+ //
+
+ PVOID ServerContext;
+ DWORD ulReserved;
+
+ //
+ // TRUE if this request is coming over a secure port
+ //
+
+ BOOL fIsSecurePort;
+
+ //
+ // A context that can be used by the filter
+ //
+
+ PVOID pFilterContext;
+
+ //
+ // Server callbacks
+ //
+
+ BOOL (WINAPI * GetServerVariable) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszVariableName,
+ LPVOID lpvBuffer,
+ LPDWORD lpdwSize
+ );
+
+ BOOL (WINAPI * AddResponseHeaders) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszHeaders,
+ DWORD dwReserved
+ );
+
+ BOOL (WINAPI * WriteClient) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPVOID Buffer,
+ LPDWORD lpdwBytes,
+ DWORD dwReserved
+ );
+
+ VOID * (WINAPI * AllocMem) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ DWORD cbSize,
+ DWORD dwReserved
+ );
+
+ BOOL (WINAPI * ServerSupportFunction) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ enum SF_REQ_TYPE sfReq,
+ PVOID pData,
+ DWORD ul1,
+ DWORD ul2
+ );
+
+} HTTP_FILTER_CONTEXT, *PHTTP_FILTER_CONTEXT;
+
+//
+// This structure is the notification info for the read and send raw data
+// notification types
+//
+
+typedef struct _HTTP_FILTER_RAW_DATA
+{
+ //
+ // This is a pointer to the data for the filter to process.
+ //
+
+ PVOID pvInData;
+ DWORD cbInData; // Number of valid data bytes
+ DWORD cbInBuffer; // Total size of buffer
+
+ DWORD dwReserved;
+
+} HTTP_FILTER_RAW_DATA, *PHTTP_FILTER_RAW_DATA;
+
+//
+// This structure is the notification info for when the server is about to
+// process the client headers
+//
+
+typedef struct _HTTP_FILTER_PREPROC_HEADERS
+{
+ //
+ // Retrieves the specified header value. Header names should include
+ // the trailing ':'. The special values 'method', 'url' and 'version'
+ // can be used to retrieve the individual portions of the request line
+ //
+
+ BOOL (WINAPI * GetHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPVOID lpvBuffer,
+ LPDWORD lpdwSize
+ );
+
+ //
+ // Replaces this header value to the specified value. To delete a header,
+ // specified a value of '\0'.
+ //
+
+ BOOL (WINAPI * SetHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPSTR lpszValue
+ );
+
+ //
+ // Adds the specified header and value
+ //
+
+ BOOL (WINAPI * AddHeader) (
+ struct _HTTP_FILTER_CONTEXT * pfc,
+ LPSTR lpszName,
+ LPSTR lpszValue
+ );
+
+ DWORD dwReserved;
+} HTTP_FILTER_PREPROC_HEADERS, *PHTTP_FILTER_PREPROC_HEADERS;
+
+//
+// Authentication information for this request.
+//
+
+typedef struct _HTTP_FILTER_AUTHENT
+{
+ //
+ // Pointer to username and password, empty strings for the anonymous user
+ //
+ // Client's can overwrite these buffers which are guaranteed to be at
+ // least SF_MAX_USERNAME and SF_MAX_PASSWORD bytes large.
+ //
+
+ CHAR * pszUser;
+ DWORD cbUserBuff;
+
+ CHAR * pszPassword;
+ DWORD cbPasswordBuff;
+
+} HTTP_FILTER_AUTHENT, *PHTTP_FILTER_AUTHENT;
+
+//
+// Indicates the server is going to use the specific physical mapping for
+// the specified URL. Filters can modify the physical path in place.
+//
+
+typedef struct _HTTP_FILTER_URL_MAP
+{
+ const CHAR * pszURL;
+
+ CHAR * pszPhysicalPath;
+ DWORD cbPathBuff;
+
+} HTTP_FILTER_URL_MAP, *PHTTP_FILTER_URL_MAP;
+
+//
+// Bitfield indicating the requested resource has been denied by the server due
+// to a logon failure, an ACL on a resource, an ISAPI Filter or an
+// ISAPI Application/CGI Application.
+//
+// SF_DENIED_BY_CONFIG can appear with SF_DENIED_LOGON if the server
+// configuration did not allow the user to logon.
+//
+
+#define SF_DENIED_LOGON 0x00000001
+#define SF_DENIED_RESOURCE 0x00000002
+#define SF_DENIED_FILTER 0x00000004
+#define SF_DENIED_APPLICATION 0x00000008
+
+#define SF_DENIED_BY_CONFIG 0x00010000
+
+typedef struct _HTTP_FILTER_ACCESS_DENIED
+{
+ const CHAR * pszURL; // Requesting URL
+ const CHAR * pszPhysicalPath; // Physical path of resource
+ DWORD dwReason; // Bitfield of SF_DENIED flags
+
+} HTTP_FILTER_ACCESS_DENIED, *PHTTP_FILTER_ACCESS_DENIED;
+
+//
+// The log information about to be written to the server log file. The
+// string pointers can be replaced but the memory must remain valid until
+// the next notification
+//
+
+typedef struct _HTTP_FILTER_LOG
+{
+ const CHAR * pszClientHostName;
+ const CHAR * pszClientUserName;
+ const CHAR * pszServerName;
+ const CHAR * pszOperation;
+ const CHAR * pszTarget;
+ const CHAR * pszParameters;
+
+ DWORD dwHttpStatus;
+ DWORD dwWin32Status;
+
+} HTTP_FILTER_LOG, *PHTTP_FILTER_LOG;
+
+//
+// Notification Flags
+//
+// SF_NOTIFY_SECURE_PORT
+// SF_NOTIFY_NONSECURE_PORT
+//
+// Indicates whether the application wants to be notified for transactions
+// that are happenning on the server port(s) that support data encryption
+// (such as PCT and SSL), on only the non-secure port(s) or both.
+//
+// SF_NOTIFY_READ_RAW_DATA
+//
+// Applications are notified after the server reads a block of memory
+// from the client but before the server does any processing on the
+// block. The data block may contain HTTP headers and entity data.
+//
+//
+//
+
+#define SF_NOTIFY_SECURE_PORT 0x00000001
+#define SF_NOTIFY_NONSECURE_PORT 0x00000002
+
+#define SF_NOTIFY_READ_RAW_DATA 0x00008000
+#define SF_NOTIFY_PREPROC_HEADERS 0x00004000
+#define SF_NOTIFY_AUTHENTICATION 0x00002000
+#define SF_NOTIFY_URL_MAP 0x00001000
+#define SF_NOTIFY_ACCESS_DENIED 0x00000800
+#define SF_NOTIFY_SEND_RAW_DATA 0x00000400
+#define SF_NOTIFY_LOG 0x00000200
+#define SF_NOTIFY_END_OF_NET_SESSION 0x00000100
+
+//
+// Filter ordering flags
+//
+// Filters will tend to be notified by their specified
+// ordering. For ties, notification order is determined by load order.
+//
+// SF_NOTIFY_ORDER_HIGH - Authentication or data transformation filters
+// SF_NOTIFY_ORDER_MEDIUM
+// SF_NOTIFY_ORDER_LOW - Logging filters that want the results of any other
+// filters might specify this order.
+//
+
+#define SF_NOTIFY_ORDER_HIGH 0x00080000
+#define SF_NOTIFY_ORDER_MEDIUM 0x00040000
+#define SF_NOTIFY_ORDER_LOW 0x00020000
+#define SF_NOTIFY_ORDER_DEFAULT SF_NOTIFY_ORDER_LOW
+
+#define SF_NOTIFY_ORDER_MASK (SF_NOTIFY_ORDER_HIGH | \
+ SF_NOTIFY_ORDER_MEDIUM | \
+ SF_NOTIFY_ORDER_LOW)
+
+//
+// Filter version information, passed to GetFilterVersion
+//
+
+typedef struct _HTTP_FILTER_VERSION
+{
+ //
+ // Version of the spec the server is using
+ //
+
+ DWORD dwServerFilterVersion;
+
+ //
+ // Fields specified by the client
+ //
+
+ DWORD dwFilterVersion;
+ CHAR lpszFilterDesc[SF_MAX_FILTER_DESC_LEN];
+ DWORD dwFlags;
+
+
+} HTTP_FILTER_VERSION, *PHTTP_FILTER_VERSION;
+
+//
+// A filter DLL's entry point looks like this. The return code should be
+// an SF_STATUS_TYPE
+//
+// NotificationType - Type of notification
+// pvNotification - Pointer to notification specific data
+//
+
+DWORD
+WINAPI
+HttpFilterProc(
+ HTTP_FILTER_CONTEXT * pfc,
+ DWORD NotificationType,
+ VOID * pvNotification
+ );
+
+BOOL
+WINAPI
+GetFilterVersion(
+ HTTP_FILTER_VERSION * pVer
+ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //_HTTPFILT_H_