fix context

This commit is contained in:
anlicheng 2026-01-30 15:23:35 +08:00
parent d4390f5117
commit b5d574ea31
2 changed files with 11 additions and 29 deletions

View File

@ -23,7 +23,7 @@ actor SDLPuncherActor {
private var logger: SDLLogger
private var querySocketAddress: SocketAddress
private let(requestStream, requestContinuation) = AsyncStream.makeStream(of: RegisterRequest.self, bufferingPolicy: .unbounded)
nonisolated private let(requestStream, requestContinuation) = AsyncStream.makeStream(of: RegisterRequest.self, bufferingPolicy: .unbounded)
struct RegisterRequest {
let srcMac: Data

View File

@ -8,33 +8,19 @@
import Foundation
import NetworkExtension
import NIOCore
import Combine
//
/*
1. rsa的加解密逻辑
*/
@available(macOS 14, *)
public class SDLContext {
//
struct Route {
let dstAddress: String
let subnetMask: String
var debugInfo: String {
return "\(dstAddress):\(subnetMask)"
}
}
let config: SDLConfiguration
// nat
var natType: SDLNATProberActor.NatType = .blocked
// AES
var aesCipher: AESCipher
let aesCipher: AESCipher
// aes
var aesKey: Data = Data()
@ -69,7 +55,6 @@ public class SDLContext {
//
private var flowTracer = SDLFlowTracer()
private var flowTracerCancel: AnyCancellable?
private let logger: SDLLogger
@ -381,7 +366,7 @@ public class SDLContext {
case .request:
self.logger.log("[SDLContext] get arp request packet", level: .debug)
let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip)
await self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal())
self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal())
case .response:
self.logger.log("[SDLContext] get arp response packet", level: .debug)
self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC)
@ -427,10 +412,8 @@ public class SDLContext {
self.readTask = Task(priority: .high) {
repeat {
let packets = await self.providerAdapter.readPackets()
Task {
let ipPackets = packets.compactMap { IPPacket($0) }
await self.batchProcessPackets(batchSize: 20, packets: ipPackets)
}
let ipPackets = packets.compactMap { IPPacket($0) }
await self.batchProcessPackets(batchSize: 20, packets: ipPackets)
} while true
}
}
@ -439,12 +422,11 @@ public class SDLContext {
private func batchProcessPackets(batchSize: Int, packets: [IPPacket]) async {
for startIndex in stride(from: 0, to: packets.count, by: batchSize) {
let endIndex = Swift.min(startIndex + batchSize, packets.count)
let chunkPackets = packets[startIndex..<endIndex]
await withTaskGroup(of: Void.self) { group in
await withDiscardingTaskGroup() { group in
for packet in chunkPackets {
group.addTask {
await self.dealPacket(packet: packet)
self.dealPacket(packet: packet)
}
}
}
@ -452,7 +434,7 @@ public class SDLContext {
}
//
private func dealPacket(packet: IPPacket) async {
private func dealPacket(packet: IPPacket) {
let networkAddr = self.config.networkAddress
if SDLDNSClient.Helper.isDnsRequestPacket(ipPacket: packet) {
let destIp = packet.header.destination_ip
@ -471,17 +453,17 @@ public class SDLContext {
// arpmac
if let dstMac = self.arpServer.query(ip: dstIp) {
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
}
else {
self.logger.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)
await self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
}
}
private func routeLayerPacket(dstMac: Data, type: LayerPacket.PacketType, data: Data) async {
private func routeLayerPacket(dstMac: Data, type: LayerPacket.PacketType, data: Data) {
let networkAddr = self.config.networkAddress
// 2
let layerPacket = LayerPacket(dstMac: dstMac, srcMac: networkAddr.mac, type: type, data: data)