iOS: Hack to restart active tunnel after adding a new tunnel
Signed-off-by: Roopesh Chander <roop@roopc.net>
This commit is contained in:
parent
ab6d714070
commit
5ed28907ec
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue