fix address
This commit is contained in:
parent
2e9a3f2c97
commit
95e20fc6fe
@ -157,7 +157,7 @@ actor SDLContextActor {
|
|||||||
await self.puncherActor.start()
|
await self.puncherActor.start()
|
||||||
await self.arpResolver.start()
|
await self.arpResolver.start()
|
||||||
|
|
||||||
let dnsService = DNSService(serverAddress: self.config.serverAddress, publicDnsServers: self.publicDnsServers) { [weak self] event in
|
let dnsService = DNSService(serverIP: self.config.serverEndpoint.ip, publicDnsServers: self.publicDnsServers) { [weak self] event in
|
||||||
await self?.handleDNSEvent(event)
|
await self?.handleDNSEvent(event)
|
||||||
}
|
}
|
||||||
self.dnsService = dnsService
|
self.dnsService = dnsService
|
||||||
@ -173,7 +173,7 @@ actor SDLContextActor {
|
|||||||
await self.udpHoleServiceProxy.replace(udpHoleService)
|
await self.udpHoleServiceProxy.replace(udpHoleService)
|
||||||
await udpHoleService.start(includeV6: false)
|
await udpHoleService.start(includeV6: false)
|
||||||
|
|
||||||
let superService = SDLSuperService(serverName: self.config.serverName, serverAddress: self.config.serverAddress) { [weak self] message in
|
let superService = SDLSuperService(serverEndpoint: self.config.serverEndpoint) { [weak self] message in
|
||||||
await self?.handleSuperMessage(message: message)
|
await self?.handleSuperMessage(message: message)
|
||||||
}
|
}
|
||||||
await self.superServiceProxy.replace(superService)
|
await self.superServiceProxy.replace(superService)
|
||||||
|
|||||||
@ -32,10 +32,10 @@ final class DNSCloudClient {
|
|||||||
private let packetContinuation: AsyncThrowingStream<Data, Error>.Continuation
|
private let packetContinuation: AsyncThrowingStream<Data, Error>.Continuation
|
||||||
private var isPacketContinuationFinished: Bool = false
|
private var isPacketContinuationFinished: Bool = false
|
||||||
|
|
||||||
/// - Parameter serverAddress: 你的 sn-server 地址 (如 "8.8.8.8")
|
/// - Parameter serverIP: 你的 sn-server IP 地址 (如 "8.8.8.8")
|
||||||
/// - Parameter port: 端口 (如 53)
|
/// - Parameter port: 端口 (如 53)
|
||||||
init(serverAddress: String, port: UInt16) {
|
init(serverIP: String, port: UInt16) {
|
||||||
self.dnsServerAddress = .hostPort(host: Self.makeEndpointHost(address: serverAddress), port: NWEndpoint.Port(integerLiteral: port))
|
self.dnsServerAddress = .hostPort(host: Self.makeEndpointHost(address: serverIP), port: NWEndpoint.Port(integerLiteral: port))
|
||||||
|
|
||||||
let packetPair = AsyncThrowingStream.makeStream(of: Data.self)
|
let packetPair = AsyncThrowingStream.makeStream(of: Data.self)
|
||||||
self.packetFlow = packetPair.stream
|
self.packetFlow = packetPair.stream
|
||||||
|
|||||||
@ -8,7 +8,7 @@ actor DNSService {
|
|||||||
|
|
||||||
typealias EventHandler = @Sendable (Event) async -> Void
|
typealias EventHandler = @Sendable (Event) async -> Void
|
||||||
|
|
||||||
private let serverAddress: String
|
private let serverIP: String
|
||||||
private let publicDnsServers: [String]
|
private let publicDnsServers: [String]
|
||||||
private let onEvent: EventHandler
|
private let onEvent: EventHandler
|
||||||
|
|
||||||
@ -18,8 +18,8 @@ actor DNSService {
|
|||||||
private var dnsLocalClient: DNSLocalClient?
|
private var dnsLocalClient: DNSLocalClient?
|
||||||
private var dnsLocalMonitorTask: Task<Void, Never>?
|
private var dnsLocalMonitorTask: Task<Void, Never>?
|
||||||
|
|
||||||
init(serverAddress: String, publicDnsServers: [String], onEvent: @escaping EventHandler) {
|
init(serverIP: String, publicDnsServers: [String], onEvent: @escaping EventHandler) {
|
||||||
self.serverAddress = serverAddress
|
self.serverIP = serverIP
|
||||||
self.publicDnsServers = publicDnsServers
|
self.publicDnsServers = publicDnsServers
|
||||||
self.onEvent = onEvent
|
self.onEvent = onEvent
|
||||||
}
|
}
|
||||||
@ -88,7 +88,7 @@ actor DNSService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func runCloud() async throws {
|
private func runCloud() async throws {
|
||||||
let dnsClient = DNSCloudClient(serverAddress: self.serverAddress, port: 15353)
|
let dnsClient = DNSCloudClient(serverIP: self.serverIP, port: 15353)
|
||||||
self.dnsClient = dnsClient
|
self.dnsClient = dnsClient
|
||||||
dnsClient.start()
|
dnsClient.start()
|
||||||
|
|
||||||
|
|||||||
@ -45,11 +45,16 @@ public class SDLConfiguration {
|
|||||||
let exitNodeIp: UInt32
|
let exitNodeIp: UInt32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解析的服务器地址信息
|
||||||
|
public struct ResolvedServerEndpoint: Sendable {
|
||||||
|
let host: String
|
||||||
|
let ip: String
|
||||||
|
}
|
||||||
|
|
||||||
// 当前的客户端版本
|
// 当前的客户端版本
|
||||||
let version: Int
|
let version: Int
|
||||||
|
|
||||||
let serverName: String
|
let serverEndpoint: ResolvedServerEndpoint
|
||||||
let serverAddress: String
|
|
||||||
|
|
||||||
let stunSocketAddress: SocketAddress
|
let stunSocketAddress: SocketAddress
|
||||||
|
|
||||||
@ -65,8 +70,7 @@ public class SDLConfiguration {
|
|||||||
var exitNode: ExitNode?
|
var exitNode: ExitNode?
|
||||||
|
|
||||||
public init(version: Int,
|
public init(version: Int,
|
||||||
serverName: String,
|
serverEndpoint: ResolvedServerEndpoint,
|
||||||
serverAddress: String,
|
|
||||||
stunServers: [String],
|
stunServers: [String],
|
||||||
clientId: String,
|
clientId: String,
|
||||||
networkAddress: NetworkAddress,
|
networkAddress: NetworkAddress,
|
||||||
@ -75,9 +79,8 @@ public class SDLConfiguration {
|
|||||||
identityId: UInt32,
|
identityId: UInt32,
|
||||||
exitNode: ExitNode?) {
|
exitNode: ExitNode?) {
|
||||||
self.version = version
|
self.version = version
|
||||||
self.serverName = serverName
|
self.serverEndpoint = serverEndpoint
|
||||||
self.serverAddress = serverAddress
|
let stunHosts = stunServers.isEmpty ? [serverEndpoint.ip] : stunServers
|
||||||
let stunHosts = stunServers.isEmpty ? [serverAddress] : stunServers
|
|
||||||
self.stunSocketAddress = Self.makeStunSocketAddress(host: stunHosts[0], port: 1365)
|
self.stunSocketAddress = Self.makeStunSocketAddress(host: stunHosts[0], port: 1365)
|
||||||
self.stunProbeSocketAddressArray = stunHosts.map { stunServer in
|
self.stunProbeSocketAddressArray = stunHosts.map { stunServer in
|
||||||
[
|
[
|
||||||
@ -113,7 +116,7 @@ extension SDLConfiguration {
|
|||||||
|
|
||||||
static func parse(options: [String: NSObject]) -> SDLConfiguration? {
|
static func parse(options: [String: NSObject]) -> SDLConfiguration? {
|
||||||
guard let version = options["version"] as? Int,
|
guard let version = options["version"] as? Int,
|
||||||
let serverName = options["server_host"] as? String,
|
let serverHost = options["server_host"] as? String,
|
||||||
let stunAssistHost = options["stun_assist_host"] as? String,
|
let stunAssistHost = options["stun_assist_host"] as? String,
|
||||||
let accessToken = options["access_token"] as? String,
|
let accessToken = options["access_token"] as? String,
|
||||||
let identityId = options["identity_id"] as? UInt32,
|
let identityId = options["identity_id"] as? UInt32,
|
||||||
@ -133,12 +136,14 @@ extension SDLConfiguration {
|
|||||||
exitNode = .init(exitNodeIp: exitNodeIp)
|
exitNode = .init(exitNodeIp: exitNodeIp)
|
||||||
}
|
}
|
||||||
|
|
||||||
let serverAddress = Self.resolveHostAddress(host: serverName, port: 1443)
|
let serverEndpoint = ResolvedServerEndpoint(
|
||||||
|
host: serverHost,
|
||||||
|
ip: Self.resolveHostAddress(host: serverHost, port: 1443)
|
||||||
|
)
|
||||||
|
|
||||||
return SDLConfiguration(version: version,
|
return SDLConfiguration(version: version,
|
||||||
serverName: serverName,
|
serverEndpoint: serverEndpoint,
|
||||||
serverAddress: serverAddress,
|
stunServers: [serverHost, stunAssistHost],
|
||||||
stunServers: [serverName, stunAssistHost],
|
|
||||||
clientId: clientId,
|
clientId: clientId,
|
||||||
networkAddress: networkAddress,
|
networkAddress: networkAddress,
|
||||||
hostname: hostname,
|
hostname: hostname,
|
||||||
|
|||||||
@ -45,13 +45,11 @@ actor SDLSuperClient {
|
|||||||
|
|
||||||
private var connection: NWConnection?
|
private var connection: NWConnection?
|
||||||
|
|
||||||
private let serverName: String
|
private let serverEndpoint: SDLConfiguration.ResolvedServerEndpoint
|
||||||
private let serverAddress: String
|
|
||||||
private let port: UInt16
|
private let port: UInt16
|
||||||
|
|
||||||
init(serverName: String, serverAddress: String, port: UInt16, maxBufferSize: Int = 2 * 1024 * 1024) {
|
init(serverEndpoint: SDLConfiguration.ResolvedServerEndpoint, port: UInt16, maxBufferSize: Int = 2 * 1024 * 1024) {
|
||||||
self.serverName = serverName
|
self.serverEndpoint = serverEndpoint
|
||||||
self.serverAddress = serverAddress
|
|
||||||
self.port = port
|
self.port = port
|
||||||
|
|
||||||
self.frameParser = SDLQUICFrameParser(maxBufferSize: maxBufferSize)
|
self.frameParser = SDLQUICFrameParser(maxBufferSize: maxBufferSize)
|
||||||
@ -59,12 +57,11 @@ actor SDLSuperClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func start() {
|
func start() {
|
||||||
let serverName = self.serverName
|
let serverEndpoint = self.serverEndpoint
|
||||||
let serverAddress = self.serverAddress
|
|
||||||
let queue = DispatchQueue(label: "com.sdl.SuperClient.queue") // 专用队列保证线程安全
|
let queue = DispatchQueue(label: "com.sdl.SuperClient.queue") // 专用队列保证线程安全
|
||||||
|
|
||||||
let options = NWProtocolTLS.Options()
|
let options = NWProtocolTLS.Options()
|
||||||
serverName.withCString {
|
serverEndpoint.host.withCString {
|
||||||
sec_protocol_options_set_tls_server_name(options.securityProtocolOptions, $0)
|
sec_protocol_options_set_tls_server_name(options.securityProtocolOptions, $0)
|
||||||
}
|
}
|
||||||
sec_protocol_options_add_tls_application_protocol(
|
sec_protocol_options_add_tls_application_protocol(
|
||||||
@ -77,7 +74,7 @@ actor SDLSuperClient {
|
|||||||
options.securityProtocolOptions,
|
options.securityProtocolOptions,
|
||||||
{ _, trust, complete in
|
{ _, trust, complete in
|
||||||
// 执行公钥校验
|
// 执行公钥校验
|
||||||
complete(TLSVerifier.verify(trust: trust, host: serverName))
|
complete(TLSVerifier.verify(trust: trust, host: serverEndpoint.host))
|
||||||
},
|
},
|
||||||
queue
|
queue
|
||||||
)
|
)
|
||||||
@ -87,7 +84,7 @@ actor SDLSuperClient {
|
|||||||
// 关键:让 Network.framework 忽略系统代理
|
// 关键:让 Network.framework 忽略系统代理
|
||||||
params.preferNoProxies = true
|
params.preferNoProxies = true
|
||||||
|
|
||||||
let connection = NWConnection(host: Self.makeEndpointHost(address: serverAddress), port: .init(rawValue: port)!, using: params)
|
let connection = NWConnection(host: Self.makeEndpointHost(address: serverEndpoint.ip), port: .init(rawValue: port)!, using: params)
|
||||||
|
|
||||||
connection.stateUpdateHandler = { [weak self] state in
|
connection.stateUpdateHandler = { [weak self] state in
|
||||||
SDLLogger.log("[SDLSuperClient] new state: \(state)", for: .debug)
|
SDLLogger.log("[SDLSuperClient] new state: \(state)", for: .debug)
|
||||||
|
|||||||
@ -3,17 +3,15 @@ import Foundation
|
|||||||
actor SDLSuperService {
|
actor SDLSuperService {
|
||||||
typealias MessageHandler = @Sendable (SDLQUICInboundMessage) async -> Void
|
typealias MessageHandler = @Sendable (SDLQUICInboundMessage) async -> Void
|
||||||
|
|
||||||
private let serverName: String
|
private let serverEndpoint: SDLConfiguration.ResolvedServerEndpoint
|
||||||
private let serverAddress: String
|
|
||||||
private let port: UInt16
|
private let port: UInt16
|
||||||
private let onMessage: MessageHandler
|
private let onMessage: MessageHandler
|
||||||
|
|
||||||
private var superClient: SDLSuperClient?
|
private var superClient: SDLSuperClient?
|
||||||
private var monitorTask: Task<Void, Never>?
|
private var monitorTask: Task<Void, Never>?
|
||||||
|
|
||||||
init(serverName: String, serverAddress: String, port: UInt16 = 1443, onMessage: @escaping MessageHandler) {
|
init(serverEndpoint: SDLConfiguration.ResolvedServerEndpoint, port: UInt16 = 1443, onMessage: @escaping MessageHandler) {
|
||||||
self.serverName = serverName
|
self.serverEndpoint = serverEndpoint
|
||||||
self.serverAddress = serverAddress
|
|
||||||
self.port = port
|
self.port = port
|
||||||
self.onMessage = onMessage
|
self.onMessage = onMessage
|
||||||
}
|
}
|
||||||
@ -51,7 +49,7 @@ actor SDLSuperService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func runOnce() async throws {
|
private func runOnce() async throws {
|
||||||
let superClient = SDLSuperClient(serverName: self.serverName, serverAddress: self.serverAddress, port: self.port)
|
let superClient = SDLSuperClient(serverEndpoint: self.serverEndpoint, port: self.port)
|
||||||
self.superClient = superClient
|
self.superClient = superClient
|
||||||
await superClient.start()
|
await superClient.start()
|
||||||
|
|
||||||
@ -74,7 +72,7 @@ actor SDLSuperService {
|
|||||||
try await Task.sleep(for: .seconds(0.5))
|
try await Task.sleep(for: .seconds(0.5))
|
||||||
try Task.checkCancellation()
|
try Task.checkCancellation()
|
||||||
|
|
||||||
SDLLogger.log("[SDLSuperService] start super client: \(self.serverAddress)")
|
SDLLogger.log("[SDLSuperService] start super client: \(self.serverEndpoint.ip)")
|
||||||
|
|
||||||
try await withThrowingTaskGroup(of: Void.self) { group in
|
try await withThrowingTaskGroup(of: Void.self) { group in
|
||||||
defer {
|
defer {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user