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




Приложение FILEUPL - часть 9


{

  LPSTR lpCurrent;

  DWORD dwOffset;

  BOOL  fFound;

 

  // Устанавливаем признак успешного поиска

  fFound = TRUE;

  // Ищем конец первой строки

  for(lpCurrent = lpDataMIME,

    dwOffset = 0;;lpCurrent++, dwOffset++)

  {

    // Сравниваем с концом строки

    if(!memcmp(lpCurrent,"\r\n",2))

      break;

   

    // Если достигнут конец буфера,

    // сбрасываем признак успешного поиска

    // и прерываем работу цикла

    if(dwOffset >= dwBufSize)

    {

      fFound = FALSE;

      break;

    }

    // Копируем очередной символ разделителя

    *(lpBuffer + dwOffset) = *lpCurrent;

  }

 

  // Если разделитель найден, закрываем строку

  // разделителя двоичным нулем

  if(fFound)

    *lpBuffer = '\0'; 

  // Возвращаем признак успешного или

  // неуспешного поиска

  return fFound;

}

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

Листинг 8.9. Файл chap8\fileupl\fileupl.def

LIBRARY            fileupl

DESCRIPTION  'File Upload DLL'

EXPORTS

    GetExtensionVersion

    HttpExtensionProc

Рассмотрим функции нашего расширения ISAPI.

Функция GetExtensionVersion не имеет никаких особенностей.

Функция HttpExtensionProc в начале своей работы вызывает функцию ReadClientMIME, определенную в нашем приложении. Эта функция заказывает динамически блок памяти, достаточный для размещения принимаемых от удаленного пользователя данных, записывает в этот блок принятые данные и возвращает указатель на заказанный блок памяти. После использования вы должны освободить блок памяти функцией LocalFree.

Если данные были приняты успешно, функция HttpExtensionProc создает файл, в который будут записаны принятые данные:

hOutFile = CreateFile("e:\\InetPub\\scripts\\uploaded.dat",

      GENERIC_WRITE, FILE_SHARE_READ, NULL,

      CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

Для упрощения исходного текста мы указали путь к файлу непосредственно в файле исходных текстов. Ваше приложение может хранить путь к файлу в регистрационной базе данных или в отдельном файле параметров.




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