From 4032cbd512ab3045fb5e67bde78dd01f6b7dd0f0 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 9 Mar 2026 17:37:32 +0800 Subject: [PATCH] fix session --- Tun/Punchnet/Actors/SDLContextActor.swift | 2 +- Tun/Punchnet/Actors/SDLPuncherActor.swift | 23 +++++++++++------------ Tun/Punchnet/SessionManager.swift | 8 +++++--- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Tun/Punchnet/Actors/SDLContextActor.swift b/Tun/Punchnet/Actors/SDLContextActor.swift index f51ffc0..d305264 100644 --- a/Tun/Punchnet/Actors/SDLContextActor.swift +++ b/Tun/Punchnet/Actors/SDLContextActor.swift @@ -90,7 +90,7 @@ actor SDLContextActor { self.sessionManager = SessionManager() self.arpServer = ArpServerActor() - self.puncherActor = SDLPuncherActor(querySocketAddress: config.stunSocketAddress) + self.puncherActor = SDLPuncherActor() self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray) // 权限控制 diff --git a/Tun/Punchnet/Actors/SDLPuncherActor.swift b/Tun/Punchnet/Actors/SDLPuncherActor.swift index c998467..bb75868 100644 --- a/Tun/Punchnet/Actors/SDLPuncherActor.swift +++ b/Tun/Punchnet/Actors/SDLPuncherActor.swift @@ -17,19 +17,12 @@ actor SDLPuncherActor { // 提交后还没有响应的请求 private var pendingRequests: [UInt32: RegisterRequest] = [:] - // 处理holer - nonisolated private let querySocketAddress: SocketAddress - struct RegisterRequest { let srcMac: Data let dstMac: Data let networkId: UInt32 } - init(querySocketAddress: SocketAddress) { - self.querySocketAddress = querySocketAddress - } - func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) { let dstMac = request.dstMac guard let quicClient, !coolingDown.contains(dstMac) else { @@ -39,11 +32,7 @@ actor SDLPuncherActor { // 触发一次打洞 coolingDown.insert(dstMac) - let pktId = self.pktId - self.pktId &+= 1 - if self.pktId == 0 { - self.pktId = 1 - } + let pktId = self.nextPacketId() self.tryHole(using: quicClient, pktId: pktId, request: request) Task { @@ -90,4 +79,14 @@ actor SDLPuncherActor { quicClient.send(type: .queryInfo, data: queryData) } } + + private func nextPacketId() -> UInt32 { + let pktId = self.pktId + self.pktId &+= 1 + if self.pktId == 0 { + self.pktId = 1 + } + return pktId + } + } diff --git a/Tun/Punchnet/SessionManager.swift b/Tun/Punchnet/SessionManager.swift index a65096c..06e5fa3 100644 --- a/Tun/Punchnet/SessionManager.swift +++ b/Tun/Punchnet/SessionManager.swift @@ -1,7 +1,7 @@ // // Session.swift // sdlan -// +// Session是增加了有效时间的 // Created by 安礼成 on 2025/7/14. // import Foundation @@ -36,9 +36,11 @@ actor SessionManager { func getSession(toAddress: Data) -> Session? { let timestamp = Int32(Date().timeIntervalSince1970) - if let session = self.sessions[toAddress] { + if var session = self.sessions[toAddress] { if session.lastTimestamp >= timestamp + ttl { - self.sessions[toAddress]?.updateLastTimestamp(timestamp) + session.updateLastTimestamp(timestamp) + self.sessions[toAddress] = session + return session } else { self.sessions.removeValue(forKey: toAddress)