evgeny
792776a1f6
Negotiate group sessions and scope topology messages to peer epochs
2 weeks ago
evgeny
52ef7a4b3c
Own recovery attempts in group sessions and require restored routes
2 weeks ago
evgeny
66c59501fc
Track topology exchange readiness per group and peer
2 weeks ago
evgeny
bce17d9cfc
Route UTUN configuration and group ownership through NCD
2 weeks ago
evgeny
9745a987ac
Define join contract and require committed CHAT membership for BGP
2 weeks ago
evgeny
1a8072e9b2
Release group NCD ownership when destroying peers
2 weeks ago
evgeny
26e6c05313
Apply fresh BGP addresses to shared NCD connections
2 weeks ago
evgeny
ec51b2d61f
Version signed node snapshots with persistent timestamps
2 weeks ago
evgeny
7374d1648c
Support 8 KiB member owner tags without signature or serialization truncation
2 weeks ago
evgeny
de714f5023
Add bounded Merkle pull lifecycle and terminal error handoff
2 weeks ago
evgeny
3e25bcef02
Refactor Merkle sync into bounded bidirectional rounds with atomic member updates
2 weeks ago
evgeny
1b92b4885b
Restrict dynamic auto socket test to Linux
2 weeks ago
evgeny
03f71fd94e
Bound ETCP receive window and fix timestamp and allocator UB
2 weeks ago
evgeny
59f4802904
Fix autosocket ownership and exercise interface churn under load
2 weeks ago
evgeny
3131dcbb7c
Fix ETCP session recovery and router lifecycle; confirm chat invites before publishing
2 weeks ago
evgeny
44d4265084
ll_queue: queue_waiter_cancel отменяет отложенный call_soon при internal==NULL (фикс UAF waiter_defer)
2 weeks ago
evgeny
8aaac45020
ll_queue: отложенный первый запуск автозабора (callback_defer) + тест
...
queue_set_callback_defer(q, 1) переносит первый запуск callback из
queue_data_put* в uasync_call_soon (очистка стека производителя).
Повторные запуски (queue_resume_callback) и так всегда deferred.
2 weeks ago
evgeny
265421eb96
tun proxy: фикс TCP-суммы (нечётный pbuf), FIN до дренажа to_lwip, tcp_bind/rexmit_fast/active_pcbs_changed + нагрузочный burst-тест
2 weeks ago
evgeny
a20d73d2be
proxy/tun: добавить DEBUG-логи диагностики застревания keep-alive (lwIP IN/OUT/RECVED/RTO/PERSIST + per-conn DIAG)
2 weeks ago
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
3 weeks ago
evgeny
6ee9bad17d
chat: defer media auto-download to per-channel backfill after sync
...
- db_sync insert-cb gets initial_sync flag (SEND_DATA=1, PUSH/local=0)
- on_msg_inserted skips media download during initial sync
- new chat_media_autodownload_backfill_channel (newest-first) triggered
on SYNC_DONE per channel (2s debounce)
3 weeks ago
evgeny
d1432b7d19
tests: fix Windows build — SKIP fork-based e2e, cross-platform mkdtemp/setenv
3 weeks ago
evgeny
b33caa56b8
uasync: pass socket name to all add_socket call sites
3 weeks ago
evgeny
8a9184675a
radio: дедупликация дублей в mesh + фикс OOB в hop_list
...
- radio_recv: кэш (src,stream,seq) с TTL 2с гасит кадры, пришедшие по второму пути (diamond/mesh)
- фикс записи за границу new_hops[hop_count] при hop_count==RADIO_MAX_HOPS
- счётчик c_dup_dropped + radio_dup_dropped() для диагностики
- тест test_radio_mesh (4 узла, diamond): C получает ровно N кадров, dup>0
3 weeks ago
evgeny
b96ed8bd00
radio: PTT-радио в каналах (src/radio + chatgui + chatgui-android)
...
Новый модуль src/radio (radio/radio_audio/radio_headless) — push-to-talk
радио поверх topo-групп, доставка аудио в канал, headless-режим и тесты.
Интеграция в chatgui (ptt_hotkey_manager, radio_audio_engine, радионастройки,
вызовы) и chatgui-android (RadioAudioEngine, RadioOverlayService, UI).
3 weeks ago
evgeny
1de1409699
conn_mgr: handle-based API (conn_mgr_open/close), фазы DIRECT/REVERSE/INDIRECT, тесты phases+handles
3 weeks ago
evgeny
6d3ad965ee
topo: remember REQUEST_TABLE for not-yet-created groups, fulfill on create
...
При REQUEST_TABLE для ещё не созданной группы (CHAT-канал не загружен) пир
дропал запрос, и проситель навсегда не узнавал таблицу — односторонняя
видимость (звонок android→linux падал «peer offline»). Теперь запрос
запоминается в pending_table_reqs[32] и выполняется при создании группы
(topo_group_fulfill_table_reqs → handle_request_table).
Попутно: test_chat_join_e2e — критерий успеха через CHAT_EVT_CONNECT_RESULT
(JOIN_READY) вместо senders_list; doxygen-комментарии в etcp_api.h.
3 weeks ago
evgeny
1340ab123b
reality/stcp: fix OOB read in key_share parse, padding clamp, shbuf leak
...
- reality_parse_client_hello: bound shares_len by extension data length
(len-2) to prevent stack-buffer-overflow from malformed ClientHello
- stcp handshake: reject padding_size > STCP_HS_PADDING_MAX (512)
- reality_ch_body_cb: free shbuf on stcp_try_send error (leak)
- tests: fuzz key_share parse; raw-socket handshake control/clamp/garbage
Signed-off-by: uTun <dev@utun>
4 weeks ago
evgeny
51d6d22a27
sock_match: классификация сокета по адресу, а не по type из конфига (fix Q8/Android→LAN)
...
ip_is_public() вынесен в lib/platform_compat (единый классификатор IPv4 с ntohl).
auto_socket_reconcile_config: тип сокета выставляется по фактическому адресу.
sock_collect_views: has_priv/has_inet/is_eim — по классификации адреса и NAT-детекции.
is_local_subnet упрощён до !ip_is_public(). Тест test_sock_match обновлён.
4 weeks ago
evgeny
2de554f8b9
call: единый голосовой стек (libutun_voice) + SoundTouch на Android
...
- voice_jitter (кодированные Opus-кадры + decode-on-pull + SoundTouch time-stretch)
вместо PCM-буфера audio_jitter; излишек держится до декодирования
- call_audio.c/.h — единая реализация для desktop/Android/headless (C-интерфейс)
- libutun_voice (voice_sources.cmake): SoundTouch + voice_jitter + call_audio + call_tones
- Android: pull-модель (nativeCallAudioPull), убран Kotlin FIFO, ANDROID_STL=c++_static
- headless audio-сокет: PCM-протокол (decode-only, без тактирования), daemon остаётся C-only
- CALL_STATS расширен dropped/underruns; удалены audio_jitter.cpp и libutun_lite/call_audio.c
- тест test_voice_jitter (ёмкость/догон/стационар), test_call_headless переведён на PCM
4 weeks ago
evgeny
b11e77e4c0
call: P2P аудиозвонки — сигналинг, релей медиа, аудио-контур, headless/desktop/android
...
- src/call/: сигналинг (call.c, call_proto.h, ETCP_RT_ID_CALL 0x36) + релей медиа
+ headless аудио-сокет (call_headless.c, call_audio_bind) + Opus/jitter/тоны
- chat: события CHAT_EVT_CALL_* (34–40), CHAT_EVT_DM_MESSAGES (41), DM-трамплины
- chatgui: call window, miniaudio I/O, audio_frame_ring, test_audio_jitter
- chatgui-android: CallScreen/IncomingCallDialog, аудио-роутинг, JNI, рингтон
- tests: test_call, test_call_headless
4 weeks ago
evgeny
73fe99b33f
dm: прямой обмен сообщениями (DM) + soundtouch + архитектура звонков
...
- src/dm/: dm_core/dm_crypto/dm_mailbox — прямой обмен сообщениями (DM)
- lib/soundtouch-master/: vendored SoundTouch (изменение темпа/высоты аудио)
- doc/dm_arch.md, doc/chat_call_arch.md: архитектура DM и звонков
- tests: test_dm.c, test_dm_e2e.c
- chat: рефакторинг chat_* модулей, member_sync, invite_build
- chatgui/chatgui-android: синхронизация с новым API чата
- lib/u_async, debug_config, utun_instance: сопутствующие изменения
4 weeks ago
evgeny
fc2262912a
chat_join: верификация join-ключа на инвайтере (REQUEST_FWD)
...
Инвайтер добавлял мембера без проверки join-ключа — любой известный узел
мог самопригласиться в канал через REQUEST_FWD напрямую владельцу.
register_key теперь всегда хранит выданный ключ локально,
process_request отклоняет запрос с неизвестным/чужим ключом.
Тесты: unknown join_key rejected + регистрация ключа в t_process_request.
4 weeks ago
evgeny
75e39d2fee
chat_join: модуль join-протокола, invite-ссылки v2, синхронизация мемберов
4 weeks ago
evgeny
d0dfa97a47
transport: SOCKS5-прокси для ETCP-линков (CONNECT + UDP ASSOCIATE + пинги)
4 weeks ago
evgeny
ddfffad1ed
conn: сопоставление сокетов по ролям (direct/nat/local) + hairpin; NTP-детект оффлайна
...
- sock_match: единая классификация сокетов (DIRECT/NAT/LOCAL) и адресов (PUB/PRIV/UNREACH)
- eim приравнен к direct; на приватный адрес — только с приватного интерфейса;
оба EIM за одним NAT (одинаковый публичный IP) — только через LAN
- topo_node: LOCAL-сокеты рекламируются (INTERFACE), private скрыт,
NAT-адрес не рекламируется для strict и при оффлайне
- ntp: флаг reachable по циклам + пере-анонс nodeinfo при смене доступности
- cm_direct_add_links / ncd_create_links / conn_match_candidate_sockets на sock_match
- test_sock_match: unit-тесты классификации и сопоставления
4 weeks ago
evgeny
56d0928632
etcp: wire-MTU кап 2048→1500 (согласовано с TUN_MAX_PACKET_SIZE), enc_buf привязан к MTU; тест multilink: per-link проверка трафика с ретраем через keepalive-тики
1 month ago
evgeny
13e2697f80
test_etcp_link_stress: переписан — 5 вариантов добавления линков (V1/V2, коллизии V3a/b/c), kill/failover и инвариант «нет реинита при живом линке»; фикс stack buffer overflow в etcp_encrypt_send (enc_buf 1600→2048)
1 month ago
evgeny
42a94aa916
BGP: фикс владения адресами в реестре (мульти-группа), проброс group_id в сервис (conn_mgr per-group), membership-фильтр create_group; тест media через chat-группу
1 month ago
evgeny
6c9a47b201
media_delivery: диагностика маршрутизации md_send/md_dl_send/router_deliver (conn, subcmd, no-route) + тест test_media_delivery_chat
1 month ago
evgeny
f36ad8903a
etcp: убрать session_id из INIT/STCP handshake, симметричная эпоха reset_id
1 month ago
evgeny
d886a2ff84
Диагностика коллизии линков + детектор дубликата node_id + reality-конфиг autogen
1 month ago
evgeny
c2882c533e
reality: конфиг [client] для REALITY-клиентов (server_name/short_id/public_key/version/fingerprint) + TCP-линки через NCD
1 month ago
evgeny
898a0a4a66
reality: реклама reality-параметров сокетов через BGP и применение к исходящим TCP-линкам
1 month ago
evgeny
edb3bb36e1
reality: TLS-камуфляж для STCP (ClientHello/ServerHello + релей на реальный сайт)
1 month ago
evgeny
738ac8928b
tests: fix mkdtemp cross-platform in test_media_delivery_download
1 month ago
evgeny
f28d3e91f7
media: рефакторинг загрузки блоков — конечный автомат, фейловер, watchdog простоя
...
- media_download: состояние блока (IDLE/CONN/REQ/RECV/WAIT/DONE/FAILED),
кандидаты-держатели (MD_MAX_HOLDERS_PER_BLOCK), фейловер + ретраи (MEDIA_DL_MAX_ATTEMPTS),
watchdog простоя (MEDIA_DL_STALL_TIMEOUT_TB) вместо фейкового времени
- media_delivery: настраиваемые dl_stall_timeout_tb / dl_max_attempts
- chat_msg: пометка ошибки скачивания в local_attrs ("st":"er") для UI
- tests: новый test_media_download_timeout (watchdog/фейловер), рефакторинг
test_media_delivery_download/full
- chatgui-android: состояние 'error' у вложений/видео (иконка + tap to retry)
1 month ago
evgeny
1855c61275
video: отправка видео-сообщений (FFmpeg пробинг+транскод H.264/AAC MP4)
...
- src/video/: video_probe/video_get_info/video_transcode_start (FFmpeg, HAVE_FFMPEG)
- chat_core/chat_msg: media_video флаг, chat_core_submit_media_message, транскод перед index
- headless: команда attach с --video
- chatgui: диалог 'Как видео' + прогресс транскода + sendVideoAttachment
- FFmpeg в сборке (configure.ac, Makefile.am, chatgui CMake, build_nix.sh)
- debug: категория DEBUG_CATEGORY_VIDEO
1 month ago
evgeny
1345f44e10
chat: invite-ссылки с выбором достижимого узла + tcp_io фикс half-close FIN
...
- Общий модуль invite_build: сборка utun://-ссылок, авто-выбор лучшего
достижимого узла, список кандидатов (вынесено из android jni_bridge)
- chatgui: диалог invite с выбором узла (комбобокс), события INVITE_CANDIDATES /
INVITE_LINK_READY через gui_bridge
- headless/chatcli: invite <ch_id> [node_id], команда invite_nodes
- tcp_io: error_cb отличает грациозный EPOLLHUP (SO_ERROR==0) от реальной ошибки —
при приостановленном чтении FIN не роняет недослейные данные (фикс flaky half-close)
- run_test.sh: half-close echo на выделенном порту 19190 + отдельный DNAT (был недостижим)
1 month ago
evgeny
6163f34ce1
etcp_router: эпоха reset_id на wire + master/slave — фикс потери пакетов при рестарте пира
1 month ago