iOS: allow unicast DNS-SD discovery domain

This commit is contained in:
Peter Steinberger
2025-12-17 14:14:17 +01:00
parent c4da2afb22
commit 316a04f606
6 changed files with 134 additions and 4 deletions

View File

@@ -20,8 +20,9 @@ final class BridgeConnectionController {
self.appModel = appModel
BridgeSettingsStore.bootstrapPersistence()
self.discovery.setDebugLoggingEnabled(
UserDefaults.standard.bool(forKey: "bridge.discovery.debugLogs"))
let defaults = UserDefaults.standard
self.discovery.setDebugLoggingEnabled(defaults.bool(forKey: "bridge.discovery.debugLogs"))
self.discovery.setServiceDomain(defaults.string(forKey: "bridge.discovery.domain"))
self.updateFromDiscovery()
self.observeDiscovery()
@@ -35,6 +36,10 @@ final class BridgeConnectionController {
self.discovery.setDebugLoggingEnabled(enabled)
}
func setDiscoveryDomain(_ domain: String?) {
self.discovery.setServiceDomain(domain)
}
func setScenePhase(_ phase: ScenePhase) {
switch phase {
case .background:

View File

@@ -27,6 +27,7 @@ final class BridgeDiscoveryModel {
private var browser: NWBrowser?
private var debugLoggingEnabled = false
private var lastStableIDs = Set<String>()
private var serviceDomain: String = ClawdisBonjour.bridgeServiceDomain
func setDebugLoggingEnabled(_ enabled: Bool) {
let wasEnabled = self.debugLoggingEnabled
@@ -39,13 +40,25 @@ final class BridgeDiscoveryModel {
}
}
func setServiceDomain(_ domain: String?) {
let normalized = ClawdisBonjour.normalizeServiceDomain(domain)
guard normalized != self.serviceDomain else { return }
self.appendDebugLog("service domain: \(self.serviceDomain)\(normalized)")
self.serviceDomain = normalized
if self.browser != nil {
self.stop()
self.start()
}
}
func start() {
if self.browser != nil { return }
self.appendDebugLog("start()")
let params = NWParameters.tcp
params.includePeerToPeer = true
let browser = NWBrowser(
for: .bonjour(type: ClawdisBonjour.bridgeServiceType, domain: ClawdisBonjour.bridgeServiceDomain),
for: .bonjour(type: ClawdisBonjour.bridgeServiceType, domain: self.serviceDomain),
using: params)
browser.stateUpdateHandler = { [weak self] state in