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
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
evgeny
13e2697f80
test_etcp_link_stress: переписан — 5 вариантов добавления линков (V1/V2, коллизии V3a/b/c), kill/failover и инвариант «нет реинита при живом линке»; фикс stack buffer overflow в etcp_encrypt_send (enc_buf 1600→2048)
2026-09-12 13:31:37 +03:00
evgeny
42a94aa916
BGP: фикс владения адресами в реестре (мульти-группа), проброс group_id в сервис (conn_mgr per-group), membership-фильтр create_group; тест media через chat-группу
2026-09-12 02:13:34 +03:00
evgeny
6c9a47b201
media_delivery: диагностика маршрутизации md_send/md_dl_send/router_deliver (conn, subcmd, no-route) + тест test_media_delivery_chat
2026-09-11 23:48:31 +03:00
evgeny
d7bb58c6fb
chat: автоподключение к узлам группы (вкл/выкл) + ручной connect к узлу (desktop+android); фикс reinit при QR-join
2026-09-11 19:46:02 +03:00
evgeny
9ef501a2fb
etcp_connections: собрать forward-объявления в блок и добавить пояснения к функциям
2026-09-11 18:13:48 +03:00
evgeny
d95048160d
etcp: закрыть UAF в клиентской ветке tcp_link_close_cb
...
etcp_on_link_down может каскадно закрыть conn и освободить link;
использовать сохранённый etcp и проверять state!=2 перед reconnect
2026-09-11 17:46:38 +03:00
evgeny
be1f08b43e
etcp: защита от UAF в start_keepalive_timer/enter_ready_tcp + диагностика указателей
...
- start_keepalive_timer: guard !link->etcp->instance->ua (SIGSEGV на 80 строке)
- etcp_link_enter_ready_tcp: return при etcp->state==2 после reinit/apply_reset/conn_ready
- tcp_server_on_link/enter_ready_tcp: DEBUG_CATEGORY_DEBUG с адресами link/etcp/inst/ua
- topo_node: убрать лишние DEBUG_CATEGORY_DEBUG (chain_rtt)
2026-09-11 17:13:35 +03:00
evgeny
7de636be6e
topo: убрать ALTER-миграции, backfill deleted из adm_tags
2026-09-11 16:48:15 +03:00
evgeny
b7da6547c1
connection: логировать только connect/reconnect/disconnect; фиксы конфига чатгуи
...
- категория connection теперь только жизненный цикл соединения; INIT/PING/keepalive
переклассифицированы в ETCP/SOCKET/KEEPALIVE/REALITY/ROUTING, удалены дубли
- settingsdialog: устранён дубль my_node_name в конфиге (двухпроходная запись + только при изменении)
- storagesettingspage: канонические ключи storage_total_size/storage_unit_size с суффиксом M/G
- audiodevicesettingspage: compressor_max_gain_db min 0→1
- etcp_connections: %s-баг в логе TCP link (addr → sockaddr_storage_to_str)
- docs/sample: [chatserver], актуализированы ключи хранилища
2026-09-11 15:24:56 +03:00
evgeny
b7669eea36
Fix use-after-free of ETCP_LINK in keepalive_timer_cb
2026-09-11 13:21:35 +03:00
evgeny
70a18c8be8
etcp: чистка — убрать мёртвый peer_id/guard reset_id, поправить комментарий STCP_HS
2026-09-11 11:59:48 +03:00
evgeny
f36ad8903a
etcp: убрать session_id из INIT/STCP handshake, симметричная эпоха reset_id
2026-09-11 11:57:29 +03:00
evgeny
ab6773a313
etcp: перепривязка/своп remote_link_id при INIT со сменённым адресом (NAT)
2026-09-10 21:20:26 +03:00
evgeny
311cee0ee1
Fix group node scan stall and UAF on server link teardown
...
- node_conn_direct_close: immediate conn cleanup when links are down
(graceful fin_wait on a down conn left a lingering entry, so re-open
in Phase3 stuck in 'pending' with no timer and scan never continued)
- tcp_link_close_cb: skip etcp_link_close if conn was already closed
synchronously during etcp_on_link_down cascade (fixes use-after-free)
2026-09-10 19:01:21 +03:00
evgeny
5633903be0
stcp: закрывать принятые коннекты в stcp_server_destroy (UAF server_tlink->conn после tcp_socket_remove)
2026-09-10 17:53:14 +03:00
evgeny
6a674b3422
etcp: etcp_inflight_nullify_link читал entry->data вместо entry — last_link не обнулялся (UAF в bbr/retrans)
2026-09-10 17:53:14 +03:00
evgeny
fdad786744
etcp: сбрасывать last_rr_link при закрытии линка в обеих ветках (use-after-free в loadbalancer)
2026-09-10 17:20:19 +03:00
evgeny
ee8b2a4a45
chat: deleted-флаг выводить из adm_tags — member_block_put вместо деструктивного member_put, удалить member_put, фильтр deleted=0 в списках
2026-09-10 17:20:18 +03:00
evgeny
327aac1c12
ncd: убрать временные DEBUG_CATEGORY_DEBUG логи (scan_conns, open/open_node dedup)
2026-09-10 16:01:57 +03:00
evgeny
e75e3750aa
ncd: синхронный close timed_out-conn чтобы не было коллизии линков при cycle_restart
2026-09-10 15:57:07 +03:00
evgeny
d886a2ff84
Диагностика коллизии линков + детектор дубликата node_id + reality-конфиг autogen
2026-09-10 14:40:45 +03:00
evgeny
c2882c533e
reality: конфиг [client] для REALITY-клиентов (server_name/short_id/public_key/version/fingerprint) + TCP-линки через NCD
2026-09-10 12:33:16 +03:00
evgeny
898a0a4a66
reality: реклама reality-параметров сокетов через BGP и применение к исходящим TCP-линкам
2026-09-10 11:24:17 +03:00
evgeny
edb3bb36e1
reality: TLS-камуфляж для STCP (ClientHello/ServerHello + релей на реальный сайт)
2026-09-10 01:11:26 +03:00
evgeny
6c857ceab8
chat: обрабатывать CHANNEL_INVITE/INFO_REQ для ещё не созданного канала + GUI-результат invite-by-link
...
- chat_sync: не дропать CHANNEL_INVITE/CHANNEL_INFO_REQ при отсутствии CHAT-группы (group_id == channel_id, выводим ch_id напрямую) — приглашение по ссылке на сервер теперь доходит до autojoin
- inviteby: регистрация connect_result_cb, показ результата, автозакрытие при успехе
- joindialog: исправлен маппинг кодов результата (2=timeout, -1=not found, -7=not init)
2026-09-09 22:13:52 +03:00
evgeny
22da6bd832
chatgui: открывать SQLite-БД до auto_socket_init (переиспользование портов)
2026-09-09 21:29:27 +03:00
evgeny
e3168d1e55
Удалить обмен метриками ETCP (ETCP_SECTION_METRICS)
...
Полностью убрана фича периодического обмена CSV-метриками с Ed25519-подписью:
- ETCP_SECTION_METRICS и парсинг/верификация секции
- struct etcp_metrics, etcp_metrics_add_*/start/stop и снапшот-таймер
- мёртвый API on_metrics_rcvd/metrics_user_ptr (никто не подписан)
- link->remote_ed25519_pubkey (заполнялся только на клиенте → верификация на сервере всегда падала)
- stats_dir в UTUN_INSTANCE
Общий sc_stream_sign_* (деривация Ed25519 из X25519) и INIT-передача обоих ключей сохранены.
2026-09-09 19:59:29 +03:00
evgeny
5b31a765c2
chatgui-android: auto_sockets=android — сокеты из конфига, лёгкое обновление без полного рестарта
...
- auto_sockets три-режимный: off/system/android; android берёт сокеты из [server] конфига
- auto_socket_reload_config: reconcile сокетов (remove→create) по имени+addr:port, сохранение портов
- etcp_create_server_socket вынесен из init_sockets; stcp_server_list_find_by_sock
- instance_lite_update_sockets + JNI nativeUpdateSockets + NativeLib.updateSockets
- NetworkChangeMonitor: updateSockets вместо restart; порты сохраняются при смене сети
2026-09-09 17:34:46 +03:00
evgeny
ca16b46404
chatgui-android: съёмка фото — JPEG, выбор разрешения, отправка аттачем, просмотр с зумом
2026-09-08 20:02:40 +03:00
evgeny
73e81032bc
chatgui-android: видеосообщения — запись, выбор камеры, качество, подсветка
...
- C-слой: video_sender (content_type video/mp4, media_video=0 без FFmpeg)
- chat_msg_submit: duration/width/height для метаданных видео в теле сообщения
- JNI: nativeVideoSend + NativeLib/Repository/ViewModel
- VideoRecordScreen: CameraX VideoCapture, 4 пресета качества (разрешение+битрейт),
выбор камеры (селфи/широкая/обычная/макро/теле по фокусу), тумблер подсветки,
запись/пауза/отправить, лимит 60с
- InputBar: единая кнопка — короткий тап переключает voice/video, удержание — запись
- режим камеры/микрофона сохраняется в ViewModel
2026-09-08 18:38:18 +03:00
evgeny
aa166a2030
topo_group: RESYNC — пассивная сторона перезапускает BGP-обмен после флэпа
...
Сервер (пассивная сторона) на UP шлёт общий RESYNC, клиент по нему
заново анонсирует группы (JOIN_GROUP), которые ему положены по конфигу.
Чинит потерю маршрутов при одностороннем флэпе, когда клиент не замечает
разрыв и не перешлёт JOIN_GROUP повторно.
2026-09-08 16:39:55 +03:00
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)
2026-09-08 06:53:48 +03:00
evgeny
e264b8aaa7
video: video_extract_thumbnail — превью первого кадра в JPEG (MJPEG)
2026-09-08 00:44:01 +03:00
evgeny
7f3b4f61f4
chat: dur/w/h в тело видео-сообщения (после транскода)
2026-09-08 00:41:43 +03:00
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
2026-09-08 00:41:04 +03:00
evgeny
ba557e2b9d
chat: фикс 0:00 у длинных голосовых — b64_decode терял последний байт без padding + formatTime в мс
2026-09-07 22:36:23 +03:00
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 (был недостижим)
2026-09-07 13:59:15 +03:00
evgeny
a17a85a383
chat: deleted-аккаунты — колонка deleted, скрытие/зачёркивание, не подключаемся
2026-09-07 01:40:53 +03:00
evgeny
631a176944
chat: права админа + member tags (verified/deleted) + ncd revive
...
- chat_admin: передача канальных privkey другому узлу (encrypted+signed,
ETCP_RT_ID_ADMIN_KEY), событие ADMIN_KEY_RECEIVED
- member_sync/bridge: tags verified/deleted, is_channel_owner, transfer_admin
(android JNI + chatgui memberpropsdialog)
- node_conn_direct: оживление timed_out entry — обновление линков в существующем
conn (убрать старые, добавить новые) + немедленная очистка не поднявшегося
conn без fin_wait — фикс invite/reconnect
2026-09-07 00:53:41 +03:00
evgeny
6163f34ce1
etcp_router: эпоха reset_id на wire + master/slave — фикс потери пакетов при рестарте пира
2026-09-06 22:20:08 +03:00
evgeny
61c572cae4
etcp: reset_id эпоха ресета — фикс потери NODEINFO при флапе
...
Добавлен 64-битный reset_id (эпоха ресета) в INIT-фреймы и STCP-handshake:
- генерится один раз при создании conn, меняется только при фатальном ресете
(normalizer desync / bad fragment size);
- при приёме чужого id slave принимает эпоху пира и ресетится, master держит свою;
- первый id принимается без ресета (свежие при init);
- «tcp peer clean» реинит гейтится по смене id — нет повторного сброса seq.
Это устраняет коллизию seq=1 (RX dup) из-за двойного реинита нескольких TCP-линков,
из-за которой NODEINFO пира терялся и member не возвращался online.
Также: chat member online теперь из topo_group (без БД/merkle), тест test_etcp_seq_collision.
2026-09-06 21:50:06 +03:00
evgeny
f7c08f8f5e
nat_detection: применять NAT-тип через topo_node_update_my_addresses с переподписью
2026-09-06 01:29:07 +03:00
evgeny
53bce51201
etcp_router: корректный handshake/restart без таймаут-петли
...
- START на первом пакете сеанса (seq=0), гейт отправки до первого ACK
- дедуп рестарта по payload init-пакета (ретрансмит START не триггерит рестарт)
- RST переинициализирует только отправку (без CLOSE_ALL), дедуп повторных RST
2026-09-06 00:33:45 +03:00
evgeny
232ad2de6b
etcp_router: разделить служебные функции и API в хедере + чистка мёртвого кода
...
- etcp_router.h: 4 секции (протокол / внутренние структуры / API / служебные)
- переименование router_set_max_inflight -> etcp_router_set_max_inflight
- удалены неиспользуемые: input_q_count, waiter_register/cancel, conn_close_async
(+ поля close_callback/close_callback_arg)
- docs: актуализировать backpressure (on_send_ready на send_q) вместо удалённого waiter API
2026-09-05 22:34:00 +03:00
evgeny
4b9b0009d8
chat: гейт авто-синхронизации db_sync до member_sync/pubkeys + member tags (verified/deleted) в chatgui
2026-09-05 20:38:22 +03:00
evgeny
01ea6913ae
etcp_router: sess_id как локальный счётчик переустановок (не в протоколе)
2026-09-05 20:38:17 +03:00