减少离线时发包

This commit is contained in:
lubeilin
2024-03-21 21:25:24 +08:00
parent 9badbe180c
commit 01f6890fd3
5 changed files with 13 additions and 5 deletions
+2 -1
View File
@@ -225,6 +225,7 @@ impl ContextInner {
buf: &[u8],
id: &Ipv4Addr,
server_addr: SocketAddr,
send_default: bool,
) -> io::Result<()> {
if self.packet_loss_rate > 0 {
if rand::thread_rng().gen_ratio(self.packet_loss_rate, PACKET_LOSS_RATE_DENOMINATOR) {
@@ -239,7 +240,7 @@ impl ContextInner {
if e.kind() != io::ErrorKind::NotFound {
log::warn!("{}:{:?}", id, e);
}
if !self.route_table.use_channel_type.is_only_p2p() {
if !self.route_table.use_channel_type.is_only_p2p() && send_default {
//符合条件再发到服务器转发
self.send_default(buf, server_addr)?;
}
+1 -1
View File
@@ -37,7 +37,7 @@ impl Handshake {
pub fn send(&self, context: &Context, secret: bool, addr: SocketAddr) -> io::Result<()> {
let last = self.time.load();
//短时间不重复发送
if last.elapsed() < Duration::from_secs(5) {
if last.elapsed() < Duration::from_secs(3) {
return Ok(());
}
let request_packet = handshake_request_packet(secret)?;
+1 -1
View File
@@ -52,7 +52,7 @@ pub fn addr_request0(
}
}
}
if current_dev.connect_server.is_ipv4() {
if current_dev.connect_server.is_ipv4() && current_dev.status.online() {
// 如果连接的是ipv4服务,则探测公网端口
let gateway_ip = current_dev.virtual_gateway;
let src_ip = current_dev.virtual_ip;
+8 -2
View File
@@ -33,6 +33,7 @@ fn broadcast(
continue;
}
if peer_ips.len() == MAX_COUNT {
relay_count += 1;
break;
}
if route.is_p2p()
@@ -45,7 +46,7 @@ fn broadcast(
relay_count += 1;
}
}
if relay_count == 0 && !peer_ips.is_empty() && peer_ips.len() != MAX_COUNT {
if (relay_count == 0 && !peer_ips.is_empty()) || current_device.status.offline() {
//不需要转发
return Ok(());
}
@@ -143,5 +144,10 @@ pub fn base_handle(
proxy_map.send_handle(&mut ipv4_packet)?;
}
client_cipher.encrypt_ipv4(&mut net_packet)?;
context.send_ipv4_by_id(net_packet.buffer(), &dest_ip, current_device.connect_server)
context.send_ipv4_by_id(
net_packet.buffer(),
&dest_ip,
current_device.connect_server,
current_device.status.online(),
)
}
+1
View File
@@ -188,6 +188,7 @@ fn recv_handle(
net_packet.buffer(),
&dest_ip,
current_device.connect_server,
current_device.status.online(),
) {
log::warn!("发送到目标失败:{}", e);
}