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




Функция GetServerVariable - часть 2


В эту переменную записывается путь к виртуальному каталогу и имя библиотеки DLL расширения ISAPI. Анализируя эту переменную, расширение ISAPI может определить путь к своему загрузочному файлу.

  • SERVER_NAME
  • Доменное имя сервера WWW или адрес IP сервера WWW, если доменное имя недоступно или не определено.

    • SERVER_PROTOCOL
    • Имя и версия протокола, который применяется для выполнения запроса к расширению ISAPI.

      • SERVER_PORT
      • Номер порта, на котором навигатор посылает запросы серверу WWW.

        • SERVER_PORT_SECURE
        • Если обработка запроса выполняется через защищенный порт, в этой строке записано значение 1, а если через незащищенный - значение 0.

          • SERVER_SOFTWARE
          • Название и версия программного обеспечения сервера WWW. Версия следует после названия и отделяется от последнего символом “/”.

            • ALL_HTTP
            • Строка, закрытая двоичным нулем, в которую записаны значения всех переменных, имеющих отношение к протоколу HTTP. Это, например, такие переменные как HTTP_ACCEPT, HTTP_CONNECTION, HTTP_USER_AGENT и так далее.

              Извлекать содержимое отдельных переменных ваша программа должна самостоятельно. При этом следует учесть, что названия переменных отделены от их значений символом двоеточия “:”, а поля переменных разделены символом перевода строки.

              Обратите внимание, что названия этих строк почти совпадают с названиями переменных среды, создаваемых для программ CGI, однако совпадение все же не полное.

              В случае успешного завершения функция GetServerVariable возвращает значение TRUE, а при возникновении ошибки - значение FALSE. Код ошибки можно определить с помощью функции GetLastError, вызвав ее сразу после функции GetServerVariable. Эта функция может вернуть в данном случае следующие коды ошибок:

              Код ошибки

              Описание

              ERROR_INVALID_INDEX

              Неправильное имя переменной, передаваемой через параметр lpszVariableName

              ERROR_INVALID_PARAMETER

              Неправильное значение параметра hConn

              ERROR_INSUFFICIENT_BUFFER

              Буфер, адрес которого указан с помощью параметра lpvBuffer, слишком мал. Необходимый размер буфера записывается по адресу, который был передан функции через параметр lpdwSize

              ERROR_MORE_DATA

              Буфер, адрес которого указан с помощью параметра lpvBuffer, слишком мал. В результате данные были прочитаны частично, причем размер буфера, необходимый для чтения всех данных, неизвестен

              ERROR_NO_DATA

              Данные не были получены

              Ниже мы привели пример использования функции GetServerVariable для получения содержимого переменной с именем ALL_HTTP в буфер szTempBuf.

              CHAR  szTempBuf[4096];

              DWORD dwSize;

              dwSize = 4096;

                lpECB->GetServerVariable(lpECB->ConnID,

                  (LPSTR)"ALL_HTTP", (LPVOID)szTempBuf, &dwSize);

                strcat(szBuff, szTempBuf);




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