summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2021-03-17 13:42:21 +0000
committerEmīls <emils@mullvad.net>2021-03-17 13:42:21 +0000
commitdf7e03f8b6ea511428f7231372bb063a1e52e7ed (patch)
tree5b3feb3128aabb7d2df7c119805b953c6d5ee8a4
parent8fca6f6e09f942c8c287e627fdcb83a1950aa899 (diff)
parenteb71b8290b18844e21e16e099c1219cee8cb8000 (diff)
downloadmullvadvpn-df7e03f8b6ea511428f7231372bb063a1e52e7ed.tar.xz
mullvadvpn-df7e03f8b6ea511428f7231372bb063a1e52e7ed.zip
Merge branch 'daemon-fix-relay-selector'
-rw-r--r--CHANGELOG.md1
-rw-r--r--mullvad-daemon/src/relays.rs29
2 files changed, 25 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9701c78585..80864487e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -232,6 +232,7 @@ This release is for Android only.
### Fixed
- Fix missing map animation after selecting a new location in the desktop app.
- Fix crash on older kernels which report a default route through the loopback interface.
+- Fix relay selection failing to pick a WireGuard relay when no tunnel protocol is specified.
#### Android
- Fix connect action button sometimes showing itself as "Cancel" instead of "Secure my connection"
diff --git a/mullvad-daemon/src/relays.rs b/mullvad-daemon/src/relays.rs
index 17906cc686..54d2074ad9 100644
--- a/mullvad-daemon/src/relays.rs
+++ b/mullvad-daemon/src/relays.rs
@@ -641,6 +641,18 @@ impl RelaySelector {
relay: &Relay,
constraints: &RelayConstraints,
) -> Option<MullvadEndpoint> {
+ #[cfg(not(target_os = "android"))]
+ let mut thread_rng = self.rng.clone();
+ #[cfg(not(target_os = "android"))]
+ let mut new_openvpn_endpoint = || {
+ relay
+ .tunnels
+ .openvpn
+ .choose(&mut thread_rng)
+ .cloned()
+ .map(|endpoint| endpoint.into_mullvad_endpoint(relay.ipv4_addr_in.into()))
+ };
+
let mut new_wg_endpoint = || {
relay
.tunnels
@@ -654,12 +666,19 @@ impl RelaySelector {
#[cfg(not(target_os = "android"))]
match constraints.tunnel_protocol {
- Constraint::Only(TunnelType::OpenVpn) | Constraint::Any => relay
- .tunnels
- .openvpn
+ Constraint::Only(TunnelType::OpenVpn) => new_openvpn_endpoint(),
+
+ #[cfg(target_os = "windows")]
+ Constraint::Any => new_openvpn_endpoint(),
+
+ #[cfg(not(target_os = "windows"))]
+ Constraint::Any => vec![new_openvpn_endpoint(), new_wg_endpoint()]
+ .into_iter()
+ .filter_map(|relay| relay)
+ .collect::<Vec<_>>()
.choose(&mut self.rng)
- .cloned()
- .map(|endpoint| endpoint.into_mullvad_endpoint(relay.ipv4_addr_in.into())),
+ .cloned(),
+
Constraint::Only(TunnelType::Wireguard) => new_wg_endpoint(),
}
#[cfg(target_os = "android")]