summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@mullvad.net>2025-08-28 10:17:37 +0200
committerJon Petersson <jon.petersson@mullvad.net>2025-08-28 10:17:37 +0200
commiteb3954f466a7dd19adf3883dc94c7c12f8990834 (patch)
tree14dc67185521c1363ec2f564be07a33fb3a6c2ba
parent21b3ede39501c037231e69c89c2d18cbde156f5f (diff)
parent0e2e0973873fec4997d27fb3fdb262bfe252d102 (diff)
downloadmullvadvpn-eb3954f466a7dd19adf3883dc94c7c12f8990834.tar.xz
mullvadvpn-eb3954f466a7dd19adf3883dc94c7c12f8990834.zip
Merge branch 'fix-relay-features-not-being-found-on-cached-relays'
-rw-r--r--ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift21
-rw-r--r--ios/MullvadRESTTests/ServerRelayTests.swift10
-rw-r--r--ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift37
3 files changed, 26 insertions, 42 deletions
diff --git a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
index 134a6c7f0d..8d26081577 100644
--- a/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
+++ b/ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift
@@ -108,26 +108,7 @@ extension REST {
)
}
- // this is for the legacy DAITA flag, which will be deprecated in favour of a DAITA structure under Features
- public func override(daita: Bool) -> Self {
- ServerRelay(
- hostname: hostname,
- active: active,
- owned: owned,
- location: location,
- provider: provider,
- weight: weight,
- ipv4AddrIn: ipv4AddrIn,
- ipv6AddrIn: ipv6AddrIn,
- publicKey: publicKey,
- includeInCountry: includeInCountry,
- daita: daita,
- shadowsocksExtraAddrIn: shadowsocksExtraAddrIn,
- features: features
- )
- }
-
- public func override(features: ServerRelay.Features) -> Self {
+ public func override(features: ServerRelay.Features?) -> Self {
ServerRelay(
hostname: hostname,
active: active,
diff --git a/ios/MullvadRESTTests/ServerRelayTests.swift b/ios/MullvadRESTTests/ServerRelayTests.swift
index cadcc7c0b7..666702f996 100644
--- a/ios/MullvadRESTTests/ServerRelayTests.swift
+++ b/ios/MullvadRESTTests/ServerRelayTests.swift
@@ -123,12 +123,16 @@ class ServerRelayTests: XCTestCase {
)
}
- func testOverrideDaita() throws {
+ func testOverrideFeatures() throws {
let overrideRelay: REST.ServerRelay = self.mockServerRelay.override(
- daita: true
+ features: REST.ServerRelay.Features(
+ daita: REST.ServerRelay.Features.DAITA(),
+ quic: REST.ServerRelay.Features.QUIC(addrIn: [""], domain: "", token: "")
+ )
)
- XCTAssertEqual(overrideRelay.daita, true)
+ XCTAssertNotNil(overrideRelay.features?.daita)
+ XCTAssertNotNil(overrideRelay.features?.quic)
}
var shadowSocksExtraAddrIn: [String] {
diff --git a/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift b/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
index f640a34721..8470db9aa3 100644
--- a/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
+++ b/ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift
@@ -64,7 +64,7 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol, @unchecked Sendable {
do {
cachedRelays = try cache.read().cachedRelays
- try hotfixRelaysThatDoNotHaveDaita()
+ try hotfixRelaysThatDoNotHaveFeatures()
} catch {
logger.error(
error: error,
@@ -75,32 +75,31 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol, @unchecked Sendable {
}
}
- /// This method updates the cached relay to include daita information
+ /// This method updates the cached relay to include "feature" information
///
- /// This is a hotfix meant to upgrade clients shipped with 2024.5 or before that did not have
- /// daita information in their representation of `ServerRelay`.
- /// If a version <= 2024.5 is installed less than an hour before a new upgrade,
- /// no servers will be shown in locations when filtering for daita relays.
+ /// This is a hotfix meant to upgrade clients shipped with 2025.6 or before that did not have
+ /// feature information in their representation of `ServerRelay`.
+ /// If a version <= 2025.6 is installed less than an hour before a new upgrade,
+ /// no servers will be shown in locations when filtering for relays requiring a certain feature.
///
/// > Info: `relayCacheLock` does not need to be accessed here, this method should be ran from `init` only.
- private func hotfixRelaysThatDoNotHaveDaita() throws {
+ private func hotfixRelaysThatDoNotHaveFeatures() throws {
guard let cachedRelays else { return }
- let daitaPropertyMissing = cachedRelays.relays.wireguard.relays.first { $0.hasDaita } == nil
+ let featurePropertyMissing = cachedRelays.relays.wireguard.relays.first { $0.features != nil } == nil
// If the cached relays already have daita information, this fix is not necessary
- guard daitaPropertyMissing else { return }
+ guard featurePropertyMissing else { return }
let preBundledRelays = try cache.readPrebundledRelays().relays
- let preBundledDaitaRelays = preBundledRelays.wireguard.relays.filter { $0.hasDaita }
- var cachedRelaysWithFixedDaita = cachedRelays.relays.wireguard.relays
+ let preBundledFeatureRelays = preBundledRelays.wireguard.relays.filter { $0.features != nil }
+ var cachedRelaysWithFixedFeatures = cachedRelays.relays.wireguard.relays
- // For each daita enabled relay in the prebundled relays
- // Find the corresponding relay in the cache by matching relay hostnames
- // Then update it to toggle daita
- for index in 0 ..< cachedRelaysWithFixedDaita.endIndex {
- let relay = cachedRelaysWithFixedDaita[index]
- preBundledDaitaRelays.forEach {
+ // For each relay with features in the prebundled relays, find the corresponding relay
+ // in the cache by matching relay hostnames and update it.
+ for index in 0 ..< cachedRelaysWithFixedFeatures.endIndex {
+ let relay = cachedRelaysWithFixedFeatures[index]
+ preBundledFeatureRelays.forEach {
if $0.hostname == relay.hostname {
- cachedRelaysWithFixedDaita[index] = relay.override(daita: true)
+ cachedRelaysWithFixedFeatures[index] = relay.override(features: $0.features)
}
}
}
@@ -110,7 +109,7 @@ final class RelayCacheTracker: RelayCacheTrackerProtocol, @unchecked Sendable {
cachedRelays.relays.wireguard.ipv4Gateway,
ipv6Gateway: cachedRelays.relays.wireguard.ipv6Gateway,
portRanges: cachedRelays.relays.wireguard.portRanges,
- relays: cachedRelaysWithFixedDaita,
+ relays: cachedRelaysWithFixedFeatures,
shadowsocksPortRanges: cachedRelays.relays.wireguard.shadowsocksPortRanges
)