Skip to main content

watfaq_dns/
lib.rs

1use std::future::Future;
2use std::net::SocketAddr;
3
4use hickory_proto::op::Message;
5use serde::Deserialize;
6
7mod dummy_keys;
8mod handler;
9#[cfg(test)]
10mod tls;
11mod utils;
12
13pub use handler::get_dns_listener;
14pub use handler::DNSError;
15
16#[derive(Debug, Deserialize, Clone)]
17#[serde(rename_all = "kebab-case")]
18pub struct DoHConfig {
19    pub addr: SocketAddr,
20    pub ca_cert: DnsServerCert,
21    pub ca_key: DnsServerKey,
22    pub hostname: Option<String>,
23}
24
25#[derive(Debug, Deserialize, Clone)]
26#[serde(rename_all = "kebab-case")]
27pub struct DoH3Config {
28    pub addr: SocketAddr,
29    pub ca_cert: DnsServerCert,
30    pub ca_key: DnsServerKey,
31    pub hostname: Option<String>,
32}
33
34#[derive(Debug, Deserialize, Clone)]
35#[serde(rename_all = "kebab-case")]
36pub struct DoTConfig {
37    pub addr: SocketAddr,
38    pub ca_cert: DnsServerCert,
39    pub ca_key: DnsServerKey,
40}
41
42pub type DnsServerKey = Option<String>;
43pub type DnsServerCert = Option<String>;
44
45#[derive(Debug, Default, Clone)]
46pub struct DNSListenAddr {
47    pub udp: Option<SocketAddr>,
48    pub tcp: Option<SocketAddr>,
49    pub doh: Option<DoHConfig>,
50    pub dot: Option<DoTConfig>,
51    pub doh3: Option<DoH3Config>,
52}
53
54#[cfg_attr(test, mockall::automock)]
55pub trait DnsMessageExchanger {
56    fn ipv6(&self) -> bool;
57    fn exchange(&self, message: &Message)
58        -> impl Future<Output = Result<Message, DNSError>> + Send;
59}