Doczom / simple-httpd

Simple-httpd server for KolibriOS, writen in fasm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

simple_httpd

Это небольшой http-сервер для Колибри ОС позволяющий хостить статичные сайты и создавать модули, для динамической генерации отправляемых клиенту данных.

Сервер отправляет содержимое файлов без сжатия в соответствии с заданной таблицей ассоциации MIME типа и расширения файла. Если запрос от клиента имеет uri путь который соответствует модулю сервера, то сервер передаёт управление коду в этом модуле с передачей всех необходимых для функционирования данных.

Configuration

Для настройки сервера применяется файл конфигурации в формате ini, где указываются следующие параметры:

В секции MAIN

  • ip - ip адрес сервера
  • port - порт для подключения (по умолчанию 80)
  • conn - максимальное количество открытых соединений(по умолчанию 10)
  • work_dir - директория для размещения файлов, отправляемых сервером
  • mime_file - путь к файлу с таблицей сопоставлениея mime типов и расширений файлов (если не указан, то используется встроенная в сервер таблица сопоставления)
  • modules_dir - директория расположения модулей сервера

В секции MODULES может находиться множество параметров, имеющих вид uri_path=file_name;cmdline где:

  • uri_path - путь указываемый клиентом во время запроса
  • file_name - название/путь до файла модуля относительно modules_dir
  • cmdline - строка параметров, которая передаётся в функцию инициализации модуля. Данное значение не обязательна и может не использоваться.

API for modules

К серверу можно подключить дополнительные модули в виде библиотек со специальными экспортируемыми функциями:

  • uint32_t stdcall httpd_init(IMPORT_DATA* import, char* cmdline)

Эта функция служит для инициализации модуля для каждого связанного с модулем uri . В файле конфигурации для конкретного uri можно добавить командную строку, передаваемую в эту функцию. Например

test3=test_unit4.obj; -database="file.sqlite"

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

  • void stdcall httpd_serv(CONNECT_DATA* request_data, uint32_t pdata) Эта функция вызывается сервером при получении запроса с uri путём указанном в файле конфигурации для этого модуля. Сервер передаёт в функцию контекст запроса, содержащий: аргументы, заголовки, тело запроса, http метод и версию; и значение возвращённое функцией httpd_init.

  • void stdcall httpd_close(uint32_t pdata) Эта функция вызывается сервером при завершении работы или в процессе управления сервером. Данная функция предназначена для корректного завершения работы модуля и освобождением связанных с ним ресурсов.

Bugs

  • Сервер не поддерживает работу с файлами, имеющими не ascii символы, так как не производит преобразование uri пути;
  • Сервер не имеет интерфейса для управления, что может вызвать трудности в сохранении временных данных модулей при завершении работы;
  • В ходе тестов был обнаружена ошибка отправки "больших" файлов. Это баг сетевого стека;
  • При длительной работе сервер может начать "подзависать" или перестать отвечать на сообщения. Это баг сетевого стека.

About

Simple-httpd server for KolibriOS, writen in fasm

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Assembly 77.0%Language:HTML 22.6%Language:Makefile 0.4%