summaryrefslogtreecommitdiffhomepage
path: root/ios
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-08-31 11:40:44 +0200
committerAndrej Mihajlov <and@mullvad.net>2022-09-21 10:33:13 +0200
commit613f82df14bc9f4f5e92cc20f24d853dda0c8a9b (patch)
tree04b1b32aeaa39112d7737efe26a0705055d3b674 /ios
parent8b4a8b6d0180607de0aadf207e46865063574765 (diff)
downloadmullvadvpn-613f82df14bc9f4f5e92cc20f24d853dda0c8a9b.tar.xz
mullvadvpn-613f82df14bc9f4f5e92cc20f24d853dda0c8a9b.zip
Handle sleep cycle in tunnel monitor
Diffstat (limited to 'ios')
-rw-r--r--ios/PacketTunnel/PacketTunnelProvider.swift7
-rw-r--r--ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift37
2 files changed, 41 insertions, 3 deletions
diff --git a/ios/PacketTunnel/PacketTunnelProvider.swift b/ios/PacketTunnel/PacketTunnelProvider.swift
index c2b64fb07e..3eefd5ec7a 100644
--- a/ios/PacketTunnel/PacketTunnelProvider.swift
+++ b/ios/PacketTunnel/PacketTunnelProvider.swift
@@ -242,12 +242,13 @@ class PacketTunnelProvider: NEPacketTunnelProvider, TunnelMonitorDelegate {
}
override func sleep(completionHandler: @escaping () -> Void) {
- // Add code here to get ready to sleep.
- completionHandler()
+ tunnelMonitor.onSleep {
+ completionHandler()
+ }
}
override func wake() {
- // Add code here to wake up.
+ tunnelMonitor.onWake()
}
// MARK: - TunnelMonitorDelegate
diff --git a/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift b/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift
index 9b8dfe2d9b..f132817fd0 100644
--- a/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift
+++ b/ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift
@@ -263,6 +263,19 @@ final class TunnelMonitor: PingerDelegate {
}
}
+ func onWake() {
+ internalQueue.async {
+ self.onWakeNoQueue()
+ }
+ }
+
+ func onSleep(completion: @escaping () -> Void) {
+ internalQueue.async {
+ self.onSleepNoQueue()
+ completion()
+ }
+ }
+
// MARK: - PingerDelegate
func pinger(
@@ -531,6 +544,30 @@ final class TunnelMonitor: PingerDelegate {
timer = nil
}
+ private func onWakeNoQueue() {
+ logger.debug("Wake up.")
+
+ switch state.connectionState {
+ case .connecting, .connected:
+ startConnectivityCheckTimer()
+
+ case .stopped, .waitingConnectivity:
+ break
+ }
+ }
+
+ private func onSleepNoQueue() {
+ logger.debug("Prepare to sleep.")
+
+ switch state.connectionState {
+ case .connecting, .connected:
+ stopConnectivityCheckTimer()
+
+ case .stopped, .waitingConnectivity:
+ break
+ }
+ }
+
private func sendDelegateConnectionEstablished() {
delegateQueue.async {
self.delegate?.tunnelMonitorDidDetermineConnectionEstablished(self)