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