fmt
This commit is contained in:
+9
-11
@@ -147,24 +147,22 @@ impl Config {
|
|||||||
&LocalInterface::default(),
|
&LocalInterface::default(),
|
||||||
);
|
);
|
||||||
match address_result {
|
match address_result {
|
||||||
Ok(address) => {
|
Ok(address) => match address_choose(address) {
|
||||||
match address_choose(address) {
|
Ok(resolved_address) => {
|
||||||
Ok(resolved_address) => {
|
server_address = resolved_address;
|
||||||
server_address = resolved_address;
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
log::error!("Failed to choose address: {}", e);
|
|
||||||
println!("Failed to choose address: {}", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
Err(e) => {
|
||||||
|
log::error!("Failed to choose address: {}", e);
|
||||||
|
println!("Failed to choose address: {}", e);
|
||||||
|
}
|
||||||
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("DNS query failed: {}", e);
|
log::error!("DNS query failed: {}", e);
|
||||||
println!("DNS query failed: {}", e);
|
println!("DNS query failed: {}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "port_mapping")]
|
#[cfg(feature = "port_mapping")]
|
||||||
let port_mapping_list = crate::port_mapping::convert(port_mapping_list)?;
|
let port_mapping_list = crate::port_mapping::convert(port_mapping_list)?;
|
||||||
|
|
||||||
|
|||||||
@@ -390,11 +390,12 @@ impl<Call: VntCallback, Device: DeviceWrite> ServerPacketHandler<Call, Device> {
|
|||||||
"device_fd == 0".into(),
|
"device_fd == 0".into(),
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
let device = unsafe { tun_rs::SyncDevice::from_fd(device_fd as _) };
|
let device =
|
||||||
if let Err(e) = self.tun_device_helper.start(
|
unsafe { tun_rs::SyncDevice::from_fd(device_fd as _) };
|
||||||
Arc::new(device),
|
if let Err(e) = self
|
||||||
self.config_info.allow_wire_guard,
|
.tun_device_helper
|
||||||
) {
|
.start(Arc::new(device), self.config_info.allow_wire_guard)
|
||||||
|
{
|
||||||
self.callback.error(ErrorInfo::new_msg(
|
self.callback.error(ErrorInfo::new_msg(
|
||||||
ErrorType::FailedToCrateDevice,
|
ErrorType::FailedToCrateDevice,
|
||||||
format!("{:?}", e),
|
format!("{:?}", e),
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
|
use crate::channel::socket::LocalInterface;
|
||||||
|
use anyhow::Context;
|
||||||
|
use dns_parser::{Builder, Packet, QueryClass, QueryType, RData, ResponseCode};
|
||||||
|
use http_req::request::{RedirectPolicy, Request};
|
||||||
|
use http_req::uri::Uri;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs, UdpSocket};
|
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs, UdpSocket};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, thread};
|
use std::{io, thread};
|
||||||
use http_req::request::{Request, RedirectPolicy};
|
|
||||||
use http_req::uri::Uri;
|
|
||||||
use crate::channel::socket::LocalInterface;
|
|
||||||
use anyhow::Context;
|
|
||||||
use dns_parser::{Builder, Packet, QueryClass, QueryType, RData, ResponseCode};
|
|
||||||
|
|
||||||
thread_local! {
|
thread_local! {
|
||||||
static HISTORY: RefCell<HashMap<SocketAddr,usize>> = RefCell::new(HashMap::new());
|
static HISTORY: RefCell<HashMap<SocketAddr,usize>> = RefCell::new(HashMap::new());
|
||||||
@@ -97,7 +97,6 @@ pub fn dns_query_all(
|
|||||||
// 执行重定向检查
|
// 执行重定向检查
|
||||||
if let Some(stripped) = redirect_domain {
|
if let Some(stripped) = redirect_domain {
|
||||||
if let Some(redirected_url) = check_for_redirect(&stripped)? {
|
if let Some(redirected_url) = check_for_redirect(&stripped)? {
|
||||||
|
|
||||||
// 去掉 URL 开头的协议部分
|
// 去掉 URL 开头的协议部分
|
||||||
let final_domain = remove_http_prefix(&redirected_url);
|
let final_domain = remove_http_prefix(&redirected_url);
|
||||||
println!("Server Address: {}", final_domain);
|
println!("Server Address: {}", final_domain);
|
||||||
@@ -214,8 +213,8 @@ fn parse_host_port(addr: &str) -> bool {
|
|||||||
// 处理 IPv6 地址(格式为 [::1]:8080)
|
// 处理 IPv6 地址(格式为 [::1]:8080)
|
||||||
if addr.starts_with('[') {
|
if addr.starts_with('[') {
|
||||||
if let Some(idx) = addr.rfind(']') {
|
if let Some(idx) = addr.rfind(']') {
|
||||||
if let Some(port_idx) = addr[idx+1..].find(':') {
|
if let Some(port_idx) = addr[idx + 1..].find(':') {
|
||||||
let port = &addr[idx+1+port_idx+1..]; // 提取端口部分
|
let port = &addr[idx + 1 + port_idx + 1..]; // 提取端口部分
|
||||||
return !port.is_empty() && port.chars().all(|c| c.is_numeric());
|
return !port.is_empty() && port.chars().all(|c| c.is_numeric());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -248,9 +247,7 @@ fn check_for_redirect(domain: &String) -> anyhow::Result<Option<String>> {
|
|||||||
|
|
||||||
// 解析 URL
|
// 解析 URL
|
||||||
let uri = match Uri::try_from(url.as_str()) {
|
let uri = match Uri::try_from(url.as_str()) {
|
||||||
Ok(u) => {
|
Ok(u) => u,
|
||||||
u
|
|
||||||
}
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
println!("解析地址失败: {}", e);
|
println!("解析地址失败: {}", e);
|
||||||
return Ok(last_redirect_url);
|
return Ok(last_redirect_url);
|
||||||
@@ -288,7 +285,6 @@ fn check_for_redirect(domain: &String) -> anyhow::Result<Option<String>> {
|
|||||||
return Ok(last_redirect_url);
|
return Ok(last_redirect_url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理 200 响应
|
// 处理 200 响应
|
||||||
else if response.status_code().is_success() {
|
else if response.status_code().is_success() {
|
||||||
for line in body_str.lines() {
|
for line in body_str.lines() {
|
||||||
|
|||||||
Reference in New Issue
Block a user