# Участие в разработке OSTP

Спасибо за интерес к участию в разработке **OSTP (Ospab Stealth Transport Protocol)**! Мы рады любой помощи: от написания кода и тестирования до работы над документацией и проведения аудита безопасности.

Присылая изменения в проект, вы соглашаетесь соблюдать правила нашего сообщества и условия лицензии.

---

## Содержание

1. [Подготовка окружения](#подготовка-окружения)
2. [Структура проекта](#структура-проекта)
3. [Процесс разработки](#процесс-разработки)
4. [Правила оформления кода](#правила-оформления-кода)
5. [Создание Pull Request](#создание-pull-request)
6. [Уязвимости безопасности](#уязвимости-безопасности)

---

## Подготовка окружения

Для локальной сборки и тестирования OSTP вам понадобятся:

*   **Rust Toolchain**: Установите через [rustup](https://rustup.rs/) (stable канал).
*   **Go 1.20+**: Необходимо для сборки встроенного DNS-туннеля dnstt.
*   **Node.js (18+) и npm**: Необходимы для сборки интерфейса Tauri.
*   **Git**: Для контроля версий.

### Сборка проекта

1.  **Клонируйте репозиторий**:
    ```bash
    git clone https://github.com/ospab/ostp.git
    cd ostp
    ```

2.  **Соберите весь Cargo-workspace**:
    ```bash
    cargo build
    ```

4.  **Запустите тесты**:
    ```bash
    cargo test --workspace
    ```

---

## Структура проекта

Репозиторий представляет собой единый Cargo-workspace со следующими компонентами:

*   [`ostp-core/`](file:///d:/ospab-projects/ostp/ostp-core): Базовая логика протокола: форматирование пакетов, сериализация, конечный автомат выборочного подтверждения (ARQ/ACK/NACK) и рукопожатие Noise (`Noise_NNpsk0_25519_ChaChaPoly_BLAKE2s`).
*   [`ostp-client/`](file:///d:/ospab-projects/ostp/ostp-client): Клиентская часть: локальные SOCKS5/HTTP прокси-серверы, интеграция с драйвером `wintun` / `tun2socks` и реализация раздельного туннелирования для прямого обхода трафика.
*   [`ostp-server/`](file:///d:/ospab-projects/ostp/ostp-server): Логика сервера, диспетчер сессий, защита от пробинга, база данных ключей и REST API.
*   [`ostp-gui/`](file:///d:/ospab-projects/ostp/ostp-gui): Настольное приложение-клиент для Windows и Linux на платформе Tauri.
*   [`ostp-flutter/`](file:///d:/ospab-projects/ostp/ostp-flutter): Мобильный клиент для платформы Android.

---

## Процесс разработки

1.  **Проверьте существующие задачи** или откройте новую тему (Issue) для обсуждения предлагаемых изменений.
2.  **Сделайте fork репозитория** и создайте новую ветку от `master`:
    ```bash
    git checkout -b feat/имя-вашей-фичи
    ```
3.  **Внесите необходимые изменения** и добавьте соответствующие модульные или интеграционные тесты.
4.  **Выровняйте форматирование кода**:
    ```bash
    cargo fmt --all
    ```
5.  **Запустите статический анализатор**:
    ```bash
    cargo clippy --workspace --all-targets -- -D warnings
    ```
6.  **Убедитесь, что все тесты проходят**:
    ```bash
    cargo test --workspace
    ```

---

## Правила оформления кода

*   **Безопасность (Safety)**: Избегайте использования блоков `unsafe` везде, где это возможно. Допускается их использование только для низкоуровневых системных вызовов (например, FFI-настройки сокетов `setsockopt`). Любой блок `unsafe` должен сопровождаться комментарием `// SAFETY: ...`.
*   **Документация**: Пишите документацию для публичных модулей, структур и методов. Сохраняйте целостность комментариев при рефакторинге.
*   **Логирование**: Используйте фреймворк `tracing` для структурированного логирования. Не используйте `println!` в рабочем коде.
*   **Дизайн**: При изменении веб-интерфейсов или GUI следуйте современным визуальным трендам (плавные анимации, сбалансированная цветовая гамма, адаптивная верстка).

---

## Создание Pull Request

1.  Отправьте ветку в ваш fork-репозиторий:
    ```bash
    git push origin feat/имя-вашей-фичи
    ```
2.  Создайте Pull Request (PR) в ветку `master` основного репозитория.
3.  Подробно опишите внесенные изменения: какая проблема решается, как проводилось тестирование и на каких платформах проверялась сборка.
4.  Убедитесь, что автоматическое тестирование (GitHub Actions CI) завершилось успешно.

---

## Уязвимости безопасности

Если вы обнаружили уязвимость, пожалуйста, **не** публикуйте её в открытых Issue. Вместо этого отправьте отчёт разработчикам на почту [gvoprgrg@gmail.com](mailto:gvoprgrg@gmail.com) для координации закрытого исправления.
