summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-11-28 13:27:49 +0100
committerAndrej Mihajlov <and@mullvad.net>2022-11-30 13:09:42 +0100
commita72dc54bb561175bf5bf10391b4200e9b0b6ebdc (patch)
treed594db4d091dbfa12ec933c87e09b7e9ea3f9631
parent4bf5b1c5df0776d18e7a31f40c0d840e508b4b22 (diff)
downloadmullvadvpn-a72dc54bb561175bf5bf10391b4200e9b0b6ebdc.tar.xz
mullvadvpn-a72dc54bb561175bf5bf10391b4200e9b0b6ebdc.zip
Start tunnel monitoring upon receiving the first path update
-rw-r--r--ios/MullvadTypes/PacketTunnelStatus.swift1
-rw-r--r--ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift34
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
}
}