842ae4bd224140319ae7feec1872b93dfd491143fielding/* Licensed to the Apache Software Foundation (ASF) under one or more
842ae4bd224140319ae7feec1872b93dfd491143fielding * contributor license agreements. See the NOTICE file distributed with
842ae4bd224140319ae7feec1872b93dfd491143fielding * this work for additional information regarding copyright ownership.
842ae4bd224140319ae7feec1872b93dfd491143fielding * The ASF licenses this file to You under the Apache License, Version 2.0
842ae4bd224140319ae7feec1872b93dfd491143fielding * (the "License"); you may not use this file except in compliance with
842ae4bd224140319ae7feec1872b93dfd491143fielding * the License. You may obtain a copy of the License at
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * http://www.apache.org/licenses/LICENSE-2.0
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * Unless required by applicable law or agreed to in writing, software
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * distributed under the License is distributed on an "AS IS" BASIS,
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * See the License for the specific language governing permissions and
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * limitations under the License.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh/**
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * @file mod_isapi.h
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * @brief ISAPI module extension to Apache
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh *
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * @defgroup MOD_ISAPI mod_isapi
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * @ingroup APACHE_MODS
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * @{
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh */
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#ifndef MOD_ISAPI_H
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define MOD_ISAPI_H
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#ifdef __cplusplus
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwroweextern "C" {
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#endif
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* The Version Information storage passed to a module on startup
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * via the GetExtensionVersion() entry point.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef struct HSE_VERSION_INFO {
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwExtensionVersion;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char lpszExtensionDesc[256];
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe} HSE_VERSION_INFO;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* The startup entry point that must be exported by every ISAPI handler
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwroweint APR_THREAD_FUNC GetExtensionVersion(HSE_VERSION_INFO *ver_info);
acd73736819de5789fdc6538ca34d3b87f0bf636wrowetypedef int (APR_THREAD_FUNC *PFN_GETEXTENSIONVERSION)(HSE_VERSION_INFO *ver_info);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Our internal 'HCONN' representation, always opaque to the user.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowetypedef struct isapi_cid isapi_cid;
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowetypedef struct isapi_cid *HCONN;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
742318b93e89c311f66b55f426c4d9cf2c14628bjim/* Prototypes of the essential functions exposed by mod_isapi
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * for the module to communicate with Apache.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
742318b93e89c311f66b55f426c4d9cf2c14628bjimtypedef int (APR_THREAD_FUNC
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *PFN_GETSERVERVARIABLE)(HCONN cid,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *variable_name,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *buf_data,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t *buf_size);
742318b93e89c311f66b55f426c4d9cf2c14628bjimtypedef int (APR_THREAD_FUNC
742318b93e89c311f66b55f426c4d9cf2c14628bjim *PFN_WRITECLIENT)(HCONN cid,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *buf_data,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t *buf_size,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t flags);
742318b93e89c311f66b55f426c4d9cf2c14628bjimtypedef int (APR_THREAD_FUNC
742318b93e89c311f66b55f426c4d9cf2c14628bjim *PFN_READCLIENT)(HCONN cid,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *buf_data,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t *buf_size);
742318b93e89c311f66b55f426c4d9cf2c14628bjimtypedef int (APR_THREAD_FUNC
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *PFN_SERVERSUPPORTFUNCTION)(HCONN cid,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t HSE_code,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *buf_data,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t *buf_size,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t *flags);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* The ecb structure is passed on each invocation of the module
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef struct EXTENSION_CONTROL_BLOCK {
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cbSize;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwVersion;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe HCONN ConnID;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwHttpStatusCode;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char lpszLogData[80];
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *lpszMethod;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *lpszQueryString;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *lpszPathInfo;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *lpszPathTranslated;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cbTotalBytes;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cbAvailable;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe unsigned char *lpbData;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe char *lpszContentType;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe PFN_GETSERVERVARIABLE GetServerVariable;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe PFN_WRITECLIENT WriteClient;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe PFN_READCLIENT ReadClient;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe PFN_SERVERSUPPORTFUNCTION ServerSupportFunction;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe} EXTENSION_CONTROL_BLOCK;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
742318b93e89c311f66b55f426c4d9cf2c14628bjim/* Status/Headers structure to pass to HSE_SEND_HEADER_EX,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * an MS extension to ServerSupportFunction
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef struct HSE_SEND_HEADER_EX_INFO {
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe const char * pszStatus; /* HTTP status text, such as "200 OK" */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe const char * pszHeader; /* HTTP header lines text, such as
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * "Content-type: text/plain\r\n"
742318b93e89c311f66b55f426c4d9cf2c14628bjim * "Content-Language: en\r\n"
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * Note that (in spite of cchFoo lengths below)
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * NULL characters will interfere in headers.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cchStatus; /* length of pszStatus text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cchHeader; /* length of pszHeader text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe int fKeepConn; /* Ignored: used to set keep-alive status,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * but Apache follows the client's negotiated
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * HTTP contract to decide.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe} HSE_SEND_HEADER_EX_INFO;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Our only 'supported' MS extended flag bit for TransmitFile,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * HSE_IO_SEND_HEADERS indicates that Status+Headers are present
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * in the pszStatusCode member of the HSE_TF_INFO structure.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_IO_SEND_HEADERS 8
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* The remaining flags are MS extended flag bits that bear little
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * relation to Apache; the rules that the Apache server obeys follow
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * its own design and HTTP protocol filter rules.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *
742318b93e89c311f66b55f426c4d9cf2c14628bjim * We do not support async, however, we fake it. If HSE_IO_SYNC is
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * not passed, and a completion context was defined, we will invoke the
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * completion function immediately following the transfer, and then
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * return to the caller. If HSE_IO_SYNC is passed, there is no call
b76a31daaa6e83bb0fd627a04f20e82bffcf1df4poirier * necessary to the completion context.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_IO_SYNC 1
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_IO_ASYNC 2
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_IO_DISCONNECT_AFTER_SEND 4
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_IO_NODELAY 4096
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
742318b93e89c311f66b55f426c4d9cf2c14628bjim/* The Completion function prototype. This callback may be fixed with
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * the HSE_REQ_IO_COMPLETION ServerSupportFunction call, or overriden
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * for the HSE_REQ_TRANSMIT_FILE call.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef void (APR_THREAD_FUNC *PFN_HSE_IO_COMPLETION)
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe (EXTENSION_CONTROL_BLOCK *ecb,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *ctxt,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cbIO,
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwError);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* TransmitFile structure to pass to HSE_REQ_TRANSMIT_FILE, an MS extension
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef struct HSE_TF_INFO {
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe PFN_HSE_IO_COMPLETION pfnHseIO; /* Overrides the default setting of
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * HSE_REQ_IO_COMPLETION if not NULL
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *pContext;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_os_file_t hFile; /* HANDLE/fd to transmit */
742318b93e89c311f66b55f426c4d9cf2c14628bjim const char *pszStatusCode; /* Ignored if HSE_IO_SEND_HEADERS is
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * not set. Includes HTTP status text
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * plus header text lines, such as
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * "200 OK\r\n"
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * "Content-type: text/plain\r\n"
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t BytesToWrite; /* 0 is write-all */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t Offset; /* File Offset */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *pHead; /* Prefix with *pHead body text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t HeadLength; /* Length of *pHead body text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe void *pTail; /* Prefix with *pTail body text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t TailLength; /* Length of *pTail body text */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwFlags; /* bit flags described above */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe} HSE_TF_INFO;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef struct HSE_URL_MAPEX_INFO {
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe char lpszPath[260];
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwFlags;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cchMatchingPath;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t cchMatchingURL;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwReserved1;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe apr_uint32_t dwReserved2;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe} HSE_URL_MAPEX_INFO;
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Original ISAPI ServerSupportFunction() HSE_code methods */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_SEND_URL_REDIRECT_RESP 1
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_SEND_URL 2
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_SEND_RESPONSE_HEADER 3
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_DONE_WITH_SESSION 4
742318b93e89c311f66b55f426c4d9cf2c14628bjim
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* MS Extented methods to ISAPI ServerSupportFunction() HSE_code */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_MAP_URL_TO_PATH 1001 /* Emulated */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_GET_SSPI_INFO 1002 /* Not Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_APPEND_LOG_PARAMETER 1003 /* Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_IO_COMPLETION 1005 /* Emulated */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_TRANSMIT_FILE 1006 /* Async Emulated */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_REFRESH_ISAPI_ACL 1007 /* Not Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_IS_KEEP_CONN 1008 /* Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_ASYNC_READ_CLIENT 1010 /* Emulated */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Added with ISAPI 4.0 */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_GET_IMPERSONATION_TOKEN 1011 /* Not Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_MAP_URL_TO_PATH_EX 1012 /* Emulated */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_ABORTIVE_CLOSE 1014 /* Ignored */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Added after ISAPI 4.0 in IIS 5.0 */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_GET_CERT_INFO_EX 1015 /* Not Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_SEND_RESPONSE_HEADER_EX 1016 /* Supported (no nulls!) */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_CLOSE_CONNECTION 1017 /* Ignored */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_IS_CONNECTED 1018 /* Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_REQ_EXTENSION_TRIGGER 1020 /* Not Supported */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
742318b93e89c311f66b55f426c4d9cf2c14628bjim/* The request entry point that must be exported by every ISAPI handler
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwroweapr_uint32_t APR_THREAD_FUNC HttpExtensionProc(EXTENSION_CONTROL_BLOCK *ecb);
742318b93e89c311f66b55f426c4d9cf2c14628bjimtypedef apr_uint32_t (APR_THREAD_FUNC
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe *PFN_HTTPEXTENSIONPROC)(EXTENSION_CONTROL_BLOCK *ecb);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
742318b93e89c311f66b55f426c4d9cf2c14628bjim/* Allowable return values from HttpExtensionProc (apparently 0 is also
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * accepted by MS IIS, and we will respect it as Success.)
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * If the HttpExtensionProc returns HSE_STATUS_PENDING, we will create
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * a wait mutex and lock on it, until HSE_REQ_DONE_WITH_SESSION is called.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_STATUS_SUCCESS 1
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_STATUS_SUCCESS_AND_KEEP_CONN 2 /* 1 vs 2 Ignored, we choose */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_STATUS_PENDING 3 /* Emulated (thread lock) */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_STATUS_ERROR 4
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe/* Anticipated error code for common faults within mod_isapi itself
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe */
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_INSUFFICIENT_BUFFER
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_INSUFFICIENT_BUFFER ENOBUFS
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_INVALID_INDEX
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_INVALID_INDEX EINVAL
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_INVALID_PARAMETER
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_INVALID_PARAMETER EINVAL
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_READ_FAULT
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_READ_FAULT EIO
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_WRITE_FAULT
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_WRITE_FAULT EIO
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#ifndef ERROR_SUCCESS
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#define ERROR_SUCCESS 0
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe#endif
2bbb8b21f6ed7a10149494d45a6417cf984f01f8wrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Valid flags passed with TerminateExtension()
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_TERM_MUST_UNLOAD 1
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_TERM_ADVISORY_UNLOAD 2
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
df758540d3e60de119773b29da2ec5f2c707936ccovener/* The shutdown entry point optionally exported by an ISAPI handler, passed
742318b93e89c311f66b55f426c4d9cf2c14628bjim * HSE_TERM_MUST_UNLOAD or HSE_TERM_ADVISORY_UNLOAD. The module may return
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * if passed HSE_TERM_ADVISORY_UNLOAD, and the module will remain loaded.
742318b93e89c311f66b55f426c4d9cf2c14628bjim * If the module returns 1 to HSE_TERM_ADVISORY_UNLOAD it is immediately
742318b93e89c311f66b55f426c4d9cf2c14628bjim * unloaded. If the module is passed HSE_TERM_MUST_UNLOAD, its return value
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * is ignored.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwroweint APR_THREAD_FUNC TerminateExtension(apr_uint32_t flags);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowetypedef int (APR_THREAD_FUNC *PFN_TERMINATEEXTENSION)(apr_uint32_t flags);
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe/* Module may return 0 if passed HSE_TERM_ADVISORY_UNLOAD, and the module
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe * will remain loaded, or 1 if it consents to being unloaded. If the module
7af19efc4667363f74d332a8d010b49e88d56fd5trawick * is passed HSE_TERM_MUST_UNLOAD, its return value is ignored.
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe */
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_TERM_MUST_UNLOAD 1
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#define HSE_TERM_ADVISORY_UNLOAD 2
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#ifdef __cplusplus
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe}
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe#endif
87243d0fc4c9b64fc12ae7ec53ebb19a9c804ecdwrowe
11e076839c8d5a82d55e710194d0daac51390dbdsf#endif /* !MOD_ISAPI_H */
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh/** @} */
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh