diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-11-28 13:27:49 +0100 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-11-30 13:09:42 +0100 |
| commit | a72dc54bb561175bf5bf10391b4200e9b0b6ebdc (patch) | |
| tree | d594db4d091dbfa12ec933c87e09b7e9ea3f9631 | |
| parent | 4bf5b1c5df0776d18e7a31f40c0d840e508b4b22 (diff) | |
| download | mullvadvpn-a72dc54bb561175bf5bf10391b4200e9b0b6ebdc.tar.xz mullvadvpn-a72dc54bb561175bf5bf10391b4200e9b0b6ebdc.zip | |
Start tunnel monitoring upon receiving the first path update
| -rw-r--r-- | ios/MullvadTypes/PacketTunnelStatus.swift | 1 | ||||
| -rw-r--r-- | ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift | 34 |
2 files changed, 20 insertions, 15 deletions
diff --git a/ios/MullvadTypes/PacketTunnelStatus.swift b/ios/MullvadTypes/PacketTunnelStatus.swift index 1e4cbf18ba..2b5a1abf91 100644 --- a/ios/MullvadTypes/PacketTunnelStatus.swift +++ b/ios/MullvadTypes/PacketTunnelStatus.swift @@ -42,6 +42,7 @@ public struct PacketTunnelStatus: Codable, Equatable { /// Last performed device check. public var deviceCheck: DeviceCheck? + /// Current relay. public var tunnelRelay: PacketTunnelRelay? diff --git a/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift b/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift index 4614c8e733..eac8d21d0e 100644 --- a/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift +++ b/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift @@ -54,6 +54,10 @@ final class TunnelMonitor: PingerDelegate { /// Initialized and doing nothing. case stopped + /// Preparing to start. + /// Intermediate state before recieving the first path update. + case pendingStart + /// Establishing connection. case connecting @@ -167,7 +171,7 @@ final class TunnelMonitor: PingerDelegate { return maxEstablishTimeout } - case .connected, .waitingConnectivity, .stopped: + case .pendingStart, .connected, .waitingConnectivity, .stopped: return pingTimeout } } @@ -305,6 +309,7 @@ final class TunnelMonitor: PingerDelegate { } self.probeAddress = probeAddress + state.connectionState = .pendingStart let pathMonitor = NWPathMonitor() pathMonitor.pathUpdateHandler = { [weak self] path in @@ -312,16 +317,6 @@ final class TunnelMonitor: PingerDelegate { } pathMonitor.start(queue: internalQueue) self.pathMonitor = pathMonitor - - if isNetworkPathReachable(pathMonitor.currentPath) { - logger.debug("Start monitoring connection.") - - startMonitoring() - } else { - logger.debug("Wait for network to become reachable before starting monitoring.") - - state.connectionState = .waitingConnectivity - } } private func stopNoQueue(forRestart: Bool = false) { @@ -423,7 +418,7 @@ final class TunnelMonitor: PingerDelegate { case .connecting, .connected: self.startConnectivityCheckTimer() - case .stopped, .waitingConnectivity: + case .pendingStart, .stopped, .waitingConnectivity: break } } @@ -445,9 +440,18 @@ final class TunnelMonitor: PingerDelegate { let isReachable = isNetworkPathReachable(networkPath) switch (isReachable, state.connectionState) { + case (true, .pendingStart): + logger.debug("Start monitoring connection.") + startMonitoring() + sendDelegateNetworkStatusChange(isReachable) + + case (false, .pendingStart): + logger.debug("Wait for network to become reachable before starting monitoring.") + state.connectionState = .waitingConnectivity + sendDelegateNetworkStatusChange(isReachable) + case (true, .waitingConnectivity): logger.debug("Network is reachable. Resume monitoring.") - startMonitoring() sendDelegateNetworkStatusChange(isReachable) @@ -552,7 +556,7 @@ final class TunnelMonitor: PingerDelegate { case .connecting, .connected: startConnectivityCheckTimer() - case .stopped, .waitingConnectivity: + case .pendingStart, .stopped, .waitingConnectivity: break } } @@ -564,7 +568,7 @@ final class TunnelMonitor: PingerDelegate { case .connecting, .connected: stopConnectivityCheckTimer() - case .stopped, .waitingConnectivity: + case .pendingStart, .stopped, .waitingConnectivity: break } } |
