summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadRustRuntime
diff options
context:
space:
mode:
authorEmīls <emils@mullvad.net>2024-09-26 17:10:35 +0200
committerEmīls <emils@mullvad.net>2024-09-26 17:10:35 +0200
commit5266cd4827418b0e6cfb62c174884406afa4c2a8 (patch)
tree2adb34d22cf7dd1cb183e975fbd262b2ac60f44b /ios/MullvadRustRuntime
parentefabf7f31f512d48e5010d1246287a68704cada6 (diff)
parent65c1c0148a05a0d8e6b62a34a5815431ff719f64 (diff)
downloadmullvadvpn-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.swift61
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)
+ }
+}