Skip to content

Commit a8cc8c2

Browse files
committed
backend/udp_server: Try to find devices in subnet
Also increase logging for connection management
1 parent ca586d0 commit a8cc8c2

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

backend/src/udp_server/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ async fn start_rate_limiters_reset_thread(
8080
(false, uuid::Uuid::nil())
8181
};
8282
if remove {
83-
log::debug!("Charger {id} has timeouted and will be removed.");
83+
log::info!("Charger {id} has timeouted and will be removed.");
8484
map.remove(&id);
8585
arbiter.spawn(update_charger_state_change(id, state.clone()));
8686
}

backend/src/udp_server/multiplex.rs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use boringtun::noise::{rate_limiter::RateLimiter, TunnResult};
3030
use db_connector::models::chargers::Charger;
3131
use diesel::prelude::*;
3232
use futures_util::lock::Mutex;
33-
use ipnetwork::IpNetwork;
33+
use ipnetwork::{IpNetwork, Ipv4Network};
3434
use rand::TryRngCore;
3535
use rand_core::OsRng;
3636

@@ -76,7 +76,31 @@ async fn create_tunn(
7676
.select(Charger::as_select())
7777
.load(&mut conn)?
7878
} else {
79-
return Err(anyhow::Error::msg(Error::UnknownPeer));
79+
let IpNetwork::V4(ip) = ip else {
80+
return Err(anyhow::Error::msg(Error::UnknownPeer));
81+
};
82+
let ip = Ipv4Network::new(ip.ip(), 24)?;
83+
let test = map.iter().filter(|(k, _v)| {
84+
let ipv4 = match *k {
85+
IpNetwork::V4(ipv4) => ipv4,
86+
_ => return false,
87+
};
88+
ip.contains(ipv4.ip())
89+
}).collect::<Vec<_>>();
90+
if !test.is_empty() {
91+
let charger_ids: Vec<uuid::Uuid> = test
92+
.iter()
93+
.flat_map(|(_k, v)| v.iter().map(|c| c.id))
94+
.collect();
95+
log::info!("Found possible matches for ip '{ip}: {charger_ids:?}'");
96+
chargers::chargers
97+
.filter(chargers::id.eq_any(charger_ids))
98+
.select(Charger::as_select())
99+
.load(&mut conn)?
100+
} else {
101+
log::info!("Could not find charger for ip '{ip}'");
102+
return Err(anyhow::Error::msg(Error::UnknownPeer));
103+
}
80104
}
81105
};
82106

@@ -251,7 +275,7 @@ pub async fn run_server(
251275
.ok();
252276
}
253277
}
254-
log::debug!("Adding management connection from {addr}");
278+
log::info!("Adding management connection from {addr}");
255279
tunn_data.clone()
256280
}
257281
}

0 commit comments

Comments
 (0)