diff --git a/bin/httpd b/bin/httpd index 8d61836..06edcea 100644 Binary files a/bin/httpd and b/bin/httpd differ diff --git a/bin/httpd.ini b/bin/httpd.ini index cb36391..ca15016 100644 --- a/bin/httpd.ini +++ b/bin/httpd.ini @@ -16,14 +16,18 @@ mime_file=/usbhd0/3/mime_types.bin [MODULES] ; list units ; path = unit_name;cmdline -; not uning ' ' in unit_name;cmdline : "path = unit_name ; cmdline" is bad name -test=test_unit.obj -rasp=test_unit_2.obj -t1=test_unit4.obj; nrjkgfehkfgbvrjbgjkbdkg -t2=test_unit4.obj; -loadfile=file -t3=test_unit4.obj; -database="file.sqlite" -t4=test_unit4.obj -test5=test_unit5.obj -admin=srv_control.obj;123456 -;database/sqlite3=sqlite3_serv.obj -;database/cvs=cvs_table_server.obj \ No newline at end of file +; not uning ' ' in unit_name;cmdline : "path = unit_name,cmdline" is bad name +/=redirect.obj, /docs/index.htm +/test=test_unit.obj +/rasp=test_unit_2.obj +/t1=test_unit4.obj, nrjkgfehkfgbvrjbgjkbdkg +/t2=test_unit4.obj, -loadfile=file +/t3=test_unit4.obj, -database="file.sqlite" +/t4=test_unit4.obj +*/.*=block_access.obj +/logs=block_access.obj, 400 Bad request +*.lua=test_unit4.obj, -database="sqlite.db" +/test5=test_unit5.obj +/admin=srv_control.obj,123456 +;/database/sqlite3=sqlite3_serv.obj +;/database/cvs=cvs_table_server.obj \ No newline at end of file diff --git a/bin/modules/block_access.obj b/bin/modules/block_access.obj new file mode 100644 index 0000000..a2dd1cd Binary files /dev/null and b/bin/modules/block_access.obj differ diff --git a/bin/modules/redirect.obj b/bin/modules/redirect.obj new file mode 100644 index 0000000..0b52967 Binary files /dev/null and b/bin/modules/redirect.obj differ diff --git a/bin/modules/srv_control.obj b/bin/modules/srv_control.obj index f69cf50..071e6cc 100644 Binary files a/bin/modules/srv_control.obj and b/bin/modules/srv_control.obj differ diff --git a/bin/modules/test_unit.obj b/bin/modules/test_unit.obj index b7c3c56..a0d0c25 100644 Binary files a/bin/modules/test_unit.obj and b/bin/modules/test_unit.obj differ diff --git a/bin/modules/test_unit4.obj b/bin/modules/test_unit4.obj index 030abb7..7e7b446 100644 Binary files a/bin/modules/test_unit4.obj and b/bin/modules/test_unit4.obj differ diff --git a/bin/modules/test_unit5.obj b/bin/modules/test_unit5.obj index f6850b1..92ba1a9 100644 Binary files a/bin/modules/test_unit5.obj and b/bin/modules/test_unit5.obj differ diff --git a/bin/modules/test_unit_2.obj b/bin/modules/test_unit_2.obj index 7247161..b365003 100644 Binary files a/bin/modules/test_unit_2.obj and b/bin/modules/test_unit_2.obj differ diff --git a/bin/server_data/docs/index.htm b/bin/server_data/docs/index.htm index 56825e3..2a5f317 100644 --- a/bin/server_data/docs/index.htm +++ b/bin/server_data/docs/index.htm @@ -10,13 +10,17 @@ .menu { background-color: aliceblue; border: 1px solid black; - width: 40%; + width: 40%; + margin-left: 20pt; } h1 { text-align: center; } - h2 { - margin-left: 20pt; + h3 { + margin-left: 20pt; + } + .menu-header { + margin-left: 20pt; } @@ -24,14 +28,23 @@
Данный раздел может содержать множество элементов, представленных в виде:
uri_path=file_name;cmdline
, где
+ Особенности работы: каждый модуль добавляется последовательно и поиск нужного модуля также производится последовательно. Из-за этой особенности нужно учитывать расположение uri в данной секции. + Для того, чтобы uri модуля сравнивался с путём в запросе раньше всех остальных он должен находится в самом конце списка, чтобы +
Примечание: В качестве uri_path и cmdline может использоваться строка в UTF-8 с любыми символами, но путь к модулю - всегда должен использовать только ASCII символы. Кодировка cmdline не стандартизированна, но желательно использовать - ASCII символы и проверять какую кодировку поддерживаем модуль.
+ всегда должен использовать только ASCII символы и не использовать символ ",". Кодировка cmdline не стандартизированна, но желательно использовать + ASCII символы и проверять какую кодировку поддерживает модуль. + Сервер имеет возможность установить модуль для некоторого диапазона uri путей, для этого используется символ "*", обозначающий неопределённое количество(включая ноль) любых символов.
+ Например: При наличии записи /img/*=img_module.obj
в секции модулей, сервер будет вызывать модуль для любых uri путей, имеющих в начале "/img/".
+ Также для установки модуля на все возможные uri пути необходимо прописать соответствие модуля с путём "/*".
+
Другие примеры:
+ *.lua=lua_module.obj
Любой путь, имеющий в конце ".lua".
+ */.*=err401.obj
Любой путь, имеющий в названии директорию, начинающуюся с символа ".".
+
[TLS]
+ ВНИМАНИЕ!!! TLS шифрование на данный момент не поддерживается сервером
Данный раздел содержит необходимые данные для использования TLS сервером. Все поля обязательны для заполнения.
mbedtls
Полный путь до библиотеки MbedTLS.
uint32_t __stdcall httpd_init(IMPORT_DATA* import, char* cmdline)
+ uint32_t __stdcall httpd_init(IMPORT_DATA* import, char* cmdline, char* uri_path)
Функция для инициализации ресурса(uri_path), ассоциированного с модулем . В файле конфигурации для каждого ресурса можно добавить командную строку, передаваемую в эту функцию. Например @@ -146,7 +172,7 @@ данные. После завершения всех модулей сервер полностью завершает свою работу.
Любой запрос так или иначе требует ответа со стороны модуля. Этот ответ можно отправить используя экспортируемые ядром функции, позволяющие создать экземпляр класса RESPD и через него производить отправку ответа на запрос.
@@ -160,7 +186,7 @@В использовании функций добавления дополнительных заголовков и изменения версии есть особенность: строки должны существовать до момента деструктуризации объекта RESPD. Также модуль сам должен отслеживать и освобождать память под эти строки.
-char* __stdcall find_uri_arg(CONNECT_DATA* session, char* key);
Функция производит поиск аргумента uri строки по его названию. Если аргумент найден, то возвращается указатель на @@ -216,10 +242,14 @@
Функция производит поиск http заголовка по его названию. Если аргумент найден, то возвращается указатель на строку с его значением, иначе ноль
Для получения остальной информации, такой как: метод запроса, версии протокола, фрагмент uri строки и тело сообщения; +
uint32_t __stdcall read_http_body(CONNECT_DATA* session, char* buff, uint32_t len);
+ Функция производит чтение части содержимого http запроса в буфер и возвращает количество прочитанных байт. + В случае ошибки сервер вернёт значение -1
+Для получения остальной информации, такой как: метод запроса, версии протокола и фрагмент uri строки используется доступ к структуре CONNECT_DATA. Описание этой структуры есть в файле modules_api.inc репозитория.
void __stdcall FileInitFILED(FILED* buffer, char* path);
Функция производит инициализацию структуры FILED для её использования в файловых операциях.
@@ -246,13 +276,13 @@Примечание: Все пути на файл или директорию должны быть в кодировке UTF-8 или совместимой с ней ASCII. Строки должны использовать Null-турминатор. Кодировки UTF-16LE, cp866, cp1251 и тд нельзя использовать.
-void close_server();
Функция производит завершение работы всех модулей, и основного потока этого сервера. На время завершения работы модулей сервер блокирует все новые подключения, позволяя модулям завершить открытые соединения.
-char* __stdcall Get_MIME_Type(FILED* fd);
Функция производит анализ названия файла по его структуре FILED и возвращает MIME тип, соответствующий расширению файла. Данные о MIME типах берутся из встроенной таблицы соответствий либо из дополнительно загружаемого файла. @@ -275,7 +305,18 @@
+ При эксплуатации сервера может потребоваться возможность перенаправить запросы на какой-либо определённый файл(например на index.html) или модуль. Для данных целей к серверу был создан модуль "redirect.obj", позволяющий огранизовать перенаправление на определённые ресурсы как в пределах сервера, так и на внешние ресурсы. Для использования модуля необходимо задать модуль для всех необходимых uri путей и прописать для каждого такого uri командную строку, содержащую либо полный путь к ресурсу на этом сервере, либо полную uri ссылку. Пример использования: +
+/=redirect.obj, /docs/index.htm
перенаправление запросов на главную страницу сервера из корня.
+ ++ При работе сервера, модули могут создавать различные "системные" файлы, например логи, к которым должен быть заблокирован доступ из запросов клиентов. Для этих целей к серверу был создан модуль "block_access.obj", позволяющий задать http код статуса и короткое сообщение в теле ответа сервера. Для использования необходимо связать модуль с uri путём и задать строку параметров: код статуса ответа и, через пробел, короткое сообщение. Пример использования: +
+*/.*=block_access.obj, 400 access error
Блокировка доступа к файлам и дерикториям начинающимся с символа "." .
+Также можно не указывать текстовое сообщение, тогда сервер отправит только http статус. Если не указывать никаких параметров, то сервер будет по умолчанию отправлять код "403".
Данный раздел может содержать множество элементов, представленных в виде:
uri_path=file_name;cmdline
, где
+ Особенности работы: каждый модуль добавляется последовательно и поиск нужного модуля также производится последовательно. Из-за этой особенности нужно учитывать расположение uri в данной секции. + Для того, чтобы uri модуля сравнивался с путём в запросе раньше всех остальных он должен находится в самом конце списка, чтобы +
Примечание: В качестве uri_path и cmdline может использоваться строка в UTF-8 с любыми символами, но путь к модулю - всегда должен использовать только ASCII символы. Кодировка cmdline не стандартизированна, но желательно использовать - ASCII символы и проверять какую кодировку поддерживаем модуль.
+ всегда должен использовать только ASCII символы и не использовать символ ",". Кодировка cmdline не стандартизированна, но желательно использовать + ASCII символы и проверять какую кодировку поддерживает модуль. + Сервер имеет возможность установить модуль для некоторого диапазона uri путей, для этого используется символ "*", обозначающий неопределённое количество(включая ноль) любых символов.
+ Например: При наличии записи /img/*=img_module.obj
в секции модулей, сервер будет вызывать модуль для любых uri путей, имеющих в начале "/img/".
+ Также для установки модуля на все возможные uri пути необходимо прописать соответствие модуля с путём "/*".
+
Другие примеры:
+ *.lua=lua_module.obj
Любой путь, имеющий в конце ".lua".
+ */.*=err401.obj
Любой путь, имеющий в названии директорию, начинающуюся с символа ".".
+
[TLS]
+ ВНИМАНИЕ!!! TLS шифрование на данный момент не поддерживается сервером
Данный раздел содержит необходимые данные для использования TLS сервером. Все поля обязательны для заполнения.
mbedtls
Полный путь до библиотеки MbedTLS.
uint32_t __stdcall httpd_init(IMPORT_DATA* import, char* cmdline)
+ uint32_t __stdcall httpd_init(IMPORT_DATA* import, char* cmdline, char* uri_path)
Функция для инициализации ресурса(uri_path), ассоциированного с модулем . В файле конфигурации для каждого ресурса можно добавить командную строку, передаваемую в эту функцию. Например @@ -146,7 +172,7 @@ данные. После завершения всех модулей сервер полностью завершает свою работу.
Любой запрос так или иначе требует ответа со стороны модуля. Этот ответ можно отправить используя экспортируемые ядром функции, позволяющие создать экземпляр класса RESPD и через него производить отправку ответа на запрос.
@@ -160,7 +186,7 @@В использовании функций добавления дополнительных заголовков и изменения версии есть особенность: строки должны существовать до момента деструктуризации объекта RESPD. Также модуль сам должен отслеживать и освобождать память под эти строки.
-char* __stdcall find_uri_arg(CONNECT_DATA* session, char* key);
Функция производит поиск аргумента uri строки по его названию. Если аргумент найден, то возвращается указатель на @@ -216,10 +242,14 @@
Функция производит поиск http заголовка по его названию. Если аргумент найден, то возвращается указатель на строку с его значением, иначе ноль
Для получения остальной информации, такой как: метод запроса, версии протокола, фрагмент uri строки и тело сообщения; +
uint32_t __stdcall read_http_body(CONNECT_DATA* session, char* buff, uint32_t len);
+ Функция производит чтение части содержимого http запроса в буфер и возвращает количество прочитанных байт. + В случае ошибки сервер вернёт значение -1
+Для получения остальной информации, такой как: метод запроса, версии протокола и фрагмент uri строки используется доступ к структуре CONNECT_DATA. Описание этой структуры есть в файле modules_api.inc репозитория.
void __stdcall FileInitFILED(FILED* buffer, char* path);
Функция производит инициализацию структуры FILED для её использования в файловых операциях.
@@ -246,13 +276,13 @@Примечание: Все пути на файл или директорию должны быть в кодировке UTF-8 или совместимой с ней ASCII. Строки должны использовать Null-турминатор. Кодировки UTF-16LE, cp866, cp1251 и тд нельзя использовать.
-void close_server();
Функция производит завершение работы всех модулей, и основного потока этого сервера. На время завершения работы модулей сервер блокирует все новые подключения, позволяя модулям завершить открытые соединения.
-char* __stdcall Get_MIME_Type(FILED* fd);
Функция производит анализ названия файла по его структуре FILED и возвращает MIME тип, соответствующий расширению файла. Данные о MIME типах берутся из встроенной таблицы соответствий либо из дополнительно загружаемого файла. @@ -275,7 +305,18 @@
+ При эксплуатации сервера может потребоваться возможность перенаправить запросы на какой-либо определённый файл(например на index.html) или модуль. Для данных целей к серверу был создан модуль "redirect.obj", позволяющий огранизовать перенаправление на определённые ресурсы как в пределах сервера, так и на внешние ресурсы. Для использования модуля необходимо задать модуль для всех необходимых uri путей и прописать для каждого такого uri командную строку, содержащую либо полный путь к ресурсу на этом сервере, либо полную uri ссылку. Пример использования: +
+/=redirect.obj, /docs/index.htm
перенаправление запросов на главную страницу сервера из корня.
+ ++ При работе сервера, модули могут создавать различные "системные" файлы, например логи, к которым должен быть заблокирован доступ из запросов клиентов. Для этих целей к серверу был создан модуль "block_access.obj", позволяющий задать http код статуса и короткое сообщение в теле ответа сервера. Для использования необходимо связать модуль с uri путём и задать строку параметров: код статуса ответа и, через пробел, короткое сообщение. Пример использования: +
+*/.*=block_access.obj, 400 access error
Блокировка доступа к файлам и дерикториям начинающимся с символа "." .
+Также можно не указывать текстовое сообщение, тогда сервер отправит только http статус. Если не указывать никаких параметров, то сервер будет по умолчанию отправлять код "403".