diff options
| -rw-r--r-- | ios/MullvadVPN/TunnelManager/MapConnectionStatusOperation.swift | 31 |
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? |
