From 71045bf0dd85dd9d95758963ba4498026b0ad722 Mon Sep 17 00:00:00 2001 From: relikd Date: Thu, 17 Sep 2020 13:46:18 +0200 Subject: [PATCH] Ignore forceDisconnect on background recording --- GlassVPN/PacketTunnelProvider.swift | 16 +++++++--------- main/GlassVPNHook.swift | 4 ++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/GlassVPN/PacketTunnelProvider.swift b/GlassVPN/PacketTunnelProvider.swift index 48f450d..1a51312 100644 --- a/GlassVPN/PacketTunnelProvider.swift +++ b/GlassVPN/PacketTunnelProvider.swift @@ -17,19 +17,17 @@ class LDObserverFactory: ObserverFactory { override func signal(_ event: ProxySocketEvent) { switch event { case .receivedRequest(let session, let socket): - if socket.isCancelled || - (hook.forceDisconnectUnresolvable && session.ipAddress.isEmpty) { + var kill = !hook.isBackgroundRecording && hook.forceDisconnectUnresolvable && session.ipAddress.isEmpty + if kill || socket.isCancelled { // isCancelled is set by branch below hook.silentlyPrevented(session.host) - socket.forceDisconnect() - return + } else { + kill = hook.processDNSRequest(session.host) } - let kill = hook.processDNSRequest(session.host) if kill { socket.forceDisconnect() } case .readData(let data, on: let socket): - if hook.forceDisconnectSWCD, - data.starts(with: connectMessage), - data.range(of: swcdUserAgent) != nil { - socket.disconnect() + if !hook.isBackgroundRecording, hook.forceDisconnectSWCD, + data.starts(with: connectMessage), data.range(of: swcdUserAgent) != nil { + socket.disconnect() // sets isCancelled above } default: break diff --git a/main/GlassVPNHook.swift b/main/GlassVPNHook.swift index c8fed18..90d09db 100644 --- a/main/GlassVPNHook.swift +++ b/main/GlassVPNHook.swift @@ -10,6 +10,7 @@ class GlassVPNHook { private var cachedNotify: CachedConnectionAlert! private var currentlyRecording: Bool = false + public var isBackgroundRecording: Bool = false public var forceDisconnectUnresolvable: Bool = false public var forceDisconnectSWCD: Bool = false @@ -22,6 +23,7 @@ class GlassVPNHook { setAutoDelete(PrefsShared.AutoDeleteLogsDays) cachedNotify = CachedConnectionAlert() currentlyRecording = PrefsShared.CurrentlyRecording != .Off + isBackgroundRecording = PrefsShared.CurrentlyRecording == .Background forceDisconnectUnresolvable = PrefsShared.ForceDisconnectUnresolvableDNS forceDisconnectSWCD = PrefsShared.ForceDisconnectSWCD } @@ -34,6 +36,7 @@ class GlassVPNHook { autoDeleteTimer?.invalidate() cachedNotify = nil currentlyRecording = false + isBackgroundRecording = false forceDisconnectUnresolvable = false forceDisconnectSWCD = false } @@ -57,6 +60,7 @@ class GlassVPNHook { case "recording-now": let newState = CurrentRecordingState(rawValue: Int(value) ?? 0) currentlyRecording = newState != .Off + isBackgroundRecording = newState == .Background return case "disconnect-unresolvable": forceDisconnectUnresolvable = value == "1"