diff --git a/doc/tasks.md b/doc/tasks.md index 1cde3d08..040b761e 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -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 как разговорную активность.