ant_quic/config/
nat_timeouts.rs1use crate::Duration;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct NatTraversalTimeouts {
9 pub coordination_timeout: Duration,
11
12 pub connection_establishment_timeout: Duration,
14
15 pub probe_timeout: Duration,
17
18 pub retry_interval: Duration,
20
21 pub bootstrap_query_timeout: Duration,
23
24 pub migration_timeout: Duration,
26
27 pub session_timeout: Duration,
29}
30
31impl Default for NatTraversalTimeouts {
32 fn default() -> Self {
33 Self {
34 coordination_timeout: Duration::from_secs(10),
35 connection_establishment_timeout: Duration::from_secs(30),
36 probe_timeout: Duration::from_secs(5),
37 retry_interval: Duration::from_secs(1),
38 bootstrap_query_timeout: Duration::from_secs(5),
39 migration_timeout: Duration::from_secs(60),
40 session_timeout: Duration::from_secs(5),
41 }
42 }
43}
44
45impl NatTraversalTimeouts {
46 pub fn fast() -> Self {
48 Self {
49 coordination_timeout: Duration::from_secs(5),
50 connection_establishment_timeout: Duration::from_secs(15),
51 probe_timeout: Duration::from_secs(2),
52 retry_interval: Duration::from_millis(500),
53 bootstrap_query_timeout: Duration::from_secs(2),
54 migration_timeout: Duration::from_secs(30),
55 session_timeout: Duration::from_secs(2),
56 }
57 }
58
59 pub fn conservative() -> Self {
61 Self {
62 coordination_timeout: Duration::from_secs(20),
63 connection_establishment_timeout: Duration::from_secs(60),
64 probe_timeout: Duration::from_secs(10),
65 retry_interval: Duration::from_secs(2),
66 bootstrap_query_timeout: Duration::from_secs(10),
67 migration_timeout: Duration::from_secs(120),
68 session_timeout: Duration::from_secs(10),
69 }
70 }
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct DiscoveryTimeouts {
76 pub total_timeout: Duration,
78
79 pub local_scan_timeout: Duration,
81
82 pub interface_cache_ttl: Duration,
84
85 pub server_reflexive_cache_ttl: Duration,
87
88 pub health_check_interval: Duration,
90}
91
92impl Default for DiscoveryTimeouts {
93 fn default() -> Self {
94 Self {
95 total_timeout: Duration::from_secs(30),
96 local_scan_timeout: Duration::from_secs(2),
97 interface_cache_ttl: Duration::from_secs(60),
98 server_reflexive_cache_ttl: Duration::from_secs(300),
99 health_check_interval: Duration::from_secs(30),
100 }
101 }
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct RelayTimeouts {
107 pub request_timeout: Duration,
109
110 pub retry_interval: Duration,
112
113 pub rate_limit_window: Duration,
115}
116
117impl Default for RelayTimeouts {
118 fn default() -> Self {
119 Self {
120 request_timeout: Duration::from_secs(30),
121 retry_interval: Duration::from_millis(500),
122 rate_limit_window: Duration::from_secs(60),
123 }
124 }
125}
126
127#[derive(Debug, Clone, Default, Serialize, Deserialize)]
129pub struct TimeoutConfig {
130 pub nat_traversal: NatTraversalTimeouts,
132
133 pub discovery: DiscoveryTimeouts,
135
136 pub relay: RelayTimeouts,
138}
139
140impl TimeoutConfig {
141 pub fn fast() -> Self {
143 Self {
144 nat_traversal: NatTraversalTimeouts::fast(),
145 discovery: DiscoveryTimeouts::default(), relay: RelayTimeouts::default(),
147 }
148 }
149
150 pub fn conservative() -> Self {
152 Self {
153 nat_traversal: NatTraversalTimeouts::conservative(),
154 discovery: DiscoveryTimeouts::default(),
155 relay: RelayTimeouts::default(),
156 }
157 }
158}