diff --git a/bin/httpd b/bin/httpd index 5e42bd5..8d61836 100644 Binary files a/bin/httpd and b/bin/httpd differ diff --git a/bin/httpd.ini b/bin/httpd.ini index 4a81e84..cb36391 100644 --- a/bin/httpd.ini +++ b/bin/httpd.ini @@ -6,10 +6,6 @@ port=80 ; count open connection conn=100 -; 1000 - no parse http headers, raw data in CONNECT_DATA.message_body -; This flags using for http/2.0 and other protocol execution. -;flags=0000 ; parsing http headers - ; directory for find files work_dir=/usbhd0/3/server_data ; directory for find units(library) @@ -23,5 +19,11 @@ mime_file=/usbhd0/3/mime_types.bin ; 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 diff --git a/bin/modules/srv_control.obj b/bin/modules/srv_control.obj index 538ee4a..f69cf50 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 0fbb551..b7c3c56 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 3b52e93..030abb7 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 5ab89a5..f6850b1 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 d655097..7247161 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 d4589d4..56825e3 100644 --- a/bin/server_data/docs/index.htm +++ b/bin/server_data/docs/index.htm @@ -3,23 +3,40 @@
Дальнейшая настройка содержимого директории зависит от значений в файле httpd.ini .
+Примечание: Файл должен использовать кодировку UTF-8. Другие кодировки могут привести к неправильной работе сервера.
В файле конфигурации можно выделяются 3 основных раздела:
mime_file
Путь до файла сопоставления mime типов. Если параметр не указан используется встроенная таблица соответствия.
modules_dir
Директория, относительно которой в разделе [MODULES] указываются модули расширения.
Примечание: В качестве modules_dir могут использоватьбся только ASCII символы.
[MODULES]
@@ -65,6 +84,9 @@
Примечание: В качестве uri_path и cmdline может использоваться строка в UTF-8 с любыми символами, но путь к модулю + всегда должен использовать только ASCII символы. Кодировка cmdline не стандартизированна, но желательно использовать + ASCII символы и проверять какую кодировку поддерживаем модуль.
[TLS]
Данный раздел содержит необходимые данные для использования TLS сервером. Все поля обязательны для заполнения.
@@ -98,6 +120,9 @@ test3=test_unit4.obj; -database="file.sqlite"
+ Для большей совместимости рекомендуется обрабатывать эту командную строку в кодировке UTF-8.
+
+ При успешной инициализации функция должна вернуть ненулевое значение, если же инициализация прошла неуспешно, то должен возвращаться ноль.
Также для дальнейшей работы модуля предаётся указатель на таблицу экспортируемых сервером функций.
@@ -134,9 +159,9 @@Также разработчик может указать битовые флаги конфигурации ответа, например следующие:
@@ -219,6 +244,8 @@Примечание: Все пути на файл или директорию должны быть в кодировке UTF-8 или совместимой с ней ASCII. + Строки должны использовать Null-турминатор. Кодировки UTF-16LE, cp866, cp1251 и тд нельзя использовать.
void close_server();
Функция производит завершение работы всех модулей, и основного потока этого сервера. На время завершения работы модулей сервер @@ -256,9 +283,8 @@
Дальнейшая настройка содержимого директории зависит от значений в файле httpd.ini .
+Примечание: Файл должен использовать кодировку UTF-8. Другие кодировки могут привести к неправильной работе сервера.
В файле конфигурации можно выделяются 3 основных раздела:
mime_file
Путь до файла сопоставления mime типов. Если параметр не указан используется встроенная таблица соответствия.
modules_dir
Директория, относительно которой в разделе [MODULES] указываются модули расширения.
Примечание: В качестве modules_dir могут использоватьбся только ASCII символы.
[MODULES]
@@ -65,6 +84,9 @@
Примечание: В качестве uri_path и cmdline может использоваться строка в UTF-8 с любыми символами, но путь к модулю + всегда должен использовать только ASCII символы. Кодировка cmdline не стандартизированна, но желательно использовать + ASCII символы и проверять какую кодировку поддерживаем модуль.
[TLS]
Данный раздел содержит необходимые данные для использования TLS сервером. Все поля обязательны для заполнения.
@@ -98,6 +120,9 @@ test3=test_unit4.obj; -database="file.sqlite"
+ Для большей совместимости рекомендуется обрабатывать эту командную строку в кодировке UTF-8.
+
+ При успешной инициализации функция должна вернуть ненулевое значение, если же инициализация прошла неуспешно, то должен возвращаться ноль.
Также для дальнейшей работы модуля предаётся указатель на таблицу экспортируемых сервером функций.
@@ -134,9 +159,9 @@Также разработчик может указать битовые флаги конфигурации ответа, например следующие:
@@ -219,6 +244,8 @@Примечание: Все пути на файл или директорию должны быть в кодировке UTF-8 или совместимой с ней ASCII. + Строки должны использовать Null-турминатор. Кодировки UTF-16LE, cp866, cp1251 и тд нельзя использовать.
void close_server();
Функция производит завершение работы всех модулей, и основного потока этого сервера. На время завершения работы модулей сервер @@ -256,9 +283,8 @@
MAIN
- - ip
- ip адрес сервера
- - port
- порт для подключения (по умолчанию 80)
- - conn
- максимальное количество открытых соединений(по умолчанию 10)
- - work_dir
- директория для размещения файлов, отправляемых сервером
- - mime_file
- путь к файлу с таблицей сопоставлениея mime типов и расширений файлов (если не указан, то используется встроенная в сервер таблица сопоставления)
- - modules_dir
- директория расположения модулей сервера
+Готовый файл конфигурации уже настроен для использование и ожидает, что всё содержимое директории bin репозитория будет размешено по пути `/usbhd0/3/`. По этому для установки достаточно скопировать содержимое в корень третьего раздела usb диска и запустить файл httpd .
- В секции MODULES
может находиться множество параметров, имеющих вид uri_path=file_name;cmdline
где:
- - uri_path
- путь указываемый клиентом во время запроса
- - file_name
- название/путь до файла модуля относительно modules_dir
- - cmdline
- строка параметров, которая передаётся в функцию инициализации модуля. Данное значение не обязательна и может не использоваться.
+Подробная настройка сервера описана в документации, расположенной в директории doc этого репозитория.
+## TODO
+### Tasks on version 0.2.5
+ - Update srv_control module
+ - Добавить модуль тестовой авторизации(base64 code in header)
+ - Добавить модуль генерации более сложного контента
+ (create json object with data of CSV table)
+ - Добавить демонстрационный модуль на Си
+ - Добавить демонстрационный модуль на FPC
+ - Добавить модуль демонстрации cookie
+ - Добавить модуль демонстрации websockets
-## 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)
-Эта функция вызывается сервером при завершении работы или в процессе управления сервером. Данная функция предназначена для корректного завершения работы модуля и освобождением связанных с ним ресурсов.
+### Tasks on version 0.3.0
+- Добавить поддержку TLS шифрования с использованием MbedTLS
## Bugs
-
- - Сервер не поддерживает работу с файлами, имеющими не ascii символы, так как не производит преобразование uri пути;
- В ходе тестов был обнаружена ошибка отправки "больших" файлов. Это баг сетевого стека;
- При длительной работе сервер может начать "подзависать" или перестать отвечать на сообщения. Это баг сетевого стека.
diff --git a/sys_func.inc b/sys_func.inc
index 6b4acc8..bef5e9e 100644
--- a/sys_func.inc
+++ b/sys_func.inc
@@ -198,10 +198,10 @@ FileInfo:
mov dword[esp + FILED.opcode], 5 ; file info
mov dword[esp + FILED.offset + 4], 0 ; zero flag
mov dword[esp + FILED.buffer], edx
- mov byte[esp + FILED.path - 1], 0
+ mov dword[esp + FILED.name_encode], 3 ;UTF-8
mov dword[esp + FILED.path], ecx
mov ebx, esp
- mcall 70
+ mcall 80
add esp, sizeof.FILED
pop ebx
ret 8
@@ -210,12 +210,13 @@ FileInfo:
FileInitFILED:
push ecx edi
mov edi, [esp + 4*2 + 4]
- mov ecx, sizeof.FILED
+ mov ecx, sizeof.FILED/4
xor eax, eax
- rep stosb
+ rep stosd
mov eax, [esp + 4*2 + 4]
mov ecx, [esp + 4*2 + 8]
mov [eax + FILED.path], ecx
+ mov dword[eax + FILED.name_encode], 3 ;UTF-8
dec ecx
@@:
inc ecx
@@ -239,7 +240,7 @@ FileRead:
mov [eax + FILED.buffer], ecx
mov ebx, eax
- mcall 70
+ mcall 80
test eax, eax
jz @f
@@ -280,10 +281,10 @@ FileReadOfName:
mov dword[esp + FILED.offset + 4], 0
mov dword[esp + FILED.size], eax
mov dword[esp + FILED.buffer], edx
- mov byte[esp + FILED.path - 1], 0
+ mov dword[esp + FILED.name_encode], 3 ;UTF-8
mov dword[esp + FILED.path], ecx
mov ebx, esp
- mcall 70
+ mcall 80
test eax, eax
jz @f
cmp eax, 6 ; EOF