Commit Graph

13 Commits

Author SHA1 Message Date
samosvalishe 7fd2d9594d refactor(logx): заменить Deps{Debug,Debugf} на интерфейс logx.Logger
Добавляет internal/logx с Debugf/Infof/Warnf/Errorf + DebugEnabled().
Протягивает logx.Logger через bondclient, bondserver, proxy/udp, proxy/vless,
vkauth. Убирает глобалы isDebug/debugf из обоих бинарей. Переносит
globalBondRegistry из package init в main (инициализация после
config.ParseServer), закрывая давний footgun "Debug=false на init".
2026-05-19 17:54:19 +03:00
samosvalishe acbd90f52e refactor(captcha): вынести ручной flow в internal/client/captcha/manual
- cmd/vk-turn-client/manual_captcha.go (875 строк, был в package main) →
  internal/client/captcha/manual/manual.go как отдельный пакет. Экспортирует
  SolveViaProxy и SolveViaHTTP (переименованы из solveCaptchaViaProxy/
  solveCaptchaViaHTTP). Остальное package-private.

- Глобал isDebug, который ручной flow читал из main, заменён на manual.Debug
  (package var). cmd/vk-turn-client/main.go ставит manualcaptcha.Debug =
  cfg.Debug рядом с существующим isDebug = cfg.Debug.

- Тестовый файл перенесён с кодом; пакет переключён с main на manual.
  TestRewriteProxyRedirectLocation по-прежнему зовёт package-private rewriter
  изнутри пакета.

- План предлагал дробить manual.go дальше (server.go/browser.go/proxy.go/
  rewrite_html.go). Пропущено: лишний churn без выгоды, раз файл живёт в
  своём пакете. Можно сделать позже.
2026-05-19 17:21:07 +03:00
samosvalishe 2167ba990b refactor(layout): переезд в cmd/, свернуть client/internal в internal/client
- server/main.go → cmd/vk-turn-server/main.go. Несёт остаточные правки сервера
  (drop параметра useBond, убрано поле startup-лога).
- client/internal/{browserprofile,captcha,dnsdial,namegen,vkauth} →
  internal/client/* (единая иерархия internal/; параллельное дерево
  client/internal/ убрано). Все Go import-пути обновлены.
- .github/workflows/{ci,release}.yml, Dockerfile, README.md — пути сборки
  переключены на ./cmd/vk-turn-client и ./cmd/vk-turn-server.
- README: убран устаревший пример "server -vless-bond" (флаг удалён ранее);
  добавлены рецепты сборки .so для Android arm64 + Linux arm64/amd64 под
  ручную упаковку для мобилок.
- internal/proxy/udp/udp.go, internal/config/config.go: обновлены устаревшие
  ссылки client/internal/* в doc-комментариях.
- notes/GLOSSARY.md (новый, ~20 терминов): фиксирует DTLS-как-обфускацию,
  wrap=AEAD-не-XOR, четыре значения "client", три значения "stream", пять
  ортогональных переключателей "mode", заметки по сборке libvkturn.so, iSH,
  хрупкость init globalBondRegistry и удаления флагов.

cmd/vk-turn-client/ намеренно оставлен вне этого коммита; сворачивается вместе
с извлечением ручной captcha в следующем коммите, т.к. переименование и правки
импортов manualcaptcha.* попадают в один файл.

Wire-форматы не тронуты. Поведение не изменено кроме уже закоммиченных
удалений CLI.
2026-05-19 17:20:26 +03:00
samosvalishe 5b68683d41 refactor(config): убрать флаги -no-dtls и серверный -vless-bond
Чистка CLI (breaking):

- Клиент: убран -no-dtls (был помечен DO NOT USE; VK content-filter дропает
  payload без DTLS-handshake, так что прямой путь в проде не работал). Поле
  config.Client.Direct, guard диспатчера в main и TestParseClient_WrapDirectConflict
  удалены.

- Сервер: убран -vless-bond. Сервер уже автоопределяет bond по magic-префиксу
  на первом smux-стриме (bond-autodetect=true), флаг был избыточен. Поле
  config.Server.VLESSBond, параметр useBond у handleVLESSConnection и
  ветка-предупреждение "non-bond stream while bond enabled" удалены.

- Клиентский -vless-bond остаётся — он по-прежнему управляет страйпингом на
  стороне клиента.

Wire-форматы не тронуты. Оба удаления флагов — breaking CLI-изменения.
2026-05-19 17:19:44 +03:00
samosvalishe 817def3e01 refactor: вынести разбор CLI в internal/config
ParseClient/ParseServer возвращают валидированные структуры; main становится
связкой. Валидация без сайд-эффектов (без DNS/сети); main держит ResolveUDPAddr,
установки dnsdial.* и вывод gen-wrap-key. Сервер теперь переиспользует
wrap.GenKeyHex/wrap.DecodeKey вместо своего hex+rand пути.

client/main.go: 319 → 272. server/main.go: 424 → 402.
19 тестов покрывают дефолты, санитизацию vk-link, отсутствующие флаги,
валидацию -dns, конфликт wrap+no-dtls, декод wrap-key, положительность
streams-per-cred, clamp n, split dns-servers и short-circuit gen-wrap-key.

Флаги CLI, дефолты и поведение не изменены. Две строки ошибок
("Need peer address!" / "Need vk-link!") переведены в нижний регистр под
revive; не часть wire-контракта.
2026-05-19 16:26:36 +03:00
samosvalishe 75471c6fdc test(bond/server): покрыть reorder, pending drain, lane churn
Добавляет server_test.go с 6 юнит-тестами для registry bond-сервера: reorder
data-фреймов не по порядку в backend, drain pending-map при приходе пропущенного
seq, round-robin запись по lane, lane churn (сбойный lane выкинут, выживший
продолжает), all-lanes-fail возвращает исходную ошибку, dedup + cleanup registry.

Вводит небольшой интерфейс laneStream (io.Reader+Writer+SetDeadline) на
serverLane, чтобы тесты инжектили in-memory фейки без запуска реальной
smux-сессии. *smux.Stream его удовлетворяет, так что HandleStreamAfterMagic и
on-wire поведение не изменены.
2026-05-19 16:14:40 +03:00
samosvalishe dc2e4135aa refactor: вынести bond-сервер в internal/bond/server 2026-05-19 16:03:20 +03:00
samosvalishe 29771b1e27 refactor: вынести bond-клиент в internal/bond/client 2026-05-19 11:37:16 +03:00
samosvalishe 09096568ff refactor: вынести VLESS-режим в internal/proxy/vless
Переносит runVLESSMode/maintainVLESSSession/createSmuxSession/pipe и sessionPool
в internal/proxy/vless. Клиентская половина bond (handleBondedTCP, copyTCPToBond,
copyBondToTCP, bondClientLane) остаётся в client/main.go до этапа 5.1 —
инжектится в vless через Deps.BondHandler.

sessionPool/pooledSession экспортированы как SessionPool/PooledSession, чтобы
половина bond работала со счётчиками lane (ID/Sess/Opened/Active/Closed/
ToSession/FromSession).

Также дедуплицирует iSH (linux/386) listener-shim в новый пакет internal/ish;
client/manual_captcha.go и internal/proxy/vless импортируют его через
ish.WrapListener.

client/main.go: 895 → 552 (-343). Wire-формат и CLI не изменены.
2026-05-19 11:21:48 +03:00
samosvalishe 82f231d5e0 refactor: вынести UDP proxy-цикл в internal/proxy/udp
Переносит oneDtlsConnection/oneTurnConnection и их retry-циклы из client/main.go
в internal/proxy/udp, за интерфейс AuthHandler, чтобы пакет оставался вне
client/internal/. UDPPacket/packetPool становятся udp.Packet/udp.Pool. Глобал
globalAppCancel убран в пользу Deps.AppCancel. turnParams пока остаётся в
client/main.go, т.к. vless ещё его использует; переедет с этапом 4.2.

client/main.go: 1195 → 895. Wire-формат и CLI не изменены.
2026-05-19 10:37:21 +03:00
samosvalishe bc1aea625b refactor: вынести turnpipe и dtlsdial в internal/
Переносит общий пайплайн TURN dial+allocate в internal/turnpipe и DTLS-настройку
клиента в internal/dtlsdial. И oneTurnConnection, и createSmuxSession теперь
используют одни строительные блоки, убирая ~140 строк дублированной настройки.

Глобал handshakeSem убран, заменён двумя сконфигурированными dtlsdial.Dialer:
udpDtlsDialer (timeout 20s, sem cap=3) и vlessDtlsDialer (timeout 30s, без
gate). Поведение идентично прежним путям.

client/main.go: 1380 → 1195. Импорты netadapt, pion/dtls, selfsign,
pion/logging и pion/turn вынесены из client/main.go в новые пакеты.
2026-05-19 10:05:31 +03:00
samosvalishe 322e8db4fa refactor: вынести wrap в internal/wrap
Объединяет client/wrap.go + server/wrap.go в internal/wrap с экспортируемым
API: State (общий AEAD), Conn (per-stream RTP-состояние), WrapInto/Unwrap,
Listen (серверный PacketListener), RelayPacketConn (клиентская обёртка
TURN-relay), хелперы GenKeyHex/DecodeKey. Wire-формат сохранён побитово.

relayPacketConn переезжает из client/main.go в пакет wrap как RelayPacketConn
(его единственный осмысленный дом — он владеет *wrap.Conn).

-573 строки (client/wrap.go, server/wrap.go, client/wrap_test.go удалены).
2026-05-19 09:28:24 +03:00
samosvalishe ada0c746aa refactor: вынести stats, netadapt, bond в internal/
- internal/stats: throughputStats/countingConn/форматтеры, общие для клиента
  и сервера
- internal/netadapt: DirectNet, ConnectedUDPConn, SplitFirstWriteConn
- internal/bond: wire-кодек (Frame/Hello, Read/Write, CloseWrite)

Убирает дублирование между client/main.go и server/main.go. Wire-формат и
поведение CLI не изменены; round-trip кодека покрыт тестами.
2026-05-19 00:29:47 +03:00