zapret2-fork/nfq2/winnative/README.md
loop-uh 9528c5b334
Some checks failed
build.yml / winws2 native: stress test of the graceful stop (push) Failing after 0s
winws2 native: stress test of the graceful stop
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:35:40 +03:00

31 lines
3 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.

# winws2 без Cygwin
Это форк [bol-van/zapret2](https://github.com/bol-van/zapret2). Отличие одно: `winws2.exe` собирается как обычная программа Windows и не требует `cygwin1.dll`. Файлы автора почти не тронуты, всё своё лежит в этой папке, поэтому правки оригинала подтягиваются автоматически.
## Что добавлено
- **Сборка под Windows** компилятором llvm-mingw прямо на Linux: `nfq2/winnative/build.sh`. Результат — `binaries/my/winnative-x86_64/winws2.exe`, рядом нужны только `WinDivert.dll` и драйвер.
- **Пакетная отправка.** Пакеты, которые движок не менял, возвращаются в сеть пачкой одним вызовом. Отключается переменной окружения `WINWS2_NO_BATCH=1`.
- **Управление без сигналов Linux:** `winws2 --wn-signal=<hup|usr1|usr2|term>[:<pid>]`. `hup` перечитывает списки, `usr1` и `usr2` печатают служебные таблицы, `term` аккуратно останавливает движок. Без номера процесса команда уходит всем запущенным winws2.
- **Файл конфигурации любого размера.** `@файл` и `$файл` читаются целиком; путь может содержать пробелы и русские буквы.
- **Быстрый журнал отладки:** файл журнала открывается один раз, а не на каждую строку.
## Как устроено
- `compat.h` подключается к каждому файлу автора и изображает для него окружение Cygwin.
- `compat.c` заменяет функции Cygwin: файлы с путями в UTF-8, преобразование путей, сигналы.
- `args.c` разбирает командную строку и `@файл` по тем же правилам, что Cygwin. Отличие: фигурные скобки без кавычек не раскрываются.
- `batch.c` — пакетная отправка.
- `tests/run.sh` — проверки разбора аргументов, запускаются на Linux.
- `tests/stop_race.py` — серия «запуск — остановка» на Windows: ловит запись опоздавшего пакета в освобождённый буфер при остановке.
- `sync-upstream.sh` — подтянуть оригинал, собрать, проверить, отправить.
## Сборка
```sh
# один раз: распаковать llvm-mingw (вариант msvcrt) в ~/tools/llvm-mingw
nfq2/winnative/build.sh
nfq2/winnative/tests/run.sh
```
LuaJIT и zlib скрипт скачивает и собирает сам.