aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/VPN
diff options
context:
space:
mode:
authorRoopesh Chander <roop@roopc.net>2018-10-28 18:09:38 +0530
committerRoopesh Chander <roop@roopc.net>2018-10-28 18:09:38 +0530
commita680fdf2bd7c1e08085cce98129ed5448a53ffe5 (patch)
tree1a143ff18957636fbb98253bf2a42f982f2347a3 /WireGuard/WireGuard/VPN
parentVPN: Remove ability to deactivate the tunnel while resolving DNS (diff)
downloadwireguard-apple-a680fdf2bd7c1e08085cce98129ed5448a53ffe5.tar.xz
wireguard-apple-a680fdf2bd7c1e08085cce98129ed5448a53ffe5.zip
VPN: A tunnel may be already active on app startup
Signed-off-by: Roopesh Chander <roop@roopc.net>
Diffstat (limited to 'WireGuard/WireGuard/VPN')
-rw-r--r--WireGuard/WireGuard/VPN/TunnelsManager.swift30
1 files changed, 21 insertions, 9 deletions
diff --git a/WireGuard/WireGuard/VPN/TunnelsManager.swift b/WireGuard/WireGuard/VPN/TunnelsManager.swift
index 37b4b90..d320e1d 100644
--- a/WireGuard/WireGuard/VPN/TunnelsManager.swift
+++ b/WireGuard/WireGuard/VPN/TunnelsManager.swift
@@ -34,10 +34,18 @@ class TunnelsManager {
init(tunnelProviders: [NETunnelProviderManager]) {
var tunnels = tunnelProviders.map { TunnelContainer(tunnel: $0, index: 0) }
tunnels.sort { $0.name < $1.name }
+ var currentTunnel: TunnelContainer? = nil
for i in 0 ..< tunnels.count {
- tunnels[i].index = i
+ let tunnel = tunnels[i]
+ tunnel.index = i
+ if (tunnel.status != .inactive) {
+ currentTunnel = tunnel
+ }
}
self.tunnels = tunnels
+ if let currentTunnel = currentTunnel {
+ setCurrentTunnel(tunnel: currentTunnel)
+ }
}
static func create(completionHandler: @escaping (TunnelsManager?) -> Void) {
@@ -169,14 +177,7 @@ class TunnelsManager {
return
}
tunnel.startActivation(completionHandler: completionHandler)
- currentTunnel = tunnel
- currentTunnelStatusObservationToken = tunnel.observe(\.status) { [weak self] (tunnel, change) in
- guard let s = self else { return }
- if (tunnel.status == .inactive) {
- s.currentTunnel = nil
- s.currentTunnelStatusObservationToken = nil
- }
- }
+ setCurrentTunnel(tunnel: tunnel)
}
func startDeactivation(of tunnel: TunnelContainer, completionHandler: @escaping (Error?) -> Void) {
@@ -188,6 +189,17 @@ class TunnelsManager {
tunnel.startDeactivation()
}
+
+ private func setCurrentTunnel(tunnel: TunnelContainer) {
+ currentTunnel = tunnel
+ currentTunnelStatusObservationToken = tunnel.observe(\.status) { [weak self] (tunnel, change) in
+ guard let s = self else { return }
+ if (tunnel.status == .inactive) {
+ s.currentTunnel = nil
+ s.currentTunnelStatusObservationToken = nil
+ }
+ }
+ }
}
extension NETunnelProviderProtocol {