Ignore forceDisconnect on background recording

This commit is contained in:
relikd
2020-09-17 13:46:18 +02:00
parent 27abdd66f5
commit 71045bf0dd
2 changed files with 11 additions and 9 deletions

View File

@@ -17,19 +17,17 @@ class LDObserverFactory: ObserverFactory {
override func signal(_ event: ProxySocketEvent) { override func signal(_ event: ProxySocketEvent) {
switch event { switch event {
case .receivedRequest(let session, let socket): case .receivedRequest(let session, let socket):
if socket.isCancelled || var kill = !hook.isBackgroundRecording && hook.forceDisconnectUnresolvable && session.ipAddress.isEmpty
(hook.forceDisconnectUnresolvable && session.ipAddress.isEmpty) { if kill || socket.isCancelled { // isCancelled is set by branch below
hook.silentlyPrevented(session.host) hook.silentlyPrevented(session.host)
socket.forceDisconnect() } else {
return kill = hook.processDNSRequest(session.host)
} }
let kill = hook.processDNSRequest(session.host)
if kill { socket.forceDisconnect() } if kill { socket.forceDisconnect() }
case .readData(let data, on: let socket): case .readData(let data, on: let socket):
if hook.forceDisconnectSWCD, if !hook.isBackgroundRecording, hook.forceDisconnectSWCD,
data.starts(with: connectMessage), data.starts(with: connectMessage), data.range(of: swcdUserAgent) != nil {
data.range(of: swcdUserAgent) != nil { socket.disconnect() // sets isCancelled above
socket.disconnect()
} }
default: default:
break break

View File

@@ -10,6 +10,7 @@ class GlassVPNHook {
private var cachedNotify: CachedConnectionAlert! private var cachedNotify: CachedConnectionAlert!
private var currentlyRecording: Bool = false private var currentlyRecording: Bool = false
public var isBackgroundRecording: Bool = false
public var forceDisconnectUnresolvable: Bool = false public var forceDisconnectUnresolvable: Bool = false
public var forceDisconnectSWCD: Bool = false public var forceDisconnectSWCD: Bool = false
@@ -22,6 +23,7 @@ class GlassVPNHook {
setAutoDelete(PrefsShared.AutoDeleteLogsDays) setAutoDelete(PrefsShared.AutoDeleteLogsDays)
cachedNotify = CachedConnectionAlert() cachedNotify = CachedConnectionAlert()
currentlyRecording = PrefsShared.CurrentlyRecording != .Off currentlyRecording = PrefsShared.CurrentlyRecording != .Off
isBackgroundRecording = PrefsShared.CurrentlyRecording == .Background
forceDisconnectUnresolvable = PrefsShared.ForceDisconnectUnresolvableDNS forceDisconnectUnresolvable = PrefsShared.ForceDisconnectUnresolvableDNS
forceDisconnectSWCD = PrefsShared.ForceDisconnectSWCD forceDisconnectSWCD = PrefsShared.ForceDisconnectSWCD
} }
@@ -34,6 +36,7 @@ class GlassVPNHook {
autoDeleteTimer?.invalidate() autoDeleteTimer?.invalidate()
cachedNotify = nil cachedNotify = nil
currentlyRecording = false currentlyRecording = false
isBackgroundRecording = false
forceDisconnectUnresolvable = false forceDisconnectUnresolvable = false
forceDisconnectSWCD = false forceDisconnectSWCD = false
} }
@@ -57,6 +60,7 @@ class GlassVPNHook {
case "recording-now": case "recording-now":
let newState = CurrentRecordingState(rawValue: Int(value) ?? 0) let newState = CurrentRecordingState(rawValue: Int(value) ?? 0)
currentlyRecording = newState != .Off currentlyRecording = newState != .Off
isBackgroundRecording = newState == .Background
return return
case "disconnect-unresolvable": case "disconnect-unresolvable":
forceDisconnectUnresolvable = value == "1" forceDisconnectUnresolvable = value == "1"