upgrade hickory and hyper-util dependencies
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
5d1404e9df
commit
58adb6fead
4 changed files with 229 additions and 39 deletions
195
Cargo.lock
generated
195
Cargo.lock
generated
|
@ -142,6 +142,17 @@ dependencies = [
|
||||||
"zstd-safe",
|
"zstd-safe",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "async-recursion"
|
||||||
|
version = "1.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-stream"
|
name = "async-stream"
|
||||||
version = "0.3.6"
|
version = "0.3.6"
|
||||||
|
@ -927,7 +938,7 @@ dependencies = [
|
||||||
"const-str",
|
"const-str",
|
||||||
"either",
|
"either",
|
||||||
"futures",
|
"futures",
|
||||||
"hickory-resolver",
|
"hickory-resolver 0.25.1",
|
||||||
"http",
|
"http",
|
||||||
"image",
|
"image",
|
||||||
"ipaddress",
|
"ipaddress",
|
||||||
|
@ -1061,6 +1072,12 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "critical-section"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crokey"
|
name = "crokey"
|
||||||
version = "1.1.1"
|
version = "1.1.1"
|
||||||
|
@ -1584,6 +1601,19 @@ dependencies = [
|
||||||
"slab",
|
"slab",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "generator"
|
||||||
|
version = "0.8.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"log",
|
||||||
|
"rustversion",
|
||||||
|
"windows 0.58.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.7"
|
version = "0.14.7"
|
||||||
|
@ -1769,6 +1799,34 @@ dependencies = [
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hickory-proto"
|
||||||
|
version = "0.25.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6d844af74f7b799e41c78221be863bade11c430d46042c3b49ca8ae0c6d27287"
|
||||||
|
dependencies = [
|
||||||
|
"async-recursion",
|
||||||
|
"async-trait",
|
||||||
|
"cfg-if",
|
||||||
|
"critical-section",
|
||||||
|
"data-encoding",
|
||||||
|
"enum-as-inner",
|
||||||
|
"futures-channel",
|
||||||
|
"futures-io",
|
||||||
|
"futures-util",
|
||||||
|
"idna",
|
||||||
|
"ipnet",
|
||||||
|
"once_cell",
|
||||||
|
"rand 0.9.0",
|
||||||
|
"ring",
|
||||||
|
"serde",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
"tinyvec",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
"url",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hickory-resolver"
|
name = "hickory-resolver"
|
||||||
version = "0.24.4"
|
version = "0.24.4"
|
||||||
|
@ -1777,7 +1835,7 @@ checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"hickory-proto",
|
"hickory-proto 0.24.4",
|
||||||
"ipconfig",
|
"ipconfig",
|
||||||
"lru-cache",
|
"lru-cache",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
|
@ -1790,6 +1848,28 @@ dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hickory-resolver"
|
||||||
|
version = "0.25.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a128410b38d6f931fcc6ca5c107a3b02cabd6c05967841269a4ad65d23c44331"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"futures-util",
|
||||||
|
"hickory-proto 0.25.1",
|
||||||
|
"ipconfig",
|
||||||
|
"moka",
|
||||||
|
"once_cell",
|
||||||
|
"parking_lot",
|
||||||
|
"rand 0.9.0",
|
||||||
|
"resolv-conf",
|
||||||
|
"serde",
|
||||||
|
"smallvec",
|
||||||
|
"thiserror 2.0.12",
|
||||||
|
"tokio",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hmac"
|
name = "hmac"
|
||||||
version = "0.12.1"
|
version = "0.12.1"
|
||||||
|
@ -1816,7 +1896,7 @@ checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"windows",
|
"windows 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1949,9 +2029,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper-util"
|
name = "hyper-util"
|
||||||
version = "0.1.8"
|
version = "0.1.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba"
|
checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
|
@ -1959,10 +2039,10 @@ dependencies = [
|
||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"hyper",
|
"hyper",
|
||||||
|
"libc",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"socket2",
|
"socket2",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower 0.4.13",
|
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
@ -2439,6 +2519,19 @@ dependencies = [
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "loom"
|
||||||
|
version = "0.7.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"generator",
|
||||||
|
"scoped-tls",
|
||||||
|
"tracing",
|
||||||
|
"tracing-subscriber",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "loop9"
|
name = "loop9"
|
||||||
version = "0.1.5"
|
version = "0.1.5"
|
||||||
|
@ -2609,6 +2702,25 @@ dependencies = [
|
||||||
"windows-sys 0.52.0",
|
"windows-sys 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "moka"
|
||||||
|
version = "0.12.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926"
|
||||||
|
dependencies = [
|
||||||
|
"crossbeam-channel",
|
||||||
|
"crossbeam-epoch",
|
||||||
|
"crossbeam-utils",
|
||||||
|
"loom",
|
||||||
|
"parking_lot",
|
||||||
|
"portable-atomic",
|
||||||
|
"rustc_version",
|
||||||
|
"smallvec",
|
||||||
|
"tagptr",
|
||||||
|
"thiserror 1.0.69",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "new_debug_unreachable"
|
name = "new_debug_unreachable"
|
||||||
version = "1.0.6"
|
version = "1.0.6"
|
||||||
|
@ -2773,6 +2885,10 @@ name = "once_cell"
|
||||||
version = "1.21.3"
|
version = "1.21.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||||
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
|
"portable-atomic",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-probe"
|
name = "openssl-probe"
|
||||||
|
@ -3052,6 +3168,12 @@ dependencies = [
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "portable-atomic"
|
||||||
|
version = "1.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
@ -3463,7 +3585,7 @@ dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"h2",
|
"h2",
|
||||||
"hickory-resolver",
|
"hickory-resolver 0.24.4",
|
||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"http-body-util",
|
"http-body-util",
|
||||||
|
@ -3893,6 +4015,12 @@ dependencies = [
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scoped-tls"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scopeguard"
|
name = "scopeguard"
|
||||||
version = "1.2.0"
|
version = "1.2.0"
|
||||||
|
@ -4464,6 +4592,12 @@ dependencies = [
|
||||||
"version-compare",
|
"version-compare",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tagptr"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "target-lexicon"
|
name = "target-lexicon"
|
||||||
version = "0.12.16"
|
version = "0.12.16"
|
||||||
|
@ -5367,7 +5501,17 @@ version = "0.52.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"windows-core",
|
"windows-core 0.52.0",
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows"
|
||||||
|
version = "0.58.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
|
||||||
|
dependencies = [
|
||||||
|
"windows-core 0.58.0",
|
||||||
"windows-targets 0.52.6",
|
"windows-targets 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -5380,6 +5524,41 @@ dependencies = [
|
||||||
"windows-targets 0.52.6",
|
"windows-targets 0.52.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-core"
|
||||||
|
version = "0.58.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
|
||||||
|
dependencies = [
|
||||||
|
"windows-implement",
|
||||||
|
"windows-interface",
|
||||||
|
"windows-result",
|
||||||
|
"windows-strings",
|
||||||
|
"windows-targets 0.52.6",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-implement"
|
||||||
|
version = "0.58.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-interface"
|
||||||
|
version = "0.58.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "windows-registry"
|
name = "windows-registry"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
|
10
Cargo.toml
10
Cargo.toml
|
@ -284,8 +284,7 @@ features = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.dependencies.hyper-util]
|
[workspace.dependencies.hyper-util]
|
||||||
# hyper-util >=0.1.9 seems to have DNS issues
|
version = "0.1.11"
|
||||||
version = "=0.1.8"
|
|
||||||
default-features = false
|
default-features = false
|
||||||
features = [
|
features = [
|
||||||
"server-auto",
|
"server-auto",
|
||||||
|
@ -306,8 +305,13 @@ default-features = false
|
||||||
features = ["env", "toml"]
|
features = ["env", "toml"]
|
||||||
|
|
||||||
[workspace.dependencies.hickory-resolver]
|
[workspace.dependencies.hickory-resolver]
|
||||||
version = "0.24.2"
|
version = "0.25.1"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
features = [
|
||||||
|
"serde",
|
||||||
|
"system-config",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
# Used for conduwuit::Error type
|
# Used for conduwuit::Error type
|
||||||
[workspace.dependencies.thiserror]
|
[workspace.dependencies.thiserror]
|
||||||
|
|
|
@ -5,7 +5,7 @@ use std::{
|
||||||
|
|
||||||
use conduwuit::{Err, Result, debug, debug_info, err, error, trace};
|
use conduwuit::{Err, Result, debug, debug_info, err, error, trace};
|
||||||
use futures::{FutureExt, TryFutureExt};
|
use futures::{FutureExt, TryFutureExt};
|
||||||
use hickory_resolver::error::ResolveError;
|
use hickory_resolver::ResolveError;
|
||||||
use ipaddress::IPAddress;
|
use ipaddress::IPAddress;
|
||||||
use ruma::ServerName;
|
use ruma::ServerName;
|
||||||
|
|
||||||
|
@ -334,25 +334,28 @@ impl super::Service {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_resolve_error(e: &ResolveError, host: &'_ str) -> Result<()> {
|
fn handle_resolve_error(e: &ResolveError, host: &'_ str) -> Result<()> {
|
||||||
use hickory_resolver::error::ResolveErrorKind;
|
use hickory_resolver::{ResolveErrorKind::Proto, proto::ProtoErrorKind};
|
||||||
|
|
||||||
match *e.kind() {
|
match e.kind() {
|
||||||
| ResolveErrorKind::NoRecordsFound { .. } => {
|
| Proto(e) => match e.kind() {
|
||||||
// Raise to debug_warn if we can find out the result wasn't from cache
|
| ProtoErrorKind::NoRecordsFound { .. } => {
|
||||||
debug!(%host, "No DNS records found: {e}");
|
// Raise to debug_warn if we can find out the result wasn't from cache
|
||||||
Ok(())
|
debug!(%host, "No DNS records found: {e}");
|
||||||
},
|
Ok(())
|
||||||
| ResolveErrorKind::Timeout => {
|
},
|
||||||
Err!(warn!(%host, "DNS {e}"))
|
| ProtoErrorKind::Timeout => {
|
||||||
},
|
Err!(warn!(%host, "DNS {e}"))
|
||||||
| ResolveErrorKind::NoConnections => {
|
},
|
||||||
error!(
|
| ProtoErrorKind::NoConnections => {
|
||||||
"Your DNS server is overloaded and has ran out of connections. It is \
|
error!(
|
||||||
strongly recommended you remediate this issue to ensure proper federation \
|
"Your DNS server is overloaded and has ran out of connections. It is \
|
||||||
connectivity."
|
strongly recommended you remediate this issue to ensure proper \
|
||||||
);
|
federation connectivity."
|
||||||
|
);
|
||||||
|
|
||||||
Err!(error!(%host, "DNS error: {e}"))
|
Err!(error!(%host, "DNS error: {e}"))
|
||||||
|
},
|
||||||
|
| _ => Err!(error!(%host, "DNS error: {e}")),
|
||||||
},
|
},
|
||||||
| _ => Err!(error!(%host, "DNS error: {e}")),
|
| _ => Err!(error!(%host, "DNS error: {e}")),
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,19 +2,19 @@ use std::{net::SocketAddr, sync::Arc, time::Duration};
|
||||||
|
|
||||||
use conduwuit::{Result, Server, err};
|
use conduwuit::{Result, Server, err};
|
||||||
use futures::FutureExt;
|
use futures::FutureExt;
|
||||||
use hickory_resolver::{TokioAsyncResolver, lookup_ip::LookupIp};
|
use hickory_resolver::{TokioResolver, lookup_ip::LookupIp};
|
||||||
use reqwest::dns::{Addrs, Name, Resolve, Resolving};
|
use reqwest::dns::{Addrs, Name, Resolve, Resolving};
|
||||||
|
|
||||||
use super::cache::{Cache, CachedOverride};
|
use super::cache::{Cache, CachedOverride};
|
||||||
|
|
||||||
pub struct Resolver {
|
pub struct Resolver {
|
||||||
pub(crate) resolver: Arc<TokioAsyncResolver>,
|
pub(crate) resolver: Arc<TokioResolver>,
|
||||||
pub(crate) hooked: Arc<Hooked>,
|
pub(crate) hooked: Arc<Hooked>,
|
||||||
server: Arc<Server>,
|
server: Arc<Server>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) struct Hooked {
|
pub(crate) struct Hooked {
|
||||||
resolver: Arc<TokioAsyncResolver>,
|
resolver: Arc<TokioResolver>,
|
||||||
cache: Arc<Cache>,
|
cache: Arc<Cache>,
|
||||||
server: Arc<Server>,
|
server: Arc<Server>,
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ impl Resolver {
|
||||||
let mut ns = sys_conf.clone();
|
let mut ns = sys_conf.clone();
|
||||||
|
|
||||||
if config.query_over_tcp_only {
|
if config.query_over_tcp_only {
|
||||||
ns.protocol = hickory_resolver::config::Protocol::Tcp;
|
ns.protocol = hickory_resolver::proto::xfer::Protocol::Tcp;
|
||||||
}
|
}
|
||||||
|
|
||||||
ns.trust_negative_responses = !config.query_all_nameservers;
|
ns.trust_negative_responses = !config.query_all_nameservers;
|
||||||
|
@ -51,6 +51,7 @@ impl Resolver {
|
||||||
}
|
}
|
||||||
|
|
||||||
opts.cache_size = config.dns_cache_entries as usize;
|
opts.cache_size = config.dns_cache_entries as usize;
|
||||||
|
opts.preserve_intermediates = true;
|
||||||
opts.negative_min_ttl = Some(Duration::from_secs(config.dns_min_ttl_nxdomain));
|
opts.negative_min_ttl = Some(Duration::from_secs(config.dns_min_ttl_nxdomain));
|
||||||
opts.negative_max_ttl = Some(Duration::from_secs(60 * 60 * 24 * 30));
|
opts.negative_max_ttl = Some(Duration::from_secs(60 * 60 * 24 * 30));
|
||||||
opts.positive_min_ttl = Some(Duration::from_secs(config.dns_min_ttl));
|
opts.positive_min_ttl = Some(Duration::from_secs(config.dns_min_ttl));
|
||||||
|
@ -60,8 +61,7 @@ impl Resolver {
|
||||||
opts.try_tcp_on_error = config.dns_tcp_fallback;
|
opts.try_tcp_on_error = config.dns_tcp_fallback;
|
||||||
opts.num_concurrent_reqs = 1;
|
opts.num_concurrent_reqs = 1;
|
||||||
opts.edns0 = true;
|
opts.edns0 = true;
|
||||||
opts.shuffle_dns_servers = true;
|
opts.case_randomization = true;
|
||||||
opts.rotate = true;
|
|
||||||
opts.ip_strategy = match config.ip_lookup_strategy {
|
opts.ip_strategy = match config.ip_lookup_strategy {
|
||||||
| 1 => hickory_resolver::config::LookupIpStrategy::Ipv4Only,
|
| 1 => hickory_resolver::config::LookupIpStrategy::Ipv4Only,
|
||||||
| 2 => hickory_resolver::config::LookupIpStrategy::Ipv6Only,
|
| 2 => hickory_resolver::config::LookupIpStrategy::Ipv6Only,
|
||||||
|
@ -69,9 +69,13 @@ impl Resolver {
|
||||||
| 4 => hickory_resolver::config::LookupIpStrategy::Ipv6thenIpv4,
|
| 4 => hickory_resolver::config::LookupIpStrategy::Ipv6thenIpv4,
|
||||||
| _ => hickory_resolver::config::LookupIpStrategy::Ipv4thenIpv6,
|
| _ => hickory_resolver::config::LookupIpStrategy::Ipv4thenIpv6,
|
||||||
};
|
};
|
||||||
opts.authentic_data = false;
|
|
||||||
|
|
||||||
let resolver = Arc::new(TokioAsyncResolver::tokio(conf, opts));
|
let rt_prov = hickory_resolver::proto::runtime::TokioRuntimeProvider::new();
|
||||||
|
let conn_prov = hickory_resolver::name_server::TokioConnectionProvider::new(rt_prov);
|
||||||
|
let mut builder = TokioResolver::builder_with_config(conf, conn_prov);
|
||||||
|
*builder.options_mut() = opts;
|
||||||
|
let resolver = Arc::new(builder.build());
|
||||||
|
|
||||||
Ok(Arc::new(Self {
|
Ok(Arc::new(Self {
|
||||||
resolver: resolver.clone(),
|
resolver: resolver.clone(),
|
||||||
hooked: Arc::new(Hooked { resolver, cache, server: server.clone() }),
|
hooked: Arc::new(Hooked { resolver, cache, server: server.clone() }),
|
||||||
|
@ -105,7 +109,7 @@ impl Resolve for Hooked {
|
||||||
async fn hooked_resolve(
|
async fn hooked_resolve(
|
||||||
cache: Arc<Cache>,
|
cache: Arc<Cache>,
|
||||||
server: Arc<Server>,
|
server: Arc<Server>,
|
||||||
resolver: Arc<TokioAsyncResolver>,
|
resolver: Arc<TokioResolver>,
|
||||||
name: Name,
|
name: Name,
|
||||||
) -> Result<Addrs, Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<Addrs, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
match cache.get_override(name.as_str()).await {
|
match cache.get_override(name.as_str()).await {
|
||||||
|
@ -129,7 +133,7 @@ async fn hooked_resolve(
|
||||||
|
|
||||||
async fn resolve_to_reqwest(
|
async fn resolve_to_reqwest(
|
||||||
server: Arc<Server>,
|
server: Arc<Server>,
|
||||||
resolver: Arc<TokioAsyncResolver>,
|
resolver: Arc<TokioResolver>,
|
||||||
name: Name,
|
name: Name,
|
||||||
) -> ResolvingResult {
|
) -> ResolvingResult {
|
||||||
use std::{io, io::ErrorKind::Interrupted};
|
use std::{io, io::ErrorKind::Interrupted};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue