fips_core/config/transport/
webrtc.rs1use serde::{Deserialize, Serialize};
4
5const DEFAULT_WEBRTC_MTU: u16 = 1200;
7
8const DEFAULT_WEBRTC_CONNECT_TIMEOUT_MS: u64 = 30_000;
10
11const DEFAULT_WEBRTC_ICE_GATHER_TIMEOUT_MS: u64 = 2_000;
13
14const DEFAULT_WEBRTC_MAX_CONNECTIONS: usize = 6;
16
17const DEFAULT_WEBRTC_DATA_CHANNEL_LABEL: &str = "fips";
19
20#[derive(Debug, Clone, Default, Serialize, Deserialize)]
25#[serde(deny_unknown_fields)]
26pub struct WebRtcConfig {
27 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub advertise_on_nostr: Option<bool>,
31
32 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub auto_connect: Option<bool>,
36
37 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub accept_connections: Option<bool>,
41
42 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub mtu: Option<u16>,
45
46 #[serde(default, skip_serializing_if = "Option::is_none")]
49 pub max_connections: Option<usize>,
50
51 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub connect_timeout_ms: Option<u64>,
54
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub ice_gather_timeout_ms: Option<u64>,
58
59 #[serde(default, skip_serializing_if = "Option::is_none")]
61 pub data_channel_label: Option<String>,
62
63 #[serde(default, skip_serializing_if = "Option::is_none")]
65 pub ordered: Option<bool>,
66
67 #[serde(default, skip_serializing_if = "Option::is_none")]
70 pub max_retransmits: Option<u16>,
71
72 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub stun_servers: Option<Vec<String>>,
76
77 #[serde(default, skip_serializing_if = "Option::is_none")]
81 pub resolve_mdns_candidates: Option<bool>,
82}
83
84impl WebRtcConfig {
85 pub fn advertise_on_nostr(&self) -> bool {
87 self.advertise_on_nostr.unwrap_or(false)
88 }
89
90 pub fn auto_connect(&self) -> bool {
92 self.auto_connect.unwrap_or(false)
93 }
94
95 pub fn accept_connections(&self) -> bool {
97 self.accept_connections
98 .unwrap_or_else(|| self.advertise_on_nostr())
99 }
100
101 pub fn mtu(&self) -> u16 {
103 self.mtu.unwrap_or(DEFAULT_WEBRTC_MTU)
104 }
105
106 pub fn max_connections(&self) -> usize {
108 self.max_connections
109 .unwrap_or(DEFAULT_WEBRTC_MAX_CONNECTIONS)
110 }
111
112 pub fn connect_timeout_ms(&self) -> u64 {
114 self.connect_timeout_ms
115 .unwrap_or(DEFAULT_WEBRTC_CONNECT_TIMEOUT_MS)
116 }
117
118 pub fn ice_gather_timeout_ms(&self) -> u64 {
120 self.ice_gather_timeout_ms
121 .unwrap_or(DEFAULT_WEBRTC_ICE_GATHER_TIMEOUT_MS)
122 }
123
124 pub fn data_channel_label(&self) -> &str {
126 self.data_channel_label
127 .as_deref()
128 .unwrap_or(DEFAULT_WEBRTC_DATA_CHANNEL_LABEL)
129 }
130
131 pub fn ordered(&self) -> bool {
133 self.ordered.unwrap_or(true)
134 }
135
136 pub fn max_retransmits(&self) -> Option<u16> {
138 self.max_retransmits
139 }
140
141 pub fn resolve_mdns_candidates(&self) -> bool {
143 self.resolve_mdns_candidates.unwrap_or(true)
144 }
145
146 pub fn stun_servers<'a>(&'a self, fallback: &'a [String]) -> Vec<String> {
148 self.stun_servers
149 .as_ref()
150 .cloned()
151 .unwrap_or_else(|| fallback.to_vec())
152 }
153}