mirror of
https://github.com/Doczom/simple-httpd.git
synced 2025-09-24 08:03:51 +02:00
## Program interface - Added the function ``` char* find_uri_args(CONNECT_DATA* session, char* key) ``` - Added the function ``` char* find_header(CONNECT_DATA* session, char* key) ``` - Fixed a bug in ``` Get_MIME_Type ``` - Added the function ``` void close_server(); ``` ## Module interface - The initialization function and the request processing function have been changed: ``` uint32_t stdcall httpd_init(IMPORT_DATA* import, char* cmdline) ``` ```` void stdcall httpd_server(CONNECT_DATA* request_data, uint32_t pdata) ``` Added a module shutdown function for a specific uri: ``` void stdcall httpd_close(uint32_t pdata) ``` ## Modules - Added a module for testing parameter transmission during initialization ## Other - Added a build script - Added a single file for the program and modules with constants and structures
52 lines
5.7 KiB
Markdown
52 lines
5.7 KiB
Markdown
|
||
# simple_httpd
|
||
Это небольшой http-сервер для Колибри ОС позволяющий хостить статичные сайты и создавать модули, для динамической генерации отправляемых клиенту данных.
|
||
|
||
Сервер отправляет содержимое файлов без сжатия в соответствии с заданной таблицей ассоциации MIME типа и расширения файла.
|
||
Если запрос от клиента имеет uri путь который соответствует модулю сервера, то сервер передаёт управление коду в этом модуле с передачей всех необходимых для функционирования данных.
|
||
|
||
|
||
## Configuration
|
||
Для настройки сервера применяется файл конфигурации в формате ini, где указываются следующие параметры:
|
||
|
||
В секции <CODE>MAIN</CODE>
|
||
- <CODE>ip</CODE> - ip адрес сервера
|
||
- <CODE>port</CODE> - порт для подключения (по умолчанию 80)
|
||
- <CODE>conn</CODE> - максимальное количество открытых соединений(по умолчанию 10)
|
||
- <CODE>work_dir</CODE> - директория для размещения файлов, отправляемых сервером
|
||
- <CODE>mime_file</CODE> - путь к файлу с таблицей сопоставлениея mime типов и расширений файлов (если не указан, то используется встроенная в сервер таблица сопоставления)
|
||
- <CODE>modules_dir</CODE> - директория расположения модулей сервера
|
||
|
||
В секции <CODE>MODULES</CODE> может находиться множество параметров, имеющих вид <CODE>uri_path=file_name;cmdline</CODE> где:
|
||
- <CODE>uri_path</CODE> - путь указываемый клиентом во время запроса
|
||
- <CODE>file_name</CODE> - название/путь до файла модуля относительно <CODE>modules_dir</CODE>
|
||
- <CODE>cmdline</CODE> - строка параметров, которая передаётся в функцию инициализации модуля. Данное значение не обязательна и может не использоваться.
|
||
|
||
|
||
|
||
## API for modules
|
||
|
||
К серверу можно подключить дополнительные модули в виде библиотек со специальными экспортируемыми функциями:
|
||
|
||
- <CODE> uint32_t stdcall httpd_init(IMPORT_DATA* import, char* cmdline) </CODE>
|
||
|
||
Эта функция служит для инициализации модуля для каждого связанного с модулем uri . В файле конфигурации для конкретного uri можно добавить командную строку, передаваемую в эту функцию. Например
|
||
|
||
``` test3=test_unit4.obj; -database="file.sqlite" ```
|
||
|
||
При успешной инициализации функция должна вернуть ненулевое значение, если же инициализация прошла неуспешно, то должен возвращаться ноль.
|
||
Для упрощения многих операций, сервер передаёт в функцию инициализации модуля таблицу некоторых функций, необходимых для работы с сетью, с файловой системой и прочими интерфейсами.
|
||
|
||
- <CODE> void stdcall httpd_serv(CONNECT_DATA* request_data, uint32_t pdata) </CODE>
|
||
Эта функция вызывается сервером при получении запроса с uri путём указанном в файле конфигурации для этого модуля.
|
||
Сервер передаёт в функцию контекст запроса, содержащий: аргументы, заголовки, тело запроса, http метод и версию; и значение возвращённое функцией httpd_init.
|
||
|
||
- <CODE>void stdcall httpd_close(uint32_t pdata) </CODE>
|
||
Эта функция вызывается сервером при завершении работы или в процессе управления сервером. Данная функция предназначена для корректного завершения работы модуля и освобождением связанных с ним ресурсов.
|
||
## Bugs
|
||
|
||
- Сервер не поддерживает работу с файлами, имеющими не ascii символы, так как не производит преобразование uri пути;
|
||
- Сервер не имеет интерфейса для управления, что может вызвать трудности в сохранении временных данных модулей при завершении работы;
|
||
- В ходе тестов был обнаружена ошибка отправки "больших" файлов. Это баг сетевого стека;
|
||
- При длительной работе сервер может начать "подзависать" или перестать отвечать на сообщения. Это баг сетевого стека.
|