- Removed hardcoded owner/name from release.github – not needed when using GITHUB_TOKEN.
- Replaced explicit repo strings with {{ .Env.GITHUB_REPOSITORY }} for Docker image names and the org.opencontainers.image.source label.
- Makes the config reusable across forks – no manual edits required when moving the project.
Пока пользователь решает captcha вручную, поднимаем сессионный captchaActive:
watchdog не считает подключение зависшим (двигает дедлайн) и отдаёт StateCaptcha
вместо connecting, чтобы UI не показывал ошибку.
Экспортируем SetManualCaptcha(bool); при включении прокидываем ManualOnly в
vk.Config, и решатель идёт ручным путём с первой попытки (минуя авто-решатель).
Когда авто-решатель captcha не справился, прокидываем в vk-провайдер
ManualSolverFunc, который переиспользует SolveViaProxy и сигналит UI через
gomobile-интерфейс CaptchaPresenter (Show/Hide). Без презентера поведение
прежнее. Файлы библиотеки не затронуты - мостик в новом файле vk/iosmanual.go.
- безопасная конверсия uint64→int64 (clampToInt64) для счётчиков,
экспортируемых через gomobile, чтобы не ловить G115;
- анонимный ресивер у bufLogger.write (unused-receiver).
udpParams заполнял только ObfKey, но не Profile/ObfTiming, как это
делает CLI-клиент. Без профиля клиент обфусцировал трафик не так, как
ждёт сервер (OBF_PROFILE=rtpopus): VK-аутентификация и TURN-аллокация
проходили, но дальше Tx рос, Rx оставался 0 и стримы отваливались.
без RTP-профиля паковать нечего, а в tcp-режиме pacing ломает RTT/конгешн
KCP. Раньше флаг в tcp молча игнорировался. Валидация симметрична на
клиенте и сервере.
Флаг -browser chrome|firefox (default firefox, Chrome - escape-hatch), client-local для VK-auth, в freeturn:// URI не идёт. browserprofile.ForKind даёт канонные UA/JA3/Accept-Language; ApplyFhttp шлёт sec-ch-ua* только для Chrome (Firefox их не отправляет). dial.go выбирает profiles.Firefox_147 / Chrome_146 под UA.
Control-plane TLS-dial переведён на MultiSplitWriteConn (фрагментация SNI).
MultiSplitWriteConn парсит TLS ClientHello, находит SNI host_name и режет первый сегмент внутри него на ~трети с джиттером - registrable-домен гарантированно пересекает границу TCP-сегмента, DPI без реассемблинга не собирает hostname. Фоллбэк на одиночный рез offset 6, если SNI не найден.
turndial: STUN-split offset рандомизирован в [5,7] (рез внутри magic cookie), убран статический фингерпринт фикс-offset.