summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-08-22 13:01:09 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-08-22 15:36:01 +0200
commitbccc17b44a8f4dd09b129da952b0bb4375236e92 (patch)
tree618e9df4de0bc9cc6ce528a4193237be5339e9e9
parent010c1e7eede71ef6a36977b443d034e3d7ce0338 (diff)
downloadmullvadvpn-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.rs25
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);