summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/TunnelManager/TunnelBlockObserver.swift
blob: bf3610bacefe55354d80e1cd4476d3f9102e80b1 (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
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)
    }
}