use crate::Duration;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NatTraversalTimeouts {
pub coordination_timeout: Duration,
pub connection_establishment_timeout: Duration,
pub probe_timeout: Duration,
pub retry_interval: Duration,
pub bootstrap_query_timeout: Duration,
pub migration_timeout: Duration,
pub session_timeout: Duration,
}
impl Default for NatTraversalTimeouts {
fn default() -> Self {
Self {
coordination_timeout: Duration::from_secs(10),
connection_establishment_timeout: Duration::from_secs(30),
probe_timeout: Duration::from_secs(5),
retry_interval: Duration::from_secs(1),
bootstrap_query_timeout: Duration::from_secs(5),
migration_timeout: Duration::from_secs(60),
session_timeout: Duration::from_secs(5),
}
}
}
impl NatTraversalTimeouts {
pub fn fast() -> Self {
Self {
coordination_timeout: Duration::from_secs(5),
connection_establishment_timeout: Duration::from_secs(15),
probe_timeout: Duration::from_secs(2),
retry_interval: Duration::from_millis(500),
bootstrap_query_timeout: Duration::from_secs(2),
migration_timeout: Duration::from_secs(30),
session_timeout: Duration::from_secs(2),
}
}
pub fn conservative() -> Self {
Self {
coordination_timeout: Duration::from_secs(20),
connection_establishment_timeout: Duration::from_secs(60),
probe_timeout: Duration::from_secs(10),
retry_interval: Duration::from_secs(2),
bootstrap_query_timeout: Duration::from_secs(10),
migration_timeout: Duration::from_secs(120),
session_timeout: Duration::from_secs(10),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DiscoveryTimeouts {
pub total_timeout: Duration,
pub local_scan_timeout: Duration,
pub interface_cache_ttl: Duration,
pub server_reflexive_cache_ttl: Duration,
pub health_check_interval: Duration,
}
impl Default for DiscoveryTimeouts {
fn default() -> Self {
Self {
total_timeout: Duration::from_secs(30),
local_scan_timeout: Duration::from_secs(2),
interface_cache_ttl: Duration::from_secs(60),
server_reflexive_cache_ttl: Duration::from_secs(300),
health_check_interval: Duration::from_secs(30),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RelayTimeouts {
pub request_timeout: Duration,
pub retry_interval: Duration,
pub rate_limit_window: Duration,
}
impl Default for RelayTimeouts {
fn default() -> Self {
Self {
request_timeout: Duration::from_secs(30),
retry_interval: Duration::from_millis(500),
rate_limit_window: Duration::from_secs(60),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TimeoutConfig {
pub nat_traversal: NatTraversalTimeouts,
pub discovery: DiscoveryTimeouts,
pub relay: RelayTimeouts,
}
impl TimeoutConfig {
pub fn fast() -> Self {
Self {
nat_traversal: NatTraversalTimeouts::fast(),
discovery: DiscoveryTimeouts::default(), relay: RelayTimeouts::default(),
}
}
pub fn conservative() -> Self {
Self {
nat_traversal: NatTraversalTimeouts::conservative(),
discovery: DiscoveryTimeouts::default(),
relay: RelayTimeouts::default(),
}
}
}