fix PacketOutboundActor
This commit is contained in:
parent
ffb21f52c7
commit
bd2c1906dc
@ -18,6 +18,7 @@ actor PacketOutboundActor {
|
||||
private let superServiceProxy: SDLSuperServiceProxy
|
||||
private let udpHoleServiceProxy: SDLUDPHoleServiceProxy
|
||||
private let flowTracer: SDLFlowTracer
|
||||
private var packetReaderService: SDLPacketReaderService?
|
||||
|
||||
private var networkAddress: SDLConfiguration.NetworkAddress
|
||||
private var identityId: UInt32
|
||||
@ -63,6 +64,22 @@ actor PacketOutboundActor {
|
||||
self.dnsService = dnsService
|
||||
}
|
||||
|
||||
func startPacketReader() async {
|
||||
if self.packetReaderService == nil {
|
||||
self.packetReaderService = SDLPacketReaderService(provider: self.provider) { [weak self] event in
|
||||
await self?.handlePacketReaderEvent(event)
|
||||
}
|
||||
}
|
||||
|
||||
await self.packetReaderService?.start()
|
||||
}
|
||||
|
||||
func stop() async {
|
||||
let packetReaderService = self.packetReaderService
|
||||
self.packetReaderService = nil
|
||||
await packetReaderService?.stop()
|
||||
}
|
||||
|
||||
func handleTunPacket(_ packet: IPPacket) async {
|
||||
let router = SDLTunPacketRouter(networkAddress: self.networkAddress, exitNode: self.exitNode)
|
||||
let decision = router.route(packet: packet)
|
||||
@ -74,6 +91,13 @@ actor PacketOutboundActor {
|
||||
await self.handleTunRouteDecision(decision)
|
||||
}
|
||||
|
||||
private func handlePacketReaderEvent(_ event: SDLPacketReaderService.Event) async {
|
||||
switch event {
|
||||
case .packet(let packet):
|
||||
await self.handleTunPacket(packet)
|
||||
}
|
||||
}
|
||||
|
||||
func routeLayerPacket(dstMac: Data, type: LayerPacket.PacketType, data: Data) async {
|
||||
let forwarder = self.makeLayerPacketForwarder()
|
||||
guard let plan = try? await forwarder.makeDeliveryPlan(dstMac: dstMac, type: type, data: data) else {
|
||||
|
||||
@ -64,7 +64,6 @@ actor SDLContextActor {
|
||||
nonisolated let rsaCipher: RSACipher
|
||||
|
||||
private var dnsService: SDLDNSService?
|
||||
private var packetReaderService: SDLPacketReaderService?
|
||||
private let superServiceProxy: SDLSuperServiceProxy
|
||||
private let udpHoleServiceProxy: SDLUDPHoleServiceProxy
|
||||
private let packetOutboundActor: PacketOutboundActor
|
||||
@ -175,9 +174,7 @@ actor SDLContextActor {
|
||||
self.updatePolicyTask = nil
|
||||
await self.policyService.clear()
|
||||
|
||||
let packetReaderService = self.packetReaderService
|
||||
self.packetReaderService = nil
|
||||
await packetReaderService?.stop()
|
||||
await self.packetOutboundActor.stop()
|
||||
|
||||
await self.udpHoleServiceProxy.stop()
|
||||
|
||||
@ -323,7 +320,7 @@ extension SDLContextActor {
|
||||
do {
|
||||
try await self.setNetworkSettings(config: self.config, dnsServer: DNSHelper.dnsServer)
|
||||
SDLLogger.log("[SDLContext] setNetworkSettings successed")
|
||||
await self.startPacketReader()
|
||||
await self.packetOutboundActor.startPacketReader()
|
||||
// 开启权限的定时更新
|
||||
await self.whenRegistedSuper()
|
||||
} catch let err {
|
||||
@ -601,23 +598,6 @@ extension SDLContextActor {
|
||||
// MARK: NEPacketTunnelProvider相关的逻辑
|
||||
extension SDLContextActor {
|
||||
|
||||
// 开始读取数据, 用单独的线程处理packetFlow
|
||||
private func startPacketReader() async {
|
||||
if self.packetReaderService == nil {
|
||||
self.packetReaderService = SDLPacketReaderService(provider: self.provider) { [weak self] event in
|
||||
await self?.handlePacketReaderEvent(event)
|
||||
}
|
||||
}
|
||||
await self.packetReaderService?.start()
|
||||
}
|
||||
|
||||
private func handlePacketReaderEvent(_ event: SDLPacketReaderService.Event) async {
|
||||
switch event {
|
||||
case .packet(let packet):
|
||||
await self.packetOutboundActor.handleTunPacket(packet)
|
||||
}
|
||||
}
|
||||
|
||||
// 取消出口节点的时候,ip地址为: 0.0.0.0
|
||||
public func updateExitNode(exitNodeIp: String) async throws {
|
||||
if let ip = SDLUtil.ipv4StrToInt32(exitNodeIp), ip > 0 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user