summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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)