Document authenticated media admission and revocation boundaries

This commit is contained in:
evgeny committed 2026-11-03 19:10:03 +01:00
1 parent eac0163b69
commit 4a34b174c5
2 files changed
+17

No files matched your search

+13
View File
@@ -95,9 +95,21 @@ DEBUG etcp_route показывает candidate/nonce, repeat, возраст и
## Подтверждение и пауза потребителя
DATA проходят crypto policy и verify/decrypt до изменения reorder/rx_seq.
Если сервис требует SIGNED, подпись обязательна также для HELLO/CHALLENGE/CONFIRM, ACK/BUSY и CLOSE.
Пустые управляющие пакеты подписываются без шифрования; ENCRYPTED применяется к сервисному payload.
Сервис получает `[svc:1][src:8][dst:8][rx_flags:1][group:8][payload]`, всего 26 байт заголовка.
Его callback владеет entry, ACK продвигается после успешной передачи callback.
Сервис может установить `authorize(inst, group, peer)` после включения обязательного SIGNED.
Только результат 1 разрешает доступ. На входе peer — проверенный подписью конечный отправитель;
сосед ETCP может быть посредником. Предикат читает состояние допуска, не вызывает callbacks и не меняет router.
Он проверяется перед открытием канала, приёмом, каждой доставкой из reorder, отправкой и ретрансмитом.
Транзитный узел пересылает пакет без применения политики конечного сервиса.
После commit изменения членства `etcp_router_revalidate_group` закрывает запрещённые каналы,
очищает их очереди и уведомляет сервис. Общий ETCP и разрешённые каналы соседних групп сохраняются.
Байты, уже переданные нижнему транспорту, отозвать нельзя; дальнейшая отправка через router запрещена.
ACK подтверждает только диапазон до tx_sent, в модульном порядке uint32.
При продвижении снимаются существующие inflight-записи и один раз учитываются исходные payload bytes.
@@ -137,6 +149,7 @@ resume_receive планирует продолжение. Управляющий
Self-доставка через etcp_route_send синхронна и не создаёт канал. Она обходит сетевые crypto policy
и receive_ready, выдаёт rx_flags=0; режим проверяется на допустимые биты.
Предикат authorize применяется и к self-доставке.
Payload должен быть непустым и помещаться вместе с 26-байтным заголовком в uint16 длину.
Нет обработчика, переполнение размера или отказ памяти возвращают -1.
Отдельный синтетический conn каждого вызова сохраняет контекст при вложенных доставках разных ядер.
@@ -1,6 +1,10 @@
/* media_delivery_proto — wire-структуры и подкоманды доставки блоков медиа CHAT-группы.
* Описывает запросы держателей, чанки, подтверждения наличия и репликацию между суперузлами.
* Это формат payload сервиса router, без группового маршрутизационного заголовка; обработчики — media_delivery/download.
* Сетевые данные требуют SIGNED|ENCRYPTED, control — SIGNED. Локальный узел и конечный peer должны быть
* активными членами CHAT-группы (source=0, deleted=0, admitted=1); наличие общего ETCP не даёт доступа.
* QUERY и передача блоков доступны обычным участникам; HAVE_BLOCK/PROCESSING принимает суперузел,
* SYNC/CHANGED требуют роли суперузла с обеих сторон. Повторённый group_id должен совпадать с router.
* Числа SYNC кодируются little endian; остальные packed-поля — native byte order текущего формата.
* SERVE_REG/LEAVE меняют только вспомогательный served_nodes; текущий загрузчик их не посылает.
* SERVE_ACK сейчас не отправляется, входящие SERVE_ACK/HAVE_BLOCK_ACK игнорируются; ожидания ACK и его retry нет. */