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