1use ipnet::IpNet;
2use std::sync::Arc;
3use volli_core::{DEFAULT_QUIC_PORT, DEFAULT_TCP_PORT, ManagerPeerEntry};
4
5#[derive(Clone, Debug)]
7pub struct ServerConfigOpts {
8 pub advertise_host: String,
9 pub bind: String,
10 pub tcp_port: u16,
11 pub quic_port: u16,
12 pub cert: Option<String>,
13 pub key: Option<String>,
14 pub token: Option<String>,
15 pub secret_dir: Option<String>,
16 pub profile: String,
17 pub manager_name: Option<String>,
18 pub max_connections: usize,
19 pub max_conn_rate: usize,
20 pub conn_rate_interval: std::time::Duration,
21 pub max_worker_conn_rate: usize,
22 pub worker_conn_rate_interval: std::time::Duration,
23 pub handshake_timeout_ms: u64,
24 pub worker_whitelist: Option<Vec<String>>,
25 pub manager_whitelist: Option<Vec<String>>,
26 pub max_workers: Option<u32>,
27 pub peers: Vec<ManagerPeerEntry>,
28 pub test_disable_listeners: bool,
30}
31
32impl Default for ServerConfigOpts {
33 fn default() -> Self {
34 Self {
35 advertise_host: "127.0.0.1".into(),
36 bind: "127.0.0.1".into(),
37 tcp_port: DEFAULT_TCP_PORT,
38 quic_port: DEFAULT_QUIC_PORT,
39 cert: None,
40 key: None,
41 token: None,
42 secret_dir: None,
43 profile: "default".into(),
44 manager_name: None,
45 max_connections: 1000,
46 max_conn_rate: 0,
47 conn_rate_interval: std::time::Duration::from_secs(1),
48 max_worker_conn_rate: 0,
49 worker_conn_rate_interval: std::time::Duration::from_secs(1),
50 handshake_timeout_ms: 5000,
51 worker_whitelist: None,
52 manager_whitelist: None,
53 max_workers: None,
54 peers: vec![],
55 test_disable_listeners: false,
56 }
57 }
58}
59
60pub(crate) fn parse_nets(list: &Option<Vec<String>>) -> Arc<Vec<IpNet>> {
61 Arc::new(
62 list.clone()
63 .unwrap_or_default()
64 .into_iter()
65 .filter_map(|s| s.parse().ok())
66 .collect(),
67 )
68}