summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@kvadrat.se>2023-10-16 13:30:11 +0200
committerBug Magnet <marco.nikic@mullvad.net>2023-10-17 16:05:17 +0200
commitdd18767b98f4650ae130492db71e70cf8556b805 (patch)
tree300290695fc3ea19321eb78e71610afd56753095
parentaee7561656729014347a5dd741d9aa4eb06c410e (diff)
downloadmullvadvpn-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.swift32
-rw-r--r--ios/MullvadVPN/TunnelManager/TunnelManager.swift10
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()