diff --git a/doc/service_lifecycle.md b/doc/service_lifecycle.md index 6823c6c3..26eb6d8c 100644 --- a/doc/service_lifecycle.md +++ b/doc/service_lifecycle.md @@ -71,6 +71,16 @@ ConnectivityManager до запроса запуска и передаёт ко | Группа | Сессии пиров, её маршруты и логические каналы, планировщик подключения и recovery | | Сессия пира группы | NCD handle с момента CONNECTING, согласованные эпохи, состояние обмена таблицей, очередь отправки | +Proxy настраивается при создании ядра. Instance владеет общими UDP/ICMP-контекстами; +TCP client/server владеют только своими bindings, listeners и TCP-потоками. +Общие контексты нужны для exit либо клиентского TUN; SOCKS/HTTP без TUN их не требуют. +Ошибка обязательного listener, TUN mapping или регистрации откатывает создание instance. +Недоступность raw ICMP по правам или поддержке отключает только ICMP exit с WARN; +клиентские ICMP REPLY и TCP/UDP продолжают работать. +`utun_instance_destroy()` закрывает proxy и обрабатывает отложенные free до остановки +UTUN/CHAT-групп и транспорта. Waiters/таймеры снимаются до освобождения их владельцев. +Остановка отдельного TCP proxy-модуля не уничтожает общие UDP/ICMP-контексты. + SQLite открывается ядром один раз: `db_path/chats.db`, либо `:memory:`, если путь не задан. Остановка чата сохраняет каналы и сообщения в этой БД. В варианте `:memory:` данные сохраняются только до уничтожения ядра. diff --git a/src/proxy/tcp_proxy_client_doc.md b/src/proxy/tcp_proxy_client_doc.md index 90f5805d..0e912edc 100644 --- a/src/proxy/tcp_proxy_client_doc.md +++ b/src/proxy/tcp_proxy_client_doc.md @@ -8,8 +8,8 @@ ## Создание и владение -`tcp_proxy_client_create` вызывается в uasync с живым `ua`. TUN/lwIP создаются только -при **обоих** непустых `tun_name` и `tun_ip`. В этом случае `tun_init_nat` создаёт +`tcp_proxy_client_create` вызывается в uasync с живым `ua`. Для TUN нужны **оба** +непустых `tun_name` и `tun_ip`; задание только одного — ошибка. `tun_init_nat` создаёт отдельный proxy TUN (test_mode выбирает тестовый интерфейс); MTU<=0 заменяется на 1500, MTU TUN передаётся в lwIP. Имя tun_init_nat не означает включение eim_nat на ingress. Без TUN необходим хотя бы флаг SOCKS или HTTP; эти listeners могут работать без lwIP. @@ -20,9 +20,10 @@ MTU TUN передаётся в lwIP. Имя tun_init_nat не означает обмена через router нужен instance. Mappings содержат порты в host byte order, адрес назначения — IPv4-строку. -Критическая ошибка TUN/lwIP/пула возвращает NULL. Ошибка отдельного listener или -router bind не отменяет создание всего клиента; проверять конкретные listener handles -и диагностику. UDP/ICMP инициализируются только для TUN после успешного TCP bind. +Все заданные SOCKS/HTTP listeners, TUN mappings, TUN/lwIP/пулы и TCP router binding +обязательны. Ошибка любого шага возвращает NULL и освобождает уже созданные ресурсы. +Повторное создание клиента или занятой binding отклоняются. UDP/ICMP создаёт владелец +instance после успешного создания TCP-модулей, если есть TUN либо включён exit. Клиент привязывается к `ETCP_RT_ID_TCP_PROXY_CLIENT` (0x08), сервер — к `ETCP_RT_ID_TCP_PROXY_SERVER` (0x04). Генератор stream_id общий для TUN/SOCKS/HTTP, @@ -81,7 +82,7 @@ CLOSE/ERROR при неудаче отправки могут повторять Пустое уведомление router (`ROUTER_SVC_HDR_SIZE=26`, без TCP command/sid) удаляет все lwIP/SOCKS/HTTP потоки клиента к настроенному exit. Это не 9-байтовый wire CLOSE_ALL. -`destroy` снимает TCP binding, закрывает listeners/клиентов, освобождает lwIP/TUN/пул. -Общие UDP/ICMP уничтожаются только при выключенном сервере того же instance. +`destroy` снимает только собственный TCP binding, закрывает listeners/клиентов, +освобождает lwIP/TUN/пул. Общие UDP/ICMP принадлежат instance и сохраняются. Владелец затем сам обнуляет `inst->tcp_proxy_client`. Все callbacks и очистка выполняются в uasync; уничтожать клиента следует вне его активного callback.