ZapretKVN-android/docs/RULESETS.md
loop-uh 41b6c3283f
Some checks failed
Android CI / build (push) Has been cancelled
Серверы: страна по IP из офлайн-таблицы DB-IP, флаг и при скрытых адресах
У пользователя 28 из 30 серверов попадали в «Другие»: имена из подписки
не несут флагов, а при включённом скрытии адресов тег, похожий на адрес,
маскировался целиком и вообще не разбирался.

- Страна и протокол берутся из настоящего тега и адреса; маскируется
  только показываемый текст.
- Офлайн-таблица DB-IP IP to Country Lite (CC BY 4.0, атрибуция в
  notices), assets/geoip/country.bin ~2 МБ, IPv4 и IPv6, служебные
  диапазоны всегда без страны; scripts/build-geoip-country.py и проверка
  хэша в verify-project.sh.
- Имена хостов разрешаются тем же доверенным DoH, что и при подключении
  VPN (по IP-литералам, мимо туннеля): один запрос на хост, не чаще раза
  в 7 суток, без таймеров; кэш в noBackupFilesDir.
- Порядок: флаг в имени → страна по IP → сосед на том же адресе → слова.
- JSON-редактор: кнопки в нижней панели, сообщения над ней — снекбар после
  импорта больше не перекрывает «Validate» и «Сохранить».
- Тест обновлятора дожидается закрытия временной VPN-сессии (закрывается в
  finally проверки), а не проверяет это в тот же миг.

Проверено: юнит-тесты, lint, verify-project.sh, 34/34 инструментальных
теста на эмуляторе API 37.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:07:12 +03:00

23 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Встроенные rule-set
`zapret-ru-domains.json` — небольшой исходный список доменных зон России и отдельных
сайтов, которые должны идти через `direct`. Binary `.srs` собирается точным audit CLI
из `core.properties`.
`zapret-ru-ip.srs` берётся из закреплённого snapshot `SagerNet/sing-geoip@eb32cd6ed4a16fcb3bf9a36ccebf28e45716ae84`; ожидаемый SHA-256 — `bdca5cdb44cdcf0940001e5952386822a6f4ffa8b2c8eea00340aa6f585c7f9d`.
Оба файла доставляются только вместе с APK. Runtime-загрузки наборов нет: они обновляются только вместе с APK (фоновая проверка и скачивание самого APK описаны в ARCHITECTURE.md).
## Таблица «IP → страна» (флаги серверов)
`app/src/main/assets/geoip/country.bin` — офлайн-таблица DB-IP «IP to Country Lite» (CC BY 4.0, «IP Geolocation by DB-IP», <https://db-ip.com>). Приложение определяет по ней страну по адресу самого сервера, чтобы показать флаг, когда его нет в имени. Источник, месяц, SHA-256 и размеры — в `app/src/main/assets/geoip/manifest.json`; формат файла описан в начале `scripts/build-geoip-country.py`.
Обновление — вручную перед выпуском, не в приложении:
```bash
python3 -I scripts/build-geoip-country.py # текущий месяц, при отсутствии — предыдущий
python3 -I scripts/build-geoip-country.py --check # файл соответствует manifest.json
bash scripts/verify-project.sh # проверка хэша, размера (до 3 МиБ) и атрибуции
```
После обновления поправьте месяц в `docs/THIRD_PARTY_NOTICES.md` и скопируйте его в `app/src/main/res/raw/third_party_notices.txt` (файлы должны быть побайтово равны). Загрузки таблицы во время работы нет.