feat(protocol): add initial parser for common message header
This commit is contained in:
+59
-2
@@ -2,5 +2,62 @@
|
||||
|
||||
## 📌 Текущее состояние
|
||||
* **Где остановился:** Сервер успешно запускается и слушает сетевой сокет.
|
||||
* **Проблема:** Не удалось проверить эхо-ответ через PowerShell.
|
||||
* **Следующий шаг:** Найти рабочий способ отправки тестового запроса в PowerShell или использовать альтернативный инструмент.
|
||||
Проверочная строка: smikhai@DebHOME:~$ printf '\x4E\x43\x4C\x44\x01\x01\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x03\xFB' \
|
||||
> | nc 192.168.1.213 32768
|
||||
выдаёт ошибку парсера:
|
||||
Сервер слушает 192.168.1.213:32768
|
||||
Обработчик 1 создан для 192.168.1.170:50978
|
||||
Обработчик 1: Критическая ошибка! Неверный формат заголовка.
|
||||
Обработчик 1: ошибка: Invalid header format
|
||||
что радует.
|
||||
* **Проблема:**
|
||||
* **Следующий шаг:**
|
||||
## Чек-лист: исправление парсера общего заголовка
|
||||
|
||||
* [ ] Исправить имя функции `parce_header` → `parse_header`.
|
||||
* [ ] Убрать `async` у `parse_header`: функция не выполняет ввод-вывод.
|
||||
* [ ] Убрать `.await` при вызове `parse_header`.
|
||||
* [ ] Исправить порядок полей согласно протоколу:
|
||||
|
||||
* `bytes[0..4]` — `magic`;
|
||||
* `bytes[4]` — `version`;
|
||||
* `bytes[5]` — `command`.
|
||||
* [ ] Проверять `magic` как четыре байта `NCLD`.
|
||||
* [ ] Проверять версию как число `1`, а не ASCII-символ `b'1'`.
|
||||
* [ ] Пока разрешать только версию протокола `1`.
|
||||
* [ ] Исправить команды `80 | 81` на `0x80 | 0x81`.
|
||||
* [ ] Записывать в `Header.version` значение из `bytes[4]`.
|
||||
* [ ] Для первого теста отправлять заголовок с `body_size = 0`.
|
||||
|
||||
## Проверка исправлений
|
||||
|
||||
* [ ] Отправить корректный заголовок.
|
||||
* [ ] Убедиться, что сервер вывел:
|
||||
|
||||
```text
|
||||
Header {
|
||||
version: 1,
|
||||
command: 1,
|
||||
flags: 0,
|
||||
request_id: 17,
|
||||
body_size: 0,
|
||||
}
|
||||
```
|
||||
|
||||
* [ ] Отправить заголовок с неправильным `magic`.
|
||||
* [ ] Убедиться, что сервер вернул `InvalidFormat`.
|
||||
* [ ] Отправить заголовок с неподдерживаемой версией.
|
||||
* [ ] Убедиться, что сервер вернул `InvalidFormat`.
|
||||
* [ ] Отправить заголовок с неизвестной командой.
|
||||
* [ ] Убедиться, что сервер вернул `InvalidFormat`.
|
||||
* [ ] Отправить заголовок с запрещённым флагом, например `0x0008`.
|
||||
* [ ] Убедиться, что сервер вернул `InvalidFormat`.
|
||||
|
||||
## Следующая итерация — пока не выполнять
|
||||
|
||||
* [ ] Ограничить допустимый `body_size`.
|
||||
* [ ] Не выделять буфер размером со всё тело сообщения.
|
||||
* [ ] Начать отдельный разбор тела команды `UPLOAD`.
|
||||
* [ ] Читать данные файла порциями, а не целиком в память.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user