diff options
| author | Jon Petersson <jon.petersson@mullvad.net> | 2025-08-28 10:17:37 +0200 |
|---|---|---|
| committer | Jon Petersson <jon.petersson@mullvad.net> | 2025-08-28 10:17:37 +0200 |
| commit | eb3954f466a7dd19adf3883dc94c7c12f8990834 (patch) | |
| tree | 14dc67185521c1363ec2f564be07a33fb3a6c2ba | |
| parent | 21b3ede39501c037231e69c89c2d18cbde156f5f (diff) | |
| parent | 0e2e0973873fec4997d27fb3fdb262bfe252d102 (diff) | |
| download | mullvadvpn-eb3954f466a7dd19adf3883dc94c7c12f8990834.tar.xz mullvadvpn-eb3954f466a7dd19adf3883dc94c7c12f8990834.zip | |
Merge branch 'fix-relay-features-not-being-found-on-cached-relays'
| -rw-r--r-- | ios/MullvadREST/ApiHandlers/ServerRelaysResponse.swift | 21 | ||||
| -rw-r--r-- | ios/MullvadRESTTests/ServerRelayTests.swift | 10 | ||||
| -rw-r--r-- | ios/MullvadVPN/RelayCacheTracker/RelayCacheTracker.swift | 37 |
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 ) |
