# Модуль WebRTC (Real-Time Communication) — Knot Messager

Модуль WebRTC обеспечивает инфраструктуру для голосовых и видеозвонков в реальном времени, а также для демонстрации экрана. Основная задача модуля — создание защищенного P2P-соединения (Peer-to-Peer) между клиентами с использованием инфраструктуры STUN/TURN.

---

## 🏗 Архитектура Звонков

Knot Messager использует классическую архитектуру WebRTC:
1.  **Signaling**: Клиенты обмениваются SDP-оферами и ICE-кандидатами через SignalR Hub (находится в разработке/интеграции).
2.  **ICE Configuration**: Модуль WebRTC выдает клиентам актуальную конфигурацию серверов обхода NAT (STUN) и ретрансляции трафика (TURN).
3.  **Media Stream**: После установления связи аудио/видео трафик идет напрямую между клиентами (E2EE), не нагружая сервер мессенджера.

---

## 🛠 Конфигурация и Администрирование

Все параметры звонков управляются централизованно через **Админ-модуль** (System Settings ➡ WebRtc):

| Параметр | Описание |
| :--- | :--- |
| `Enabled` | Глобальный переключатель функции звонков. |
| `TurnHost` | Домен или IP вашего TURN-сервера (например, Coturn). |
| `TurnPort` | Обычно 3478 (UDP/TCP). |
| `TurnUser/Secret` | Данные для авторизации (Long-term credential mechanism). |
| `Voice/Video/Screen` | Индивидуальные флаги для разрешения конкретных типов медиа. |

---

## 📡 API Эндпоинты

Групповой путь: `/api/webrtc` (требует авторизации).

### `GET /api/webrtc/ice-servers`
Возвращает массив конфигураций для подключения к серверам обхода NAT.

**Пример ответа**:
```json
{
  "iceServers": [
    { "urls": ["stun:stun.l.google.com:19302"] },
    { 
      "urls": ["turn:turn.knot.org:3478", "turn:turn.knot.org:3478?transport=tcp"],
      "username": "user123",
      "credential": "password123"
    }
  ]
}
```

---

## 🔐 Безопасность (Privacy-First)

1.  **Policy Control**: Модуль WebRTC перед выдачей ICE-серверов всегда проверяет текущие политики сервера. Если администратор отключил звонки, соединение невозможно установить даже при знании параметров серверов.
2.  **P2P Encryption**: Весь трафик звонков зашифрован на стороне клиентов (DTLS-SRTP), что гарантирует приватность разговоров даже от администратора сервера.
3.  **TURN Fallback**: Использование TURN-сервера позволяет скрыть реальные IP-адреса пользователей друг от друга в случае работы через ретранслятор.

---

## 🧩 Взаимодействие с другими модулями

*   **Admin Module**: Синхронизация GUI настроек.
*   **Messaging Module**: Инициация вызова через специальные сообщения-уведомления (In-call events).
*   **Relations Module**: В будущем — проверка блокировок (если пользователь заблокирован, он не сможет позвонить).

---

> [!TIP]
> Для разработчиков: Модуль поддерживает работу через корпоративные файерволы за счет автоматической генерации TCP-кандидатов (`transport=tcp`) для TURN-трафика.
