diff options
| author | Emīls <emils@mullvad.net> | 2021-03-17 13:42:21 +0000 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2021-03-17 13:42:21 +0000 |
| commit | df7e03f8b6ea511428f7231372bb063a1e52e7ed (patch) | |
| tree | 5b3feb3128aabb7d2df7c119805b953c6d5ee8a4 | |
| parent | 8fca6f6e09f942c8c287e627fdcb83a1950aa899 (diff) | |
| parent | eb71b8290b18844e21e16e099c1219cee8cb8000 (diff) | |
| download | mullvadvpn-df7e03f8b6ea511428f7231372bb063a1e52e7ed.tar.xz mullvadvpn-df7e03f8b6ea511428f7231372bb063a1e52e7ed.zip | |
Merge branch 'daemon-fix-relay-selector'
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | mullvad-daemon/src/relays.rs | 29 |
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")] |
