减少离线时发包
This commit is contained in:
@@ -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)?;
|
||||
}
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -188,6 +188,7 @@ fn recv_handle(
|
||||
net_packet.buffer(),
|
||||
&dest_ip,
|
||||
current_device.connect_server,
|
||||
current_device.status.online(),
|
||||
) {
|
||||
log::warn!("发送到目标失败:{}", e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user