Commit Graph
2404 Commits
Author SHA1 Message Date
evgeny e4557b0473 dm: маршрутизация через общую группу (group_id), JSON-эскейпинг; звонки: иконки/UI в desktop и android 2026-09-16 15:05:48 +03:00
evgeny b483335c06 bgp/ncd: владение conn через NCD-handle в senders_list; call audio route persist + incoming call sound 2026-09-16 13:29:28 +03:00
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
2026-09-16 10:17:57 +03:00
evgeny 0157f7f96b build: fix --asan to build lib/libopus dependency 2026-09-15 22:44:27 +03:00
evgeny 21ec740d82 socks_proxy: defer conn free to fix UAF from synchronous write_queue flush 2026-09-15 22:39:27 +03:00
evgeny b085715654 tun/nat: fix UAF при teardown и use-after-free в tun_read_packet 2026-09-15 22:07:55 +03:00
evgeny 6dc017337d chat: fix UAF в member list trampoline (req->inst после u_free) 2026-09-15 21:52:46 +03:00
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: сопутствующие изменения
2026-09-15 21:09:17 +03:00
evgeny 761f64cf76 chatgui-android: отображение REALITY-линков (TCP+REALITY) в статусе узлов и сокетов 2026-09-15 12:18:22 +03:00
evgeny 27b591daee reality: использовать NTP-время вместо time(NULL) в анти-реплей проверке timestamp
Часы colo2 отстают на ~52с (ntpd выключен), что ломало reality auth
(diff < -30с = time_window). Теперь клиент и сервер передают
ntp_time_get_seconds() в reality_client_hello_build_at /
reality_server_hello_build_at вместо сырого системного времени.
2026-09-15 05:39:28 +03:00
evgeny 481872d5db chat: invite-ссылки с несколькими адресами + ncd-адреса узлов (join) 2026-09-15 05:16:04 +03:00
evgeny d88dccfa19 etcp/stcp: обрыв etcp_link->tcp_link при закрытии stcp_link (fix UAF) 2026-09-15 00:25:42 +03:00
evgeny af382403ec tun_freebsd: reuse existing TUN interface on SIOCIFCREATE EEXIST 2026-09-14 23:17:59 +03:00
evgeny 952504d8eb etcp: убрать ложный reinit по gop (got_initial_pkt)
reinit должен происходить только при смене reset_id пира
(etcp_conn_apply_peer_reset_id). gop-проверка 'dirty vs clean' на догоняющем
TCP-линке давала ложный reinit и рвала соединение (JOIN_INFO_RESP терялся).
Удалён peer_got_initial_pkt из stcp_link (стал не нужен).
2026-09-14 22:46:41 +03:00
evgeny d58d4d39c4 chat join: запуск JOIN_INFO_REQ при уже поднятом соединении + добавление джойнера в группу
- cm_invite_trampoline: если уже подключены к connection-узлу — cs_on_conn_up
  повторно не сработает, запускаем join-хендшейк напрямую (cs_start_channel_join)
- chat_join_process_request: после верификации ключа сразу добавляем джойнера
  в CHAT-группу (topo_group_new_conn), чтобы BGP подключился
2026-09-14 22:46:41 +03:00
evgeny 910cfeac20 chatgui: настройка звука уведомления на канал (sound_on_message) 2026-09-14 21:12:53 +03:00
evgeny fc2262912a chat_join: верификация join-ключа на инвайтере (REQUEST_FWD)
Инвайтер добавлял мембера без проверки join-ключа — любой известный узел
мог самопригласиться в канал через REQUEST_FWD напрямую владельцу.
register_key теперь всегда хранит выданный ключ локально,
process_request отклоняет запрос с неизвестным/чужим ключом.
Тесты: unknown join_key rejected + регистрация ключа в t_process_request.
2026-09-14 21:12:53 +03:00
evgeny 75e39d2fee chat_join: модуль join-протокола, invite-ссылки v2, синхронизация мемберов 2026-09-14 19:57:27 +03:00
evgeny a01a4ddba4 fix: UAF in _on_member_sync_done (channel_cache freed by refresh)
cs_flush_sync passed &cs->channels[i] as member_sync cb_arg, but the 30s
cs_refresh_channels frees/reallocs cs->channels[], leaving the arg
dangling when _session_done later fires the callback. Re-find the channel
by the (stable) ns id instead of trusting arg.
2026-09-14 15:19:07 +03:00
evgeny 9ee61dce6c fix: ncd handle UAF in topo_recovery and topo_group_invite callbacks
topo_recovery_callback: detach cb on UP handoff and close handle on
DOWN/TIMEOUT so no handle with cb_arg==ctx outlives ctx (ASAN
heap-buffer-overflow in topo_recovery_callback).

tgi_to_channel_cb: force_close handle on NCD_EVENT_TIMEOUT so a late UP
cannot fire into the freed tgi_conn_ctx.

Also: android chatgui reverseLayout scroll + msg order/stable pagination.
2026-09-14 15:10:04 +03:00
evgeny fc3295ce12 nat_detection: гасить NAT-чек при закрытии линка через link-status коллбэк (UAF na->link) 2026-09-14 14:37:34 +03:00
evgeny e0f5afbff8 stcp: гасить on_close_cb/close_arg в stcp_link_close; keepalive: снапшот+ревалидация link до/после каскада (UAF) 2026-09-14 14:27:38 +03:00
evgeny da329d0479 merkle_sync: ms_outq_drain_cb — сохранять e->len до etcp_send (UAF); документировать ownership etcp_send 2026-09-14 13:49:12 +03:00
evgeny 1f8ccabdbf etcp: tcp_link_close_cb — сохранять link поля до каскада (UAF local_link_id) 2026-09-14 13:39:07 +03:00
evgeny 187bcd80b9 uasync: ре-валидация node перед последующими коллбэками (счётчик cb_called) вместо снапшота 2026-09-14 12:56:52 +03:00
evgeny 836c715299 uasync: снапшот полей socket_node в poll()/select() — защита от realloc во время коллбэков (UAF) 2026-09-14 12:47:35 +03:00
evgeny 369b253bdb chatgui-android: автоскролл чата вниз при открытии клавиатуры и своих сообщениях 2026-09-14 12:14:44 +03:00
evgeny d78d652bf5 shutdown: закрывать shared sqlite (topo_sqlite_db) в самом конце utun_instance_destroy (UAF при teardown) 2026-09-14 11:47:45 +03:00
evgeny 884f36c2d4 ncd: cancel connect/fin_wait таймеры в ncd_deferred_close (UAF fin_wait_timeout_cb) 2026-09-14 11:34:36 +03:00
evgeny f2f4a37344 routing: fix use-after-free в route_ping_cancel_for_conn (чтение request_id после u_free) + формат %08x 2026-09-14 11:29:31 +03:00
evgeny 11991e688c build: ASAN-сборка включает lib/libopus (зависимость src) 2026-09-14 11:20:12 +03:00
evgeny d730b06436 build: доработка build_bsd_full.sh (ASAN/hardened через clang, gmake fallback, -jN, FFmpeg) 2026-09-14 11:18:05 +03:00
evgeny d0dfa97a47 transport: SOCKS5-прокси для ETCP-линков (CONNECT + UDP ASSOCIATE + пинги) 2026-09-14 00:24:11 +03:00
evgeny 7c8d65db78 chat: локальное удаление канала (Android) + db_sync инстансы в куче 2026-09-13 22:08:33 +03:00
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-тесты классификации и сопоставления
2026-09-13 16:48:00 +03:00
evgeny ff53c735dd chat: превью медиасообщений в списке каналов (Android + desktop) 2026-09-13 15:55:33 +03:00
evgeny 07ef7d9a01 chat: живой счётчик медиакеша + сверка + DESC-проход докачки/вычистки 2026-09-13 14:49:57 +03:00
evgeny 1eb0566cb5 chat: enforce storage_total_size + media orphan cleanup; async_dns: fix use-after-free
- media cache: удаление сирот на старте (сверка ФС с сообщениями) + лимит
  storage_total_size (удаление самых старых файлов, только старше backfill_days)
- ma_dir_walk(): кроссплатформенный рекурсивный обход каталога (POSIX/Windows)
- async_dns: первый драйв slow-пути отложен через call_soon (исключён
  double-free при синхронном завершении запроса); cancel унифицирован
- chat: видимый WARN 'media too large' + честный счётчик started/skipped
2026-09-13 03:11:10 +03:00
evgeny 7bba39ddcb nodeinfo: 2 адреса на сокет (до/после NAT) + типы адресов local/public/nat/nat_eim/nat_strict
- topo_node: сокет рекламирует INTERFACE (до NAT) + NAT (после NAT, EIM);
  strict/direct отдельным адресом не передаются
- topo_node_sqlite: addr_type_classify различает NAT_VERIFIED_*; добавлен
  ADDR_TYPE_NAT (тип неизвестен), fallback больше не даёт DIRECT по IP
- chat_member: бейдж NAT-типа по приоритету (public>nat_eim>nat>nat_strict>local)
  вместо MIN(addr_type)
- GUI (desktop+android): адреса мембера с socket_id и ролью (local/public/nat/nat_eim/nat_strict)
2026-09-13 01:05:25 +03:00
evgeny a823898379 chat/media: докачка недостающего медиа после стартовой синхронизации + HAVE_BLOCK анонс локальных блоков 2026-09-12 21:28:08 +03:00
evgeny e636c3a420 docs: доступ на узел colo2 2026-09-12 21:24:04 +03:00
evgeny 5ee6bf53d8 conn_mgr: ping активных кандидатов с noop-колбэком вместо NULL (bad args) 2026-09-12 21:07:24 +03:00
evgeny c6118280bd conn_mgr: не удалять как stale кандидатов с активным соединением 2026-09-12 20:00:48 +03:00
evgeny 265008961a conn_mgr: кандидаты-посредники из topo_node-списка (активные соединения); гейт md_super_connect по is_supernode; откат ping→best_candidates 2026-09-12 19:38:48 +03:00
evgeny 2045d4a169 media: восстановить conn_mgr_open (DIR/REV/IND) + популяция best_candidates из RTT + watchdog не трогает CONN-блоки 2026-09-12 18:47:01 +03:00
evgeny 905fde5a27 media: BLOCK_REQ транзитом — убрать требование прямого соединения (NAT-узлы качают через роутер) 2026-09-12 18:27:23 +03:00
evgeny 0055c2c6fe media: фикс детекта суперузла (json_flat_get), backfill осиротевших медиа, fallback на автора при пустом QUERY_RESP 2026-09-12 18:19:47 +03:00
evgeny 5a83aaa786 opencode: подключить aiterm-mcp (интерактивный терминал для отладки) 2026-09-12 16:19:09 +03:00
evgeny ce12f058d9 tcp_io: fix error_cb busy-spin on graceful EPOLLHUP; socks_proxy: close local socket on both FINs
- error_cb (tcp_io): при graceful HUP (SO_ERROR==0) после уже прочитанного FIN
  сокет оставался в epoll и level-triggered EPOLLHUP крутил цикл на 100% CPU.
  Теперь сокет закрывается через tcp_conn_push_close.
- socks_proxy on_fin_cb: при обоих обменянных FIN локальный сокет закрывается
  (send_close + push_close), симметрично exit-стороне (tcp_proxy_server).
2026-09-12 16:08:14 +03:00
evgeny 56d0928632 etcp: wire-MTU кап 2048→1500 (согласовано с TUN_MAX_PACKET_SIZE), enc_buf привязан к MTU; тест multilink: per-link проверка трафика с ретраем через keepalive-тики 2026-09-12 13:53:55 +03:00