evgeny
bbc8b7693a
Restart member and feedback synchronization over existing transports
2026-10-06 22:40:47 +02:00
evgeny
982e5a06ab
Integrate feedback tables with channel and sync lifecycle
2026-10-06 20:06:39 +02:00
evgeny
56897368b3
Own group avatar synchronization in the chat service lifecycle
2026-10-06 13:41:55 +02:00
evgeny
d946a1b93a
Finalize unsigned initial profiles before channel bootstrap
2026-10-06 12:48:20 +02:00
evgeny
76c02012eb
Preserve complete signed profiles in channel bootstrap messages
2026-10-06 12:44:18 +02:00
evgeny
65264137f8
Apply JOIN metadata through the transactional member model
2026-10-04 16:55:00 +02:00
evgeny
6a67cc2038
Prepare channel history before enabling network synchronization
2026-10-04 16:40:32 +02:00
evgeny
efcc9a1761
Schedule member sync when joining over an existing transport
2026-10-04 15:43:15 +02:00
evgeny
dc34faaada
Route chat retries through automatic peer selection
2026-10-02 11:44:46 +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
9745a987ac
Define join contract and require committed CHAT membership for BGP
2026-09-27 20:34:24 +03:00
evgeny
3e25bcef02
Refactor Merkle sync into bounded bidirectional rounds with atomic member updates
2026-09-27 14:44:39 +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
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
b39b85db13
chat: троттлинг по фазе спячки (member_sync send-only, db_sync sound-aware) + настройка звука
2026-09-22 01:20:32 +03:00
evgeny
0a1ba79d6f
chat: member_sync per-peer throttling on peer sleep (cancel_peer + recv/start gating)
2026-09-22 00:42:24 +03:00
evgeny
de850db548
chat: remove join_password check from per-channel JOIN_INFO_REQ (server-link only)
2026-09-20 22:23:42 +03:00
evgeny
39a1da4c28
chat: fix use-after-free in invite_candidates trampoline + accept JOIN_INFO_RESP/READY/ERROR for unknown channels
2026-09-20 22:03:31 +03:00
evgeny
16237b0df8
etcp_send: fix contract (caller owns entry on error) + fix 7 leak sites
2026-09-20 01:35:30 +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
481872d5db
chat: invite-ссылки с несколькими адресами + ncd-адреса узлов (join)
2026-09-15 05:16:04 +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
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
7c8d65db78
chat: локальное удаление канала (Android) + db_sync инстансы в куче
2026-09-13 22:08:33 +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
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
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
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
4b9b0009d8
chat: гейт авто-синхронизации db_sync до member_sync/pubkeys + member tags (verified/deleted) в chatgui
2026-09-05 20:38:22 +03:00
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.
2026-09-04 09:02:46 +03:00
evgeny
f841a964aa
chat: debug-логи на джойнер-стороне (channel_put, JOIN sent, WELCOME self-add)
2026-08-17 22:53:03 +03:00
jeka
10306f5613
chat: fix CHANNEL_INVITE invalid ch_sig — передавать владельца канала из БД, а не node_id отправителя
2026-08-17 21:16:44 +03:00
evgeny
b69dcb4eab
chat: убрать PEER_REMOVE (conn_down ≠ удаление мембера), удалить мёртвый member_sync_del
2026-08-16 08:14:28 +03:00
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
2026-08-15 12:36:05 +03:00
evgeny
4e06db77af
chat: gate broadcast on CHANGED, my_name via update_sig, set_online local-only gating
2026-08-15 12:36:05 +03:00
Evgeny
37ef08a015
invite: диагностика адресов в цепочке invite→etcp_connect
2026-08-13 21:11:27 +03:00
evgeny
d4a170b5c7
auto_socket: TCP links support, chat_sync retry on socket change, link dedup by is_tcp
2026-08-11 18:57:24 +03:00
evgeny
7f901c01e1
etcp: переупорядочить close + защита state==2 во всех API-точках; topo: правильная очистка group nodes и registry; chat/member: новый модуль member_sync; chatgui: обновления транспорта и UI
2026-08-09 12:39:53 +03:00
evgeny
38c9f229bc
stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test
...
- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
2026-08-07 00:48:27 +03:00
evgeny
d773f1724a
refactor: STCP connections as ETCP links (is_tcp)
...
- Add is_tcp, tcp_link, tcp_reconnect_* fields to ETCP_LINK
- Remove transport_link from ETCP_CONN, add tcp_link_count
- stcp_link: replace embedded etcp_conn with pointer; add etcp_link backpointer
- stcp_link: link_rx_cb routes ETCP data to etcp_conn_input
- stcp_link: call on_close_cb in close
- New TCP functions: etcp_link_enter_ready_tcp, etcp_tcp_link_start_connect,
etcp_tcp_link_start_reconnect, tcp_link_close_cb, etcp_tcp_send
- etcp_link_new: handle NULL conn for TCP links; skip enter_init for TCP
- etcp_link_close: close stcp_link for TCP
- etcp_encrypt_send: redirect TCP to etcp_tcp_send (skips AES-CCM)
- tcp_server_on_link: create ETCP_LINK(is_tcp=1) + enter_ready_tcp
- etcp_connect: TCP addrs -> etcp_tcp_link_start_connect
- Remove ctx->tcp_link/tcp_ready
- test_stcp_traffic: find stcp_link via links->is_tcp instead of transport_link
- 66/68 tests pass; 2 STCP tests expected to fail (integration not complete)
2026-08-06 22:14:32 +03:00
evgeny
25ebad9f52
fix: UDP packet size and addr_type classification
...
- etcp_connections.h: add WIRE_OVERHEAD, IP_UDP_OVERHEAD_V4/V6, SC_ENCRYPT_OVERHEAD
(properly accounts for v6 IP(40)+UDP(8)+SC(3)+CCM tag(16) = 67 vs old UDP_HDR_SIZE=28)
- etcp_connections.c etcp_encrypt_send: use WIRE_OVERHEAD instead of UDP_HDR_SIZE
- etcp_connections.c send_init_response: clamp padding to max_data = mtu - WIRE_OVERHEAD
- chat_core_priv.h: add addr_type_from_ip() classifier
- chat_profile.c, chat_sync.c, member_sync.c: use classified addr_type instead of hardcoded 0
- chat_sync.c: skip zero nat_addr in JOIN, fall back to interface_addr
- topo_node_sqlite.c, member_sync.c: remove addr_type=0 filter from SELECT/DELETE
- chat_profile.c, member_sync.c: DELETE all addresses (not just addr_type=0)
2026-08-06 14:08:20 +03:00
evgeny
f476188566
fix(chat): node online status race, WELCOME peer_needed off-by-one, JOIN missing proto byte
...
- node_put/node_update_verified: set online=1 on INSERT (nodes created when conn is UP)
- channel_peers_all: fix peer_needed calculation (atl byte was missing)
- cs_send_channel_join: add proto byte to address serialization matching all parsers
2026-08-06 01:18:27 +03:00
evgeny
cf8236266b
chat_sync: find_conn NOT FOUND INFO→DEBUG — fires for unrelated stub nodes during reinit storms
2026-08-05 14:26:00 +03:00
evgeny
be0e76c9a6
debug: реорганизация категорий — SYS(1), ETCP(4) расширен, CONNECTION(3) очищен; fix stcp_client.c sock_err до connect()
...
Категории:
- DEBUG_CATEGORY_SYS=1: u_async + ll_queue + memory + timing (было 4)
- DEBUG_CATEGORY_ETCP=4: ETCP + normalizer + BBR (было 3)
- DEBUG_CATEGORY_CONNECTION=3: только события статуса линка/подключения (INFO)
- DEBUG_CATEGORY_KEEPALIVE=21: только периодический мониторинг (DEBUG)
- Удалены: NORMALIZER, BBR, CONNECTIVITY
- Устаревшие DB_SYNC → CHAT_SYNC + MEMBER_SYNC (предыдущий коммит)
CONNECTION+INFO — только: Connection UP/DOWN, Link UP/down, Link initialized/added,
NAT address init/changed, init server/client.
CONNECTION+DEBUG — retry, collision, reinit, socket register.
KEEPALIVE — init_timer SUPPRESSED, timer started, keepalive skipped.
REINIT — ETCP+INFO.
Connection status changed — GENERAL (пользовательский callback).
Dedup link_status: if(old_link_status) перед Link down.
Убран дублирующий Conn:%s из Link down, добавлен link_id в client added link.
Молчаливые ошибки: +DEBUG_ERROR в 15 местах (merkle_sync, member_sync, db_sync).
Fix: stcp_client.c — socket_get_error() вызывался ДО connect(), проверяя
застарелое errno вместо ошибки connect(). Неблокирующий connect() возвращает
-1+EINPROGRESS (норма), но сравнивался с мусором → ложный FAIL.
Все 4 STCP-теста исправлены (68/68 pass).
2026-08-05 10:43:32 +03:00
evgeny
1895f23034
add chat_sync_invite_to_channel_with_addrs — connect with addresses, send CHANNEL_INVITE, 3s timeout, post result to GUI
2026-08-04 23:14:03 +03:00
evgeny
f8d98cab47
add error logging to all silent returns in chat_sync invite/join chain + GUI self-invite check
2026-08-04 22:20:01 +03:00
evgeny
712d1b53df
1
2026-08-04 15:29:25 +03:00