mirror of
https://github.com/telemt/telemt.git
synced 2026-04-15 01:24:09 +03:00
ME Pool improvements
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
@@ -7,12 +7,29 @@ use tracing::warn;
|
||||
|
||||
use super::pool::MePool;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub enum SnapshotApplyOutcome {
|
||||
AppliedChanged,
|
||||
AppliedNoDelta,
|
||||
RejectedEmpty,
|
||||
}
|
||||
|
||||
impl SnapshotApplyOutcome {
|
||||
pub fn changed(self) -> bool {
|
||||
matches!(self, SnapshotApplyOutcome::AppliedChanged)
|
||||
}
|
||||
}
|
||||
|
||||
impl MePool {
|
||||
pub async fn update_proxy_maps(
|
||||
&self,
|
||||
new_v4: HashMap<i32, Vec<(IpAddr, u16)>>,
|
||||
new_v6: Option<HashMap<i32, Vec<(IpAddr, u16)>>>,
|
||||
) -> bool {
|
||||
) -> SnapshotApplyOutcome {
|
||||
if new_v4.is_empty() && new_v6.as_ref().is_none_or(|v| v.is_empty()) {
|
||||
return SnapshotApplyOutcome::RejectedEmpty;
|
||||
}
|
||||
|
||||
let mut changed = false;
|
||||
{
|
||||
let mut guard = self.proxy_map_v4.write().await;
|
||||
@@ -51,7 +68,11 @@ impl MePool {
|
||||
}
|
||||
}
|
||||
}
|
||||
changed
|
||||
if changed {
|
||||
SnapshotApplyOutcome::AppliedChanged
|
||||
} else {
|
||||
SnapshotApplyOutcome::AppliedNoDelta
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn update_secret(self: &Arc<Self>, new_secret: Vec<u8>) -> bool {
|
||||
@@ -60,8 +81,19 @@ impl MePool {
|
||||
return false;
|
||||
}
|
||||
let mut guard = self.proxy_secret.write().await;
|
||||
if *guard != new_secret {
|
||||
*guard = new_secret;
|
||||
if guard.secret != new_secret {
|
||||
guard.secret = new_secret;
|
||||
guard.key_selector = if guard.secret.len() >= 4 {
|
||||
u32::from_le_bytes([
|
||||
guard.secret[0],
|
||||
guard.secret[1],
|
||||
guard.secret[2],
|
||||
guard.secret[3],
|
||||
])
|
||||
} else {
|
||||
0
|
||||
};
|
||||
guard.epoch = guard.epoch.saturating_add(1);
|
||||
drop(guard);
|
||||
self.reconnect_all().await;
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user