mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
fix: route_update message is not lag (#2355)
This commit is contained in:
@@ -119,7 +119,9 @@ fn sync_tun_event_receivers(receivers: &mut HashMap<String, EventBusSubscriber>)
|
|||||||
fn event_needs_tun_refresh(event: &GlobalCtxEvent) -> bool {
|
fn event_needs_tun_refresh(event: &GlobalCtxEvent) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
event,
|
event,
|
||||||
GlobalCtxEvent::DhcpIpv4Changed(_, _) | GlobalCtxEvent::ProxyCidrsUpdated(_, _)
|
GlobalCtxEvent::DhcpIpv4Changed(_, _)
|
||||||
|
| GlobalCtxEvent::ProxyCidrsUpdated(_, _)
|
||||||
|
| GlobalCtxEvent::PublicIpv6RoutesUpdated(_, _)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,19 +478,16 @@ pub fn start_local_socket_server() -> bool {
|
|||||||
.retain(|instance_id, _| active_tun_candidate_ids.contains(instance_id));
|
.retain(|instance_id, _| active_tun_candidate_ids.contains(instance_id));
|
||||||
shrink_hash_set_if_sparse(&mut delivered_tun_requests);
|
shrink_hash_set_if_sparse(&mut delivered_tun_requests);
|
||||||
shrink_hash_map_if_sparse(&mut last_tun_route_signatures);
|
shrink_hash_map_if_sparse(&mut last_tun_route_signatures);
|
||||||
let has_undelivered_tun_candidate = active_tun_candidate_ids
|
|
||||||
.iter()
|
|
||||||
.any(|instance_id| !delivered_tun_requests.contains(instance_id));
|
|
||||||
let should_evaluate_tun =
|
|
||||||
tun_refresh || !tun_bootstrap_done || has_undelivered_tun_candidate;
|
|
||||||
let mut saw_running_instance = false;
|
let mut saw_running_instance = false;
|
||||||
let mut saw_tun_candidate = false;
|
let mut saw_tun_candidate = false;
|
||||||
if should_evaluate_tun {
|
|
||||||
for instance in snapshot.instances.iter() {
|
for instance in snapshot.instances.iter() {
|
||||||
if instance.running {
|
if instance.running {
|
||||||
saw_running_instance = true;
|
saw_running_instance = true;
|
||||||
}
|
}
|
||||||
if instance.running && instance.tun_required {
|
if !(instance.running && instance.tun_required) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
saw_tun_candidate = true;
|
saw_tun_candidate = true;
|
||||||
let virtual_ipv4 = instance
|
let virtual_ipv4 = instance
|
||||||
.my_node_info
|
.my_node_info
|
||||||
@@ -513,13 +512,11 @@ pub fn start_local_socket_server() -> bool {
|
|||||||
instance.need_exit_node,
|
instance.need_exit_node,
|
||||||
))
|
))
|
||||||
.unwrap_or_else(|_| "[]".to_string());
|
.unwrap_or_else(|_| "[]".to_string());
|
||||||
let allow_route_signature_refresh = tun_refresh || !tun_bootstrap_done;
|
|
||||||
let should_send = !delivered_tun_requests.contains(&instance.instance_id)
|
let should_send = !delivered_tun_requests.contains(&instance.instance_id)
|
||||||
|| (allow_route_signature_refresh
|
|| last_tun_route_signatures
|
||||||
&& last_tun_route_signatures
|
|
||||||
.get(&instance.instance_id)
|
.get(&instance.instance_id)
|
||||||
.map(|value| value != &route_signature)
|
.map(|value| value != &route_signature)
|
||||||
.unwrap_or(true));
|
.unwrap_or(true);
|
||||||
if !should_send {
|
if !should_send {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -540,25 +537,9 @@ pub fn start_local_socket_server() -> bool {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if broadcast_local_socket_message(
|
if broadcast_local_socket_message(&mut clients, "tun_request", &payload_json) {
|
||||||
&mut clients,
|
|
||||||
"tun_request",
|
|
||||||
&payload_json,
|
|
||||||
) {
|
|
||||||
delivered_tun_requests.insert(instance.instance_id.clone());
|
delivered_tun_requests.insert(instance.instance_id.clone());
|
||||||
last_tun_route_signatures
|
last_tun_route_signatures.insert(instance.instance_id.clone(), route_signature);
|
||||||
.insert(instance.instance_id.clone(), route_signature);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for instance in snapshot.instances.iter() {
|
|
||||||
if instance.running {
|
|
||||||
saw_running_instance = true;
|
|
||||||
}
|
|
||||||
if instance.running && instance.tun_required {
|
|
||||||
saw_tun_candidate = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !delivered_tun_requests.is_empty()
|
if !delivered_tun_requests.is_empty()
|
||||||
|
|||||||
Reference in New Issue
Block a user