diff --git a/Tun/Punchnet/SDLContextActor.swift b/Tun/Punchnet/SDLContextActor.swift index 1954199..5db1c4d 100644 --- a/Tun/Punchnet/SDLContextActor.swift +++ b/Tun/Punchnet/SDLContextActor.swift @@ -250,7 +250,7 @@ actor SDLContextActor { } // 处理和super的协商问题 - private func handleUDPHoleReady() async { + private func handleUDPHoleReady() { guard let udpHole = self.udpHole else { return } @@ -260,6 +260,7 @@ actor SDLContextActor { // 开始探测nat的类型 Task.detached { + await Task.yield() if let natType = await self.proberActor?.probeNatType() { await self.setNatType(natType: natType) SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)") @@ -267,21 +268,7 @@ actor SDLContextActor { } // 注册 - var registerSuper = SDLRegisterSuper() - registerSuper.pktID = 0 - registerSuper.clientID = self.config.clientId - registerSuper.networkID = self.config.networkAddress.networkId - registerSuper.mac = self.config.networkAddress.mac - registerSuper.ip = self.config.networkAddress.ip - registerSuper.maskLen = UInt32(self.config.networkAddress.maskLen) - registerSuper.hostname = self.config.hostname - registerSuper.pubKey = self.rsaCipher.pubKey - registerSuper.accessToken = self.config.accessToken - - if let registerSuperData = try? registerSuper.serializedData() { - SDLLogger.shared.log("[SDLContext] will send register super") - self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress) - } + self.doRegisterSuper() } private func sendStunRequest() { @@ -344,6 +331,7 @@ actor SDLContextActor { private func handleEvent(event: SDLEvent) throws { switch event { case .dropMacs(let dropMacsEvent): + // TODO SDLLogger.shared.log("[SDLContext] drop macs", level: .info) () case .natChanged(let natChangedEvent): @@ -362,8 +350,8 @@ actor SDLContextActor { self.udpHole?.send(type: .register, data: try register.serializedData(), remoteAddress: remoteAddress) } case .refreshAuth(let refreshAuthEvent): - SDLLogger.shared.log("[SDLContext] refresh auth", level: .info) - () + SDLLogger.shared.log("[SDLContext] refresh auth: \(refreshAuthEvent.networkID)", level: .info) + self.doRegisterSuper() case .networkShutdown(let shutdownEvent): let alertNotice = NoticeMessage.alert(alert: shutdownEvent.message) self.noticeClient?.send(data: alertNotice) @@ -371,6 +359,25 @@ actor SDLContextActor { } } + private func doRegisterSuper() { + // 注册 + var registerSuper = SDLRegisterSuper() + registerSuper.pktID = 0 + registerSuper.clientID = self.config.clientId + registerSuper.networkID = self.config.networkAddress.networkId + registerSuper.mac = self.config.networkAddress.mac + registerSuper.ip = self.config.networkAddress.ip + registerSuper.maskLen = UInt32(self.config.networkAddress.maskLen) + registerSuper.hostname = self.config.hostname + registerSuper.pubKey = self.rsaCipher.pubKey + registerSuper.accessToken = self.config.accessToken + + if let registerSuperData = try? registerSuper.serializedData() { + SDLLogger.shared.log("[SDLContext] will send register super") + self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress) + } + } + private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws { let networkAddr = config.networkAddress SDLLogger.shared.log("register packet: \(register), network_address: \(networkAddr)", level: .debug)