EXTENSION_CONTROL_BLOCK структура имеет следующую форму:
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; //IN
DWORD dwVersion //IN
HCONN ConnID; //IN
DWORD dwHttpStatusCode; //OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT
LPSTR lpszMethod; //IN
LPSTR lpszQueryString; //IN
LPSTR lpszPathInfo; //IN
LPSTR lpszPathTranslated; //IN
DWORD cbTotalBytes; //IN
DWORD cbAvailable; //IN
LPBYTE lpbData; //IN
LPSTR lpszContentType; //IN
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * WriteClient )
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );
BOOL ( WINAPI * ReadClient )
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * ServerSupportFunction )
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
Сервер взаимодействует с ISA через EXTENSION_CONTROL_BLOCK.
Ссылки и выход выше показывает, применяется ли член к сообщениям на продление (IN) или из расширения (ЗАМЕНЕН).
Члены
EXTENSION_CONTROL_BLOCK структура содержит следующие поля:
cbSize
Размер этой структуры.
dwVersion
Версии ofnbsp информации; HTTP_FILTER_REVISIO&N. HIWORD имеет основной номер версии и LOWORD имеет дополнительный номер версии.
ConnID
Уникальный номер, присвоенный сервером HTTP. Он не должен быть изменен.
dwHttpStatusCode
Статус текущей транзакции после завершения запроса. Может быть одним из следующих:
lpszLogData
Буфер размером HSE_LOG_BUFFER_LEN. Содержит строку нулем журнал информации, характерных для ISA, текущей транзакции. Этот журнал информация будет вводиться в журнале сервера HTTP. Поддержание в один файл журнала с сервера HTTP и ISA сделок является весьма полезным для целей администрирования.
lpszMethod
Метод, с помощью которого был сделан запрос. Это эквивалентно переменная CGI REQUEST_METHOD.
lpszQueryString
nbsp;Завершающим нулем строку, содержащую данные запроса. Это эквивалентно CGI переменной QUERY_STRI&NG.
lpszPathInfo
Завершающим нулем строка, содержащая дополнительные пути, представленную клиентом. Это эквивалентно CGI переменной PATH_INFO.
lpszPathTranslated
Завершающим нулем строка, содержащая переведенный путь. Это эквивалентно переменная CGI PATH_TRANSLATED.
cbTotalBytes
Общее количество байтов, полученных от клиента. Это эквивалентно переменная CGI CO&NTENT_LENGTH. Если это значение равно 0xffffffff, то есть 4 ГБ или более из доступных data.nbsp; В этом случае CHttpServerContext::ReadClient должна вызываться до возвращения данных больше не.
cbAvailable
Имеющиеся количество байтов (из в общей сложности cbTotalBytes) в буфер, на который указывает lpbData. Если cbTotalBytes является таким же, как cbAvailable переменную lpbData будет указывать на буфер, который содержит все данные, отправленные клиентом. В противном случае cbTotalBytes будет содержать общее количество байтов, полученных данных. Затем ISA необходимо использовать функцию обратного вызова CHttpServerContext::ReadClient для чтения остальных данных (начиная с смещение cbAvailable).
lpbData
Указывает буфер размером cbAvailable , содержащего данные, отправленные клиентом.
lpszContentType
Завершающим нулем строка, содержащая тип содержимого данных, отправленных клиентом. Это эквивалентно переменная CGI CONTENT_TYPE.
GetServerVariable
Эта функция копирует информацию (включая переменных CGI) относящихся к подключению HTTP, или на самом сервере, в буфер. GetServerVariable принимает следующие параметры:
| Имя переменной | Описание |
| ALL_HTTP | Все заголовки HTTP, которые уже не разобрать в одну из выше переменных. Эти переменные имеют форму HTTP_lt; имя поля заголовка & gt. |
| AUTH_PASS | Это будет получить пароль, соответствующий REMOTE_USER , предоставленный клиентом. Это будет значением null строку. |
| AUTH_TYPE | Содержит тип аутентификации used.nbsp; Например если используется обычная проверка подлинности, строка будет «Basic». Для Windows &NT вызов ответ он будет «NTLM». Другие схемы аутентификации будет иметь другие строки. Поскольку Интернет-сервер могут быть добавлены новые типы аутентификации, невозможно перечислить все возможные строки. Если строка пуста, то проверка подлинности не используется. |
| CONTENT_LENGTH | Количество байт, которые сценарий можно ожидать от клиента. |
| CONTENT_TYPE | Тип содержимого информацию, представленную в теле запроса POST. |
| GATEWAY_INTERFACE | Версия спецификации CGI, которому соответствует этот сервер. Текущая версия — CGI/1.1. |
| HTTP_ACCEPT | Особый случай HTTP заголовок. Значения Accept: поля объединяются, разделенных «,». Например, если следующие строки являются частью HTTP-заголовка
затем HTTP_ACCEPT переменная будет иметь значение:
|
| PATH_INFO | Дополнительные сведения о пути, как клиент. В их число входят завершающая часть URL-адреса после имени сценария, но до строки запроса (если имеется). |
| PATH_TRANSLATED | Это значение PATH_INFO, но с любым именем виртуального пути в спецификацию каталогов. |
| QUERY_STRING | Информация, которая в URL-адрес, на который ссылается этот сценарий соответствует ?. |
| REMOTE_ADDR | IP-адрес клиента. |
| REMOTE_HOST | Имя узла клиента. |
| REMOTE_USER | Содержит имя пользователя от клиента и проверку подлинности на сервере. |
| REQUEST_METHOD | Метод HTTP запроса. |
| SCRIPT_NAME | Имя сценария программы осуществляются. |
| ИМЯ_СЕРВЕРА | Имя хоста сервера (или IP-адрес), как он должен появиться в выполняемому URL-адресов. |
| SERVER_PORT | Порт TCP/IP, на который был получен запрос. |
| SERVER_PROTOCOL | Имя и версия протокола поиска информации, связанных с этой просьбой. Обычно HTTP/1.0. |
| SERVER_SOFTWARE | Имя и версия веб-сервере, под которой выполняется программа CGI. |
WriteClient
Отправляет клиенту информацию из указанного буфера. WriteClient принимает следующие параметры:
ReadClient
Считывает информацию из тела запроса HTTP веб-клиента в буфер, от вызывающего. ReadClient принимает следующие параметры:
ServerSupportFunction
Предоставить МПО с некоторыми общего назначения функций, а также функции, которые являются специфическими для реализации сервера HTTP. ServerSupportFunction принимает следующие параметры:
Комментарии
Сервер определяет файлы с exte&nsionsnbsp;.EXE и.Летучая МЫШЬ как исполняемые CGI (Common Gateway Interface). Кроме того сервер будет идентифицировать файл с расширением DLL как сценарий для выполнения.
Когда сервер загружает библиотеку DLL, он вызывает библиотеку DLL в точке входа CHttpServer::GetExtensionVersion для того чтобы получить номер версии thenbsp; HTTP_FILTER_REVISIO&N ISA базируется на и короткое текстовое описание для администраторов сервера. Для каждого запроса клиента называется точка входа CHttpServer::HttpExtensionProc . Расширение получает информацию часто необходимой, таких как строка запроса, информация о пути, имя метода и переведенный путь.
См. также CHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc