Record ETCP and STCP header audit findings

This commit is contained in:
evgeny committed 2026-10-22 21:30:28 +02:00
1 parent 03f4cd7939
commit 91bb95a981
1 file changed
+35
+35
View File
@@ -4,6 +4,41 @@
## Текущие задачи
[ ] **ETCP: etcp_connect выдаёт готовность индексированного DOWN/reset-соединения** — воспроизведено 22.10.2026:
Ветка conn && !ctx в etcp_connect.c:281 проверяет только state==0; state==1 принимается за готовность.
Стенд на реальных очередях/реестре вызывает EARLY и LATE при links_up=0, initialized=1;
также при links_up=1, initialized=0, reinit_pending=1, session_required=1. Возврат 0 в обоих случаях.
Это противоречит контракту готовности в etcp_connect.h/etcp_api.h; state отражает индексирование, не UP сессии.
Проверить реальные вызывающие NCD/CM, определить условие готовности и ожидание восстановления/подтверждения;
отдельно учесть close_requested и повторную подписку после уже выданного EARLY. Комментариями проблему не маскировать.
Стенд вне репозитория /tmp/protocol-header-audit.c; лог /tmp/protocol-header-audit.log.
[ ] **ETCP: проверить распределение cwnd/inflight между линками** — воспроизведено 22.10.2026:
etcp_loadbalancer.h обещает учёт cwnd/inflight в select_link; реализация фильтрует initialized/link_status/shaper
и выбирает минимум inflight_bytes, но inflight_lim_bytes не проверяет. Стенд выбирает линк с 10000 байт при лимите 1.
Вызов etcp_request_pkt после выбора добавляет inflight выбранному линку; общий допуск данных ограничивается отдельно.
Определить границы ответственности общего окна/BBR/выбора линка, отдельно ACK/control/retrans/burst;
проверить, где требуется ограничение отдельного линка, и согласовать реализацию и контракт. Не добавлять слепой запрет,
способный заблокировать ACK или retrans. Стенд/лог: /tmp/protocol-header-audit.c, /tmp/protocol-header-audit.log.
[ ] **Аудит .h ETCP/STCP: исправить подтверждённые расхождения контрактов** — проверено 22.10.2026, исходники не менялись:
stcp.h: do_close уже очищает оба sc_stream и планирует free для allocated/free_on_close; комментарий утверждает обратное.
Разделить контракты finish (drain/запрет новых данных/до 1с) и do_close (немедленное закрытие/потеря очередей/callback).
Описать владение внешними rx_queue/tx_queue, преусловия размера frame и callback/reentrancy/lifetime.
stcp_client.h: ping автоматически освобождается после завершения; NULL на ошибке запуска не вызывает ping callback.
RTT пинга — uint16_t в 0.1мс, от отправки STCP handshake, без TCP/SOCKS/REALITY dial; явно описать срок out_cli/handle.
inst также нужен для NTP-времени и профиля REALITY, а не только padding автономного STCP.
stcp_link.h/stcp_server.h: дополнить параметры, возвраты, время жизни callbacks/inst и различие handles
серверного адаптера stcp_server_listen и базового stcp_server_create (одно имя opaque-типа, разные реализации).
etcp.h: ref_count удерживает объект/phase-2, но close уже освобождает normalizer и линки в phase-1;
reset_done не блокирует reinit (в реализации только запись/диагностика); last_rx_id не обновляется при RX.
etcp_connection_ready объявлена без реализации/вызовов; рабочая функция — etcp_conn_ready.
etcp_loadbalancer.h ссылается на отсутствующее packet_request_fn; фактически вызывается link_ready_for_send_fn.
etcp_connections.h проверен частично: у data_len исключены все 3 байта timestamp/flag, не только timestamp;
send_hook уступает SOCKS UDP; etcp_send_tcp_ping при отказе запуска возвращает отрицательный код без callback.
etcp_session.h и etcp_padding.h сверены с реализацией без подтверждённых смысловых расхождений.
Подробности: /tmp/protocol-header-audit.txt. Продолжить протоколы перед routing/BGP; media/file_transfer отложен.
[+] **Android: приём рации через SCO после отпускания PTT** — исправлено 22.10.2026:
Общий MediaAudioController сохраняет разговорный тракт для SCO-only выхода, даже без подписчиков микрофона.
AudioTrack рации снова использует USAGE_VOICE_COMMUNICATION: Android учитывает playback как разговорную активность.