diff options
| author | Emīls <emils@mullvad.net> | 2024-09-26 17:10:35 +0200 |
|---|---|---|
| committer | Emīls <emils@mullvad.net> | 2024-09-26 17:10:35 +0200 |
| commit | 5266cd4827418b0e6cfb62c174884406afa4c2a8 (patch) | |
| tree | 2adb34d22cf7dd1cb183e975fbd262b2ac60f44b /ios/MullvadRustRuntime | |
| parent | efabf7f31f512d48e5010d1246287a68704cada6 (diff) | |
| parent | 65c1c0148a05a0d8e6b62a34a5815431ff719f64 (diff) | |
| download | mullvadvpn-5266cd4827418b0e6cfb62c174884406afa4c2a8.tar.xz mullvadvpn-5266cd4827418b0e6cfb62c174884406afa4c2a8.zip | |
Merge branch 'use-encrypted-dns-proxy-code-in-mullvad-ios-ios-818'
Diffstat (limited to 'ios/MullvadRustRuntime')
| -rw-r--r-- | ios/MullvadRustRuntime/EncryptedDNSProxy.swift | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/ios/MullvadRustRuntime/EncryptedDNSProxy.swift b/ios/MullvadRustRuntime/EncryptedDNSProxy.swift new file mode 100644 index 0000000000..690e2459d0 --- /dev/null +++ b/ios/MullvadRustRuntime/EncryptedDNSProxy.swift @@ -0,0 +1,61 @@ +// +// EncryptedDNSProxy.swift +// MullvadRustRuntime +// +// Created by Emils on 24/09/2024. +// Copyright © 2024 Mullvad VPN AB. All rights reserved. +// + +import Foundation +import MullvadRustRuntimeProxy + +enum EncryptedDnsProxyError: Error { + case start(err: Int32) +} + +public class EncryptedDNSProxy { + private var proxyConfig: ProxyHandle + private var stateLock = NSLock() + private var didStart = false + private let state: OpaquePointer + + public init() { + state = encrypted_dns_proxy_init() + proxyConfig = ProxyHandle(context: nil, port: 0) + } + + public func localPort() -> UInt16 { + stateLock.lock() + defer { stateLock.unlock() } + return proxyConfig.port + } + + public func start() throws { + stateLock.lock() + defer { stateLock.unlock() } + guard didStart == false else { return } + + let err = encrypted_dns_proxy_start(state, &proxyConfig) + if err != 0 { + throw EncryptedDnsProxyError.start(err: err) + } + didStart = true + } + + public func stop() { + stateLock.lock() + defer { stateLock.unlock() } + guard didStart == true else { return } + didStart = false + + encrypted_dns_proxy_stop(&proxyConfig) + } + + deinit { + if didStart { + encrypted_dns_proxy_stop(&proxyConfig) + } + + encrypted_dns_proxy_free(state) + } +} |
