summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@mullvad.net>2025-06-26 09:41:13 +0200
committerJon Petersson <jon.petersson@mullvad.net>2025-06-26 09:41:13 +0200
commit6ffcfc939ec7364856bc66714ec39149a6fcad79 (patch)
tree36ade2fb3ce09ed234a6e178b26c0ff69283a7ef
parent548dee3fca7cd2e50d8b91969ee9714227a4860a (diff)
parentf8e79ca5be06b995410989d0c75feb0645c447de (diff)
downloadmullvadvpn-6ffcfc939ec7364856bc66714ec39149a6fcad79.tar.xz
mullvadvpn-6ffcfc939ec7364856bc66714ec39149a6fcad79.zip
Merge branch 'update-relayselector-to-handle-extra-addresses-ios-1213'
-rw-r--r--ios/MullvadMockData/MullvadREST/ServerRelaysResponse+Stubs.swift19
-rw-r--r--ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift8
-rw-r--r--ios/MullvadREST/Relay/ObfuscatorPortSelector.swift37
-rw-r--r--ios/MullvadREST/Relay/RelaySelectorWrapper.swift6
-rw-r--r--ios/MullvadRESTTests/ServerRelayTests.swift4
-rw-r--r--ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift2
-rw-r--r--ios/MullvadVPNTests/MullvadSettings/IPOverrideWrapperTests.swift2
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
)
}