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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
//
// TunnelBlockObserver.swift
// MullvadVPN
//
// Created by pronebird on 26/10/2022.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import Foundation
import MullvadSettings
final class TunnelBlockObserver: TunnelObserver, @unchecked Sendable {
typealias DidLoadConfigurationHandler = (TunnelManager) -> Void
typealias DidUpdateTunnelStatusHandler = (TunnelManager, TunnelStatus) -> Void
typealias DidUpdateDeviceStateHandler = (
_ tunnelManager: TunnelManager,
_ deviceState: DeviceState,
_ previousDeviceState: DeviceState
) -> Void
typealias DidUpdateTunnelSettingsHandler = (TunnelManager, LatestTunnelSettings) -> Void
typealias DidFailWithErrorHandler = (TunnelManager, Error) -> Void
private let didLoadConfiguration: DidLoadConfigurationHandler?
private let didUpdateTunnelStatus: DidUpdateTunnelStatusHandler?
private let didUpdateDeviceState: DidUpdateDeviceStateHandler?
private let didUpdateTunnelSettings: DidUpdateTunnelSettingsHandler?
private let didFailWithError: DidFailWithErrorHandler?
init(
didLoadConfiguration: DidLoadConfigurationHandler? = nil,
didUpdateTunnelStatus: DidUpdateTunnelStatusHandler? = nil,
didUpdateDeviceState: DidUpdateDeviceStateHandler? = nil,
didUpdateTunnelSettings: DidUpdateTunnelSettingsHandler? = nil,
didFailWithError: DidFailWithErrorHandler? = nil
) {
self.didLoadConfiguration = didLoadConfiguration
self.didUpdateTunnelStatus = didUpdateTunnelStatus
self.didUpdateDeviceState = didUpdateDeviceState
self.didUpdateTunnelSettings = didUpdateTunnelSettings
self.didFailWithError = didFailWithError
}
func tunnelManagerDidLoadConfiguration(_ manager: TunnelManager) {
didLoadConfiguration?(manager)
}
func tunnelManager(_ manager: TunnelManager, didUpdateTunnelStatus tunnelStatus: TunnelStatus) {
didUpdateTunnelStatus?(manager, tunnelStatus)
}
func tunnelManager(
_ manager: TunnelManager,
didUpdateDeviceState deviceState: DeviceState,
previousDeviceState: DeviceState
) {
didUpdateDeviceState?(manager, deviceState, previousDeviceState)
}
func tunnelManager(_ manager: TunnelManager, didUpdateTunnelSettings tunnelSettings: LatestTunnelSettings) {
didUpdateTunnelSettings?(manager, tunnelSettings)
}
func tunnelManager(_ manager: TunnelManager, didFailWithError error: Error) {
didFailWithError?(manager, error)
}
}
|