diff options
| author | Jon Petersson <jon.petersson@mullvad.net> | 2025-06-26 09:41:13 +0200 |
|---|---|---|
| committer | Jon Petersson <jon.petersson@mullvad.net> | 2025-06-26 09:41:13 +0200 |
| commit | 6ffcfc939ec7364856bc66714ec39149a6fcad79 (patch) | |
| tree | 36ade2fb3ce09ed234a6e178b26c0ff69283a7ef | |
| parent | 548dee3fca7cd2e50d8b91969ee9714227a4860a (diff) | |
| parent | f8e79ca5be06b995410989d0c75feb0645c447de (diff) | |
| download | mullvadvpn-6ffcfc939ec7364856bc66714ec39149a6fcad79.tar.xz mullvadvpn-6ffcfc939ec7364856bc66714ec39149a6fcad79.zip | |
Merge branch 'update-relayselector-to-handle-extra-addresses-ios-1213'
7 files changed, 40 insertions, 38 deletions
diff --git a/ios/MullvadMockData/MullvadREST/ServerRelaysResponse+Stubs.swift b/ios/MullvadMockData/MullvadREST/ServerRelaysResponse+Stubs.swift index ab604c7a0a..6bd66979b9 100644 --- a/ios/MullvadMockData/MullvadREST/ServerRelaysResponse+Stubs.swift +++ b/ios/MullvadMockData/MullvadREST/ServerRelaysResponse+Stubs.swift @@ -89,8 +89,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: true, shadowsocksExtraAddrIn: ["0.0.0.0"], - quicHostname: nil, - masqueExtraAddrIn: nil, features: .init(daita: .init(), quic: nil) ), REST.ServerRelay( @@ -106,9 +104,10 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: ["0.0.0.0"], - quicHostname: nil, - masqueExtraAddrIn: nil, - features: nil + features: .init( + daita: nil, + quic: .init(addrIn: ["0.0.0.0"], domain: "quic.domain", token: "") + ) ), REST.ServerRelay( hostname: "se2-wireguard", @@ -123,8 +122,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: ["0.0.0.0"], - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ), REST.ServerRelay( @@ -140,8 +137,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: ["0.0.0.0"], - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ), REST.ServerRelay( @@ -157,8 +152,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: ["0.0.0.0"], - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ), REST.ServerRelay( @@ -174,8 +167,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: true, shadowsocksExtraAddrIn: nil, - quicHostname: nil, - masqueExtraAddrIn: nil, features: .init(daita: .init(), quic: nil) ), REST.ServerRelay( @@ -191,8 +182,6 @@ public enum ServerRelaysResponseStubs { includeInCountry: true, daita: true, shadowsocksExtraAddrIn: nil, - quicHostname: nil, - masqueExtraAddrIn: nil, features: .init(daita: .init(), quic: nil) ), ], diff --git a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift index 48c292e8e1..134a6c7f0d 100644 --- a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift +++ b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift @@ -79,8 +79,6 @@ extension REST { public let includeInCountry: Bool public let daita: Bool? public let shadowsocksExtraAddrIn: [String]? - public let quicHostname: String? - public let masqueExtraAddrIn: [String]? public let features: Features? public func override(ipv4AddrIn: IPv4Address?, ipv6AddrIn: IPv6Address?) -> Self { @@ -106,8 +104,6 @@ extension REST { true } }, - quicHostname: quicHostname, - masqueExtraAddrIn: masqueExtraAddrIn, features: features ) } @@ -127,8 +123,6 @@ extension REST { includeInCountry: includeInCountry, daita: daita, shadowsocksExtraAddrIn: shadowsocksExtraAddrIn, - quicHostname: quicHostname, - masqueExtraAddrIn: masqueExtraAddrIn, features: features ) } @@ -147,8 +141,6 @@ extension REST { includeInCountry: includeInCountry, daita: daita, shadowsocksExtraAddrIn: shadowsocksExtraAddrIn, - quicHostname: quicHostname, - masqueExtraAddrIn: masqueExtraAddrIn, features: features ) } diff --git a/ios/MullvadREST/Relay/ObfuscatorPortSelector.swift b/ios/MullvadREST/Relay/ObfuscatorPortSelector.swift index 0b1939927b..2bd2f4ec8b 100644 --- a/ios/MullvadREST/Relay/ObfuscatorPortSelector.swift +++ b/ios/MullvadREST/Relay/ObfuscatorPortSelector.swift @@ -55,10 +55,15 @@ struct ObfuscatorPortSelector { tunnelSettings: tunnelSettings, shadowsocksPortRanges: relays.wireguard.shadowsocksPortRanges ) - #if DEBUG case .quic: + let filteredRelays = obfuscateQUICRelays(tunnelSettings: tunnelSettings) + if tunnelSettings.tunnelMultihopState.isEnabled { + entryRelays = filteredRelays + } else { + exitRelays = filteredRelays + } + port = .only(443) - #endif default: break } @@ -112,6 +117,34 @@ struct ObfuscatorPortSelector { ) } + private func obfuscateQUICRelays(tunnelSettings: LatestTunnelSettings) -> REST.ServerRelaysResponse { + let relays = relays + let wireGuardObfuscation = tunnelSettings.wireGuardObfuscation + + return wireGuardObfuscation.state == .quic + ? filterQUICRelays(from: relays) + : relays + } + + private func filterQUICRelays(from relays: REST.ServerRelaysResponse) -> REST.ServerRelaysResponse { + let filteredRelays = relays.wireguard.relays.filter { relay in + let addressListIsEmpty = relay.features?.quic?.addrIn.isEmpty ?? true + return !addressListIsEmpty + } + + return REST.ServerRelaysResponse( + locations: relays.locations, + wireguard: REST.ServerWireguardTunnels( + ipv4Gateway: relays.wireguard.ipv4Gateway, + ipv6Gateway: relays.wireguard.ipv6Gateway, + portRanges: relays.wireguard.portRanges, + relays: filteredRelays, + shadowsocksPortRanges: relays.wireguard.shadowsocksPortRanges + ), + bridge: relays.bridge + ) + } + private func obfuscateUdpOverTcpPort( tunnelSettings: LatestTunnelSettings, connectionAttemptCount: UInt diff --git a/ios/MullvadREST/Relay/RelaySelectorWrapper.swift b/ios/MullvadREST/Relay/RelaySelectorWrapper.swift index bc054e42a2..4eb65eaddb 100644 --- a/ios/MullvadREST/Relay/RelaySelectorWrapper.swift +++ b/ios/MullvadREST/Relay/RelaySelectorWrapper.swift @@ -108,12 +108,8 @@ public final class RelaySelectorWrapper: RelaySelectorProtocol, Sendable { throw NoRelaysSatisfyingConstraintsError(.invalidPort) } } - case .on, .udpOverTcp, .shadowsocks: + case .on, .udpOverTcp, .shadowsocks, .quic: break - #if DEBUG - case .quic: - break - #endif } } } diff --git a/ios/MullvadRESTTests/ServerRelayTests.swift b/ios/MullvadRESTTests/ServerRelayTests.swift index 5c4cd89659..cadcc7c0b7 100644 --- a/ios/MullvadRESTTests/ServerRelayTests.swift +++ b/ios/MullvadRESTTests/ServerRelayTests.swift @@ -58,8 +58,6 @@ class ServerRelayTests: XCTestCase { shadowsocksExtraAddrIn: [ "185.213.193.139", ], - quicHostname: "cat.pictures.com", - masqueExtraAddrIn: ["1.2.3.4", "::1"], features: .init( daita: .init(), quic: .init( @@ -151,8 +149,6 @@ class ServerRelayTests: XCTestCase { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: shadowSocksExtraAddrIn, - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ) } diff --git a/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift b/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift index 11b6702a2e..7eabbbde39 100644 --- a/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift +++ b/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift @@ -325,8 +325,6 @@ extension RelaySelectorTests { includeInCountry: true, daita: true, shadowsocksExtraAddrIn: nil, - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ), ], diff --git a/ios/MullvadVPNTests/MullvadSettings/IPOverrideWrapperTests.swift b/ios/MullvadVPNTests/MullvadSettings/IPOverrideWrapperTests.swift index ff45f645cf..590fa4d19c 100644 --- a/ios/MullvadVPNTests/MullvadSettings/IPOverrideWrapperTests.swift +++ b/ios/MullvadVPNTests/MullvadSettings/IPOverrideWrapperTests.swift @@ -86,8 +86,6 @@ extension IPOverrideWrapperTests { includeInCountry: true, daita: false, shadowsocksExtraAddrIn: nil, - quicHostname: nil, - masqueExtraAddrIn: nil, features: nil ) } |
