diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2025-08-12 16:13:21 +0200 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2025-08-13 14:09:06 +0200 |
| commit | ec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20 (patch) | |
| tree | 2e9d912d986841f95a12eb3b06f971091bab5f3a /desktop | |
| parent | bbdf2683938994b9fb6b18924c22155438f706a5 (diff) | |
| download | mullvadvpn-ec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20.tar.xz mullvadvpn-ec2f4c6b8a58b2f779dbfa8db6c39efc7adfea20.zip | |
Fix do not filter exit relays when multihop and QUIC is enabled
Diffstat (limited to 'desktop')
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( |
