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




Приложение ISFORM - часть 6


  // Сдвигаем его влево на 4 бита

  ch <<= 4;

  // Обрабатываем младший разряд и складываем

  // его со старшим

  if(str[1] >= 'A')

    ch += ((str[1] & 0xdf) - 'A') + 10;

  else

    ch += str[1] - '0';

  // Возвращаем результат перекодировки

  return ch;

}

Для перекодирования принятых данных из кодировки URL мы использовали здесь функции DecodeStr и DecodeHex, описанные нами в разделе “Программа CONTROLS” предыдущей главы.

Перед тем как выполнить перекодировку принятых данных, расширение копирует эти данные во временный буфер szTempBuf, и закрывает его двоичным нулем, превращая в строку. Такая операция допустима, если передаются только текстовые данные (а это как раз наш случай). После копирования адрес буфера передается функции DecodeStr:

lstrcpyn(szTempBuf, lpECB->lpbData, lpECB->cbAvailable + 1);

szTempBuf[lpECB->cbAvailable + 1] = '\0';

DecodeStr(szTempBuf);

Сканирование и вывод значений отдельных полей формы выполняется аналогично тому, как это делалось в программе CGI с именем CONTROLS. Однако в отличие от указанной программы, значения отдельных полей не выводятся в стандартный поток STDOUT, а дописываются в конец буфера szBuff функцией strcat.

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

Листинг 8.6. Файл chap8\isform\isform.def

LIBRARY            isform

DESCRIPTION  'Form Parser ISAPI DLL'

EXPORTS

    GetExtensionVersion

    HttpExtensionProc




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