Skip to content

Commit ec46421

Browse files
committed
vey-proxy: replace UdpRelayTaskNotes with EgressNotes
1 parent a516f0b commit ec46421

51 files changed

Lines changed: 232 additions & 214 deletions

File tree

Some content is hidden

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

vey-proxy/src/escape/comply_audit/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ use crate::module::tcp_connect::{
3131
TcpConnectError, TcpConnectResult, TcpConnectTaskConf, TlsConnectTaskConf,
3232
};
3333
use crate::module::udp_connect::{UdpConnectResult, UdpConnectTaskConf, UdpConnectTaskNotes};
34-
use crate::module::udp_relay::{
35-
ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf, UdpRelayTaskNotes,
36-
};
34+
use crate::module::udp_relay::{ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf};
3735
use crate::serve::ServerTaskNotes;
3836

3937
pub(super) struct ComplyAuditEscaper {
@@ -148,14 +146,14 @@ impl Escaper for ComplyAuditEscaper {
148146
async fn udp_setup_relay(
149147
&self,
150148
task_conf: &UdpRelayTaskConf<'_>,
151-
udp_notes: &mut UdpRelayTaskNotes,
149+
egress_notes: &mut EgressNotes,
152150
task_notes: &ServerTaskNotes,
153151
task_stats: ArcUdpRelayTaskRemoteStats,
154152
) -> UdpRelaySetupResult {
155-
udp_notes.escaper.clone_from(&self.config.name);
153+
egress_notes.escaper.clone_from(&self.config.name);
156154
self.stats.add_request_passed();
157155
self.next
158-
.udp_setup_relay(task_conf, udp_notes, task_notes, task_stats)
156+
.udp_setup_relay(task_conf, egress_notes, task_notes, task_stats)
159157
.await
160158
}
161159

vey-proxy/src/escape/comply_context/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ use crate::module::tcp_connect::{
3131
TcpConnectError, TcpConnectResult, TcpConnectTaskConf, TlsConnectTaskConf,
3232
};
3333
use crate::module::udp_connect::{UdpConnectResult, UdpConnectTaskConf, UdpConnectTaskNotes};
34-
use crate::module::udp_relay::{
35-
ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf, UdpRelayTaskNotes,
36-
};
34+
use crate::module::udp_relay::{ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf};
3735
use crate::serve::ServerTaskNotes;
3836

3937
pub(super) struct ComplyContextEscaper {
@@ -147,15 +145,15 @@ impl Escaper for ComplyContextEscaper {
147145
async fn udp_setup_relay(
148146
&self,
149147
task_conf: &UdpRelayTaskConf<'_>,
150-
udp_notes: &mut UdpRelayTaskNotes,
148+
egress_notes: &mut EgressNotes,
151149
task_notes: &ServerTaskNotes,
152150
task_stats: ArcUdpRelayTaskRemoteStats,
153151
) -> UdpRelaySetupResult {
154-
udp_notes.escaper.clone_from(&self.config.name);
152+
egress_notes.escaper.clone_from(&self.config.name);
155153
self._update_egress_path(task_notes);
156154
self.stats.add_request_passed();
157155
self.next
158-
.udp_setup_relay(task_conf, udp_notes, task_notes, task_stats)
156+
.udp_setup_relay(task_conf, egress_notes, task_notes, task_stats)
159157
.await
160158
}
161159

vey-proxy/src/escape/direct_fixed/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ use crate::module::tcp_connect::{
4444
TcpConnectError, TcpConnectResult, TcpConnectTaskConf, TlsConnectTaskConf,
4545
};
4646
use crate::module::udp_connect::{UdpConnectResult, UdpConnectTaskConf, UdpConnectTaskNotes};
47-
use crate::module::udp_relay::{
48-
ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf, UdpRelayTaskNotes,
49-
};
47+
use crate::module::udp_relay::{ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf};
5048
use crate::resolve::{ArcIntegratedResolverHandle, HappyEyeballsResolveJob};
5149
use crate::serve::ServerTaskNotes;
5250

@@ -372,13 +370,13 @@ impl Escaper for DirectFixedEscaper {
372370
async fn udp_setup_relay(
373371
&self,
374372
task_conf: &UdpRelayTaskConf<'_>,
375-
udp_notes: &mut UdpRelayTaskNotes,
373+
egress_notes: &mut EgressNotes,
376374
task_notes: &ServerTaskNotes,
377375
task_stats: ArcUdpRelayTaskRemoteStats,
378376
) -> UdpRelaySetupResult {
379377
self.stats.interface.add_udp_relay_session_attempted();
380-
udp_notes.escaper.clone_from(&self.config.name);
381-
self.udp_setup_relay(task_conf, task_notes, task_stats)
378+
egress_notes.escaper.clone_from(&self.config.name);
379+
self.udp_setup_relay(task_conf, egress_notes, task_notes, task_stats)
382380
.await
383381
}
384382

vey-proxy/src/escape/direct_fixed/tcp_connect/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ impl DirectFixedEscaper {
354354
egress_notes: &mut EgressNotes,
355355
task_notes: &ServerTaskNotes,
356356
) -> Result<TcpStream, UnderlyingTcpConnectError> {
357-
egress_notes.socket_type = Some(EgressSocketType::Tcp);
357+
egress_notes.socket_type = Some(EgressSocketType::Direct);
358358

359359
let mut config = DirectTcpConnectConfig {
360360
connect: self.config.general.tcp_connect,
@@ -399,7 +399,7 @@ impl DirectFixedEscaper {
399399
old_egress_notes: &EgressNotes,
400400
task_notes: &ServerTaskNotes,
401401
) -> Result<TcpStream, UnderlyingTcpConnectError> {
402-
new_egress_notes.socket_type = Some(EgressSocketType::Tcp);
402+
new_egress_notes.socket_type = Some(EgressSocketType::Direct);
403403
new_egress_notes.bind = old_egress_notes.bind;
404404
#[cfg(target_os = "linux")]
405405
if let BindAddr::Foreign(addr) = new_egress_notes.bind {

vey-proxy/src/escape/direct_fixed/udp_relay/mod.rs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use vey_socket::util::AddressFamily;
1313
use tokio::net::UdpSocket;
1414

1515
use super::{DirectFixedEscaper, DirectFixedEscaperStats};
16+
use crate::escape::{EgressNotes, EgressSocketType};
1617
use crate::module::udp_connect::UdpConnectError;
1718
use crate::module::udp_relay::{
1819
ArcUdpRelayTaskRemoteStats, UdpRelayRemoteWrapperStats, UdpRelaySetupResult, UdpRelayTaskConf,
@@ -29,9 +30,12 @@ impl DirectFixedEscaper {
2930
pub(super) async fn udp_setup_relay(
3031
&self,
3132
task_conf: &UdpRelayTaskConf<'_>,
33+
egress_notes: &mut EgressNotes,
3234
task_notes: &ServerTaskNotes,
3335
task_stats: ArcUdpRelayTaskRemoteStats,
3436
) -> UdpRelaySetupResult {
37+
egress_notes.socket_type = Some(EgressSocketType::Direct);
38+
3539
let mut wrapper_stats = UdpRelayRemoteWrapperStats::new(self.stats.clone(), task_stats);
3640
wrapper_stats.push_user_io_stats(self.fetch_user_upstream_io_stats(task_notes));
3741
let wrapper_stats = Arc::new(wrapper_stats);
@@ -49,17 +53,29 @@ impl DirectFixedEscaper {
4953
);
5054

5155
if !self.config.no_ipv4 {
52-
let (bind, r, w) =
53-
self.get_relay_socket(AddressFamily::Ipv4, task_conf, task_notes, &wrapper_stats)?;
56+
let (bind, r, w) = self.get_relay_socket(
57+
AddressFamily::Ipv4,
58+
task_conf,
59+
egress_notes,
60+
task_notes,
61+
&wrapper_stats,
62+
)?;
5463
recv.enable_v4(r, bind);
5564
send.enable_v4(w, bind);
65+
egress_notes.udp_relay_v4.local = Some(bind);
5666
}
5767

5868
if !self.config.no_ipv6 {
59-
let (bind, r, w) =
60-
self.get_relay_socket(AddressFamily::Ipv6, task_conf, task_notes, &wrapper_stats)?;
69+
let (bind, r, w) = self.get_relay_socket(
70+
AddressFamily::Ipv6,
71+
task_conf,
72+
egress_notes,
73+
task_notes,
74+
&wrapper_stats,
75+
)?;
6176
recv.enable_v6(r, bind);
6277
send.enable_v6(w, bind);
78+
egress_notes.udp_relay_v6.local = Some(bind);
6379
}
6480

6581
Ok((Box::new(recv), Box::new(send)))
@@ -69,6 +85,7 @@ impl DirectFixedEscaper {
6985
&self,
7086
family: AddressFamily,
7187
task_conf: &UdpRelayTaskConf<'_>,
88+
egress_notes: &mut EgressNotes,
7289
task_notes: &ServerTaskNotes,
7390
stats: &Arc<UdpRelayRemoteWrapperStats>,
7491
) -> Result<
@@ -80,6 +97,10 @@ impl DirectFixedEscaper {
8097
UdpConnectError,
8198
> {
8299
let bind = self.get_bind_random(family, task_notes);
100+
match family {
101+
AddressFamily::Ipv4 => egress_notes.udp_relay_v4.bind = Some(bind),
102+
AddressFamily::Ipv6 => egress_notes.udp_relay_v6.bind = Some(bind),
103+
}
83104

84105
let misc_opts = if let Some(user_ctx) = task_notes.user_ctx() {
85106
user_ctx

vey-proxy/src/escape/direct_float/mod.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ use crate::module::tcp_connect::{
4444
TcpConnectError, TcpConnectResult, TcpConnectTaskConf, TlsConnectTaskConf,
4545
};
4646
use crate::module::udp_connect::{UdpConnectResult, UdpConnectTaskConf, UdpConnectTaskNotes};
47-
use crate::module::udp_relay::{
48-
ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf, UdpRelayTaskNotes,
49-
};
47+
use crate::module::udp_relay::{ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf};
5048
use crate::resolve::{ArcIntegratedResolverHandle, HappyEyeballsResolveJob};
5149
use crate::serve::ServerTaskNotes;
5250

@@ -408,13 +406,13 @@ impl Escaper for DirectFloatEscaper {
408406
async fn udp_setup_relay(
409407
&self,
410408
task_conf: &UdpRelayTaskConf<'_>,
411-
udp_notes: &mut UdpRelayTaskNotes,
409+
egress_notes: &mut EgressNotes,
412410
task_notes: &ServerTaskNotes,
413411
task_stats: ArcUdpRelayTaskRemoteStats,
414412
) -> UdpRelaySetupResult {
415413
self.stats.interface.add_udp_relay_session_attempted();
416-
udp_notes.escaper.clone_from(&self.config.name);
417-
self.udp_setup_relay(task_conf, task_notes, task_stats)
414+
egress_notes.escaper.clone_from(&self.config.name);
415+
self.udp_setup_relay(task_conf, egress_notes, task_notes, task_stats)
418416
.await
419417
}
420418

vey-proxy/src/escape/direct_float/tcp_connect/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ impl DirectFloatEscaper {
341341
egress_notes: &mut EgressNotes,
342342
task_notes: &ServerTaskNotes,
343343
) -> Result<(TcpStream, DirectFloatBindIp), UnderlyingTcpConnectError> {
344-
egress_notes.socket_type = Some(EgressSocketType::Tcp);
344+
egress_notes.socket_type = Some(EgressSocketType::Direct);
345345

346346
let mut config = DirectTcpConnectConfig {
347347
connect: self.config.general.tcp_connect,
@@ -386,7 +386,7 @@ impl DirectFloatEscaper {
386386
old_egress_notes: &EgressNotes,
387387
task_notes: &ServerTaskNotes,
388388
) -> Result<(TcpStream, DirectFloatBindIp), UnderlyingTcpConnectError> {
389-
new_egress_notes.socket_type = Some(EgressSocketType::Tcp);
389+
new_egress_notes.socket_type = Some(EgressSocketType::Direct);
390390
new_egress_notes.bind = old_egress_notes.bind;
391391

392392
let mut config = DirectTcpConnectConfig {

vey-proxy/src/escape/direct_float/udp_relay/mod.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use vey_socket::util::AddressFamily;
1616

1717
use super::DirectFloatEscaper;
1818
use crate::escape::direct_fixed::udp_relay::{DirectUdpRelayRemoteRecv, DirectUdpRelayRemoteSend};
19+
use crate::escape::{EgressNotes, EgressSocketType};
1920
use crate::module::udp_connect::UdpConnectError;
2021
use crate::module::udp_relay::{
2122
ArcUdpRelayTaskRemoteStats, UdpRelayRemoteWrapperStats, UdpRelaySetupResult, UdpRelayTaskConf,
@@ -26,9 +27,12 @@ impl DirectFloatEscaper {
2627
pub(super) async fn udp_setup_relay(
2728
&self,
2829
task_conf: &UdpRelayTaskConf<'_>,
30+
egress_notes: &mut EgressNotes,
2931
task_notes: &ServerTaskNotes,
3032
task_stats: ArcUdpRelayTaskRemoteStats,
3133
) -> UdpRelaySetupResult {
34+
egress_notes.socket_type = Some(EgressSocketType::Direct);
35+
3236
let mut wrapper_stats = UdpRelayRemoteWrapperStats::new(self.stats.clone(), task_stats);
3337
wrapper_stats.push_user_io_stats(self.fetch_user_upstream_io_stats(task_notes));
3438
let wrapper_stats = Arc::new(wrapper_stats);
@@ -46,19 +50,31 @@ impl DirectFloatEscaper {
4650
);
4751

4852
if !self.config.no_ipv4
49-
&& let Ok((bind, r, w)) =
50-
self.get_relay_socket(AddressFamily::Ipv4, task_conf, task_notes, &wrapper_stats)
53+
&& let Ok((bind, r, w)) = self.get_relay_socket(
54+
AddressFamily::Ipv4,
55+
task_conf,
56+
egress_notes,
57+
task_notes,
58+
&wrapper_stats,
59+
)
5160
{
5261
recv.enable_v4(r, bind);
5362
send.enable_v4(w, bind);
63+
egress_notes.udp_relay_v4.local = Some(bind);
5464
}
5565

5666
if !self.config.no_ipv6
57-
&& let Ok((bind, r, w)) =
58-
self.get_relay_socket(AddressFamily::Ipv6, task_conf, task_notes, &wrapper_stats)
67+
&& let Ok((bind, r, w)) = self.get_relay_socket(
68+
AddressFamily::Ipv6,
69+
task_conf,
70+
egress_notes,
71+
task_notes,
72+
&wrapper_stats,
73+
)
5974
{
6075
recv.enable_v6(r, bind);
6176
send.enable_v6(w, bind);
77+
egress_notes.udp_relay_v6.local = Some(bind);
6278
}
6379

6480
if !send.usable() {
@@ -74,6 +90,7 @@ impl DirectFloatEscaper {
7490
&self,
7591
family: AddressFamily,
7692
task_conf: &UdpRelayTaskConf<'_>,
93+
egress_notes: &mut EgressNotes,
7794
task_notes: &ServerTaskNotes,
7895
stats: &Arc<UdpRelayRemoteWrapperStats>,
7996
) -> Result<
@@ -87,6 +104,19 @@ impl DirectFloatEscaper {
87104
let bind = self
88105
.select_bind(family, task_notes)
89106
.map_err(UdpConnectError::EscaperNotUsable)?;
107+
let bind_addr = BindAddr::Ip(bind.ip);
108+
match family {
109+
AddressFamily::Ipv4 => {
110+
egress_notes.egress = Some(bind.egress_info);
111+
egress_notes.expire = bind.expire_datetime;
112+
egress_notes.udp_relay_v4.bind = Some(bind_addr);
113+
}
114+
AddressFamily::Ipv6 => {
115+
egress_notes.egress = Some(bind.egress_info);
116+
egress_notes.expire = bind.expire_datetime;
117+
egress_notes.udp_relay_v6.bind = Some(bind_addr);
118+
}
119+
}
90120

91121
let misc_opts = if let Some(user_ctx) = task_notes.user_ctx() {
92122
user_ctx
@@ -96,7 +126,7 @@ impl DirectFloatEscaper {
96126
self.config.udp_misc_opts
97127
};
98128

99-
let (socket, bind_addr) = vey_socket::udp::new_std_bind_relay(
129+
let (socket, local_addr) = vey_socket::udp::new_std_bind_relay(
100130
&BindAddr::Ip(bind.ip),
101131
family,
102132
task_conf.sock_buf,
@@ -121,6 +151,6 @@ impl DirectFloatEscaper {
121151
stats.clone(),
122152
);
123153

124-
Ok((bind_addr, recv, send))
154+
Ok((local_addr, recv, send))
125155
}
126156
}

vey-proxy/src/escape/divert_tcp/mod.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ use crate::module::tcp_connect::{
4343
use crate::module::udp_connect::{
4444
UdpConnectError, UdpConnectResult, UdpConnectTaskConf, UdpConnectTaskNotes,
4545
};
46-
use crate::module::udp_relay::{
47-
ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf, UdpRelayTaskNotes,
48-
};
46+
use crate::module::udp_relay::{ArcUdpRelayTaskRemoteStats, UdpRelaySetupResult, UdpRelayTaskConf};
4947
use crate::resolve::{ArcIntegratedResolverHandle, HappyEyeballsResolveJob};
5048
use crate::serve::ServerTaskNotes;
5149

@@ -243,12 +241,12 @@ impl Escaper for DivertTcpEscaper {
243241
async fn udp_setup_relay(
244242
&self,
245243
_task_conf: &UdpRelayTaskConf<'_>,
246-
udp_notes: &mut UdpRelayTaskNotes,
244+
egress_notes: &mut EgressNotes,
247245
_task_notes: &ServerTaskNotes,
248246
_task_stats: ArcUdpRelayTaskRemoteStats,
249247
) -> UdpRelaySetupResult {
250248
self.stats.interface.add_udp_relay_session_attempted();
251-
udp_notes.escaper.clone_from(&self.config.name);
249+
egress_notes.escaper.clone_from(&self.config.name);
252250
Err(UdpConnectError::MethodUnavailable)
253251
}
254252

vey-proxy/src/escape/divert_tcp/tcp_connect/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ impl DivertTcpEscaper {
311311
egress_notes: &mut EgressNotes,
312312
task_notes: &ServerTaskNotes,
313313
) -> Result<TcpStream, UnderlyingTcpConnectError> {
314-
egress_notes.socket_type = Some(EgressSocketType::Tcp);
314+
egress_notes.socket_type = Some(EgressSocketType::Direct);
315315

316316
let peer_proxy = self.get_next_proxy(task_notes, task_conf.upstream.host());
317317

0 commit comments

Comments
 (0)