diff options
| author | Jon Petersson <jon.petersson@kvadrat.se> | 2023-10-16 13:30:11 +0200 |
|---|---|---|
| committer | Bug Magnet <marco.nikic@mullvad.net> | 2023-10-17 16:05:17 +0200 |
| commit | dd18767b98f4650ae130492db71e70cf8556b805 (patch) | |
| tree | 300290695fc3ea19321eb78e71610afd56753095 | |
| parent | aee7561656729014347a5dd741d9aa4eb06c410e (diff) | |
| download | mullvadvpn-dd18767b98f4650ae130492db71e70cf8556b805.tar.xz mullvadvpn-dd18767b98f4650ae130492db71e70cf8556b805.zip | |
Put app in blocked state on tunnel start if relay constraints cannot be satisfied
Signed-off-by: Bug Magnet <marco.nikic@mullvad.net>
| -rw-r--r-- | ios/MullvadVPN/TunnelManager/StartTunnelOperation.swift | 32 | ||||
| -rw-r--r-- | ios/MullvadVPN/TunnelManager/TunnelManager.swift | 10 |
2 files changed, 12 insertions, 30 deletions
diff --git a/ios/MullvadVPN/TunnelManager/StartTunnelOperation.swift b/ios/MullvadVPN/TunnelManager/StartTunnelOperation.swift index 86dce49a3a..525dade2cd 100644 --- a/ios/MullvadVPN/TunnelManager/StartTunnelOperation.swift +++ b/ios/MullvadVPN/TunnelManager/StartTunnelOperation.swift @@ -50,14 +50,8 @@ class StartTunnelOperation: ResultOperation<Void> { finish(result: .success(())) case .disconnected, .pendingReconnect: - do { - let selectedRelay = try interactor.selectRelay() - - makeTunnelProviderAndStartTunnel(selectedRelay: selectedRelay) { error in - self.finish(result: error.map { .failure($0) } ?? .success(())) - } - } catch { - finish(result: .failure(error)) + makeTunnelProviderAndStartTunnel { error in + self.finish(result: error.map { .failure($0) } ?? .success(())) } default: @@ -65,18 +59,11 @@ class StartTunnelOperation: ResultOperation<Void> { } } - private func makeTunnelProviderAndStartTunnel( - selectedRelay: SelectedRelay, - completionHandler: @escaping (Error?) -> Void - ) { + private func makeTunnelProviderAndStartTunnel(completionHandler: @escaping (Error?) -> Void) { makeTunnelProvider { result in self.dispatchQueue.async { do { - try self.startTunnel( - tunnel: try result.get(), - selectedRelay: selectedRelay - ) - + try self.startTunnel(tunnel: result.get()) completionHandler(nil) } catch { completionHandler(error) @@ -85,11 +72,14 @@ class StartTunnelOperation: ResultOperation<Void> { } } - private func startTunnel(tunnel: any TunnelProtocol, selectedRelay: SelectedRelay) throws { + private func startTunnel(tunnel: any TunnelProtocol) throws { + let selectedRelay = try? interactor.selectRelay() var tunnelOptions = PacketTunnelOptions() do { - try tunnelOptions.setSelectedRelay(selectedRelay) + if let selectedRelay { + try tunnelOptions.setSelectedRelay(selectedRelay) + } } catch { logger.error( error: error, @@ -101,8 +91,8 @@ class StartTunnelOperation: ResultOperation<Void> { interactor.updateTunnelStatus { tunnelStatus in tunnelStatus = TunnelStatus() - tunnelStatus.packetTunnelStatus.tunnelRelay = selectedRelay.packetTunnelRelay - tunnelStatus.state = .connecting(selectedRelay.packetTunnelRelay) + tunnelStatus.packetTunnelStatus.tunnelRelay = selectedRelay?.packetTunnelRelay + tunnelStatus.state = .connecting(selectedRelay?.packetTunnelRelay) } try tunnel.start(options: tunnelOptions.rawOptions()) diff --git a/ios/MullvadVPN/TunnelManager/TunnelManager.swift b/ios/MullvadVPN/TunnelManager/TunnelManager.swift index ab178dba38..e35827e114 100644 --- a/ios/MullvadVPN/TunnelManager/TunnelManager.swift +++ b/ios/MullvadVPN/TunnelManager/TunnelManager.swift @@ -283,18 +283,10 @@ final class TunnelManager: StorePaymentObserver { throw UnsetTunnelError() } - let nextRelay: NextRelay = selectNewRelay ? .preSelected(try self.selectRelay()) : .current - - return tunnel.reconnectTunnel(to: nextRelay) { result in + return tunnel.reconnectTunnel(to: selectNewRelay ? .random : .current) { result in finish(result.error) } } catch { - if error is NoRelaysSatisfyingConstraintsError { - _ = self.setTunnelStatus { tunnelStatus in - tunnelStatus.state = .error(.noRelaysSatisfyingConstraints) - } - } - finish(error) return AnyCancellable() |
