# Подключение TURN к SHiNE-серверу Начиная с текущей версии, клиент звонков запрашивает ICE-конфиг у backend через WS-операцию `GetCallIceConfig` и использует её для `RTCPeerConnection`. ## 1. Настройки backend Файл: `src/main/resources/application.properties` Ключи: ```properties call.ice.stun.urls=stun:stun.l.google.com:19302 call.ice.turn.urls=turn:37.214.58.208:3478?transport=udp,turn:37.214.58.208:3478?transport=tcp call.ice.turn.ttlSec=600 call.ice.turn.userPrefix=shine call.ice.turn.sharedSecret=CHANGE_ME_LONG_RANDOM_SECRET # fallback (если не используете shared-secret) call.ice.turn.username= call.ice.turn.password= ``` ## 2. Рекомендуемый режим (временные credentials) - На coturn и на SHiNE-сервере должен быть **одинаковый** secret: - coturn: `static-auth-secret=...` - SHiNE: `call.ice.turn.sharedSecret=...` - Тогда SHiNE выдаёт короткоживущие `turnUsername/turnPassword` (TTL). ## 3. Fallback режим (статический логин/пароль) Если временные credentials не используются: ```properties call.ice.turn.sharedSecret= call.ice.turn.username=turn_user call.ice.turn.password=turn_password ``` ## 4. Деплой после изменения ```bash ./gradlew deployServerNoCleanNoTests ./gradlew deployWEB ``` ## 5. Проверка 1. Авторизоваться двумя клиентами. 2. Запустить звонок. 3. Проверить, что звонок устанавливается даже в сети, где прямой P2P затруднён. 4. Если TURN недоступен, клиент автоматически откатится к STUN-конфигу по умолчанию.