减少离线时发包
This commit is contained in:
@@ -225,6 +225,7 @@ impl ContextInner {
|
|||||||
buf: &[u8],
|
buf: &[u8],
|
||||||
id: &Ipv4Addr,
|
id: &Ipv4Addr,
|
||||||
server_addr: SocketAddr,
|
server_addr: SocketAddr,
|
||||||
|
send_default: bool,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
if self.packet_loss_rate > 0 {
|
if self.packet_loss_rate > 0 {
|
||||||
if rand::thread_rng().gen_ratio(self.packet_loss_rate, PACKET_LOSS_RATE_DENOMINATOR) {
|
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 {
|
if e.kind() != io::ErrorKind::NotFound {
|
||||||
log::warn!("{}:{:?}", id, e);
|
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)?;
|
self.send_default(buf, server_addr)?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ impl Handshake {
|
|||||||
pub fn send(&self, context: &Context, secret: bool, addr: SocketAddr) -> io::Result<()> {
|
pub fn send(&self, context: &Context, secret: bool, addr: SocketAddr) -> io::Result<()> {
|
||||||
let last = self.time.load();
|
let last = self.time.load();
|
||||||
//短时间不重复发送
|
//短时间不重复发送
|
||||||
if last.elapsed() < Duration::from_secs(5) {
|
if last.elapsed() < Duration::from_secs(3) {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let request_packet = handshake_request_packet(secret)?;
|
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服务,则探测公网端口
|
// 如果连接的是ipv4服务,则探测公网端口
|
||||||
let gateway_ip = current_dev.virtual_gateway;
|
let gateway_ip = current_dev.virtual_gateway;
|
||||||
let src_ip = current_dev.virtual_ip;
|
let src_ip = current_dev.virtual_ip;
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ fn broadcast(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if peer_ips.len() == MAX_COUNT {
|
if peer_ips.len() == MAX_COUNT {
|
||||||
|
relay_count += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if route.is_p2p()
|
if route.is_p2p()
|
||||||
@@ -45,7 +46,7 @@ fn broadcast(
|
|||||||
relay_count += 1;
|
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(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -143,5 +144,10 @@ pub fn base_handle(
|
|||||||
proxy_map.send_handle(&mut ipv4_packet)?;
|
proxy_map.send_handle(&mut ipv4_packet)?;
|
||||||
}
|
}
|
||||||
client_cipher.encrypt_ipv4(&mut net_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(),
|
net_packet.buffer(),
|
||||||
&dest_ip,
|
&dest_ip,
|
||||||
current_device.connect_server,
|
current_device.connect_server,
|
||||||
|
current_device.status.online(),
|
||||||
) {
|
) {
|
||||||
log::warn!("发送到目标失败:{}", e);
|
log::warn!("发送到目标失败:{}", e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user