diff options
| author | David Lönnhager <david.l@mullvad.net> | 2025-08-22 13:01:09 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-08-22 15:36:01 +0200 |
| commit | bccc17b44a8f4dd09b129da952b0bb4375236e92 (patch) | |
| tree | 618e9df4de0bc9cc6ce528a4193237be5339e9e9 | |
| parent | 010c1e7eede71ef6a36977b443d034e3d7ce0338 (diff) | |
| download | mullvadvpn-bccc17b44a8f4dd09b129da952b0bb4375236e92.tar.xz mullvadvpn-bccc17b44a8f4dd09b129da952b0bb4375236e92.zip | |
Do not filter out all OpenVPN relays when QUIC is enabled
| -rw-r--r-- | mullvad-relay-selector/src/relay_selector/matcher.rs | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/mullvad-relay-selector/src/relay_selector/matcher.rs b/mullvad-relay-selector/src/relay_selector/matcher.rs index b65f6f623a..80af27e9c1 100644 --- a/mullvad-relay-selector/src/relay_selector/matcher.rs +++ b/mullvad-relay-selector/src/relay_selector/matcher.rs @@ -121,6 +121,10 @@ fn filter_on_obfuscation( relay_list: &RelayList, relay: &Relay, ) -> bool { + let Some(endpoint_data) = relay.wireguard() else { + return true; + }; + match &query.obfuscation { // Shadowsocks has relay-specific constraints ObfuscationQuery::Shadowsocks(settings) => { @@ -129,18 +133,18 @@ fn filter_on_obfuscation( &wg_data.shadowsocks_port_ranges, &query.ip_version, settings, - relay, + endpoint_data, ) } // QUIC is only enabled on some relays - ObfuscationQuery::Quic => relay.wireguard().is_some_and(|wg| match wg.quic() { + ObfuscationQuery::Quic => match endpoint_data.quic() { Some(quic) => match query.ip_version { Constraint::Any => true, Constraint::Only(IpVersion::V4) => quic.in_ipv4().is_some(), Constraint::Only(IpVersion::V6) => quic.in_ipv6().is_some(), }, None => false, - }), + }, // Other relays are compatible with this query ObfuscationQuery::Off | ObfuscationQuery::Auto | ObfuscationQuery::Udp2tcp(_) => true, } @@ -151,21 +155,18 @@ fn filter_on_shadowsocks( port_ranges: &[RangeInclusive<u16>], ip_version: &Constraint<IpVersion>, settings: &ShadowsocksSettings, - relay: &Relay, + endpoint_data: &WireguardRelayEndpointData, ) -> bool { let ip_version = super::detailer::resolve_ip_version(*ip_version); - match (settings, &relay.endpoint_data) { + match settings { // If Shadowsocks is specifically asked for, we must check if the specific relay supports // our port. If there are extra addresses, then all ports are available, so we do // not need to do this. - ( - ShadowsocksSettings { - port: Constraint::Only(desired_port), - }, - RelayEndpointData::Wireguard(wg_data), - ) => { - let filtered_extra_addrs = wg_data + ShadowsocksSettings { + port: Constraint::Only(desired_port), + } => { + let filtered_extra_addrs = endpoint_data .shadowsocks_extra_addr_in .iter() .find(|&&addr| IpVersion::from(addr) == ip_version); |
