summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift31
1 files changed, 18 insertions, 13 deletions
diff --git a/ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift b/ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift
index 1083ab5e89..f746ae1778 100644
--- a/ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift
+++ b/ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift
@@ -37,6 +37,8 @@ class MapConnectionStatusOperation: AsyncOperation {
override func main() {
guard let tunnel = interactor.tunnel else {
+ setTunnelDisconnectedStatus()
+
finish()
return
}
@@ -98,12 +100,7 @@ class MapConnectionStatusOperation: AsyncOperation {
interactor.startTunnel()
default:
- interactor.updateTunnelStatus { tunnelStatus in
- tunnelStatus = TunnelStatus()
- tunnelStatus.state = pathStatus == .unsatisfied
- ? .waitingForConnectivity(.noNetwork)
- : .disconnected
- }
+ setTunnelDisconnectedStatus()
}
case .disconnecting:
@@ -112,18 +109,17 @@ class MapConnectionStatusOperation: AsyncOperation {
break
default:
interactor.updateTunnelStatus { tunnelStatus in
+ let packetTunnelStatus = tunnelStatus.packetTunnelStatus
+
tunnelStatus = TunnelStatus()
- tunnelStatus.state = .disconnecting(.nothing)
+ tunnelStatus.state = packetTunnelStatus.isNetworkReachable
+ ? .disconnecting(.nothing)
+ : .waitingForConnectivity(.noNetwork)
}
}
case .invalid:
- interactor.updateTunnelStatus { tunnelStatus in
- tunnelStatus = TunnelStatus()
- tunnelStatus.state = pathStatus == .unsatisfied
- ? .waitingForConnectivity(.noNetwork)
- : .disconnected
- }
+ setTunnelDisconnectedStatus()
@unknown default:
logger.debug("Unknown NEVPNStatus: \(connectionStatus.rawValue)")
@@ -136,6 +132,15 @@ class MapConnectionStatusOperation: AsyncOperation {
request?.cancel()
}
+ private func setTunnelDisconnectedStatus() {
+ interactor.updateTunnelStatus { tunnelStatus in
+ tunnelStatus = TunnelStatus()
+ tunnelStatus.state = pathStatus == .unsatisfied
+ ? .waitingForConnectivity(.noNetwork)
+ : .disconnected
+ }
+ }
+
private func fetchTunnelStatus(
tunnel: Tunnel,
mapToState: @escaping (PacketTunnelStatus) -> TunnelState?