Звонки
This commit is contained in:
@@ -24,6 +24,18 @@ internal sealed class UpdateSettingsCommandHandler : ICommandHandler<UpdateSetti
|
||||
|
||||
public async Task<Result<SystemSettingsDto>> Handle(UpdateSettingsCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
// Enforce WebRTC hierarchy
|
||||
if (!request.Settings.WebRtc.Enabled)
|
||||
{
|
||||
request.Settings.WebRtc.EnableVideoCalls = false;
|
||||
request.Settings.WebRtc.EnableScreenSharing = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Master switch always means standard voice calls are available
|
||||
request.Settings.WebRtc.EnableVoiceCalls = true;
|
||||
}
|
||||
|
||||
if (request.Settings.Federation.Enabled &&
|
||||
(string.IsNullOrEmpty(request.Settings.Federation.PrivateKey) ||
|
||||
string.IsNullOrEmpty(request.Settings.Federation.PublicKey)))
|
||||
|
||||
@@ -5,6 +5,7 @@ using MediatR;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Knot.Modules.WebRtc.Application.WebRtc.Queries;
|
||||
|
||||
@@ -16,10 +17,12 @@ public record GetIceServersQuery : IQuery<IceServersResultDto>;
|
||||
internal sealed class GetIceServersQueryHandler : IQueryHandler<GetIceServersQuery, IceServersResultDto>
|
||||
{
|
||||
private readonly ISettingsService _settingsService;
|
||||
private readonly ILogger<GetIceServersQueryHandler> _logger;
|
||||
|
||||
public GetIceServersQueryHandler(ISettingsService settingsService)
|
||||
public GetIceServersQueryHandler(ISettingsService settingsService, ILogger<GetIceServersQueryHandler> logger)
|
||||
{
|
||||
_settingsService = settingsService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<Result<IceServersResultDto>> Handle(GetIceServersQuery request, CancellationToken cancellationToken)
|
||||
@@ -27,8 +30,12 @@ internal sealed class GetIceServersQueryHandler : IQueryHandler<GetIceServersQue
|
||||
var settings = await _settingsService.GetSettingsAsync(cancellationToken);
|
||||
var webrtc = settings.WebRtc;
|
||||
|
||||
_logger.LogInformation("WebRTC Config: Enabled={Enabled}, TurnHost={TurnHost}, TurnPort={TurnPort}, HasUser={HasUser}",
|
||||
webrtc.Enabled, webrtc.TurnHost, webrtc.TurnPort, !string.IsNullOrEmpty(webrtc.TurnUser));
|
||||
|
||||
if (!webrtc.Enabled)
|
||||
{
|
||||
_logger.LogWarning("WebRTC is disabled in server settings. Returning Failure.");
|
||||
return Result.Failure<IceServersResultDto>(new Error(
|
||||
"WebRtc.Disabled",
|
||||
"WebRTC calls are disabled by the server administrator."));
|
||||
@@ -48,6 +55,7 @@ internal sealed class GetIceServersQueryHandler : IQueryHandler<GetIceServersQue
|
||||
// Добавляем TURN (TCP и UDP варианты)
|
||||
if (!string.IsNullOrEmpty(webrtc.TurnUser))
|
||||
{
|
||||
_logger.LogInformation("Creating TURN server entry with user {TurnUser}", webrtc.TurnUser);
|
||||
iceServers.Add(new IceServerDto(
|
||||
new[] { turnUrl, $"{turnUrl}?transport=tcp" },
|
||||
webrtc.TurnUser,
|
||||
@@ -57,10 +65,12 @@ internal sealed class GetIceServersQueryHandler : IQueryHandler<GetIceServersQue
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation("Using public Google STUN fallback because TurnHost is not configured.");
|
||||
// Если своего сервера нет, используем публичный Google STUN как fallback
|
||||
iceServers.Add(new IceServerDto(new[] { "stun:stun.l.google.com:19302" }));
|
||||
}
|
||||
|
||||
_logger.LogInformation("WebRTC: successfully gathered {Count} ICE servers", iceServers.Count);
|
||||
return Result.Success(new IceServersResultDto(iceServers));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user