mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 23:40:45 +00:00
Sanitized test tailnet hostnames and re-ran the targeted macOS gateway discovery test suite before merge.
54 lines
1.8 KiB
Swift
54 lines
1.8 KiB
Swift
import OpenClawDiscovery
|
|
|
|
@MainActor
|
|
enum GatewayDiscoverySelectionSupport {
|
|
static func applyRemoteSelection(
|
|
gateway: GatewayDiscoveryModel.DiscoveredGateway,
|
|
state: AppState)
|
|
{
|
|
let preferredTransport = self.preferredTransport(
|
|
for: gateway,
|
|
current: state.remoteTransport)
|
|
if preferredTransport != state.remoteTransport {
|
|
state.remoteTransport = preferredTransport
|
|
}
|
|
|
|
state.remoteUrl = GatewayDiscoveryHelpers.directUrl(for: gateway) ?? ""
|
|
state.remoteTarget = GatewayDiscoveryHelpers.sshTarget(for: gateway) ?? ""
|
|
|
|
if let endpoint = GatewayDiscoveryHelpers.serviceEndpoint(for: gateway) {
|
|
OpenClawConfigFile.setRemoteGatewayUrl(
|
|
host: endpoint.host,
|
|
port: endpoint.port)
|
|
} else {
|
|
OpenClawConfigFile.clearRemoteGatewayUrl()
|
|
}
|
|
}
|
|
|
|
static func preferredTransport(
|
|
for gateway: GatewayDiscoveryModel.DiscoveredGateway,
|
|
current: AppState.RemoteTransport) -> AppState.RemoteTransport
|
|
{
|
|
if self.shouldPreferDirectTransport(for: gateway) {
|
|
return .direct
|
|
}
|
|
return current
|
|
}
|
|
|
|
static func shouldPreferDirectTransport(
|
|
for gateway: GatewayDiscoveryModel.DiscoveredGateway) -> Bool
|
|
{
|
|
guard GatewayDiscoveryHelpers.directUrl(for: gateway) != nil else { return false }
|
|
if gateway.stableID.hasPrefix("tailscale-serve|") {
|
|
return true
|
|
}
|
|
guard let host = GatewayDiscoveryHelpers.resolvedServiceHost(for: gateway)?
|
|
.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
.lowercased()
|
|
else {
|
|
return false
|
|
}
|
|
return host.hasSuffix(".ts.net")
|
|
}
|
|
}
|