srt_protocol/settings/
connection.rs1use std::time::Duration;
2
3use rand::random;
4
5use crate::{options, packet::Packet};
6
7use super::*;
8
9#[derive(Debug, Clone)]
10pub struct ConnInitSettings {
11 pub local_sockid: SocketId,
12 pub key_settings: Option<KeySettings>,
13 pub key_refresh: KeyMaterialRefreshSettings,
14 pub send_latency: Duration,
15 pub recv_latency: Duration,
16 pub peer_idle_timeout: Duration,
17 pub bandwidth: options::LiveBandwidthMode,
18 pub statistics_interval: Duration,
19 pub too_late_packet_drop: bool,
20 pub recv_buffer_size: options::PacketCount,
22 pub send_buffer_size: options::PacketCount,
24 pub max_packet_size: options::PacketSize,
25 pub max_flow_size: options::PacketCount,
26}
27
28impl Default for ConnInitSettings {
29 fn default() -> Self {
30 options::SocketOptions::default().into()
31 }
32}
33
34impl ConnInitSettings {
35 pub fn copy_randomize(&self) -> ConnInitSettings {
36 ConnInitSettings {
37 local_sockid: random(),
38 ..self.clone()
39 }
40 }
41}
42
43impl From<options::SocketOptions> for ConnInitSettings {
44 fn from(options: options::SocketOptions) -> Self {
45 Self {
46 local_sockid: random(),
47 key_settings: options
48 .encryption
49 .passphrase
50 .clone()
51 .map(|passphrase| KeySettings {
52 key_size: options.encryption.key_size,
53 passphrase,
54 }),
55 key_refresh: KeyMaterialRefreshSettings::new(
56 options.encryption.km_refresh.period.into(),
57 options.encryption.km_refresh.pre_announcement_period.into(),
58 )
59 .unwrap(),
60 send_latency: options.sender.peer_latency,
61 recv_latency: options.receiver.latency,
62 peer_idle_timeout: options.session.peer_idle_timeout,
63 bandwidth: options.sender.bandwidth,
64 statistics_interval: options.session.statistics_interval,
65 recv_buffer_size: options.receiver.buffer_size
66 / (options.session.max_segment_size - Packet::HEADER_SIZE),
67 send_buffer_size: options.sender.buffer_size
68 / (options.session.max_segment_size - Packet::HEADER_SIZE),
69 max_packet_size: options.sender.max_payload_size,
70 max_flow_size: options.sender.flow_control_window_size,
71 too_late_packet_drop: options.receiver.too_late_packet_drop,
72 }
73 }
74}