fix logger
This commit is contained in:
parent
57e360bee2
commit
c63b20b568
@ -32,10 +32,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
// 加密算法
|
||||
let rsaCipher = try! CCRSACipher(keySize: 1024)
|
||||
let aesChiper = CCAESChiper()
|
||||
let logger = SDLLogger(level: .debug)
|
||||
|
||||
self.rootTask = Task {
|
||||
self.contextActor = SDLContextActor(provider: self, config: config, rsaCipher: rsaCipher, aesCipher: aesChiper, logger: logger)
|
||||
self.contextActor = SDLContextActor(provider: self, config: config, rsaCipher: rsaCipher, aesCipher: aesChiper)
|
||||
await self.contextActor?.start()
|
||||
completionHandler(nil)
|
||||
}
|
||||
|
||||
@ -54,7 +54,6 @@ actor SDLNATProberActor {
|
||||
|
||||
private let udpHole: SDLUDPHole
|
||||
private let addressArray: [[SocketAddress]]
|
||||
private let logger: SDLLogger
|
||||
|
||||
// MARK: - Completion
|
||||
private var cookieId: UInt32 = 1
|
||||
@ -63,10 +62,9 @@ actor SDLNATProberActor {
|
||||
|
||||
// MARK: - Init
|
||||
|
||||
init(udpHole: SDLUDPHole, addressArray: [[SocketAddress]], logger: SDLLogger) {
|
||||
init(udpHole: SDLUDPHole, addressArray: [[SocketAddress]]) {
|
||||
self.udpHole = udpHole
|
||||
self.addressArray = addressArray
|
||||
self.logger = logger
|
||||
}
|
||||
|
||||
// MARK: - Public API
|
||||
@ -104,7 +102,7 @@ actor SDLNATProberActor {
|
||||
// 提前退出的情况,没有nat映射
|
||||
if session.replies[1] != nil {
|
||||
let localAddress = self.udpHole.getLocalAddress()
|
||||
if reply.socketAddress() == localAddress {
|
||||
if await reply.socketAddress() == localAddress {
|
||||
finish(cookie: session.cookieId, .noNat)
|
||||
return
|
||||
}
|
||||
@ -113,7 +111,7 @@ actor SDLNATProberActor {
|
||||
if let step1 = session.replies[1], let step2 = session.replies[2] {
|
||||
// 如果natAddress2 的IP地址与上次回来的IP是不一样的,它就是对称型NAT; 这次的包也一定能发成功并收到
|
||||
// 如果ip地址变了,这说明{dstIp, dstPort, srcIp, srcPort}, 其中有一个变了;则用新的ip地址
|
||||
if let addr1 = step1.socketAddress(), let addr2 = step2.socketAddress(), addr1 != addr2 {
|
||||
if let addr1 = await step1.socketAddress(), let addr2 = await step2.socketAddress(), addr1 != addr2 {
|
||||
finish(cookie: session.cookieId, .symmetric)
|
||||
return
|
||||
}
|
||||
|
||||
@ -20,7 +20,6 @@ actor SDLPuncherActor {
|
||||
private var pendingRequests: [UInt32:RegisterRequest] = [:]
|
||||
|
||||
// 处理holer
|
||||
private var logger: SDLLogger
|
||||
private var querySocketAddress: SocketAddress
|
||||
|
||||
nonisolated private let(requestStream, requestContinuation) = AsyncStream.makeStream(of: RegisterRequest.self, bufferingPolicy: .unbounded)
|
||||
@ -31,10 +30,9 @@ actor SDLPuncherActor {
|
||||
let networkId: UInt32
|
||||
}
|
||||
|
||||
init(udpHole: SDLUDPHole, querySocketAddress: SocketAddress, logger: SDLLogger) {
|
||||
init(udpHole: SDLUDPHole, querySocketAddress: SocketAddress) {
|
||||
self.udpHole = udpHole
|
||||
self.querySocketAddress = querySocketAddress
|
||||
self.logger = logger
|
||||
}
|
||||
|
||||
nonisolated func submitRegisterRequest(request: RegisterRequest) {
|
||||
@ -74,8 +72,8 @@ actor SDLPuncherActor {
|
||||
|
||||
func handlePeerInfo(peerInfo: SDLPeerInfo) async {
|
||||
if let request = pendingRequests.removeValue(forKey: peerInfo.pktID) {
|
||||
if let remoteAddress = peerInfo.v4Info.socketAddress() {
|
||||
self.logger.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
|
||||
if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
|
||||
SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
|
||||
// 发送register包
|
||||
var register = SDLRegister()
|
||||
register.networkID = request.networkId
|
||||
@ -84,7 +82,7 @@ actor SDLPuncherActor {
|
||||
|
||||
self.udpHole.send(type: .register, data: try! register.serializedData(), remoteAddress: remoteAddress)
|
||||
} else {
|
||||
self.logger.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning)
|
||||
SDLLogger.shared.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,6 @@ actor SDLAddressResolver {
|
||||
|
||||
func resolve(host: String, port: Int) async throws -> SocketAddress {
|
||||
let key = "\(host):\(port)"
|
||||
|
||||
if let cached = cache[key] {
|
||||
return cached
|
||||
}
|
||||
@ -30,8 +29,8 @@ actor SDLAddressResolver {
|
||||
let address = try await pool.runIfActive {
|
||||
try SocketAddress.makeAddressResolvingHost(host, port: port)
|
||||
}
|
||||
|
||||
cache[key] = address
|
||||
|
||||
return address
|
||||
}
|
||||
|
||||
|
||||
@ -57,20 +57,17 @@ actor SDLContextActor {
|
||||
// 流量统计
|
||||
nonisolated private let flowTracer = SDLFlowTracer()
|
||||
|
||||
nonisolated private let logger: SDLLogger
|
||||
|
||||
// 处理内部的需要长时间运行的任务
|
||||
private var loopChildWorkers: [Task<Void, Never>] = []
|
||||
|
||||
public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher, logger: SDLLogger) {
|
||||
self.logger = logger
|
||||
public init(provider: NEPacketTunnelProvider, config: SDLConfiguration, rsaCipher: RSACipher, aesCipher: AESCipher) {
|
||||
self.config = config
|
||||
self.rsaCipher = rsaCipher
|
||||
self.aesCipher = aesCipher
|
||||
|
||||
self.sessionManager = SessionManager()
|
||||
self.arpServer = ArpServer(known_macs: [:])
|
||||
self.providerAdapter = SDLTunnelProviderAdapter(provider: provider, logger: logger)
|
||||
self.providerAdapter = SDLTunnelProviderAdapter(provider: provider)
|
||||
}
|
||||
|
||||
public func start() {
|
||||
@ -78,32 +75,32 @@ actor SDLContextActor {
|
||||
|
||||
self.loopChildWorkers.append(spawnLoop {
|
||||
let noticeClient = try self.startNoticeClient()
|
||||
self.logger.log("[SDLContext] noticeClient running!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient running!!!!")
|
||||
try await noticeClient.waitClose()
|
||||
self.logger.log("[SDLContext] noticeClient closed!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient closed!!!!")
|
||||
})
|
||||
|
||||
self.loopChildWorkers.append(spawnLoop {
|
||||
let dnsClient = try await self.startDnsClient()
|
||||
self.logger.log("[SDLContext] dns running!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] dns running!!!!")
|
||||
try await dnsClient.waitClose()
|
||||
self.logger.log("[SDLContext] dns closed!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] dns closed!!!!")
|
||||
})
|
||||
|
||||
self.loopChildWorkers.append(spawnLoop {
|
||||
let udpHole = try await self.startUDPHole()
|
||||
self.logger.log("[SDLContext] udp running!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] udp running!!!!")
|
||||
try await udpHole.waitClose()
|
||||
self.logger.log("[SDLContext] udp closed!!!!")
|
||||
SDLLogger.shared.log("[SDLContext] udp closed!!!!")
|
||||
})
|
||||
}
|
||||
|
||||
private func startNoticeClient() throws -> SDLNoticeClient {
|
||||
// 启动noticeClient
|
||||
let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort, logger: self.logger)
|
||||
let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort, logger: SDLLogger.shared)
|
||||
noticeClient.start()
|
||||
|
||||
self.logger.log("[SDLContext] noticeClient started")
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient started")
|
||||
self.noticeClient = noticeClient
|
||||
|
||||
return noticeClient
|
||||
@ -116,7 +113,7 @@ actor SDLContextActor {
|
||||
// 启动monitor
|
||||
let monitor = SDLNetworkMonitor()
|
||||
monitor.start()
|
||||
self.logger.log("[SDLContext] monitor started")
|
||||
SDLLogger.shared.log("[SDLContext] monitor started")
|
||||
self.monitor = monitor
|
||||
|
||||
self.monitorWorker = Task.detached {
|
||||
@ -125,9 +122,9 @@ actor SDLContextActor {
|
||||
case .changed:
|
||||
// 需要重新探测网络的nat类型
|
||||
//self.natType = await self.getNatType()
|
||||
self.logger.log("didNetworkPathChanged, nat type is:", level: .info)
|
||||
SDLLogger.shared.log("didNetworkPathChanged, nat type is:", level: .info)
|
||||
case .unreachable:
|
||||
self.logger.log("didNetworkPathUnreachable", level: .warning)
|
||||
SDLLogger.shared.log("didNetworkPathUnreachable", level: .warning)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -139,9 +136,9 @@ actor SDLContextActor {
|
||||
|
||||
// 启动dns服务
|
||||
let dnsSocketAddress = try SocketAddress.makeAddressResolvingHost(self.config.remoteDnsServer, port: 15353)
|
||||
let dnsClient = try await SDLDNSClient(dnsServerAddress: dnsSocketAddress, logger: self.logger)
|
||||
let dnsClient = try await SDLDNSClient(dnsServerAddress: dnsSocketAddress, logger: SDLLogger.shared)
|
||||
try dnsClient.start()
|
||||
self.logger.log("[SDLContext] dnsClient started")
|
||||
SDLLogger.shared.log("[SDLContext] dnsClient started")
|
||||
self.dnsClient = dnsClient
|
||||
self.dnsWorker = Task.detached {
|
||||
// 处理事件流
|
||||
@ -162,9 +159,9 @@ actor SDLContextActor {
|
||||
self.udpHoleWorkers = nil
|
||||
|
||||
// 启动udp服务器
|
||||
let udpHole = try SDLUDPHole(logger: self.logger)
|
||||
let udpHole = try SDLUDPHole(logger: SDLLogger.shared)
|
||||
try udpHole.start()
|
||||
self.logger.log("[SDLContext] udpHole started")
|
||||
SDLLogger.shared.log("[SDLContext] udpHole started")
|
||||
self.udpHole = udpHole
|
||||
|
||||
await udpHole.channelIsActived()
|
||||
@ -180,12 +177,12 @@ actor SDLContextActor {
|
||||
if Task.isCancelled {
|
||||
break
|
||||
}
|
||||
self.logger.log("[SDLContext] will do stunRequest22")
|
||||
SDLLogger.shared.log("[SDLContext] will do stunRequest22")
|
||||
await self.sendStunRequest()
|
||||
self.logger.log("[SDLContext] will do stunRequest44")
|
||||
SDLLogger.shared.log("[SDLContext] will do stunRequest44")
|
||||
}
|
||||
|
||||
self.logger.log("[SDLContext] will do stunRequest55")
|
||||
SDLLogger.shared.log("[SDLContext] will do stunRequest55")
|
||||
}
|
||||
|
||||
// 处理数据流
|
||||
@ -257,14 +254,14 @@ actor SDLContextActor {
|
||||
return
|
||||
}
|
||||
|
||||
self.puncherActor = SDLPuncherActor(udpHole: udpHole, querySocketAddress: config.stunSocketAddress, logger: logger)
|
||||
self.proberActor = SDLNATProberActor(udpHole: udpHole, addressArray: self.config.stunProbeSocketAddressArray, logger: self.logger)
|
||||
self.puncherActor = SDLPuncherActor(udpHole: udpHole, querySocketAddress: config.stunSocketAddress)
|
||||
self.proberActor = SDLNATProberActor(udpHole: udpHole, addressArray: self.config.stunProbeSocketAddressArray)
|
||||
|
||||
// 开始探测nat的类型
|
||||
Task.detached {
|
||||
if let natType = await self.proberActor?.probeNatType() {
|
||||
await self.setNatType(natType: natType)
|
||||
self.logger.log("[SDLContext] nat_type is: \(natType)")
|
||||
SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
|
||||
}
|
||||
}
|
||||
|
||||
@ -281,7 +278,7 @@ actor SDLContextActor {
|
||||
registerSuper.accessToken = self.config.accessToken
|
||||
|
||||
if let registerSuperData = try? registerSuper.serializedData() {
|
||||
self.logger.log("[SDLContext] will send register super")
|
||||
SDLLogger.shared.log("[SDLContext] will send register super")
|
||||
self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress)
|
||||
}
|
||||
}
|
||||
@ -294,7 +291,7 @@ actor SDLContextActor {
|
||||
stunRequest.mac = self.config.networkAddress.mac
|
||||
stunRequest.natType = UInt32(self.natType.rawValue)
|
||||
|
||||
self.logger.log("[SDLContext] will send stun request")
|
||||
SDLLogger.shared.log("[SDLContext] will send stun request")
|
||||
|
||||
if let stunData = try? stunRequest.serializedData() {
|
||||
let remoteAddress = self.config.stunSocketAddress
|
||||
@ -306,17 +303,17 @@ actor SDLContextActor {
|
||||
// 需要对数据通过rsa的私钥解码
|
||||
let aesKey = try! self.rsaCipher.decode(data: Data(registerSuperAck.aesKey))
|
||||
|
||||
self.logger.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info)
|
||||
SDLLogger.shared.log("[SDLContext] get registerSuperAck, aes_key len: \(aesKey.count)", level: .info)
|
||||
// 服务器分配的tun网卡信息
|
||||
do {
|
||||
let ipAddress = try await self.providerAdapter.setNetworkSettings(networkAddress: self.config.networkAddress, dnsServer: SDLDNSClient.Helper.dnsServer)
|
||||
self.logger.log("[SDLContext] setNetworkSettings successed")
|
||||
SDLLogger.shared.log("[SDLContext] setNetworkSettings successed")
|
||||
self.noticeClient?.send(data: NoticeMessage.ipAdress(ip: ipAddress))
|
||||
self.logger.log("[SDLContext] send ip successed")
|
||||
SDLLogger.shared.log("[SDLContext] send ip successed")
|
||||
self.startReader()
|
||||
self.logger.log("[SDLContext] reader started")
|
||||
SDLLogger.shared.log("[SDLContext] reader started")
|
||||
} catch let err {
|
||||
self.logger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
||||
SDLLogger.shared.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
||||
exit(-1)
|
||||
}
|
||||
|
||||
@ -338,7 +335,7 @@ actor SDLContextActor {
|
||||
let alertNotice = NoticeMessage.alert(alert: errorMessage)
|
||||
self.noticeClient?.send(data: alertNotice)
|
||||
}
|
||||
self.logger.log("[SDLContext] Get a SuperNak message exit", level: .warning)
|
||||
SDLLogger.shared.log("[SDLContext] Get a SuperNak message exit", level: .warning)
|
||||
|
||||
}
|
||||
|
||||
@ -346,10 +343,10 @@ actor SDLContextActor {
|
||||
switch event {
|
||||
case .natChanged(let natChangedEvent):
|
||||
let dstMac = natChangedEvent.mac
|
||||
self.logger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
|
||||
SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
|
||||
sessionManager.removeSession(dstMac: dstMac)
|
||||
case .sendRegister(let sendRegisterEvent):
|
||||
self.logger.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug)
|
||||
let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp)
|
||||
if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) {
|
||||
// 发送register包
|
||||
@ -369,7 +366,7 @@ actor SDLContextActor {
|
||||
|
||||
private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws {
|
||||
let networkAddr = config.networkAddress
|
||||
self.logger.log("register packet: \(register), network_address: \(networkAddr)", level: .debug)
|
||||
SDLLogger.shared.log("register packet: \(register), network_address: \(networkAddr)", level: .debug)
|
||||
|
||||
// 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下
|
||||
if register.dstMac == networkAddr.mac && register.networkID == networkAddr.networkId {
|
||||
@ -384,7 +381,7 @@ actor SDLContextActor {
|
||||
let session = Session(dstMac: register.srcMac, natAddress: remoteAddress)
|
||||
self.sessionManager.addSession(session: session)
|
||||
} else {
|
||||
self.logger.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning)
|
||||
SDLLogger.shared.log("SDLContext didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning)
|
||||
}
|
||||
}
|
||||
|
||||
@ -395,7 +392,7 @@ actor SDLContextActor {
|
||||
let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress)
|
||||
self.sessionManager.addSession(session: session)
|
||||
} else {
|
||||
self.logger.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning)
|
||||
SDLLogger.shared.log("SDLContext didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning)
|
||||
}
|
||||
}
|
||||
|
||||
@ -426,18 +423,18 @@ actor SDLContextActor {
|
||||
if arpPacket.targetIP == networkAddr.ip {
|
||||
switch arpPacket.opcode {
|
||||
case .request:
|
||||
self.logger.log("[SDLContext] get arp request packet", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] get arp request packet", level: .debug)
|
||||
let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip)
|
||||
self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal())
|
||||
case .response:
|
||||
self.logger.log("[SDLContext] get arp response packet", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] get arp response packet", level: .debug)
|
||||
self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC)
|
||||
}
|
||||
} else {
|
||||
self.logger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug)
|
||||
}
|
||||
} else {
|
||||
self.logger.log("[SDLContext] get invalid arp packet", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] get invalid arp packet", level: .debug)
|
||||
}
|
||||
case .ipv4:
|
||||
guard let ipPacket = IPPacket(layerPacket.data), ipPacket.header.destination == networkAddr.ip else {
|
||||
@ -446,7 +443,7 @@ actor SDLContextActor {
|
||||
let packet = NEPacket(data: ipPacket.data, protocolFamily: 2)
|
||||
self.providerAdapter.writePackets(packets: [packet])
|
||||
default:
|
||||
self.logger.log("[SDLContext] get invalid packet", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] get invalid packet", level: .debug)
|
||||
}
|
||||
}
|
||||
|
||||
@ -491,7 +488,7 @@ actor SDLContextActor {
|
||||
let networkAddr = self.config.networkAddress
|
||||
if SDLDNSClient.Helper.isDnsRequestPacket(ipPacket: packet) {
|
||||
let destIp = packet.header.destination_ip
|
||||
self.logger.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination.asIpAddress())", level: .debug)
|
||||
SDLLogger.shared.log("[DNSQuery] destIp: \(destIp), int: \(packet.header.destination.asIpAddress())", level: .debug)
|
||||
self.dnsClient?.forward(ipPacket: packet)
|
||||
return
|
||||
}
|
||||
@ -509,7 +506,7 @@ actor SDLContextActor {
|
||||
self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
|
||||
}
|
||||
else {
|
||||
self.logger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug)
|
||||
// 构造arp广播
|
||||
let arpReqeust = ARPPacket.arpRequest(senderIP: networkAddr.ip, senderMAC: networkAddr.mac, targetIP: dstIp)
|
||||
self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
|
||||
@ -541,7 +538,7 @@ actor SDLContextActor {
|
||||
else {
|
||||
// 通过session发送到对端
|
||||
if let session = self.sessionManager.getSession(toAddress: dstMac) {
|
||||
self.logger.log("[SDLContext] send packet by session: \(session)", level: .debug)
|
||||
SDLLogger.shared.log("[SDLContext] send packet by session: \(session)", level: .debug)
|
||||
self.udpHole?.send(type: .data, data: data, remoteAddress: session.natAddress)
|
||||
self.flowTracer.inc(num: data.count, type: .p2p)
|
||||
}
|
||||
|
||||
@ -28,10 +28,12 @@ public class SDLLogger: @unchecked Sendable {
|
||||
}
|
||||
}
|
||||
|
||||
static let shared = SDLLogger(level: .debug)
|
||||
|
||||
private let level: Level
|
||||
private let log: Logger
|
||||
|
||||
public init(level: Level) {
|
||||
private init(level: Level) {
|
||||
self.level = level
|
||||
self.log = Logger(subsystem: "com.jihe.punchnet", category: "punchnet")
|
||||
}
|
||||
|
||||
@ -77,18 +77,18 @@ enum SDLNAKErrorCode: UInt8 {
|
||||
}
|
||||
|
||||
extension SDLV4Info {
|
||||
func socketAddress() -> SocketAddress? {
|
||||
func socketAddress() async throws -> SocketAddress {
|
||||
let address = "\(v4[0]).\(v4[1]).\(v4[2]).\(v4[3])"
|
||||
|
||||
return try? SocketAddress.makeAddressResolvingHost(address, port: Int(port))
|
||||
return try await SDLAddressResolver.shared.resolve(host: address, port: Int(port))
|
||||
}
|
||||
}
|
||||
|
||||
extension SDLStunProbeReply {
|
||||
func socketAddress() -> SocketAddress? {
|
||||
func socketAddress() async -> SocketAddress? {
|
||||
let address = SDLUtil.int32ToIp(self.ip)
|
||||
|
||||
return try? SocketAddress.makeAddressResolvingHost(address, port: Int(port))
|
||||
return try? await SDLAddressResolver.shared.resolve(host: address, port: Int(port))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -46,21 +46,15 @@ final class SDLNoticeClient {
|
||||
func start() {
|
||||
let channel = self.channel
|
||||
self.task = Task.detached {
|
||||
self.logger.log("[SDLNoticeClient] task 11", level: .debug)
|
||||
guard let remoteAddress = try? await SDLAddressResolver.shared.resolve(host: "127.0.0.1", port: self.noticePort) else {
|
||||
self.logger.log("[SDLNoticeClient] task 22", level: .debug)
|
||||
return
|
||||
}
|
||||
|
||||
for await data in self.writeStream {
|
||||
if Task.isCancelled {
|
||||
self.logger.log("[SDLNoticeClient] task 33", level: .debug)
|
||||
break
|
||||
}
|
||||
self.logger.log("[SDLNoticeClient] task 44", level: .debug)
|
||||
|
||||
self.logger.log("[SDLNoticeClient] send packet", level: .debug)
|
||||
|
||||
let buf = channel.allocator.buffer(bytes: data)
|
||||
let envelope = AddressedEnvelope<ByteBuffer>(remoteAddress: remoteAddress, data: buf)
|
||||
channel.eventLoop.execute {
|
||||
|
||||
@ -28,10 +28,8 @@ final class SDLTunnelProviderAdapter {
|
||||
}
|
||||
|
||||
let provider: NEPacketTunnelProvider
|
||||
let logger: SDLLogger
|
||||
|
||||
public init(provider: NEPacketTunnelProvider, logger: SDLLogger) {
|
||||
self.logger = logger
|
||||
public init(provider: NEPacketTunnelProvider) {
|
||||
self.provider = provider
|
||||
}
|
||||
|
||||
@ -60,7 +58,7 @@ final class SDLTunnelProviderAdapter {
|
||||
dnsSettings.matchDomains = [networkDomain]
|
||||
dnsSettings.matchDomainsNoSearch = false
|
||||
networkSettings.dnsSettings = dnsSettings
|
||||
self.logger.log("[SDLTunnelProviderAdapter] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)", level: .info)
|
||||
SDLLogger.shared.log("[SDLTunnelProviderAdapter] Tun started at network ip: \(netAddress.ipAddress), mask: \(netAddress.maskAddress)", level: .info)
|
||||
|
||||
let ipv4Settings = NEIPv4Settings(addresses: [netAddress.ipAddress], subnetMasks: [netAddress.maskAddress])
|
||||
// 设置路由表
|
||||
|
||||
@ -62,7 +62,7 @@ struct NetworkDisconnctedView: View {
|
||||
maskLen: 24,
|
||||
accessToken: "accessToken1234",
|
||||
hostname: "mysql",
|
||||
noticePort: 123456)
|
||||
noticePort: 1234)
|
||||
// token存在则优先使用token
|
||||
try await VPNManager.shared.enableVpn(options: options!)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user