evgeny
d092f649ac
chatgui: пути db и лога относительные в конфиге, резолв к бинарнику в рантайме
4 weeks ago
evgeny
654202b0cb
chatgui: debug-категории в секции [debug] построчно (как в utun)
4 weeks ago
evgeny
20eef8ad16
chatgui: лог по умолчанию в файл chatgui.log (debug_file)
4 weeks ago
evgeny
656da48e35
topo_group: асимметричный старт BGP (JOIN_GROUP) + вынос group_id/flags из TOPO_NODE
...
- UTUN: BGP инициирует только сторона-клиент ([client]) и явные etcp_connect;
сервер добавляет пира по JOIN_GROUP (фикс обратного маршрута: сервер не
создавал узел клиента из-за дедупа senders_list)
- topo_group_new_conn: conn_add_path до дедупа; handle_request_table без add_to_senders
- TOPO_NODE: убраны group_id/flags (shared-реестр), передаются в topo_node_serialize
- routing/control_server: явный TOPO_GROUP_UTUN
- CHAT: гейт по peers_* (get_member_channels) + пассивное add/remove в member_sync
- tests: тесты адаптированы (route_ping ждёт registry+v4_addrs)
- chatgui-android: voice_recorder_init в utun_bridge_voice_start (idempotent)
4 weeks ago
evgeny
7b73d99b5b
chat: передавать group_id в бинарном виде в протоколе синхронизации
...
db_sync/merkle_sync/chat_sync шлют group_id (uint64 BE) вместо текстового
channel_id/namespace. Приёмная сторона находит группу/таблицу через
topo_groups_find(group_id) и требует существующую CHAT-группу. db_sync:
instance key заменён с SHA256(ch_id) на strtoull(ch_id)=group_id.
4 weeks ago
evgeny
326dfd7e2c
media_delivery: маршрутизация всегда через CHAT-группу
...
media_download/медиа-ответы и суперузловая репликация теперь берут группу
из контекста (dl->group_id, group_id из пакета, peer->group_id) вместо
хардкода TOPO_GROUP_UTUN. node_props_changed получает channel_id.
SUPER_HELLO несёт group_id.
4 weeks ago
evgeny
55da8fd146
media_delivery: логирование отправки QUERY_RESP и провалов md_send
4 weeks ago
evgeny
01b61a457a
etcp_router: fix ACK no-route — слать ACK через recv_conn
...
При асимметричной топологии topo_group_find_conn_for_node возвращает NULL,
ACK не уходит → ретрансмит-шторм → no-ACK close → inflight сбрасывается в 0.
Теперь ACK уходит через тот же коннект, с которого пришли данные (recv_conn),
с фолбэком на топологию. Довершает фикс из e08956e (deliver), который
аналогично не трогал router_send_ack.
Заодно удалён неиспользуемый ETCP_ID_ROUTE_ENTRY.
4 weeks ago
evgeny
fbea9c3869
socks_proxy: fix client stall + non-blocking DNS via async_dns
...
- fix HTTP_STATE_RELAY == SOCKS_STATE_CONNECTING enum collision (relay data dropped)
- fix wrong waiter cancel (etcp_router_waiter_cancel -> etcp_router_cancel_send_ready)
- add backpressure retry timer, restore lost queue_resume_callback, defer FIN on pending tx_buf
- async_dns: /etc/hosts fast-path + hosts loading (avoid 4s DNS timeout for localhost)
4 weeks ago
evgeny
f47ad7d87f
tcp_proxy: fix throughput (tx_queue backpressure) + connect timeout + integration test
...
- Router: unified service delivery format [svc_id][src][dst][payload] (end-to-end src/dst from SVC_ROUTE header)
- tcp_proxy_client: replace single tx_buf drop-on-backpressure with bounded tx_queue + send_q waiter + retry timer (no data loss, bulk window reopen — removes 62.5ms delayed-ACK stall)
- tcp_io: configurable connect timeout (tcp_conn_set_connect_timeout)
- tcp_proxy_server: connect_timeout config option (ms, default 2000, 0=off)
- check.sh: run tcp_proxy_full integration test with sudo (skip if passwordless sudo unavailable)
- test_tcp_io: connect timeout unit test; docs (lwip_nuances.md)
4 weeks ago
evgeny
acfaae2801
dns: заменить K&R-объявления указателей на функции на типизированные
...
gcc 15 (C23) трактует () как 'без аргументов', из-за чего lib/dns.c не собирался
(65 ошибок). struct dns_rr_i.sort и таблица dns_rrtypes[] переведены на явные
прототипы с typedef'ами и кастами указателей.
4 weeks ago
evgeny
e08956e5dc
etcp_router: fix NULL conn в deliver при отсутствии пути к узлу
...
router_handle_data_packet выбрасывал физический conn, а router_incoming_q_cb
восстанавливал его через topo_group_find_conn_for_node, который возвращает NULL,
когда у узла-источника нет пути в топологии. В итоге callback сервиса (routing,
conn_mgr) получал conn=0x0. Теперь физический conn сохраняется в rconn->recv_conn
и прокидывается в deliver.
4 weeks ago
evgeny
1db4fe1f01
build_linux_full.sh: автоустановка зависимостей и корректная обработка ошибок
4 weeks ago
evgeny
5d39083a6d
auto_socket: пропускать интерфейсы без default-маршрута (опция auto_socket_skip_no_default_route, default=on)
2 months ago
evgeny
f841a964aa
chat: debug-логи на джойнер-стороне (channel_put, JOIN sent, WELCOME self-add)
2 months ago
jeka
10306f5613
chat: fix CHANNEL_INVITE invalid ch_sig — передавать владельца канала из БД, а не node_id отправителя
2 months ago
evgeny
7dee49ce63
android: мониторинг смены сети — NetworkChangeMonitor, перезапуск ядра при смене интерфейса
2 months ago
evgeny
f3b33bcf74
android: кнопки start/stop сервиса с сохранением состояния, ядро не воскресает при остановленном сервисе
...
- ConfigProvider: флаг service_enabled (DataStore), flow/getter/setter
- MainActivity: автозапуск сервиса только при service_enabled; edge-to-edge со светлыми иконками статус-бара
- SettingsScreen: секция Service (start/stop), stop/exit сохраняет состояние; NativeLib.restart гейтится по isReady чтобы ядро не запускалось без сервиса
2 months ago
evgeny
3d59e5f322
chat: headless invite_to command + invite-flow integration test
...
- chat_headless_control.c: новая команда invite_to (inviter-side invite по адресам)
- chat_client.py / chatcli: клиентский метод и CLI-команда invite_to
- tools/chat_invite_test.py: headless-тест инвайтера-side (CHANNEL_INVITE → autojoin → member_sync)
- topo: guard node_id=0 в cm_open/process_nodeinfo + детализация send_nodeinfo warn
- cleanup: удалить устаревшие doc/*.txt, *.md заметки
2 months ago
evgeny
5316ee958a
android: ограничить карточку members половиной экрана, CONFIGURE_DEPENDS для GLOB
2 months ago
evgeny
383a45ed47
chatgui: setup_firewall.bat — разрешить входящие в Windows Firewall для vibechat.exe
...
Отдельный self-elevating скрипт: добавляет program-правило (dir=in action=allow
profile=any) для vibechat.exe, копируется в build-каталог рядом с exe.
2 months ago
evgeny
4ca8348a75
chatgui: хранить last_channel_id в БД (ui_state) вместо QSettings
...
Восстановление канала только если он существует; запись из utun-потока
через trampoline, чтобы не трогать sqlite из GUI-потока.
2 months ago
evgeny
eb24736e27
topo: держать актуальные self-адреса в node_addresses, обновлять/рассылать только при изменении
...
topo_node_update_my_addresses теперь собирает адреса во временные списки,
сравнивает со старыми и при отсутствии изменений выходит без бампа ver,
записи в БД и broadcast. Гейт member_exists убран: self-адреса пишутся
в node_addresses при любом запуске/изменении (с гарантией строки nodes для FK).
addrs_put логирует ошибки INSERT.
2 months ago
evgeny
54352c17ba
chatgui: opus из исходников в CMake + build_nix.sh под Linux/BSD
2 months ago
Evgeny
b4722f54f0
dns: убрать weak-атрибут у dns_random — на MinGW слабые data-символы не инициализируются → NULL-вызов → SIGSEGV
2 months ago
Evgeny
0c3398eb8c
dns: исправить сборку под Windows (MinGW)
...
- dns.c: #define uint32_t → #include <stdint.h> (на UCRT64 stdint.h уже тянется через winsock2.h, макро даёт 'duplicate unsigned')
- async_dns.c: p->IpAddress → p->IpAddress.String (IP_ADDR_STRING.IpAddress — IP_ADDRESS_STRING, не char*)
2 months ago
Evgeny
1f307046f9
dns: async_dns модуль (libdns) + неблокирующий NTP sync
...
- Вендор libdns (MIT) как lib/dns.{c,h}; правка dns_quietinit для GCC 5+
- Новый lib/async_dns.{c,h}: неблокирующий A-резолвер поверх uasync
- src/ntp_time.c: убраны блокирующие getaddrinfo+select; async DNS + неблокирующая машина состояний UDP-запроса
- test_async_dns.c (юнит) + test_ntp.c сценарий hostname→DNS
- сборка: -DDNS_RANDOM=RAND_bytes, -lcrypto в COMMON_LIBS
2 months ago
evgeny
d04e9d58b6
etcp: TCP-ping через STCP-хендшейк с флагом PING
...
- STCP-хендшейк: добавлен байт флагов (STCP_HANDSHAKE_FLAG_PING), HS_ENC 46→47
- stcp_client: stcp_ping_send() — connect+handshake(PING)+rtt+close; ошибка/таймаут → success=0
- stcp_server: детект флага, ответ с эхо-флагом, мягкое закрытие (close_after_send)
- etcp_connections: etcp_send_tcp_ping(), guard is_tcp/fd и проверка возврата send_ping_raw
- route_connectivity: probe TCP-адресов через TCP-ping (1 попытка), UDP-кандидаты без TCP-сокетов
- tests: test_stcp_ping (success+failure path), обновлена сигнатура stcp_client_connect
2 months ago
Evgeny
c7b9702c88
chatgui: add CONFIGURE_DEPENDS to libutun globs — pickup new .c files without clean rebuild
2 months ago
evgeny
aee44943fa
topo: invite вынесен в topo_group_invite, conn_mgr упрощён до 3-фазного open; member_sync: полный пересчёт merkle-дерева при старте
...
- topo_group_invite.c/h: invite/join через DIRECT + INVITE_INFO_REQ/RESP (из conn_mgr)
- conn_mgr: conn_mgr_open_invite → conn_mgr_open, убран invite-режим (-480 строк)
- topo_group_connect: подключение через node_conn_direct вместо conn_mgr
- member_sync: _rebuild_all_trees сносит merkle_tree_hash канала и собирает заново из peers (чистка осиротевших листов)
- member_sync: хеш блока A/B (update_sig/adm_tags) в док-комментариях
- обновлены doc-файлы и тесты
2 months ago
evgeny
1899f3a00f
chat: verify_and_purge — единственное удаление мембера (битая подпись при чтении из БД)
2 months ago
evgeny
7f160666d9
chat: BGP→member_sync→consumers callback, BGP не удаляет member, member_sync не лезет в BGP-RAM
2 months ago
evgeny
195e903fe6
chat: колонка source (плейсхолдер topo_group, вне merkle-хеша) + placeholder_put
2 months ago
evgeny
b69dcb4eab
chat: убрать PEER_REMOVE (conn_down ≠ удаление мембера), удалить мёртвый member_sync_del
2 months ago
evgeny
f550c80592
conn_mgr: унифицировать адреса из BGP и базы, TCP sock_meta, протокол в DIRECT
2 months ago
evgeny
5c2501b4f3
chat: BGP-driven address sync, member identity verify, join_sig fix
...
- Адреса узлов вынесены из wire-протокола member_sync/merkle/join/welcome
в BGP/topo_group: node_addresses теперь пишет только topo_node_sqlite_addrs_put
(источник истины ni->v4/v6_addrs), классификация config_type/nat_type в sockmeta
- Жёсткая анти-подделка: node_id=derive(x25519), ed25519 сверяется с доверенной
таблицей nodes, NODEINFO node_id/pubkey mismatch отклоняется как forgery
- Единые member_sync_build_join_msg (112Б) и member_sync_build_update_msg:
устранён баг _verify_join_sig (join_ts по смещению 80 вместо 104, длина 104→112),
который рушил приём мемберов; все 7 мест подписи/проверки join_sig через хелпер
- Единое обновление своего мембера chat_core_update_my_member (вместо sync_my_addresses)
- Android standby: пауза таймеров (broadcast/db_sync/merkle_sync/chat_sync) через standby_wait
- name[16] → name[MAX_CONN_NAME_LEN] с truncation-warning в парсере
- conn_mgr: etcp_connect_cancel_by_node (use-after-free при отмене invite),
промоушен conn в ncd после успешного invite
- Android GUI: foreground-gating опросов, сохранение портов интерфейсов, фикс udp-log flush
- chatgui: персистентный db_path; мелкие DEBUG-логи epoll/pool
2 months ago
evgeny
c07bd385ca
topo_node_sqlite: fix snprintf truncation warning in member_block_put
2 months ago
evgeny
a4e73acceb
db_sync: work-driven peer_check timer (stops when all peers synced)
2 months ago
evgeny
4e06db77af
chat: gate broadcast on CHANGED, my_name via update_sig, set_online local-only gating
2 months ago
evgeny
d0784a3ed7
member_sync: apply_record compare+update per-block, put/del/set_online, send_to
2 months ago
evgeny
d62c370e22
merkle_sync: per-session out_q with backpressure, WAL timer, send_to, recompute returns changed
2 months ago
evgeny
ad9235f772
topo_node_sqlite: granular member block/owner put functions
2 months ago
Evgeny
ce387d58f1
tcp_proxy_client: fix pcb double-free — завершать conn при обоих FIN, не держать pc->pcb до TIME_WAIT
2 months ago
evgeny
b203a48063
android: standby duty-cycle в фоне — defer ping/reconnect/probe через standby_wait
...
standby.h/c: duty-cycle ACTIVE/SLEEP, standby_wait() будит в burst сразу,
в SLEEP — до следующего burst; notify_network_activity для раннего пробуждения.
Интеграция (по флагу UTUN_HAVE_STANDBY, десктоп без изменений):
- conn_mgr: bg_ping/candidate_ping в SLEEP defer через standby_wait
- route_connectivity: probe_node откладывается (PROBE_STATUS_DEFERRED)
- topo_group_connect: пауза между попытками — активный режим 1с, фон standby_wait
- jni_bridge/ConfigProvider/NetworkActivityMonitor: set_active + сетевая активность
- chat_setting: standby_active_sec/sleep_sec/min_sleep_sec
+ юнит-тест test_standby (31 проверок)
2 months ago
Evgeny
1ec94de852
platform_compat: фикс Windows-сборки (Ipv4IfIndex/Ipv6IfIndex отсутствуют, GetBestInterfaceEx без const)
2 months ago
Evgeny
f347dc8edc
vibechat: single-instance (QLockFile) + переименование Chat→vibechat (бинарник, конфиг, hostname node name)
2 months ago
Evgeny
f82dca3185
auto_socket: Windows-скан + список сокетов в Network Settings (add/remove, чистый rewrite конфига)
2 months ago
Evgeny
d5119ac7c6
invite: не добавлять TCP-сокет в UDP-адреса; показывать протокол в Join
2 months ago
evgeny
b0753bc19d
android: кнопка invite в чате + фикс тап-зоны #, вывод протокола линков участника
2 months ago
Evgeny
bcea4bc335
invite: убрать BOTH-протокол — адрес либо UDP либо TCP
2 months ago