blob: 1126522f635cf86027422b50cae3c0c6e3818910 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
//
// TunnelStatusBlockObserver.swift
// MullvadVPN
//
// Created by Marco Nikic on 2023-10-03.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import Foundation
import NetworkExtension
final class TunnelStatusBlockObserver: TunnelStatusObserver, @unchecked Sendable {
typealias Handler = (any TunnelProtocol, NEVPNStatus) -> Void
private weak var tunnel: (any TunnelProtocol)?
private let queue: DispatchQueue?
private let handler: Handler
init(tunnel: any TunnelProtocol, queue: DispatchQueue?, handler: @escaping Handler) {
self.tunnel = tunnel
self.queue = queue
self.handler = handler
}
func invalidate() {
tunnel?.removeObserver(self)
}
func tunnel(_ tunnel: any TunnelProtocol, didReceiveStatus status: NEVPNStatus) {
let block: @Sendable () -> Void = {
self.handler(tunnel, status)
}
if let queue {
queue.async(execute: block)
} else {
block()
}
}
}
|