diff options
| -rw-r--r-- | ios/PacketTunnel/PacketTunnelProvider.swift | 7 | ||||
| -rw-r--r-- | ios/PacketTunnel/TunnelMonitor/TunnelMonitor.swift | 37 |
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) |
