srt_protocol/settings/
connection.rs

1use 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    /// Receive buffer size in packets
21    pub recv_buffer_size: options::PacketCount,
22    /// Size of the send buffer, in packets
23    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}