From 037b634ada1300ae21eedace3fff502c90bcf757 Mon Sep 17 00:00:00 2001 From: ssrlive <30760636+ssrlive@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:34:10 +0800 Subject: [PATCH] Upgrade dependencies and fix hickory-proto 0.26 API usage --- Cargo.toml | 62 +++++++++++++++++++++++++++--------------------------- src/dns.rs | 21 +++++++++--------- 2 files changed, 42 insertions(+), 41 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3532f51..cbc2cc1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,57 +27,57 @@ default = ["udpgw"] udpgw = [] [dependencies] -async-trait = "0.1" -base64easy = "0.1" -chrono = "0.4" -clap = { version = "4", features = ["derive", "wrap_help", "color"] } -ctrlc2 = { version = "3.6.5", features = ["async", "termination"] } -digest_auth = "0.3" -dotenvy = "0.15" -env_logger = "0.11" -hashlink = "0.11" -hickory-proto = "0.25" -httparse = "1" -ipstack = { version = "1" } -log = { version = "0.4", features = ["std"] } -mimalloc = { version = "0.1", default-features = false, optional = true } -percent-encoding = "2" -serde = { version = "1", features = ["derive"] } +async-trait = "0.1.89" +base64easy = "0.1.7" +chrono = "0.4.44" +clap = { version = "4.6.1", features = ["derive", "wrap_help", "color"] } +ctrlc2 = { version = "3.7.3", features = ["async", "termination"] } +digest_auth = "0.3.1" +dotenvy = "0.15.7" +env_logger = "0.11.10" +hashlink = "0.11.0" +hickory-proto = "0.26.0" +httparse = "1.10.1" +ipstack = { version = "1.0.0" } +log = { version = "0.4.29", features = ["std"] } +mimalloc = { version = "0.1.50", default-features = false, optional = true } +percent-encoding = "2.3.2" +serde = { version = "1.0.228", features = ["derive"] } shlex = "1.3.0" -socks5-impl = { version = "0.8", default-features = false, features = [ +socks5-impl = { version = "0.8.2", default-features = false, features = [ "tokio", "serde", ] } -thiserror = "2" -tokio = { version = "1", features = ["full"] } -tokio-util = "0.7" -tproxy-config = { version = "^7.0.2", default-features = false } -tun = { version = "0.8", features = ["async"] } +thiserror = "2.0.18" +tokio = { version = "1.52.1", features = ["full"] } +tokio-util = "0.7.18" +tproxy-config = { version = "^7.0.7", default-features = false } +tun = { version = "0.8.7", features = ["async"] } udp-stream = { version = "0.0.12", default-features = false } -unicase = "2" -url = "2" +unicase = "2.9.0" +url = "2.5.8" [target.'cfg(target_os="android")'.dependencies] -android_logger = "0.15" -jni = { version = "0.22.3", default-features = false } +android_logger = "0.15.1" +jni = { version = "0.22.4", default-features = false } [target.'cfg(target_os="linux")'.dependencies] bincode = "2" [target.'cfg(target_os="windows")'.dependencies] -windows-service = "0.8" +windows-service = "0.8.0" [target.'cfg(unix)'.dependencies] -daemonize = "0.5" -nix = { version = "0.31", default-features = false, features = [ +daemonize = "0.5.0" +nix = { version = "0.31.2", default-features = false, features = [ "fs", "socket", "uio", ] } [build-dependencies] -chrono = "0.4" -serde_json = "1" +chrono = "0.4.44" +serde_json = "1.0.149" # [profile.release] # strip = "symbols" diff --git a/src/dns.rs b/src/dns.rs index ed36f5f..f14a430 100644 --- a/src/dns.rs +++ b/src/dns.rs @@ -8,30 +8,31 @@ use hickory_proto::{ use std::{net::IpAddr, str::FromStr}; pub fn build_dns_response(mut request: Message, domain: &str, ip: IpAddr, ttl: u32) -> Result { + let name = Name::from_str(domain).map_err(|e| e.to_string())?; let record = match ip { - IpAddr::V4(ip) => Record::from_rdata(Name::from_str(domain)?, ttl, RData::A(A(ip))), - IpAddr::V6(ip) => Record::from_rdata(Name::from_str(domain)?, ttl, RData::AAAA(AAAA(ip))), + IpAddr::V4(ip) => Record::from_rdata(name.clone(), ttl, RData::A(A(ip))), + IpAddr::V6(ip) => Record::from_rdata(name, ttl, RData::AAAA(AAAA(ip))), }; // We must indicate that this message is a response. Otherwise, implementations may not // recognize it. - request.set_message_type(MessageType::Response); + request.metadata.message_type = MessageType::Response; request.add_answer(record); Ok(request) } pub fn remove_ipv6_entries(message: &mut Message) { - message.answers_mut().retain(|answer| !matches!(answer.data(), RData::AAAA(_))); + message.answers.retain(|answer| !matches!(&answer.data, RData::AAAA(_))); } pub fn extract_ipaddr_from_dns_message(message: &Message) -> Result { - if message.response_code() != ResponseCode::NoError { - return Err(format!("{:?}", message.response_code())); + if message.metadata.response_code != ResponseCode::NoError { + return Err(format!("{:?}", message.metadata.response_code)); } let mut cname = None; - for answer in message.answers() { - match answer.data() { + for answer in &message.answers { + match &answer.data { RData::A(addr) => { return Ok(IpAddr::V4((*addr).into())); } @@ -47,11 +48,11 @@ pub fn extract_ipaddr_from_dns_message(message: &Message) -> Result Result { - let query = message.queries().first().ok_or("DnsRequest no query body")?; + let query = message.queries.first().ok_or("DnsRequest no query body")?; let name = query.name().to_string(); Ok(name) }