Documentation
¶
Overview ¶
connect.go — команда tt connect.
Флаги и разбор аргументов — задача G1. Здесь (задача G2) всё сделанное раньше собирается в одну команду: профиль и флаги → core.Config, секреты из хранилища, выбор datapath, решатель капчи, цикл подключения.
Сборка отделена от запуска: planConnect ничего не трогает в сети и возвращает готовый план, а run уже поднимает туннель. Так план проверяется тестами без живого сервера, а сама команда остаётся коротким перечнем шагов.
diag.go — команды tt ping и tt hashes: две проверки, которые делаются до того, как поднимать туннель.
Флаги и разбор аргументов — задача G1. Здесь (задача G3) команды собраны целиком: профиль и флаги → core.Config, секреты из хранилища, вызов core.RunPing и core.RunHashCheck, печать их событий тем же принтером, что у connect.
Как и у connect, сборка отделена от запуска: planPing и planHashes сети не трогают и проверяются тестами, а run* только зовёт ядро.
dnsguard.go — защита от утечки DNS для datapath, которые забирают весь трафик системы (задача W4 Э2, Requirements.DNSGuard).
Сессия WFP (на Linux — таблица nftables, plan-e4.md, D1) открывается здесь, до первой попытки, и живёт весь tt connect; правила ставит и снимает сам datapath. В той же сессии живёт kill-switch (killswitch.go). Отказ — по умолчанию ошибка с подсказкой про -allow-leak (решение пользователя: подключение без защиты — только явным согласием).
elevate.go — перезапуск tt с правами администратора из меню (plan-e5.md, I4).
Режиму «весь трафик» (tun) нужны права администратора, а человек, запустивший tt двойным щелчком, их не давал. Меню не отправляет его перечитывать инструкцию, а запрашивает права само: на Windows — окном UAC, на Linux — через sudo в том же терминале. Перезапускается не меню, а одна команда — tt connect <профиль>.
fulltunnel_linux.go — проверки Linux для datapath, который забирает весь трафик системы (plan-e4.md, T3): обратный фильтр отбросил бы ответы сокетам ядра, привязанным к физическому интерфейсу.
killswitch.go — kill-switch для datapath (plan-e3.md, K3): пока туннель не поднят, трафик системы заблокирован.
Отдельного объекта у kill-switch нет: это третий набор правил в той же сессии WFP (на Linux — таблице nftables), что и защита DNS. Datapath о нём не знает: обёртка killSwitchGuard подменяет Disable защиты на «закрыто», а Enable оставляет как есть — поднятый туннель держит одна защита DNS.
Исключение — ручная капча (K4, решение 1): её страница открывается в браузере пользователя, а он мимо туннеля при «закрыто» не пройдёт. На время капчи — от ссылки до ответа — правила снимаются (killSwitchCaptcha).
menu.go — интерактивный режим: tt без аргументов в терминале (plan-e5.md).
Большинству пользователей консольные команды сложны: на Windows tt запускают двойным щелчком, и окно консоли — всё, что они видят. Меню ведёт такого человека вопросами и само зовёт те же команды, что набираются руками: подключение — runConnect, удаление — runProfileRm и так далее. Своей логики подключения и записи профилей у меню нет.
menu_edit.go — пункты меню, которые меняют профиль: ссылки на звонки, пароль, адрес сервера (plan-e5.md, I3).
Вопросы — те же, что в мастере (wizard.go): ошибка переспрашивается, конец ввода — «ничего не изменилось».
netguard.go — включение netguard для команд, которые запускают ядро (задача N3 Э2).
Когда datapath забирает весь трафик системы (Requirements.Netguard), сокеты ядра уводятся мимо туннеля: core.Config.DialControl = netguard.Guard.Control (architecture.md §05). Для socks это не нужно, и Э1 там не меняется.
output.go — вывод хода подключения: события ядра и смена состояния строками, статусная строка со счётчиками и аптаймом для терминала.
Два приёма вывода, и они не мешают друг другу. Строки (задача G2) — одна на значимое событие, с временем, без перерисовки: это то, что уходит в перенаправленный вывод, и в файле после `tt connect > log.txt` нет ничего, кроме них. Статусная строка (задача G4) появляется только когда stdout — терминал: она живёт под последней строкой и перерисовывается возвратом каретки и пробелами. Escape-последовательностей нет и там: `\r` понимает любая консоль, включая старый conhost, а стирать строку пробелами ничем не хуже, чем командой терминала.
pause.go — пауза перед закрытием окна консоли.
Окно, которое открыл Проводник (двойной щелчок по tt.exe) или перезапуск с правами администратора, закрывается вместе с процессом: последнюю строку — чаще всего ошибку — не успеть прочитать. Поэтому, если процесс в своей консоли один, перед выходом он ждёт Enter. В консоли, открытой человеком, процессов минимум два (оболочка и tt), и паузы нет.
Своя консоль бывает и без человека: планировщик заданий, служба, обвязка с перенаправленным выводом. Там Enter не нажмёт никто, и пауза повесила бы процесс навсегда — перезапуск после сбоя не сработал бы. Поэтому паузы нет и тогда, когда stdin или stderr — не консоль (строку не увидеть или на неё не ответить), и когда окно не может увидеть человек (ownsConsole на Windows).
profile.go — команда tt profile: профили подключения и их секреты.
Четыре подкоманды со своими флагами, поэтому у самой profile флагов нет: они ставятся после подкоманды, как в `tt profile set home -peer …`.
prompt.go — ввод, который нельзя брать из аргументов командной строки: секреты и подтверждение опасного действия.
Package cli — разбор командной строки tt и запуск того, что за ней стоит.
Разбор идёт стандартным flag с подкомандами, без внешних библиотек: команд пять, флаги у них простые, а чужая библиотека принесла бы с собой свой формат помощи, свои соглашения о кодах возврата и ещё одну зависимость, которую пришлось бы обновлять.
Здесь только каркас: список команд, общие флаги, помощь и коды возврата. Тела команд лежат рядом — connect.go, diag.go, profile.go.
wizard.go — мастер профиля: новый профиль вопросами, по одному полю за раз (plan-e5.md, I2).
Ошибка в ответе переспрашивается, а не завершает мастер: человек, который ошибся в адресе сервера, не обязан заново вводить пароль. Конец ввода на любом вопросе — отмена, профиль не записывается.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.