From 304c1819cd680b00461b46dddd641c9be48d87e5 Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Sun, 15 Oct 2023 10:11:10 +0800 Subject: [PATCH] fix(dns): dns-over-h3 requires QuicLocalAddr --- .../src/dns_resolver/hickory_dns_resolver.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/shadowsocks/src/dns_resolver/hickory_dns_resolver.rs b/crates/shadowsocks/src/dns_resolver/hickory_dns_resolver.rs index bd417e2a..7af31544 100644 --- a/crates/shadowsocks/src/dns_resolver/hickory_dns_resolver.rs +++ b/crates/shadowsocks/src/dns_resolver/hickory_dns_resolver.rs @@ -15,9 +15,12 @@ use hickory_resolver::{ config::{LookupIpStrategy, ResolverConfig, ResolverOpts}, error::ResolveResult, name_server::{GenericConnector, RuntimeProvider}, - proto::{iocompat::AsyncIoTokioAsStd, udp::DnsUdpSocket, TokioTime}, - AsyncResolver, - TokioHandle, + proto::{ + iocompat::AsyncIoTokioAsStd, + udp::{DnsUdpSocket, QuicLocalAddr}, + TokioTime, + }, + AsyncResolver, TokioHandle, }; use log::trace; use tokio::{io::ReadBuf, net::UdpSocket}; @@ -59,6 +62,12 @@ impl DnsUdpSocket for ShadowUdpSocket { } } +impl QuicLocalAddr for ShadowUdpSocket { + fn local_addr(&self) -> io::Result { + self.deref().local_addr() + } +} + impl RuntimeProvider for ShadowDnsRuntimeProvider { type Handle = TokioHandle; type Tcp = AsyncIoTokioAsStd;