mirror of https://github.com/telemt/telemt.git
DC Endpoints on default
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
parent
24df865503
commit
02fe89f7d0
15
src/main.rs
15
src/main.rs
|
|
@ -942,22 +942,21 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
||||||
let mut grouped: BTreeMap<i32, Vec<MePingSample>> = BTreeMap::new();
|
let mut grouped: BTreeMap<i32, Vec<MePingSample>> = BTreeMap::new();
|
||||||
for report in me_results {
|
for report in me_results {
|
||||||
for s in report.samples {
|
for s in report.samples {
|
||||||
let key = s.dc.abs();
|
grouped.entry(s.dc).or_default().push(s);
|
||||||
grouped.entry(key).or_default().push(s);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let family_order = if prefer_ipv6 {
|
let family_order = if prefer_ipv6 {
|
||||||
vec![(MePingFamily::V6, true), (MePingFamily::V6, false), (MePingFamily::V4, true), (MePingFamily::V4, false)]
|
vec![MePingFamily::V6, MePingFamily::V4]
|
||||||
} else {
|
} else {
|
||||||
vec![(MePingFamily::V4, true), (MePingFamily::V4, false), (MePingFamily::V6, true), (MePingFamily::V6, false)]
|
vec![MePingFamily::V4, MePingFamily::V6]
|
||||||
};
|
};
|
||||||
|
|
||||||
for (dc_abs, samples) in grouped {
|
for (dc, samples) in grouped {
|
||||||
for (family, is_pos) in &family_order {
|
for family in &family_order {
|
||||||
let fam_samples: Vec<&MePingSample> = samples
|
let fam_samples: Vec<&MePingSample> = samples
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|s| matches!(s.family, f if &f == family) && (s.dc >= 0) == *is_pos)
|
.filter(|s| matches!(s.family, f if &f == family))
|
||||||
.collect();
|
.collect();
|
||||||
if fam_samples.is_empty() {
|
if fam_samples.is_empty() {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -967,7 +966,7 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
||||||
MePingFamily::V4 => "IPv4",
|
MePingFamily::V4 => "IPv4",
|
||||||
MePingFamily::V6 => "IPv6",
|
MePingFamily::V6 => "IPv6",
|
||||||
};
|
};
|
||||||
info!(" DC{} [{}]", dc_abs, fam_label);
|
info!(" DC{} [{}]", dc, fam_label);
|
||||||
for sample in fam_samples {
|
for sample in fam_samples {
|
||||||
let line = format_sample_line(sample);
|
let line = format_sample_line(sample);
|
||||||
info!("{}", line);
|
info!("{}", line);
|
||||||
|
|
|
||||||
|
|
@ -84,38 +84,7 @@ impl MePool {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn resolve_dc_idx_for_endpoint(&self, addr: SocketAddr) -> Option<i16> {
|
async fn resolve_dc_idx_for_endpoint(&self, addr: SocketAddr) -> Option<i16> {
|
||||||
if addr.is_ipv4() {
|
i16::try_from(self.resolve_dc_for_endpoint(addr).await).ok()
|
||||||
let map = self.proxy_map_v4.read().await;
|
|
||||||
for (dc, addrs) in map.iter() {
|
|
||||||
if addrs
|
|
||||||
.iter()
|
|
||||||
.any(|(ip, port)| SocketAddr::new(*ip, *port) == addr)
|
|
||||||
{
|
|
||||||
let abs_dc = dc.abs();
|
|
||||||
if abs_dc > 0
|
|
||||||
&& let Ok(dc_idx) = i16::try_from(abs_dc)
|
|
||||||
{
|
|
||||||
return Some(dc_idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let map = self.proxy_map_v6.read().await;
|
|
||||||
for (dc, addrs) in map.iter() {
|
|
||||||
if addrs
|
|
||||||
.iter()
|
|
||||||
.any(|(ip, port)| SocketAddr::new(*ip, *port) == addr)
|
|
||||||
{
|
|
||||||
let abs_dc = dc.abs();
|
|
||||||
if abs_dc > 0
|
|
||||||
&& let Ok(dc_idx) = i16::try_from(abs_dc)
|
|
||||||
{
|
|
||||||
return Some(dc_idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn direct_bind_ip_for_stun(
|
fn direct_bind_ip_for_stun(
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ async fn check_family(
|
||||||
|
|
||||||
let mut dc_endpoints = HashMap::<i32, Vec<SocketAddr>>::new();
|
let mut dc_endpoints = HashMap::<i32, Vec<SocketAddr>>::new();
|
||||||
for (dc, addrs) in map {
|
for (dc, addrs) in map {
|
||||||
let entry = dc_endpoints.entry(dc.abs()).or_default();
|
let entry = dc_endpoints.entry(dc).or_default();
|
||||||
for (ip, port) in addrs {
|
for (ip, port) in addrs {
|
||||||
entry.push(SocketAddr::new(ip, port));
|
entry.push(SocketAddr::new(ip, port));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue