diff options
| author | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-05-14 11:33:15 +0200 |
|---|---|---|
| committer | Steffen Ernst <steffen.ernst@mullvad.net> | 2025-05-20 15:46:45 +0200 |
| commit | 0e4a039d00562afdc30e92f2c3e2f769929a765b (patch) | |
| tree | 608ffdbc31de6b467dcae617d82e1c86ce696650 | |
| parent | f88e1464d8727b86bf0e36e25c6e1a2ad26e0230 (diff) | |
| download | mullvadvpn-0e4a039d00562afdc30e92f2c3e2f769929a765b.tar.xz mullvadvpn-0e4a039d00562afdc30e92f2c3e2f769929a765b.zip | |
Fix duplicate call to cache to validate port
| -rw-r--r-- | ios/MullvadREST/Relay/RelaySelectorWrapper.swift | 47 | ||||
| -rw-r--r-- | ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift | 2 |
2 files changed, 29 insertions, 20 deletions
diff --git a/ios/MullvadREST/Relay/RelaySelectorWrapper.swift b/ios/MullvadREST/Relay/RelaySelectorWrapper.swift index feb1d1e890..1a6487dca9 100644 --- a/ios/MullvadREST/Relay/RelaySelectorWrapper.swift +++ b/ios/MullvadREST/Relay/RelaySelectorWrapper.swift @@ -20,9 +20,14 @@ public final class RelaySelectorWrapper: RelaySelectorProtocol, Sendable { tunnelSettings: LatestTunnelSettings, connectionAttemptCount: UInt ) throws -> SelectedRelays { - try validateWireguardPort(tunnelSettings) + let relays = try relayCache.read().relays + try validateWireguardPort(tunnelSettings, relays: relays) - let obfuscation = try prepareObfuscation(for: tunnelSettings, connectionAttemptCount: connectionAttemptCount) + let obfuscation = try prepareObfuscation( + for: tunnelSettings, + connectionAttemptCount: connectionAttemptCount, + relays: relays + ) return switch tunnelSettings.tunnelMultihopState { case .off: @@ -43,7 +48,12 @@ public final class RelaySelectorWrapper: RelaySelectorProtocol, Sendable { } public func findCandidates(tunnelSettings: LatestTunnelSettings) throws -> RelayCandidates { - let obfuscation = try prepareObfuscation(for: tunnelSettings, connectionAttemptCount: 0) + let relays = try relayCache.read().relays + let obfuscation = try prepareObfuscation( + for: tunnelSettings, + connectionAttemptCount: 0, + relays: relays + ) let findCandidates: (REST.ServerRelaysResponse, Bool) throws -> [RelayWithLocation<REST.ServerRelay>] = { relays, daitaEnabled in @@ -70,32 +80,31 @@ public final class RelaySelectorWrapper: RelaySelectorProtocol, Sendable { private func prepareObfuscation( for tunnelSettings: LatestTunnelSettings, - connectionAttemptCount: UInt + connectionAttemptCount: UInt, + relays: REST.ServerRelaysResponse ) throws -> ObfuscatorPortSelection { - let relays = try relayCache.read().relays return try ObfuscatorPortSelector(relays: relays).obfuscate( tunnelSettings: tunnelSettings, connectionAttemptCount: connectionAttemptCount ) } - private func validateWireguardPort(_ tunnelSettings: LatestTunnelSettings) throws { - func isPortWithinValidWireGuardRanges(_ port: UInt16) throws -> Bool { - return try relayCache - .read().relays.wireguard.portRanges - .contains { range in - if let minPort = range.first, let maxPort = range.last { - return (minPort ... maxPort).contains(port) - } - - return false - } - } - + private func validateWireguardPort( + _ tunnelSettings: LatestTunnelSettings, + relays: REST.ServerRelaysResponse + ) throws { switch tunnelSettings.wireGuardObfuscation.state { case .automatic, .off: if case let .only(port) = tunnelSettings.relayConstraints.port { - guard try isPortWithinValidWireGuardRanges(port) else { + let isPortWithinValidWireGuardRanges: Bool = + relays.wireguard.portRanges + .contains { range in + if let minPort = range.first, let maxPort = range.last { + return (minPort ... maxPort).contains(port) + } + return false + } + guard isPortWithinValidWireGuardRanges else { throw NoRelaysSatisfyingConstraintsError(.invalidPort) } } diff --git a/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift b/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift index 74afb1370a..fcc71b4653 100644 --- a/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift +++ b/ios/MullvadVPNTests/MullvadREST/Relay/RelaySelectorTests.swift @@ -119,7 +119,7 @@ class RelaySelectorTests: XCTestCase { ) let allPorts = portRanges.flatMap { $0 } - var result = try pickRelay(by: constraints, in: sampleRelays, failedAttemptCount: 0) + let result = try pickRelay(by: constraints, in: sampleRelays, failedAttemptCount: 0) XCTAssertTrue(allPorts.contains(result.endpoint.ipv4Relay.port)) } |
