1use std::{
2 net::{IpAddr, SocketAddr},
3 time::Duration,
4};
5
6use ipnet::IpNet;
7use o_sfu_core::prelude::Bitrate;
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}
31
32#[derive(Debug, Clone)]
33pub struct AuthConfig {
34 pub key: SecretString,
35 pub authentication_timeout: DeadlineDuration,
36 pub max_pre_auth_websocket_sessions: usize,
37 pub max_pre_auth_websocket_sessions_per_origin: usize,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq)]
41pub struct HttpConfig {
42 pub bind_address: SocketAddr,
43 pub trust_proxy_headers: bool,
44 pub trusted_proxies: Vec<IpNet>,
46 pub max_http_connections: usize,
49 pub header_read_timeout: Duration,
52 pub shutdown_timeout: DeadlineDuration,
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq)]
58pub struct UserConfig {
59 pub room_size: usize,
60 pub timeout: DeadlineDuration,
61 pub ping_interval: DeadlineDuration,
62 pub outbound_queue_capacity: usize,
63 pub outbound_queue_byte_capacity: usize,
64 pub room_reservation_ttl: Duration,
65 pub departure_grace: Duration,
66}
67
68#[derive(Debug, Clone, Copy, PartialEq, Eq)]
69pub struct TransportConfig {
70 pub announced_ip: IpAddr,
71 pub max_bitrate_in: Bitrate,
72 pub max_bitrate_out: Bitrate,
73 pub video_bitrate_limits: VideoBitrateLimits,
74 pub rtc_port_range: RtcPortRange,
75 pub rtc_udp_io_backend: RtcUdpIoBackend,
76 pub rtc_media_worker_count: usize,
77 pub room_worker_policy: RoomWorkerPolicy,
78 pub room_media_limits: RoomMediaLimits,
79 pub video_adaptation_tuning: VideoAdaptationTuning,
80}
81
82#[derive(Debug, Clone, Copy, PartialEq, Eq)]
83pub struct CodecConfig {
84 pub flags: MediaCodecFlags,
85 pub preferences: CodecPreferences,
86}