1 use crate::blacklist::*;
2 use crate::cache::*;
3 use crate::crypto::*;
4 use crate::dnscrypt_certs::*;
5 #[cfg(feature = "metrics")]
6 use crate::varz::*;
7 
8 use parking_lot::{Mutex, RwLock};
9 use siphasher::sip128::SipHasher13;
10 use std::collections::vec_deque::VecDeque;
11 use std::net::{IpAddr, SocketAddr};
12 use std::path::PathBuf;
13 use std::sync::atomic::AtomicU32;
14 use std::sync::Arc;
15 use std::time::Duration;
16 use tokio::runtime::Handle;
17 use tokio::sync::oneshot;
18 
19 #[derive(Clone, Derivative)]
20 #[derivative(Debug)]
21 pub struct Globals {
22     pub runtime_handle: Handle,
23     pub state_file: PathBuf,
24     pub dnscrypt_encryption_params_set: Arc<RwLock<Arc<Vec<Arc<DNSCryptEncryptionParams>>>>>,
25     pub provider_name: String,
26     pub provider_kp: SignKeyPair,
27     pub listen_addrs: Vec<SocketAddr>,
28     pub external_addr: Option<SocketAddr>,
29     pub upstream_addr: SocketAddr,
30     pub tls_upstream_addr: Option<SocketAddr>,
31     pub udp_timeout: Duration,
32     pub tcp_timeout: Duration,
33     pub udp_concurrent_connections: Arc<AtomicU32>,
34     pub tcp_concurrent_connections: Arc<AtomicU32>,
35     pub udp_max_active_connections: u32,
36     pub tcp_max_active_connections: u32,
37     pub udp_active_connections: Arc<Mutex<VecDeque<oneshot::Sender<()>>>>,
38     pub tcp_active_connections: Arc<Mutex<VecDeque<oneshot::Sender<()>>>>,
39     pub key_cache_capacity: usize,
40     pub hasher: SipHasher13,
41     pub cache: Cache,
42     pub cert_cache: Cache,
43     pub blacklist: Option<BlackList>,
44     pub undelegated_list: Option<BlackList>,
45     pub ignore_unqualified_hostnames: bool,
46     pub dnscrypt_enabled: bool,
47     pub anonymized_dns_enabled: bool,
48     pub anonymized_dns_allowed_ports: Vec<u16>,
49     pub anonymized_dns_allow_non_reserved_ports: bool,
50     pub anonymized_dns_blacklisted_ips: Vec<IpAddr>,
51     pub access_control_tokens: Option<Vec<String>>,
52     pub client_ttl_holdon: u32,
53     pub my_ip: Option<Vec<u8>>,
54     #[cfg(feature = "metrics")]
55     #[derivative(Debug = "ignore")]
56     pub varz: Varz,
57 }
58