diff --git a/doc/tasks.md b/doc/tasks.md index be8d3ef0..f63bcbd0 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,17 @@ ## Текущие задачи +[ ] **Proxy: проверить ошибки teardown и убрать неверный ключ в тестовых конфигах** — обнаружено при аудите документации 24.10.2026. + Девять профильных тестов PASS, но в test_socks_http_proxy после ответов встречаются EPIPE (32) + в tcp_io error_cb и ENOTCONN (107) при shutdown write; причина и корректность cleanup отдельно не установлены. + Побайтовая проверка всех 16 загрузок проходит. Начать с информативного лога FIN/close/socket events + (proxy/socket), сопоставить обе половины и очереди; поведение по одному PASS не считать проверенным. + test_udp_proxy, test_icmp_proxy и test_socks_http_proxy также используют [tcp_proxy_server] enabled=yes: + парсер логирует Unknown option, но включает сервер при обработке любого параметра этой секции. + В тестах использовать поддержанный параметр, например connect_timeout=2000, либо отдельно согласовать API конфига. + ICMP здесь проверен через fallback без raw socket (нет прав); реальный raw ping не подтверждён. + Логи: /tmp/proxy-doc-audit-network-logs/test_socks_http_proxy.log, test_udp_proxy.log и test_icmp_proxy.log в том же каталоге. + [ ] **ETCP: полезная утилизация нескольких каналов и доставка при зависании части линков** — общая задача открыта. 24.10.2026: тесты отдельно проверяют обработку RTO (опоздание<=20мс), ожидание готового повтора (<=100мс) и доставку сверх заданной задержки канала (<=100мс). TX учитывается после принятия send. diff --git a/src/proxy/tcp_proxy_client.h b/src/proxy/tcp_proxy_client.h index 79829ca7..2a145c59 100644 --- a/src/proxy/tcp_proxy_client.h +++ b/src/proxy/tcp_proxy_client.h @@ -53,7 +53,7 @@ struct tcp_proxy_client_conn { struct ll_queue* tx_queue; // буфер lwIP→ETCP при backpressure (аналог server read_queue) struct queue_waiter_handle tx_waiter; // waiter на send_q (etcp_router_on_send_ready) - void* tx_retry_timer; // retry safety-net (force=1), аналог server retry_timer + void* tx_retry_timer; // safety-net 500 мс, повтор DATA с force=1 (окно proxy сохраняется) uint32_t bytes_to_exit; // байт принято router для exit (из lwIP/TUN) uint32_t bytes_from_exit; // байт получено от exit (в lwIP/TUN) diff --git a/src/proxy/tcp_proxy_server.h b/src/proxy/tcp_proxy_server.h index 83f968ff..df7ee63d 100644 --- a/src/proxy/tcp_proxy_server.h +++ b/src/proxy/tcp_proxy_server.h @@ -45,7 +45,7 @@ struct tcp_proxy_server_conn { void* retry_timer; // fallback 500 мс: возобновить read_queue, DATA отправляется с force=0 uint32_t bytes_sent; // сумма входящих DATA, учитывается до проверки/записи в TCP uint32_t bytes_relayed; // байт принято router для клиента - uint32_t drain_count; // счётчик вызовов read_queue_drain_cb + uint32_t drain_count; // число успешно отправленных DATA из read_queue uint32_t data_count; // счётчик входящих DATA от клиента struct UASYNC* ua; // заимствованный loop для таймеров и отложенного free };