summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-daemon/src/relays.rs10
-rw-r--r--mullvad-types/src/relay_list.rs12
2 files changed, 18 insertions, 4 deletions
diff --git a/mullvad-daemon/src/relays.rs b/mullvad-daemon/src/relays.rs
index 86d4efbc51..45aabcba1d 100644
--- a/mullvad-daemon/src/relays.rs
+++ b/mullvad-daemon/src/relays.rs
@@ -70,8 +70,9 @@ impl ParsedRelays {
let city_code = city.code.clone();
let latitude = city.latitude;
let longitude = city.longitude;
- relays.extend(city.relays.drain(..).map(|mut relay| {
- relay.location = Some(Location {
+ for relay in &mut city.relays {
+ let mut relay_with_location = relay.clone();
+ relay_with_location.location = Some(Location {
country: country_name.clone(),
country_code: country_code.clone(),
city: city_name.clone(),
@@ -79,8 +80,9 @@ impl ParsedRelays {
latitude,
longitude,
});
- relay
- }));
+ relays.push(relay_with_location);
+ relay.tunnels.clear();
+ }
}
}
ParsedRelays {
diff --git a/mullvad-types/src/relay_list.rs b/mullvad-types/src/relay_list.rs
index 17d6e7d5f2..402b4f220b 100644
--- a/mullvad-types/src/relay_list.rs
+++ b/mullvad-types/src/relay_list.rs
@@ -44,6 +44,7 @@ pub struct Relay {
pub ipv4_addr_exit: Ipv4Addr,
pub include_in_country: bool,
pub weight: u64,
+ #[serde(skip_serializing_if = "RelayTunnels::is_empty", default)]
pub tunnels: RelayTunnels,
#[serde(skip)]
pub location: Option<Location>,
@@ -55,3 +56,14 @@ pub struct RelayTunnels {
pub openvpn: Vec<OpenVpnEndpointData>,
pub wireguard: Vec<WireguardEndpointData>,
}
+
+impl RelayTunnels {
+ pub fn is_empty(&self) -> bool {
+ self.openvpn.is_empty() && self.wireguard.is_empty()
+ }
+
+ pub fn clear(&mut self) {
+ self.openvpn.clear();
+ self.wireguard.clear();
+ }
+}