summaryrefslogtreecommitdiffhomepage
path: root/desktop
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2025-08-12 16:13:21 +0200
committerMarkus Pettersson <markus.pettersson@mullvad.net>2025-08-13 14:09:06 +0200
commitec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20 (patch)
tree2e9d912d986841f95a12eb3b06f971091bab5f3a /desktop
parentbbdf2683938994b9fb6b18924c22155438f706a5 (diff)
downloadmullvadvpn-ec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20.tar.xz
mullvadvpn-ec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20.zip
Fix do not filter exit relays when multihop and QUIC is enabled
Diffstat (limited to 'desktop')
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/components/select-location/RelayListContext.tsx16
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/components/select-location/SelectLocation.tsx12
-rw-r--r--desktop/packages/mullvad-vpn/src/renderer/lib/filter-locations.ts19
3 files changed, 31 insertions, 16 deletions
diff --git a/desktop/packages/mullvad-vpn/src/renderer/components/select-location/RelayListContext.tsx b/desktop/packages/mullvad-vpn/src/renderer/components/select-location/RelayListContext.tsx
index d300c56e7f..0c093af313 100644
--- a/desktop/packages/mullvad-vpn/src/renderer/components/select-location/RelayListContext.tsx
+++ b/desktop/packages/mullvad-vpn/src/renderer/components/select-location/RelayListContext.tsx
@@ -80,6 +80,7 @@ export function RelayListContextProvider(props: RelayListContextProviderProps) {
const fullRelayList = useSelector((state) => state.settings.relayLocations);
const relaySettings = useNormalRelaySettings();
const tunnelProtocol = useTunnelProtocol();
+ const multihop = relaySettings?.wireguard.useMultihop ?? false;
// Filters the relays to only keep the ones of the desired endpoint type, e.g. "wireguard",
// "openvpn" or "bridge"
@@ -96,21 +97,14 @@ export function RelayListContextProvider(props: RelayListContextProviderProps) {
directOnly,
locationType,
tunnelProtocol,
- relaySettings?.wireguard.useMultihop ?? false,
+ multihop,
);
- }, [
- daita,
- directOnly,
- locationType,
- relayListForEndpointType,
- tunnelProtocol,
- relaySettings?.wireguard.useMultihop,
- ]);
+ }, [daita, directOnly, locationType, relayListForEndpointType, tunnelProtocol, multihop]);
// Only show relays that have QUIC endpoints when QUIC obfuscation is enabled.
const relayListForQuic = useMemo(() => {
- return filterLocationsByQuic(relayListForDaita, quic, tunnelProtocol);
- }, [quic, relayListForDaita, tunnelProtocol]);
+ return filterLocationsByQuic(relayListForDaita, quic, tunnelProtocol, locationType, multihop);
+ }, [quic, relayListForDaita, locationType, tunnelProtocol, multihop]);
// Filters the relays to only keep the relays matching the currently selected filters, e.g.
// ownership and providers
diff --git a/desktop/packages/mullvad-vpn/src/renderer/components/select-location/SelectLocation.tsx b/desktop/packages/mullvad-vpn/src/renderer/components/select-location/SelectLocation.tsx
index 14f9bef50b..8dfebb2b34 100644
--- a/desktop/packages/mullvad-vpn/src/renderer/components/select-location/SelectLocation.tsx
+++ b/desktop/packages/mullvad-vpn/src/renderer/components/select-location/SelectLocation.tsx
@@ -8,7 +8,11 @@ import { RoutePath } from '../../../shared/routes';
import { Button, FilterChip, Flex, IconButton, LabelTiny } from '../../lib/components';
import { FlexColumn } from '../../lib/components/flex-column';
import { useRelaySettingsUpdater } from '../../lib/constraint-updater';
-import { daitaFilterActive, filterSpecialLocations } from '../../lib/filter-locations';
+import {
+ daitaFilterActive,
+ filterSpecialLocations,
+ quicFilterActive,
+} from '../../lib/filter-locations';
import { useHistory } from '../../lib/history';
import { formatHtml } from '../../lib/html-formatter';
import { useNormalRelaySettings, useTunnelProtocol } from '../../lib/relay-settings-hooks';
@@ -59,18 +63,20 @@ export default function SelectLocation() {
const tunnelProtocol = useTunnelProtocol();
const ownership = relaySettings?.ownership ?? Ownership.any;
const providers = relaySettings?.providers ?? [];
+ const multihop = relaySettings?.wireguard.useMultihop ?? false;
const filteredProviders = useFilteredProviders(providers, ownership);
const daita = useSelector((state) => state.settings.wireguard.daita?.enabled ?? false);
const directOnly = useSelector((state) => state.settings.wireguard.daita?.directOnly ?? false);
- const showQuicFilter = useSelector(
+ const quic = useSelector(
(state) => state.settings.obfuscationSettings.selectedObfuscation === ObfuscationType.quic,
);
+ const showQuicFilter = quicFilterActive(quic, locationType, tunnelProtocol, multihop);
const showDaitaFilter = daitaFilterActive(
daita,
directOnly,
locationType,
tunnelProtocol,
- relaySettings?.wireguard.useMultihop ?? false,
+ multihop,
);
const [searchValue, setSearchValue] = useState('');
diff --git a/desktop/packages/mullvad-vpn/src/renderer/lib/filter-locations.ts b/desktop/packages/mullvad-vpn/src/renderer/lib/filter-locations.ts
index 29ce00f1ff..d219bb099f 100644
--- a/desktop/packages/mullvad-vpn/src/renderer/lib/filter-locations.ts
+++ b/desktop/packages/mullvad-vpn/src/renderer/lib/filter-locations.ts
@@ -36,10 +36,25 @@ export function filterLocationsByQuic(
locations: IRelayLocationCountryRedux[],
quic: boolean,
tunnelProtocol: TunnelProtocol,
+ locationType: LocationType,
+ multihop: boolean,
): IRelayLocationCountryRedux[] {
- const quicFilterActive = quic && tunnelProtocol !== 'openvpn';
const quickOnRelay = (relay: IRelayLocationRelayRedux) => relay.quic !== undefined;
- return quicFilterActive ? filterLocationsImpl(locations, quickOnRelay) : locations;
+ return quicFilterActive(quic, locationType, tunnelProtocol, multihop)
+ ? filterLocationsImpl(locations, quickOnRelay)
+ : locations;
+}
+
+export function quicFilterActive(
+ quic: boolean,
+ locationType: LocationType,
+ tunnelProtocol: TunnelProtocol,
+ multihop: boolean,
+) {
+ const isEntry = multihop
+ ? locationType === LocationType.entry
+ : locationType === LocationType.exit;
+ return quic && isEntry && tunnelProtocol !== 'openvpn';
}
export function filterLocationsByDaita(