use ipnet::IpNet;
use std::sync::Arc;
use volli_core::{DEFAULT_QUIC_PORT, DEFAULT_TCP_PORT, ManagerPeerEntry};
#[derive(Clone, Debug)]
pub struct ServerConfigOpts {
pub advertise_host: String,
pub bind: String,
pub tcp_port: u16,
pub quic_port: u16,
pub cert: Option<String>,
pub key: Option<String>,
pub token: Option<String>,
pub secret_dir: Option<String>,
pub profile: String,
pub manager_name: Option<String>,
pub max_connections: usize,
pub max_conn_rate: usize,
pub conn_rate_interval: std::time::Duration,
pub max_worker_conn_rate: usize,
pub worker_conn_rate_interval: std::time::Duration,
pub handshake_timeout_ms: u64,
pub worker_whitelist: Option<Vec<String>>,
pub manager_whitelist: Option<Vec<String>>,
pub max_workers: Option<u32>,
pub peers: Vec<ManagerPeerEntry>,
pub test_disable_listeners: bool,
}
impl Default for ServerConfigOpts {
fn default() -> Self {
Self {
advertise_host: "127.0.0.1".into(),
bind: "127.0.0.1".into(),
tcp_port: DEFAULT_TCP_PORT,
quic_port: DEFAULT_QUIC_PORT,
cert: None,
key: None,
token: None,
secret_dir: None,
profile: "default".into(),
manager_name: None,
max_connections: 1000,
max_conn_rate: 0,
conn_rate_interval: std::time::Duration::from_secs(1),
max_worker_conn_rate: 0,
worker_conn_rate_interval: std::time::Duration::from_secs(1),
handshake_timeout_ms: 5000,
worker_whitelist: None,
manager_whitelist: None,
max_workers: None,
peers: vec![],
test_disable_listeners: false,
}
}
}
pub(crate) fn parse_nets(list: &Option<Vec<String>>) -> Arc<Vec<IpNet>> {
Arc::new(
list.clone()
.unwrap_or_default()
.into_iter()
.filter_map(|s| s.parse().ok())
.collect(),
)
}