iOS: Hack to restart active tunnel after adding a new tunnel

Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
Roopesh Chander 2019-02-24 19:30:14 +05:30
parent ab6d714070
commit 5ed28907ec
1 changed files with 16 additions and 1 deletions

View File

@ -115,6 +115,8 @@ class TunnelsManager {
activateOnDemandSetting.apply(on: tunnelProviderManager) activateOnDemandSetting.apply(on: tunnelProviderManager)
let activeTunnel = tunnels.first { $0.status == .active || $0.status == .activating }
tunnelProviderManager.saveToPreferences { [weak self] error in tunnelProviderManager.saveToPreferences { [weak self] error in
guard error == nil else { guard error == nil else {
wg_log(.error, message: "Add: Saving configuration failed: \(error!)") wg_log(.error, message: "Add: Saving configuration failed: \(error!)")
@ -125,6 +127,19 @@ class TunnelsManager {
guard let self = self else { return } guard let self = self else { return }
#if os(iOS)
// HACK: In iOS, adding a tunnel causes deactivation of any currently active tunnel.
// This is an ugly hack to reactivate the tunnel that has been deactivated like that.
if let activeTunnel = activeTunnel {
if activeTunnel.status == .inactive || activeTunnel.status == .deactivating {
self.startActivation(of: activeTunnel)
}
if activeTunnel.status == .active || activeTunnel.status == .activating {
activeTunnel.status = .restarting
}
}
#endif
let tunnel = TunnelContainer(tunnel: tunnelProviderManager) let tunnel = TunnelContainer(tunnel: tunnelProviderManager)
self.tunnels.append(tunnel) self.tunnels.append(tunnel)
self.tunnels.sort { $0.name < $1.name } self.tunnels.sort { $0.name < $1.name }
@ -440,7 +455,7 @@ class TunnelContainer: NSObject {
} }
func refreshStatus() { func refreshStatus() {
if (status == .restarting) && (tunnelProvider.connection.status == .disconnected || tunnelProvider.connection.status == .disconnecting) { if status == .restarting {
return return
} }
status = TunnelStatus(from: tunnelProvider.connection.status) status = TunnelStatus(from: tunnelProvider.connection.status)