1use std::{
2 net::{IpAddr, SocketAddr},
3 time::Duration,
4};
5
6use ipnet::IpNet;
7use o_sfu_core::prelude::{Bitrate, RtcTcpConfig};
8use secrecy::SecretString;
9
10use super::{
11 CodecPreferences, DeadlineDuration, MediaCodecFlags, RoomMediaLimits, RoomWorkerPolicy,
12 RtcPortRange, RtcUdpIoBackend, VideoAdaptationTuning, VideoBitrateLimits,
13 diagnostics::DiagnosticsConfig, feature_flags::RuntimeFeatureFlags, telemetry::TelemetryConfig,
14};
15
16pub const DEFAULT_AUTHENTICATION_TIMEOUT_MS: u64 = 10_000;
17pub const DEFAULT_MAX_PRE_AUTH_WEBSOCKET_SESSIONS: usize = 512;
18pub const DEFAULT_MAX_PRE_AUTH_WEBSOCKET_SESSIONS_PER_ORIGIN: usize = 16;
19
20#[derive(Debug, Clone)]
21pub struct Config {
22 pub auth: AuthConfig,
23 pub http: HttpConfig,
24 pub user: UserConfig,
25 pub transport: TransportConfig,
26 pub codecs: CodecConfig,
27 pub features: RuntimeFeatureFlags,
28 pub telemetry: TelemetryConfig,
29 pub diagnostics: DiagnosticsConfig,
30 pub runtime_thread_count: usize,
31}
32
33#[derive(Debug, Clone)]
34pub struct AuthConfig {
35 pub key: SecretString,
36 pub authentication_timeout: DeadlineDuration,
37 pub max_pre_auth_websocket_sessions: usize,
38 pub max_pre_auth_websocket_sessions_per_origin: usize,
39}
40
41#[derive(Debug, Clone, PartialEq, Eq)]
42pub struct HttpConfig {
43 pub bind_address: SocketAddr,
44 pub trust_proxy_headers: bool,
45 pub trusted_proxies: Vec<IpNet>,
47 pub max_http_connections: usize,
50 pub header_read_timeout: Duration,
53 pub shutdown_timeout: DeadlineDuration,
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq)]
59pub struct UserConfig {
60 pub room_size: usize,
61 pub timeout: DeadlineDuration,
62 pub ping_interval: DeadlineDuration,
63 pub outbound_queue_capacity: usize,
64 pub outbound_queue_byte_capacity: usize,
65 pub room_reservation_ttl: Duration,
66 pub departure_grace: Duration,
67}
68
69#[derive(Debug, Clone, Copy, PartialEq, Eq)]
70pub struct TransportConfig {
71 pub announced_ip: IpAddr,
72 pub max_bitrate_in: Bitrate,
73 pub max_bitrate_out: Bitrate,
74 pub video_bitrate_limits: VideoBitrateLimits,
75 pub rtc_port_range: RtcPortRange,
76 pub rtc_tcp_config: Option<RtcTcpConfig>,
77 pub rtc_udp_io_backend: RtcUdpIoBackend,
78 pub rtc_media_worker_count: usize,
79 pub room_worker_policy: RoomWorkerPolicy,
80 pub room_media_limits: RoomMediaLimits,
81 pub video_adaptation_tuning: VideoAdaptationTuning,
82}
83
84#[derive(Debug, Clone, Copy, PartialEq, Eq)]
85pub struct CodecConfig {
86 pub flags: MediaCodecFlags,
87 pub preferences: CodecPreferences,
88}