fix session
This commit is contained in:
parent
df72f2e5fa
commit
4032cbd512
@ -90,7 +90,7 @@ actor SDLContextActor {
|
|||||||
self.sessionManager = SessionManager()
|
self.sessionManager = SessionManager()
|
||||||
self.arpServer = ArpServerActor()
|
self.arpServer = ArpServerActor()
|
||||||
|
|
||||||
self.puncherActor = SDLPuncherActor(querySocketAddress: config.stunSocketAddress)
|
self.puncherActor = SDLPuncherActor()
|
||||||
self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray)
|
self.proberActor = SDLNATProberActor(addressArray: config.stunProbeSocketAddressArray)
|
||||||
|
|
||||||
// 权限控制
|
// 权限控制
|
||||||
|
|||||||
@ -17,19 +17,12 @@ actor SDLPuncherActor {
|
|||||||
// 提交后还没有响应的请求
|
// 提交后还没有响应的请求
|
||||||
private var pendingRequests: [UInt32: RegisterRequest] = [:]
|
private var pendingRequests: [UInt32: RegisterRequest] = [:]
|
||||||
|
|
||||||
// 处理holer
|
|
||||||
nonisolated private let querySocketAddress: SocketAddress
|
|
||||||
|
|
||||||
struct RegisterRequest {
|
struct RegisterRequest {
|
||||||
let srcMac: Data
|
let srcMac: Data
|
||||||
let dstMac: Data
|
let dstMac: Data
|
||||||
let networkId: UInt32
|
let networkId: UInt32
|
||||||
}
|
}
|
||||||
|
|
||||||
init(querySocketAddress: SocketAddress) {
|
|
||||||
self.querySocketAddress = querySocketAddress
|
|
||||||
}
|
|
||||||
|
|
||||||
func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) {
|
func submitRegisterRequest(quicClient: SDLQUICClient?, request: RegisterRequest) {
|
||||||
let dstMac = request.dstMac
|
let dstMac = request.dstMac
|
||||||
guard let quicClient, !coolingDown.contains(dstMac) else {
|
guard let quicClient, !coolingDown.contains(dstMac) else {
|
||||||
@ -39,11 +32,7 @@ actor SDLPuncherActor {
|
|||||||
// 触发一次打洞
|
// 触发一次打洞
|
||||||
coolingDown.insert(dstMac)
|
coolingDown.insert(dstMac)
|
||||||
|
|
||||||
let pktId = self.pktId
|
let pktId = self.nextPacketId()
|
||||||
self.pktId &+= 1
|
|
||||||
if self.pktId == 0 {
|
|
||||||
self.pktId = 1
|
|
||||||
}
|
|
||||||
self.tryHole(using: quicClient, pktId: pktId, request: request)
|
self.tryHole(using: quicClient, pktId: pktId, request: request)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
@ -90,4 +79,14 @@ actor SDLPuncherActor {
|
|||||||
quicClient.send(type: .queryInfo, data: queryData)
|
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
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
//
|
//
|
||||||
// Session.swift
|
// Session.swift
|
||||||
// sdlan
|
// sdlan
|
||||||
//
|
// Session是增加了有效时间的
|
||||||
// Created by 安礼成 on 2025/7/14.
|
// Created by 安礼成 on 2025/7/14.
|
||||||
//
|
//
|
||||||
import Foundation
|
import Foundation
|
||||||
@ -36,9 +36,11 @@ actor SessionManager {
|
|||||||
|
|
||||||
func getSession(toAddress: Data) -> Session? {
|
func getSession(toAddress: Data) -> Session? {
|
||||||
let timestamp = Int32(Date().timeIntervalSince1970)
|
let timestamp = Int32(Date().timeIntervalSince1970)
|
||||||
if let session = self.sessions[toAddress] {
|
if var session = self.sessions[toAddress] {
|
||||||
if session.lastTimestamp >= timestamp + ttl {
|
if session.lastTimestamp >= timestamp + ttl {
|
||||||
self.sessions[toAddress]?.updateLastTimestamp(timestamp)
|
session.updateLastTimestamp(timestamp)
|
||||||
|
self.sessions[toAddress] = session
|
||||||
|
|
||||||
return session
|
return session
|
||||||
} else {
|
} else {
|
||||||
self.sessions.removeValue(forKey: toAddress)
|
self.sessions.removeValue(forKey: toAddress)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user