rvoip_rtp_core/api/client/
config.rs1use std::net::SocketAddr;
6use crate::api::client::security::ClientSecurityConfig;
7use crate::api::common::extension::ExtensionFormat;
8use crate::buffer::{TransmitBufferConfig, BufferLimits};
9
10#[derive(Debug, Clone)]
12pub struct ClientConfig {
13 pub remote_address: Option<SocketAddr>,
15 pub local_address: Option<SocketAddr>,
17 pub default_payload_type: u8,
19 pub clock_rate: u32,
21 pub security_config: ClientSecurityConfig,
23 pub jitter_buffer_size: u16,
25 pub jitter_max_packet_age_ms: u16,
27 pub enable_jitter_buffer: bool,
29 pub ssrc: Option<u32>,
31 pub rtcp_mux: bool,
33 pub media_sync_enabled: Option<bool>,
35 pub ssrc_demultiplexing_enabled: Option<bool>,
37 pub csrc_management_enabled: bool,
39 pub header_extensions_enabled: bool,
41 pub header_extension_format: ExtensionFormat,
43 pub transmit_buffer_config: TransmitBufferConfig,
45 pub buffer_limits: BufferLimits,
47 pub high_performance_buffers_enabled: bool,
49}
50
51#[derive(Debug, Clone)]
53pub struct ClientConfigBuilder {
54 config: ClientConfig,
56}
57
58impl ClientConfigBuilder {
59 pub fn new() -> Self {
61 Self {
62 config: ClientConfig::default(),
63 }
64 }
65
66 pub fn webrtc() -> Self {
68 let mut builder = Self::new();
69 builder.config.security_config.security_mode = crate::api::common::config::SecurityMode::DtlsSrtp;
70 builder.config.rtcp_mux = true; builder.config.header_extensions_enabled = true; builder
73 }
74
75 pub fn sip() -> Self {
77 let mut builder = Self::new();
78 builder.config.security_config.security_mode = crate::api::common::config::SecurityMode::Srtp;
79 builder.config.rtcp_mux = false; builder
81 }
82
83 pub fn remote_address(mut self, addr: SocketAddr) -> Self {
85 self.config.remote_address = Some(addr);
86 self
87 }
88
89 pub fn remote_address_localhost(mut self, port: u16) -> Self {
91 self.config.remote_address = Some(SocketAddr::from(([127, 0, 0, 1], port)));
92 self
93 }
94
95 pub fn local_address(mut self, addr: Option<SocketAddr>) -> Self {
97 self.config.local_address = addr;
98 self
99 }
100
101 pub fn default_payload_type(mut self, pt: u8) -> Self {
103 self.config.default_payload_type = pt;
104 self
105 }
106
107 pub fn clock_rate(mut self, rate: u32) -> Self {
109 self.config.clock_rate = rate;
110 self
111 }
112
113 pub fn security_config(mut self, config: ClientSecurityConfig) -> Self {
115 self.config.security_config = config;
116 self
117 }
118
119 pub fn jitter_buffer_size(mut self, size: u16) -> Self {
121 self.config.jitter_buffer_size = size;
122 self
123 }
124
125 pub fn jitter_max_packet_age_ms(mut self, age: u16) -> Self {
127 self.config.jitter_max_packet_age_ms = age;
128 self
129 }
130
131 pub fn enable_jitter_buffer(mut self, enable: bool) -> Self {
133 self.config.enable_jitter_buffer = enable;
134 self
135 }
136
137 pub fn ssrc(mut self, ssrc: u32) -> Self {
139 self.config.ssrc = Some(ssrc);
140 self
141 }
142
143 pub fn rtcp_mux(mut self, enable: bool) -> Self {
145 self.config.rtcp_mux = enable;
146 self
147 }
148
149 pub fn media_sync_enabled(mut self, enable: bool) -> Self {
151 self.config.media_sync_enabled = Some(enable);
152 self
153 }
154
155 pub fn ssrc_demultiplexing_enabled(mut self, enable: bool) -> Self {
157 self.config.ssrc_demultiplexing_enabled = Some(enable);
158 self
159 }
160
161 pub fn csrc_management_enabled(mut self, enable: bool) -> Self {
163 self.config.csrc_management_enabled = enable;
164 self
165 }
166
167 pub fn header_extensions_enabled(mut self, enable: bool) -> Self {
169 self.config.header_extensions_enabled = enable;
170 self
171 }
172
173 pub fn header_extension_format(mut self, format: ExtensionFormat) -> Self {
175 self.config.header_extension_format = format;
176 self
177 }
178
179 pub fn transmit_buffer_config(mut self, config: TransmitBufferConfig) -> Self {
181 self.config.transmit_buffer_config = config;
182 self
183 }
184
185 pub fn buffer_limits(mut self, limits: BufferLimits) -> Self {
187 self.config.buffer_limits = limits;
188 self
189 }
190
191 pub fn high_performance_buffers_enabled(mut self, enabled: bool) -> Self {
193 self.config.high_performance_buffers_enabled = enabled;
194 self
195 }
196
197 pub fn build(self) -> ClientConfig {
199 self.config
200 }
201}
202
203impl Default for ClientConfig {
204 fn default() -> Self {
205 Self {
206 remote_address: None,
207 local_address: None,
208 default_payload_type: 0,
209 clock_rate: 8000,
210 security_config: ClientSecurityConfig::default(),
211 jitter_buffer_size: 50,
212 jitter_max_packet_age_ms: 200,
213 enable_jitter_buffer: true,
214 ssrc: None,
215 rtcp_mux: false,
216 media_sync_enabled: None,
217 ssrc_demultiplexing_enabled: None,
218 csrc_management_enabled: false,
219 header_extensions_enabled: false,
220 header_extension_format: ExtensionFormat::OneByte,
221 transmit_buffer_config: TransmitBufferConfig::default(),
222 buffer_limits: BufferLimits {
223 max_packets_per_stream: 500,
224 max_packet_size: 1500,
225 max_memory: 10 * 1024 * 1024, },
227 high_performance_buffers_enabled: false,
228 }
229 }
230}