evgeny
0f308fdbd7
chatgui/chatgui-android: уведомления со звуком, флаги и прочие улучшения UI
3 weeks ago
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)
3 weeks ago
evgeny
22da6bd832
chatgui: открывать SQLite-БД до auto_socket_init (переиспользование портов)
3 weeks ago
evgeny
c474c37284
chatgui/chatgui-android: просмотр изображений с зумом + инфо о медиа
...
- chatgui: просмотрщик изображений (ImageViewerWindow) с зумом/поворотом
- chatgui: отправка картинок как image с определением разрешения и типа
- chatgui: у видео-пузыря строка info (res·size·bitrate) и бейдж только длительность
- chatgui: контекстное меню медиа (сохранить в файл/скачать)
- chatgui-android: большие emoji-only сообщения, битрейт/разрешение у видео
- chatgui-android: сохранение неактивных интерфейсов как закомментированные секции
- chatgui-android: отправка картинок по расширению (jpg/png/gif/bmp/webp)
- photo_sender: content-type и расширение по типу файла
3 weeks ago
evgeny
c94acd892e
chatgui: автозакрытие видеоплеера по завершении воспроизведения
3 weeks ago
evgeny
089bbe5189
chatgui: запуск на XWayland (xcb) + ручной move/resize с пропорцией
...
- main.cpp: на Linux принудительно QT_QPA_PLATFORM=xcb (если не задан) — на Wayland
композитор владеет позицией окна, на XWayland ручной move/resize работает полностью
- videoplayer_window: вернуть ручной move + ручной resize с пропорцией (один путь,
без платформозависимого нативного startSystemMove/Resize)
3 weeks ago
evgeny
0dfb39cfcb
chatgui: гибридный resize — нативный на Wayland (край тянется), ручной с пропорцией на X11/Windows
3 weeks ago
evgeny
3adf9871fb
chatgui: вернуть ручной resize с пропорцией (двигает окно, край под мышью) + фикс перемотки
...
- resize: ручной setGeometry с живой пропорцией (якорь = противоположный край);
drag — нативный startSystemMove
- перемотка: QProxyStyle SH_Slider_AbsoluteSetButtons=LeftButton вместо сломанного
SeekSlider (sliderReleased не эмитился — seekMs не вызывался)
3 weeks ago
evgeny
645591bb64
chatgui: нативный move/resize (Wayland) + фикс замирания видео при перемотке
...
- окно: startSystemMove/startSystemResize вместо ручного move/setGeometry
(Wayland игнорирует позицию окна) — драг и resize за левый/верхний край работают
- пропорции: снэп к videoAspect после нативного resize (дебаунс 150мс)
- перемотка: backpressure по m_buffered (декод не убегает вперёд и воркер живёт
для seek), seek через av_seek_frame(-1, us), пропуск кадров с AV_NOPTS_VALUE
- SeekSlider: клик по шкале = прыжок к позиции
- крестик закрытия справа вверху; курсор контролов — стрелка
- test_video_engine: проверка seek
3 weeks ago
evgeny
f2b34459c3
chatgui: баббл видео — размер + время m:ss (напр. 1.5MB · 0:45)
3 weeks ago
evgeny
d09a6af52a
chatgui: плеер — фикс drag, центр/fullscreen при открытии, resize за края с сохранением пропорций
...
- m_render WA_TransparentForMouseEvents — события мыши напрямую в окно (drag работает)
- открытие: видео влезает — натуральный размер по центру; больше экрана — fullscreen
- resize мышью за 4 края и 4 угла, пропорции сохраняются (якорь = противоположный край)
- нижний край доступен через eventFilter на панели контролов (пустые поля пропагируют)
- сброс fullscreen при повторном playFile
3 weeks ago
evgeny
76182d018f
chatgui: QPointer-защита при генерации превью в фоне
3 weeks ago
evgeny
74b17685f7
chatgui: фикс синхронизации кадров (часы не убегают вперёд при быстром декоде) + smoke-тест движка
...
- presentTick: кадры всегда по мастер-часам, завершение только когда очередь пуста
- clockMs: по окончании аудио часы в конец (хвостовые кадры не теряются)
- fallback на системные часы, если аудио-устройство недоступно
- tests/test_video_engine: smoke-тест FFmpeg-декодера (opened/frames/seek)
3 weeks ago
evgeny
6542618927
chatgui: воспроизведение видео — FFmpeg-плеер + frameless окно
...
- videoplayer_engine: декод в worker-потоке (FFmpeg), A/V sync по аудио-курсору,
seek с epoch-защитой от устаревших кадров
- videoplayer_window: окно без рамки, drag-перенос, dblclick/Alt+Enter fullscreen,
Esc закрытие, timeline + play/pause/close, авто-скрытие контролов
- видео-баббл в списке: превью-кадр (jpg), play-оверлей, длительность, прогресс
- превью извлекается после скачивания (video_extract_thumbnail) в фоне
- mainwindow: синглтон-плеер, openVideoRequested → openVideo
- CMake: HAVE_FFMPEG для vibechat
3 weeks 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
3 weeks ago
evgeny
c8bd5975ae
chatgui-android: invite-ссылки с выбором узла входа в GUI + desktop dialog layout
4 weeks 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 (был недостижим)
4 weeks ago
evgeny
a17a85a383
chat: deleted-аккаунты — колонка deleted, скрытие/зачёркивание, не подключаемся
4 weeks ago
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
4 weeks ago
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.
4 weeks ago
evgeny
4b9b0009d8
chat: гейт авто-синхронизации db_sync до member_sync/pubkeys + member tags (verified/deleted) в chatgui
4 weeks ago
evgeny
2d04bf941b
etcp_router: вынести подпись/шифрование в route_crypto, одна функция отправки с флагами
...
- route_crypto_encode/decode: автономный пред/пост-обработчик пакета
(encrypt-then-sign, стандартный Ed25519 вместо sc_stream_sign)
- одна функция отправки etcp_route_send/etcp_router_conn_send с bitmask mode
- формат доставки: [svc_id][src][dst][rx_flags][payload] (статус подписи/шифрования)
- ROUTER_INFLIGHT хранит финальный wire-пакет (чинит потерю подписи при ретрансмите)
- дедуп инициализации: router_conn_reset/free_queues
- учёт inflight через inflight_q count (seq присваивается на enqueue)
4 weeks ago
evgeny
7c95ddb09b
chatgui: значок владельца канала ( 🔑 ) в шапке блока мемберов при наличии private key
4 weeks ago
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
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
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
54352c17ba
chatgui: opus из исходников в CMake + build_nix.sh под Linux/BSD
2 months ago
Evgeny
c7b9702c88
chatgui: add CONFIGURE_DEPENDS to libutun globs — pickup new .c files without clean rebuild
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
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
bcea4bc335
invite: убрать BOTH-протокол — адрес либо UDP либо TCP
2 months ago
Evgeny
37ef08a015
invite: диагностика адресов в цепочке invite→etcp_connect
2 months ago
evgeny
fec3ea38a7
member detail: structured display with addresses, connections, BGP summary and socket names
...
- Extend MEMBER_DETAIL_LINK_SIZE to 63B with 20B sock_name per link
- Replace link_count with links_up/links_down (two uint16) in sock snap
- Add BGP hop list collection via topo_node_best_hop_list, post as CHAT_EVT_BGP_INFO
- Add direct RTT summary text via same event
- Rework AccountList detail panel: header + QTextEdit with monospace layout
- Display protocol (TCP/UDP), socket name line, colored dots for connections
- Show [up/down] link counts for self listen sockets
- Remove * prefix from link count display in Android
2 months ago
evgeny
0f1bd3d120
keepalive handshake: device_type + keepalive negotiation in UDP/TCP INIT
...
- Добавлен device_type (1 байт, CLIENT_TYPE_*) в INIT_REQUEST и INIT_RESPONSE
- Добавлен keepalive_interval (2 байта) в INIT_RESPONSE
- STCP handshake расширен с 43 до 46 байт (device_type+keepalive)
- negotiate_keepalive(): оба desktop/server → min, иначе (есть mobile) → max
- keepalive_interval вынесен в UTUN_INSTANCE для использования в handshake
- stcp_client_connect() принимает device_type и keepalive_interval
- peer_device_type/peer_keepalive_interval передаются через stcp_link в ETCP_LINK
2 months ago
evgeny
544c77efff
unify TCP_SOCKET into ETCP_SOCKET with is_tcp flag; add local+remote addr to member detail links with arrow display
2 months ago
evgeny
477b4dfc98
move is_server indicator from per-connection to per-link in member detail and links JSON
2 months ago
evgeny
496f0f7d2b
add server/client (S/C) indicator based on ETCP_LINK.is_server in connection monitor, member detail, and Android JSON
2 months ago
evgeny
cf956cf2f0
add proxy server/client indicator (S/C) in connection monitor
2 months ago
evgeny
f1941e61a2
fix: MemberLinkSnap/MemberSockSnap port int→uint16_t avoids stack garbage
2 months ago
Evgeny
2cba839de4
Убрал DEBUG_CATEGORY_DEBUG: сообщения разбросаны по модульным категориям (+CHAT=25, MEDIA=23)
2 months ago
evgeny
d8337b9c3b
whisper: опциональный configure --with-whisper; chatgui: парсер [debug]; stdint.h в AC_CHECK_HEADERS
2 months ago
evgeny
7f901c01e1
etcp: переупорядочить close + защита state==2 во всех API-точках; topo: правильная очистка group nodes и registry; chat/member: новый модуль member_sync; chatgui: обновления транспорта и UI
2 months ago
evgeny
b2e4aadbf0
e2e: AES-128-CCM encryption via BGP router (ROUTER_FLAG_ENCRYPTED), ECDH key per peer-pair from NODEINFO pubkeys, cache 8 entries
...
- etcp_router.h/c: new flag ROUTER_FLAG_ENCRYPTED (0x04), etcp_route_send_encrypted(), inflight/retrans/send_q support
- utun_instance.h: e2e_ctx_cache[8] — per-peer sc_context_t cache with derived session key
- topo_node.c: topo_node_sign_self() — single point for Ed25519 self-signing of NODEINFO
- topo_node.c: fix stale x25519_self_sig after address update (topo_node_sign_self call)
- nat_detection.c: fix stale x25519_self_sig after in-place socket meta modification
- test_etcp_router_unit: 5 E2E tests (basic round-trip, no NODEINFO drop, tampered, cache reuse, ENCRYPTED+SIGNED combined)
- builds clean, 70/70 tests pass
2 months ago
evgeny
ca176e1f24
encrypt overhead fix (33→36, noencrypt_len), mtu default 1280, connmonitor window, total_decrypted for TCP, check.sh
2 months ago
evgeny
d453e73ddb
etcp: TCP links skip remote keepalive gating; chatgui: show interface names in member detail, fix destructor callbacks
2 months ago