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, потім існують чотири гігабайт або більше з доступних 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 як клієнта. Це буде в рядок. |
| AUTH_TYPE | Містить тип автентифікації used.nbsp; Наприклад, якщо використовується Звичайна перевірка автентичності, рядок буде "Basic". Для Windows &NT-відповіді це буде "NTLM". Інші автентифікації схеми буде мати інші рядки. Тому що до веб-сервера можна додати нові типи автентифікації, це не можливо, щоб перерахувати всі можливі рядки. Якщо рядок порожній, то використовується без автентифікації. |
| CONTENT_LENGTH | Кількість байтів, що сценарій може розраховувати на отримання від клієнта. |
| CONTENT_TYPE | Тип вмісту в тіло через POST запит інформації. |
| GATEWAY_INTERFACE | Редакція специфікації CGI, до яких цей сервер відповідає. Поточна версія є CGI/1.1. |
| HTTP_ACCEPT | Особливий випадок HTTP заголовка. Значення на прийняти: поля з'єднуються, розділених ",". Наприклад, якщо наступні рядки є частиною 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 | Ім'я скрипта-програми, виконується. |
| SERVER_NAME | Сервера ім'я хоста (або IP адреси), як це має з'явитися у self-referencing URL-адреси. |
| SERVER_PORT | TCP/IP порту, на якому було отримано запит. |
| SERVER_PROTOCOL | Назва і версія протоколу пошуку інформації, що стосуються цього запиту. Зазвичай HTTP/1.0. |
| SERVER_SOFTWARE | Назва і версія веб-сервера, під яким працює програма CGI. |
WriteClient
Передає інформацію клієнта з зазначених буфера. WriteClient займає наступні параметри:
ReadClient
Зчитує інформацію з тіла запит HTTP веб-клієнта в буфер абонента. ReadClient займає наступні параметри:
ServerSupportFunction
Надати в IASs деякі функції загального призначення, а також функції, які є специфічними для впровадження HTTP-сервер. ServerSupportFunction займає наступні параметри:
Коментарі
Сервер визначає файли з exte&nsionsnbsp;.EXE і.BAT як CGI (Загальний інтерфейс шлюзу) виконуваних файлів. Крім того, сервер буде визначити файл із розширенням DLL як сценарій для виконання.
Коли сервер завантажує бібліотеку DLL, це викликає DLL в точку входу CHttpServer::GetExtensionVersion отримати номер версії thenbsp; HTTP_FILTER_REVISIO&N ISA базується на та короткий опис адміністратори сервера. За кожен клієнт запит називається CHttpServer::HttpExtensionProc точку входу. Розширення отримує інформацію зазвичай необхідно, наприклад, рядок запиту, інформація шлях, метод ім'я та перекладених шлях.
Дивіться також CHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc