Skip to content

Commit 1441267

Browse files
committed
chore(proxy): split latency_test()
1 parent c0dd4b7 commit 1441267

File tree

1 file changed

+40
-36
lines changed

1 file changed

+40
-36
lines changed

boltconn/src/proxy/mod.rs

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -89,49 +89,23 @@ pub async fn latency_test(
8989
.map_err(|_| RuntimeError::LatencyTest("Failed to resolve test host"))?,
9090
}
9191
.to_owned();
92+
93+
let iface = iface.unwrap_or(dispatcher.get_iface_name());
94+
9295
let mut rng = rand::rngs::SmallRng::seed_from_u64(
9396
SystemTime::now()
9497
.duration_since(SystemTime::UNIX_EPOCH)
9598
.unwrap_or_else(|_| Duration::default())
9699
.as_secs(),
97100
);
98-
let iface = iface.unwrap_or(dispatcher.get_iface_name());
99-
101+
let src_addr = get_random_local_addr(&dst_addr, rng.gen_range(32768..65535));
100102
// create outbound
101-
let creator: Box<dyn Outbound> = match proxy.get_impl().as_ref() {
102-
ProxyImpl::Chain(vec) => {
103-
match dispatcher.create_chain(
104-
&proxy.get_name(),
105-
vec,
106-
get_random_local_addr(&dst_addr, rng.gen_range(32768..65535)),
107-
&dst_addr,
108-
iface.as_str(),
109-
) {
110-
Ok(o) => Box::new(o),
111-
Err(_) => {
112-
proxy.set_latency(Latency::Failed);
113-
return Err(RuntimeError::LatencyTest("Create outbound failed"));
114-
}
115-
}
116-
}
117-
proxy_config => {
118-
let creator = match dispatcher.build_normal_outbound(
119-
&proxy.get_name(),
120-
iface.as_str(),
121-
proxy_config,
122-
get_random_local_addr(&dst_addr, rng.gen_range(32768..65535)),
123-
&dst_addr,
124-
None,
125-
) {
126-
Ok((o, _)) => o,
127-
Err(_) => {
128-
proxy.set_latency(Latency::Failed);
129-
return Err(RuntimeError::LatencyTest("Create outbound failed"));
130-
}
131-
};
132-
creator
133-
}
134-
};
103+
let creator = construct_outbound(dispatcher, &proxy, src_addr, &dst_addr, &iface)
104+
.await
105+
.ok_or_else(|| {
106+
proxy.set_latency(Latency::Failed);
107+
RuntimeError::LatencyTest("Create outbound failed")
108+
})?;
135109

136110
let proxy_handle = creator.spawn_tcp(inbound, ConnAbortHandle::placeholder());
137111

@@ -171,3 +145,33 @@ pub async fn latency_test(
171145
});
172146
Ok(timeout_future)
173147
}
148+
149+
async fn construct_outbound(
150+
dispatcher: &Dispatcher,
151+
proxy: &Proxy,
152+
src_addr: SocketAddr,
153+
dst_addr: &NetworkAddr,
154+
iface: &str,
155+
) -> Option<Box<dyn Outbound>> {
156+
match proxy.get_impl().as_ref() {
157+
ProxyImpl::Chain(vec) => {
158+
match dispatcher.create_chain(&proxy.get_name(), vec, src_addr, dst_addr, iface) {
159+
Ok(o) => Some(Box::new(o)),
160+
Err(_) => None,
161+
}
162+
}
163+
proxy_config => {
164+
match dispatcher.build_normal_outbound(
165+
&proxy.get_name(),
166+
iface,
167+
proxy_config,
168+
src_addr,
169+
dst_addr,
170+
None,
171+
) {
172+
Ok((o, _)) => Some(o),
173+
Err(_) => None,
174+
}
175+
}
176+
}
177+
}

0 commit comments

Comments
 (0)