Skip to content

Commit aa74794

Browse files
committed
Update dependencies and refactor DNS and HTTP handling
- Updated various dependencies in Cargo.toml for improved performance and security. - Refactored DNS resolution logic to use GenericConnector and RDRuntime for better async handling. - Enhanced HTTP client to handle CONNECT requests more efficiently, including improved error handling and response parsing. - Updated local network configuration to use appropriate socket options for TCP and UDP. - Improved GeoIP matching logic to handle country lookups more robustly. - Refactored API server to utilize Axum's latest features, including WebSocket handling and request processing. - Cleaned up schema generation logic for better maintainability and clarity. - Removed deprecated tracing integration with OpenTelemetry.
1 parent 96f86c4 commit aa74794

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1965
-1524
lines changed

Cargo.lock

Lines changed: 1304 additions & 849 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,24 @@ serde = { version = "1.0.228", features = ["derive"] }
3535
rd-interface = { path = "./rd-interface/", version = "0.4" }
3636
rd-std = { path = "./rd-std/", version = "0.1" }
3737
cfg-if = "1.0.4"
38-
reqwest = { version = "0.11.27", features = ["native-tls-vendored", "socks"] }
38+
reqwest = { version = "0.13.1", features = ["native-tls-vendored", "socks"] }
3939
parking_lot = "0.12.5"
4040
uuid = { version = "1.19.0", features = ["v4"] }
4141
fs2 = "0.4.3"
4242
async-stream = "0.3.6"
4343
once_cell = "1.21.3"
4444

45-
axum = { version = "0.6.20", features = ["ws"], optional = true }
45+
axum = { version = "0.8.8", features = ["ws"], optional = true }
4646
serde_urlencoded = { version = "0.7.1", optional = true }
47-
tower-http = { version = "0.4.4", features = [
47+
tower-http = { version = "0.6.8", features = [
4848
"fs",
4949
"cors",
5050
"trace",
5151
], optional = true }
5252
dirs = { version = "6.0.0" }
5353
json-patch = { version = "4.1.0", optional = true }
5454
url = { version = "2.5.8", optional = true, features = ["serde"] }
55-
hyper = { version = "0.14.32", optional = true, features = ["http1", "client"] }
55+
hyper = { version = "1.8.1", optional = true, features = ["http1", "client"] }
5656
percent-encoding = { version = "2.3.2", optional = true }
5757
bytes = { version = "1.11.0", optional = true }
5858

@@ -62,16 +62,12 @@ rpc = { path = "./protocol/rpc", optional = true }
6262
raw = { path = "./protocol/raw", optional = true }
6363
obfs = { path = "./protocol/obfs", optional = true }
6464

65-
console-subscriber = { version = "0.1.10", optional = true }
65+
console-subscriber = { version = "0.5.0", optional = true }
6666

6767
chrono = { version = "0.4.43", optional = true }
68-
tracing-serde = { version = "0.1.3", optional = true }
69-
tracing-opentelemetry = { version = "0.19.0", optional = true }
70-
opentelemetry = { version = "0.19.0", features = ["rt-tokio"], optional = true }
71-
opentelemetry-jaeger = { version = "0.18.0", features = [
72-
"rt-tokio",
73-
"reqwest_collector_client",
74-
], optional = true }
68+
tracing-serde = { version = "0.2.0", optional = true }
69+
tracing-opentelemetry = { version = "0.32.1", optional = true }
70+
opentelemetry = { version = "0.31.0", optional = true }
7571

7672
rhai = { version = "1.24.0", optional = true, features = [
7773
"no_float",
@@ -113,7 +109,6 @@ console = ["console-subscriber", "tokio/tracing"]
113109
telemetry = [
114110
"tracing-opentelemetry",
115111
"opentelemetry",
116-
"opentelemetry-jaeger",
117112
"chrono",
118113
"tracing-serde",
119114
]

ffi/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ tracing-subscriber = { version = "0.3.7", features = [
2424
tracing = "0.1.26"
2525

2626
[build-dependencies]
27-
cbindgen = "0.20.0"
27+
cbindgen = "0.29.2"
2828

2929
[lib]
3030
crate-type = ["cdylib", "staticlib"]

protocol/obfs/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ serde = "1.0.177"
1111
tokio = "1.29.1"
1212
pin-project-lite = "0.2.10"
1313
futures = "0.3.28"
14-
rand = "0.8.5"
15-
base64 = "0.21.2"
14+
rand = "0.9.2"
15+
base64 = "0.22.1"

protocol/obfs/src/http_simple.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use base64::{engine::general_purpose::STANDARD, Engine};
99
use futures::ready;
1010
use pin_project_lite::pin_project;
1111
use rand::prelude::*;
12+
use rand::rng;
1213
use rd_interface::{
1314
async_trait, prelude::*, rd_config, Address, AsyncWrite, ITcpStream, IntoDyn, ReadBuf, Result,
1415
TcpStream, NOT_IMPLEMENTED,
@@ -129,10 +130,10 @@ impl ITcpStream for Connect {
129130
loop {
130131
match &mut self.write {
131132
WriteState::Wait => {
132-
let major = thread_rng().next_u32() % 51;
133-
let minor = thread_rng().next_u32() % 2;
133+
let major = rng().next_u32() % 51;
134+
let minor = rng().next_u32() % 2;
134135

135-
let key_bytes: [u8; 16] = thread_rng().gen();
136+
let key_bytes: [u8; 16] = rng().random();
136137
let key = STANDARD.encode(key_bytes);
137138

138139
let mut cursor = Cursor::new(Vec::<u8>::with_capacity(1024));

protocol/raw/Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,34 @@ rd-std = { path = "../../rd-std/", version = "0.1" }
1010
# rd-interface = "0.3"
1111
serde = "1.0"
1212
tracing = "0.1.26"
13-
tokio-smoltcp = "0.2.4"
13+
tokio-smoltcp = "0.5.2"
1414
tokio = { version = "1.5.0", features = ["rt", "macros", "net"] }
15-
pcap = { version = "0.9.1", optional = true }
15+
pcap = { version = "2.4.0", optional = true }
1616
futures = "0.3"
1717
lru_time_cache = "0.11"
1818
parking_lot = "0.12.1"
1919
parking_lot_core = "0.9.8"
2020

21-
tokio-util = { version = "0.6", features = ["codec"] }
21+
tokio-util = { version = "0.7.18", features = ["codec"] }
2222

2323
[target.'cfg(unix)'.dependencies.tun-crate]
24-
version = "0.5.4"
24+
version = "0.8.5"
2525
package = "tun"
2626
features = ["async"]
2727

2828
[target.'cfg(windows)'.dependencies]
2929
libc = "0.2"
30-
wintun = "0.2"
30+
wintun = "0.5.1"
3131
once_cell = "1.7.2"
3232
# the same as parking_lot_core, should reduce the compile time
33-
windows-sys = { version = "0.48.0", features = [
33+
windows-sys = { version = "0.61.2", features = [
3434
"Win32_NetworkManagement_IpHelper",
3535
"Win32_NetworkManagement_Ndis",
3636
"Win32_Foundation",
3737
] }
3838

3939
[target.'cfg(unix)'.dependencies]
40-
nix = "0.26.2"
40+
nix = "0.31.0"
4141

4242
[features]
4343
default = []

protocol/raw/src/forward/source.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ impl RawUdpSource for Source {
8989
}
9090

9191
/// buf is a ip packet
92-
fn parse_udp(buf: &[u8]) -> smoltcp::Result<(SocketAddr, SocketAddr, Vec<u8>)> {
92+
fn parse_udp(buf: &[u8]) -> smoltcp::wire::Result<(SocketAddr, SocketAddr, Vec<u8>)> {
9393
let ipv4 = Ipv4Packet::new_checked(buf)?;
9494
let udp = UdpPacket::new_checked(ipv4.payload())?;
9595

@@ -111,7 +111,7 @@ fn pack_udp(src: SocketAddr, dst: SocketAddr, payload: &[u8]) -> Option<Vec<u8>>
111111
let ipv4_repr = Ipv4Repr {
112112
src_addr: Ipv4Address::from(*src_v4.ip()),
113113
dst_addr: Ipv4Address::from(*dst_v4.ip()),
114-
protocol: IpProtocol::Udp,
114+
next_header: IpProtocol::Udp,
115115
payload_len: udp_repr.header_len() + payload.len(),
116116
hop_limit: 64,
117117
};

protocol/raw/src/gateway.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ where
162162
}
163163
}
164164

165-
fn correct_arp_request(&self, packet: &mut Vec<u8>) -> smoltcp::Result<()> {
165+
fn correct_arp_request(&self, packet: &mut Vec<u8>) -> smoltcp::wire::Result<()> {
166166
if let Layer::L2 = self.layer {
167167
// SAFETY: we know that the packet is a valid EthernetFrame
168168
let mut frame = EthernetFrame::new_unchecked(packet);
@@ -257,11 +257,11 @@ impl MapTable {
257257
fn set_dst_addr<T: AsRef<[u8]> + AsMut<[u8]>>(
258258
ip: &mut Ipv4Packet<T>,
259259
dst_addr: SocketAddrV4,
260-
) -> smoltcp::Result<Option<(SocketAddrV4, SocketAddrV4)>> {
260+
) -> smoltcp::wire::Result<Option<(SocketAddrV4, SocketAddrV4)>> {
261261
let src_addr = ip.src_addr();
262262
let orig_addr = ip.dst_addr();
263263

264-
let (src_port, orig_port) = match ip.protocol() {
264+
let (src_port, orig_port) = match ip.next_header() {
265265
IpProtocol::Tcp => {
266266
ip.set_dst_addr(dst_addr.ip().to_owned().into());
267267

@@ -282,7 +282,7 @@ fn set_dst_addr<T: AsRef<[u8]> + AsMut<[u8]>>(
282282

283283
fn get_src_addr<T: AsRef<[u8]> + ?Sized>(ip: &Ipv4Packet<&T>) -> Option<SocketAddrV4> {
284284
let src_addr = ip.src_addr();
285-
let port = match ip.protocol() {
285+
let port = match ip.next_header() {
286286
IpProtocol::Tcp => TcpPacket::new_checked(ip.payload()).ok()?.src_port(),
287287
IpProtocol::Udp => UdpPacket::new_checked(ip.payload()).ok()?.src_port(),
288288
_ => return None,
@@ -292,7 +292,7 @@ fn get_src_addr<T: AsRef<[u8]> + ?Sized>(ip: &Ipv4Packet<&T>) -> Option<SocketAd
292292

293293
fn get_dst_addr<T: AsRef<[u8]> + AsMut<[u8]>>(ip: &mut Ipv4Packet<T>) -> Option<SocketAddrV4> {
294294
let dst_addr = ip.dst_addr();
295-
let port = match ip.protocol() {
295+
let port = match ip.next_header() {
296296
IpProtocol::Tcp => TcpPacket::new_checked(ip.payload_mut()).ok()?.dst_port(),
297297
IpProtocol::Udp => UdpPacket::new_checked(ip.payload_mut()).ok()?.dst_port(),
298298
_ => return None,
@@ -303,11 +303,11 @@ fn get_dst_addr<T: AsRef<[u8]> + AsMut<[u8]>>(ip: &mut Ipv4Packet<T>) -> Option<
303303
fn set_src_addr<T: AsRef<[u8]> + AsMut<[u8]>>(
304304
ip: &mut Ipv4Packet<T>,
305305
src_addr_v4: SocketAddrV4,
306-
) -> smoltcp::Result<()> {
306+
) -> smoltcp::wire::Result<()> {
307307
let src_addr = src_addr_v4.ip().to_owned().into();
308308
let dst_addr = ip.dst_addr();
309309
let port = src_addr_v4.port();
310-
if let IpProtocol::Tcp = ip.protocol() {
310+
if let IpProtocol::Tcp = ip.next_header() {
311311
ip.set_src_addr(src_addr);
312312

313313
let mut tcp = TcpPacket::new_checked(ip.payload_mut())?;

0 commit comments

Comments
 (0)