use std::time::Duration;
#[cfg_attr(feature = "bindings", derive(uniffi::Record))]
#[derive(Debug, Clone)]
#[non_exhaustive]
pub struct PhantomConfig {
pub keepalive_interval: Duration,
pub session_timeout: Duration,
pub max_packet_size: u32,
pub send_buffer_size: u32,
pub recv_buffer_size: u32,
pub session_cache_capacity: u32,
pub session_ticket_lifetime: Duration,
pub auto_fallback: bool,
pub fallback_loss_threshold: u8,
pub fallback_failure_threshold: u32,
pub connect_timeout: Duration,
pub upgrade_delay: Duration,
}
impl Default for PhantomConfig {
fn default() -> Self {
Self::mobile()
}
}
impl PhantomConfig {
pub fn mobile() -> Self {
Self {
keepalive_interval: Duration::from_secs(30),
session_timeout: Duration::from_secs(3600),
max_packet_size: 1350,
send_buffer_size: 256,
recv_buffer_size: 1024,
session_cache_capacity: 32,
session_ticket_lifetime: Duration::from_secs(86400),
auto_fallback: true,
fallback_loss_threshold: 15,
fallback_failure_threshold: 3,
connect_timeout: Duration::from_secs(5),
upgrade_delay: Duration::from_secs(60),
}
}
pub fn server() -> Self {
Self {
keepalive_interval: Duration::from_secs(60),
session_timeout: Duration::from_secs(7200),
max_packet_size: 1440,
send_buffer_size: 2048,
recv_buffer_size: 8192,
session_cache_capacity: 1024,
session_ticket_lifetime: Duration::from_secs(604800),
auto_fallback: false,
fallback_loss_threshold: 20,
fallback_failure_threshold: 5,
connect_timeout: Duration::from_secs(2),
upgrade_delay: Duration::from_secs(300),
}
}
pub fn iot() -> Self {
Self {
keepalive_interval: Duration::from_secs(120),
session_timeout: Duration::from_secs(1800),
max_packet_size: 512,
send_buffer_size: 32,
recv_buffer_size: 64,
session_cache_capacity: 4,
session_ticket_lifetime: Duration::from_secs(3600),
auto_fallback: true,
fallback_loss_threshold: 25,
fallback_failure_threshold: 2,
connect_timeout: Duration::from_secs(10),
upgrade_delay: Duration::from_secs(600),
}
}
}