Сервер Web своими руками. Язык HTML, приложения CGI и ISAPI




Приложение ISHELLO - часть 4


Прежде всего в буфер szBuff записывается заголовок HTTP и начальный фрагмент документа HTML, для чего используется функция wsprintf. Далее к буферу szBuff с помощью функции strcat будут добавляться другие строки документа. Например, разделительная линия добавляется так:

strcat(szBuff, "<HR>");

После первой разделительной линии в документ добавляется несколько строк со значениями некоторых полей структуры типа EXTENSION_CONTROL_BLOCK. В следующем фрагменте кода добавляется строка версии интерфейса ISAPI:

wsprintf(szTempBuf, "<P>Extension Version: %d.%d",

  HIWORD(lpECB->dwVersion), LOWORD(lpECB->dwVersion));

strcat(szBuff, szTempBuf);

Далее в документ выводятся строка с названием метода передачи данных (поле lpszMethod), строка параметров запуска расширения ISAPI (поле lpszQueryString), физический путь к программному файлу библиотеки DLL расширения (поле lpszPathTranslated), полный размер данных, которые нужно прочитать (поле cbTotalBytes), а также тип данных (поле lpszContentType).

После этого в документ снова выводится разделительная линия и отображается содержимое переменных сервера с префиксом имени HTTP, для чего используется рассмотренная ранее функция GetServerVariable.

В завершении в документ записывается финальная строка:

strcat(szBuff, "</BODY></HTML>");

Документ посылается удаленному пользователю функцией ServerSupportFunction, как это показано ниже:

if(!lpECB->ServerSupportFunction(lpECB->ConnID,

    HSE_REQ_SEND_RESPONSE_HEADER, NULL, NULL, (LPDWORD)szBuff))

{

  return HSE_STATUS_ERROR;

}

Если при посылке данных произошла ошибка, расширение завершает свою работу с кодом HSE_STATUS_ERROR.

В случае успеха в поле состояния dwHttpStatusCode записывается код 200, вслед за чем расширение завершает свою работу с кодом HSE_STATUS_SUCCESS.

Файл определения модуля для библиотеки DLL расширения ISAPI представлен в листинге 8.3.

Листинг 8.3. Файл chap8\ishello\ishello.def

LIBRARY            ishello

DESCRIPTION  'Simple ISAPI DLL'

EXPORTS

    GetExtensionVersion

    HttpExtensionProc




Содержание  Назад  Вперед