evgeny
e3caf15f32
Guard routing loops and reconcile blocked transit against current paths
...
Track visited nodes outside the signed body for all routed packet types. Recheck queued transit routes without losing FIFO priority, reject unknown-group transit, and suppress BGP announcements caused only by RTT jitter.
Document routing rules and wire format. Validate graph churn, REINIT, encrypted transit, malformed paths, loop drops and queue cleanup; full suite: 106 passed, 1 skipped, plus proxy integration and sanitizer checks.
2026-09-28 15:36:47 +03:00
evgeny
fa9e102271
Preserve config string terminator when preparing key updates
2026-09-28 15:16:57 +03:00
evgeny
39ce249361
Prune unconfirmed BGP paths and restart stalled exchanges
2026-09-28 14:58:13 +03:00
evgeny
b76e6553bc
Reconcile BGP paths and advertise selected routes per neighbor
2026-09-28 14:37:44 +03:00
evgeny
546e0c185d
Fix WITHDRAW removing nodes with surviving paths
2026-09-28 14:20:55 +03:00
evgeny
4503bdfa7e
diagnostics: explain and rate-limit rejected ETCP session data
2026-09-28 13:16:39 +03:00
evgeny
c63e93715f
fix: accept invite public keys with a leading zero byte
2026-09-28 12:26:13 +03:00
evgeny
01fcefdec5
docs: clarify core, group and chat header contracts
2026-09-28 12:01:08 +03:00
evgeny
72fee9e245
Separate core, UTUN and chat lifecycles with owned asynchronous work
2026-09-28 11:39:08 +03:00
evgeny
5838e63cde
Use shared group requests for config and chat connection planners
2026-09-28 11:07:25 +03:00
evgeny
0756a6e020
Serialize group topology lazily through a cancellable backpressure sender
2026-09-28 02:45:00 +03:00
evgeny
792776a1f6
Negotiate group sessions and scope topology messages to peer epochs
2026-09-28 02:15:54 +03:00
evgeny
52ef7a4b3c
Own recovery attempts in group sessions and require restored routes
2026-09-27 23:06:48 +03:00
evgeny
66c59501fc
Track topology exchange readiness per group and peer
2026-09-27 22:14:03 +03:00
evgeny
bce17d9cfc
Route UTUN configuration and group ownership through NCD
2026-09-27 21:59:32 +03:00
evgeny
9745a987ac
Define join contract and require committed CHAT membership for BGP
2026-09-27 20:34:24 +03:00
evgeny
1a8072e9b2
Release group NCD ownership when destroying peers
2026-09-27 20:08:17 +03:00
evgeny
26e6c05313
Apply fresh BGP addresses to shared NCD connections
2026-09-27 19:18:40 +03:00
evgeny
ec51b2d61f
Version signed node snapshots with persistent timestamps
2026-09-27 19:11:11 +03:00
evgeny
7374d1648c
Support 8 KiB member owner tags without signature or serialization truncation
2026-09-27 17:12:13 +03:00
evgeny
de714f5023
Add bounded Merkle pull lifecycle and terminal error handoff
2026-09-27 16:17:04 +03:00
evgeny
3e25bcef02
Refactor Merkle sync into bounded bidirectional rounds with atomic member updates
2026-09-27 14:44:39 +03:00
evgeny
03f71fd94e
Bound ETCP receive window and fix timestamp and allocator UB
2026-09-27 12:16:15 +03:00
evgeny
59f4802904
Fix autosocket ownership and exercise interface churn under load
2026-09-27 11:57:29 +03:00
evgeny
3131dcbb7c
Fix ETCP session recovery and router lifecycle; confirm chat invites before publishing
2026-09-27 02:51:47 +03:00
evgeny
f6e6e2c73f
stcp: write-error закрывает conn отложенно (фикс UAF keepalive/etcp_tcp_send)
...
Синхронный send-путь (stcp_link_send → queue_data_put → tx_queue_cb →
flush_pending → try_send) при ошибке сокета вызывал stcp_conn_do_close →
on_close → tcp_link_close_cb → etcp_link_close внутри стека вызывающего,
освобождая ETCP_LINK под keepalive_timer_cb/etcp_tcp_send (use-after-free,
SIGSEGV в keepalive_timer_cb:210).
Теперь write-error планирует отложенный close (uasync_call_soon) с отменой
handle в stcp_conn_do_close; первый err сохраняется; flush_pending не работает
вне STCP_STATE_DATA. Мёртвый hook on_write_error удалён.
2026-09-26 16:42:51 +03:00
evgeny
cc2d2b5f78
etcp: фикс UAF teardown (двойное закрытие линка) + вытеснение down-линка при коллизии адреса
...
- tcp_link_close_cb (серверная ветка): убрать преждевременный огонь link_status/on_link_down,
etcp_link_close сам снимает линк из списка и стреляет коллбэки в безопасном порядке
(устраняет двойное закрытие линка — UAF из callring 45502)
- etcp_connection_close: при callbacks_running откладывать закрытие через uasync_call_soon
вместо *(int*)0=0
- callbacks_running: uint8_t-флаг -> int-счётчик вложенности (++/--)
- etcp_fire_conn_status / etcp_fire_link_status_cbk: поднимать callbacks_running вокруг огня
- insert_link_queue: при коллизии адреса с чужим conn — ERROR при одинаковом pubkey,
отказ при up-линке, вытеснение (etcp_link_close) при down-линке
Попутно: доки/комментарии в etcp_router, ACK-интервал 100мс->10мс (ROUTER_ACK_INTERVAL_TB).
2026-09-26 13:40:33 +03:00
evgeny
265421eb96
tun proxy: фикс TCP-суммы (нечётный pbuf), FIN до дренажа to_lwip, tcp_bind/rexmit_fast/active_pcbs_changed + нагрузочный burst-тест
2026-09-25 23:36:45 +03:00
evgeny
a20d73d2be
proxy/tun: добавить DEBUG-логи диагностики застревания keep-alive (lwIP IN/OUT/RECVED/RTO/PERSIST + per-conn DIAG)
2026-09-25 22:12:47 +03:00
evgeny
4353daf913
freebsd: уникальный dst-адрес per-interface (tunN -> 192.0.2.(N+1))
2026-09-25 20:16:39 +03:00
evgeny
3a4daf6e77
etcp: строгая последовательность коллбэков при закрытии (NEW→UP↔DOWN→DELETE)
...
- close: финальный per-connection DOWN только если был UP, до state=2
- etcp_cbk_fire / etcp_fire_conn_status / etcp_link_ready_callback / etcp_on_up: guard state==2
- документация контракта в etcp_api.h / etcp.h
2026-09-25 19:13:38 +03:00
evgeny
ab5d1c5f91
topo_group: диагностика senders_list (new_conn/remove_conn) для локализации UAF
...
- new_conn: DEBUG_INFO ADD с conn/peer/state/ch
- remove_conn: state в enter-логе, детали в !found_in_list WARN, REMOVED-лог
2026-09-25 18:18:39 +03:00
evgeny
08e8b2f1cc
route_connectivity: фикс UAF при удалении узла с влётными пробами; отмена TCP-пингов при teardown
...
- topo_nodeq_remove_node: единый хелпер удаления nq (cancel проб + free paths/subnets + remove + free), заменяет все free-сайты
- route_connectivity_cancel_all: итерация по всем группам + зануление ctx->nq + отмена standby-defer
- etcp_send_tcp_ping: out_cli — хендл stcp_client для досрочной отмены; conn_probe_ctx.tcp_cli
- conn_mgr: cand_tcp_pings[] — отмена влётных candidate TCP-пингов в conn_mgr_destroy
2026-09-25 16:01:19 +03:00
evgeny
3f7b4351cd
stcp: фикс UAF log_dump, дренаж очередей при закрытии, защита pre-closed серверной ветки, логирование тихих сбросов rx
2026-09-25 13:49:43 +03:00
evgeny
fb4343fca6
transport: reality-релей idle-timeout (конфиг, дефолт 5с) + warn при >64 релеях; убрать лимит FD_SETSIZE; проверка socket_id в stcp_server
2026-09-24 12:08:45 +03:00
evgeny
cc269e810c
Звонки: надёжность отмены (INVITE-кодограмма + watchdog) и вибрация входящего по ringer-режиму
2026-09-24 10:15:19 +03:00
evgeny
7198154106
chatgui: клик по медиа с отсутствующим файлом — сброс пометки и перекачка
2026-09-22 21:59:59 +03:00
evgeny
d237dfec7c
diag: кольцевой трейс вызовов teardown + дамп при SIGSEGV (размотка UAF link close)
2026-09-22 20:52:02 +03:00
evgeny
4f29839de5
chat: инвайтер шлёт CONNECT_RESULT(0) после приёма джойнера
...
- chat_join_process_request: постить CHAT_EVT_CONNECT_RESULT(result=0) в GUI инвайтера
(иначе диалог «Пригласить в канал» висел на «ожидание ответа»)
- cs_handle_join_request: снять pending_invite_* и погасить invite_send_timer после join
2026-09-22 18:26:44 +03:00
evgeny
b46fd599fa
chat: push-invite join key + запрет флагов на плейсхолдере
...
- CHANNEL_INVITE теперь несёт join_key (регистрируется инвайтером локально),
джойнер шлёт JOIN_INFO_REQ с валидным ключом — чинит автоjoin chatserver-узлов
- ask-путь сохраняет join_key для chat_sync_accept_invite
- chat_member_tags_commit отвергает установку флагов на source!=0 (плейсхолдер)
- member_sync_apply_record: defensive ERROR при adm_tags на плейсхолдере
2026-09-22 17:58:50 +03:00
evgeny
0e625da109
call: ретрансмит INVITE каждые 2с + fail-fast при отсутствии маршрута (6с)
2026-09-22 16:06:52 +03:00
evgeny
93becd36e6
keepalive: TCP-линки без ретраев/ACK; не пинговать спящих пиров, bg-ping цикл ≤ 1/мин
2026-09-22 03:47:50 +03:00
evgeny
a3e890b711
keepalive: раздельный sleep-код (announce+ACK-ретраи в окне, dead-link) + без flagless в спячке
2026-09-22 03:29:42 +03:00
evgeny
a3df1720b4
keepalive: симметричный sleep-протокол (без is_server) + отдельный ACK-бит
2026-09-22 02:41:15 +03:00
evgeny
331c7849f0
keepalive: убрать периодический keepalive в standby (обе стороны молчат, только фазовые анонсы + один ack)
2026-09-22 02:19:28 +03:00
evgeny
945c6a82b0
keepalive: гвард нулевого тайминга фазы (busy-loop) + разделение echo/announce на сервере
2026-09-22 01:35:25 +03:00
evgeny
cc0dcb071e
chat: UI настройки звука канала (Android toggle + JNI, desktop через C API) + trampoline
2026-09-22 01:25:55 +03:00
evgeny
3d9c79e752
db_sync: троттлинг push к спящему пиру в тихом чате
2026-09-22 01:21:51 +03:00
evgeny
b39b85db13
chat: троттлинг по фазе спячки (member_sync send-only, db_sync sound-aware) + настройка звука
2026-09-22 01:20:32 +03:00
evgeny
9f89fd0f7a
transport: keepalive duty-cycle тайминг (active_remaining+sleep_duration) + серверная фаза троттлинга
2026-09-22 01:20:26 +03:00