fix quic
This commit is contained in:
parent
78dc345d8b
commit
d8c6eb67a6
@ -46,7 +46,7 @@ actor SDLContextActor {
|
|||||||
private var dnsClient: SDLDNSClient?
|
private var dnsClient: SDLDNSClient?
|
||||||
private var dnsWorker: Task<Void, Never>?
|
private var dnsWorker: Task<Void, Never>?
|
||||||
|
|
||||||
private var quicClient: SDLQUICClient
|
private var quicClient: SDLQUICClient?
|
||||||
private var quicWorker: Task<Void, Never>?
|
private var quicWorker: Task<Void, Never>?
|
||||||
|
|
||||||
nonisolated private let puncherActor: SDLPuncherActor
|
nonisolated private let puncherActor: SDLPuncherActor
|
||||||
@ -101,6 +101,7 @@ actor SDLContextActor {
|
|||||||
self.startMonitor()
|
self.startMonitor()
|
||||||
|
|
||||||
self.loopChildWorkers.append(spawnLoop {
|
self.loopChildWorkers.append(spawnLoop {
|
||||||
|
SDLLogger.shared.log("[SDLContext] try start quicClient")
|
||||||
let quicClient = try await self.startQUICClient()
|
let quicClient = try await self.startQUICClient()
|
||||||
SDLLogger.shared.log("[SDLContext] quicClient running!!!!")
|
SDLLogger.shared.log("[SDLContext] quicClient running!!!!")
|
||||||
await quicClient.waitClose()
|
await quicClient.waitClose()
|
||||||
@ -131,7 +132,7 @@ actor SDLContextActor {
|
|||||||
|
|
||||||
private func startQUICClient() async throws -> SDLQUICClient {
|
private func startQUICClient() async throws -> SDLQUICClient {
|
||||||
// 启动monitor
|
// 启动monitor
|
||||||
let quicClient = SDLQUICClient(host: "127.0.0.1", port: 1365)
|
let quicClient = SDLQUICClient(host: "118.178.229.213", port: 1365)
|
||||||
quicClient.start()
|
quicClient.start()
|
||||||
|
|
||||||
// 等待quic准备好
|
// 等待quic准备好
|
||||||
@ -145,6 +146,9 @@ actor SDLContextActor {
|
|||||||
}
|
}
|
||||||
self.quicClient = quicClient
|
self.quicClient = quicClient
|
||||||
|
|
||||||
|
// 注册
|
||||||
|
self.doRegisterSuper()
|
||||||
|
|
||||||
return quicClient
|
return quicClient
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,44 +242,27 @@ actor SDLContextActor {
|
|||||||
SDLLogger.shared.log("[SDLContext] udp pingTask cancel")
|
SDLLogger.shared.log("[SDLContext] udp pingTask cancel")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理数据流
|
// 处理消息流
|
||||||
let dataTask = Task.detached {
|
let messageTask = Task.detached {
|
||||||
for await data in udpHole.dataStream {
|
for await (remoteAddress, message) in udpHole.messageStream {
|
||||||
if Task.isCancelled {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
try? await self.handleData(data: data)
|
|
||||||
}
|
|
||||||
|
|
||||||
SDLLogger.shared.log("[SDLContext] udp dataTask cancel")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理控制信号
|
|
||||||
let signalTask = Task.detached {
|
|
||||||
for await(remoteAddress, signal) in udpHole.signalStream {
|
|
||||||
if Task.isCancelled {
|
if Task.isCancelled {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
switch signal {
|
switch message {
|
||||||
case .registerSuperAck(let registerSuperAck):
|
|
||||||
await self.handleRegisterSuperAck(registerSuperAck: registerSuperAck)
|
|
||||||
case .registerSuperNak(let registerSuperNak):
|
|
||||||
await self.handleRegisterSuperNak(nakPacket: registerSuperNak)
|
|
||||||
case .peerInfo(let peerInfo):
|
|
||||||
await self.puncherActor.handlePeerInfo(using: udpHole, peerInfo: peerInfo)
|
|
||||||
case .event(let event):
|
|
||||||
try? await self.handleEvent(event: event)
|
|
||||||
case .stunProbeReply(let probeReply):
|
case .stunProbeReply(let probeReply):
|
||||||
await self.proberActor.handleProbeReply(localAddress: localAddress, reply: probeReply)
|
await self.proberActor.handleProbeReply(localAddress: localAddress, reply: probeReply)
|
||||||
case .register(let register):
|
case .register(let register):
|
||||||
try? await self.handleRegister(remoteAddress: remoteAddress, register: register)
|
try? await self.handleRegister(remoteAddress: remoteAddress, register: register)
|
||||||
case .registerAck(let registerAck):
|
case .registerAck(let registerAck):
|
||||||
await self.handleRegisterAck(remoteAddress: remoteAddress, registerAck: registerAck)
|
await self.handleRegisterAck(remoteAddress: remoteAddress, registerAck: registerAck)
|
||||||
case .policyReponse(let policyResponse):
|
case .data(let data):
|
||||||
SDLLogger.shared.log("[SDLContext] get a policyResponse: \(policyResponse.totalNum) of \(policyResponse.index), bytes: \(policyResponse.rules.count)")
|
try? await self.handleData(data: data)
|
||||||
// 处理权限的请求问题
|
|
||||||
await self.identifyStore.apply(policyResponse: policyResponse)
|
// case .policyReponse(let policyResponse):
|
||||||
|
// SDLLogger.shared.log("[SDLContext] get a policyResponse: \(policyResponse.totalNum) of \(policyResponse.index), bytes: \(policyResponse.rules.count)")
|
||||||
|
// // 处理权限的请求问题
|
||||||
|
// await self.identifyStore.apply(policyResponse: policyResponse)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +270,7 @@ actor SDLContextActor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.udpHole = udpHole
|
self.udpHole = udpHole
|
||||||
self.udpHoleWorkers = [pingTask, dataTask, signalTask]
|
self.udpHoleWorkers = [pingTask, messageTask]
|
||||||
|
|
||||||
// 开始探测nat的类型
|
// 开始探测nat的类型
|
||||||
Task {
|
Task {
|
||||||
@ -292,8 +279,7 @@ actor SDLContextActor {
|
|||||||
SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
|
SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 注册
|
|
||||||
self.doRegisterSuper()
|
|
||||||
|
|
||||||
return udpHole
|
return udpHole
|
||||||
}
|
}
|
||||||
@ -383,9 +369,9 @@ actor SDLContextActor {
|
|||||||
|
|
||||||
private func handleEvent(event: SDLEvent) async throws {
|
private func handleEvent(event: SDLEvent) async throws {
|
||||||
switch event {
|
switch event {
|
||||||
case .dropMacs(let dropMacsEvent):
|
// case .dropMacs(let dropMacsEvent):
|
||||||
SDLLogger.shared.log("[SDLContext] drop macs", level: .info)
|
// SDLLogger.shared.log("[SDLContext] drop macs", level: .info)
|
||||||
await self.arpServer.dropMacs(macs: dropMacsEvent.macs)
|
// await self.arpServer.dropMacs(macs: dropMacsEvent.macs)
|
||||||
case .natChanged(let natChangedEvent):
|
case .natChanged(let natChangedEvent):
|
||||||
let dstMac = natChangedEvent.mac
|
let dstMac = natChangedEvent.mac
|
||||||
SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
|
SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
|
||||||
@ -401,9 +387,6 @@ actor SDLContextActor {
|
|||||||
register.dstMac = sendRegisterEvent.dstMac
|
register.dstMac = sendRegisterEvent.dstMac
|
||||||
self.udpHole?.send(type: .register, data: try register.serializedData(), remoteAddress: remoteAddress)
|
self.udpHole?.send(type: .register, data: try register.serializedData(), remoteAddress: remoteAddress)
|
||||||
}
|
}
|
||||||
case .refreshAuth(let refreshAuthEvent):
|
|
||||||
SDLLogger.shared.log("[SDLContext] refresh auth: \(refreshAuthEvent.networkID)", level: .info)
|
|
||||||
self.doRegisterSuper()
|
|
||||||
case .networkShutdown(let shutdownEvent):
|
case .networkShutdown(let shutdownEvent):
|
||||||
let alertNotice = NoticeMessage.alert(alert: shutdownEvent.message)
|
let alertNotice = NoticeMessage.alert(alert: shutdownEvent.message)
|
||||||
self.noticeClient?.send(data: alertNotice)
|
self.noticeClient?.send(data: alertNotice)
|
||||||
@ -417,7 +400,6 @@ actor SDLContextActor {
|
|||||||
private func doRegisterSuper() {
|
private func doRegisterSuper() {
|
||||||
// 注册
|
// 注册
|
||||||
var registerSuper = SDLRegisterSuper()
|
var registerSuper = SDLRegisterSuper()
|
||||||
registerSuper.pktID = 0
|
|
||||||
registerSuper.clientID = self.config.clientId
|
registerSuper.clientID = self.config.clientId
|
||||||
registerSuper.networkID = self.config.networkAddress.networkId
|
registerSuper.networkID = self.config.networkAddress.networkId
|
||||||
registerSuper.mac = self.config.networkAddress.mac
|
registerSuper.mac = self.config.networkAddress.mac
|
||||||
@ -429,7 +411,7 @@ actor SDLContextActor {
|
|||||||
|
|
||||||
if let registerSuperData = try? registerSuper.serializedData() {
|
if let registerSuperData = try? registerSuper.serializedData() {
|
||||||
SDLLogger.shared.log("[SDLContext] will send register super")
|
SDLLogger.shared.log("[SDLContext] will send register super")
|
||||||
self.udpHole?.send(type: .registerSuper, data: registerSuperData, remoteAddress: self.config.stunSocketAddress)
|
self.quicClient?.send(type: .registerSuper, data: registerSuperData)
|
||||||
|
|
||||||
// 5秒后检查注册是否完成
|
// 5秒后检查注册是否完成
|
||||||
Task {
|
Task {
|
||||||
@ -544,12 +526,8 @@ actor SDLContextActor {
|
|||||||
// 向服务器请求权限逻辑
|
// 向服务器请求权限逻辑
|
||||||
if let sessionToken = self.sessionToken {
|
if let sessionToken = self.sessionToken {
|
||||||
var policyRequest = SDLPolicyRequest()
|
var policyRequest = SDLPolicyRequest()
|
||||||
policyRequest.clientID = self.config.clientId
|
|
||||||
policyRequest.networkID = self.config.networkAddress.networkId
|
|
||||||
policyRequest.mac = self.config.networkAddress.mac
|
|
||||||
policyRequest.srcIdentityID = data.identityID
|
policyRequest.srcIdentityID = data.identityID
|
||||||
policyRequest.dstIdentityID = self.config.identityId
|
policyRequest.dstIdentityID = self.config.identityId
|
||||||
policyRequest.sessionToken = sessionToken
|
|
||||||
|
|
||||||
await self.policyRequesterActor.submitPolicyRequest(using: self.udpHole, request: &policyRequest)
|
await self.policyRequesterActor.submitPolicyRequest(using: self.udpHole, request: &policyRequest)
|
||||||
}
|
}
|
||||||
@ -725,12 +703,8 @@ actor SDLContextActor {
|
|||||||
// 向服务器请求权限逻辑
|
// 向服务器请求权限逻辑
|
||||||
if let sessionToken = self.sessionToken {
|
if let sessionToken = self.sessionToken {
|
||||||
var policyRequest = SDLPolicyRequest()
|
var policyRequest = SDLPolicyRequest()
|
||||||
policyRequest.clientID = self.config.clientId
|
|
||||||
policyRequest.networkID = self.config.networkAddress.networkId
|
|
||||||
policyRequest.mac = self.config.networkAddress.mac
|
|
||||||
policyRequest.srcIdentityID = 1234
|
policyRequest.srcIdentityID = 1234
|
||||||
policyRequest.dstIdentityID = self.config.identityId
|
policyRequest.dstIdentityID = self.config.identityId
|
||||||
policyRequest.sessionToken = sessionToken
|
|
||||||
|
|
||||||
await self.policyRequesterActor.submitPolicyRequest(using: self.udpHole, request: &policyRequest)
|
await self.policyRequesterActor.submitPolicyRequest(using: self.udpHole, request: &policyRequest)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,7 +44,7 @@ actor SDLPuncherActor {
|
|||||||
if self.pktId == 0 {
|
if self.pktId == 0 {
|
||||||
self.pktId = 1
|
self.pktId = 1
|
||||||
}
|
}
|
||||||
self.tryHole(using: udpHole, pktId: pktId, request: request)
|
//self.tryHole(using: udpHole, pktId: pktId, request: request)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
// 启动冷却期
|
// 启动冷却期
|
||||||
@ -54,22 +54,22 @@ actor SDLPuncherActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handlePeerInfo(using udpHole: SDLUDPHole, peerInfo: SDLPeerInfo) async {
|
// func handlePeerInfo(using udpHole: SDLUDPHole, peerInfo: SDLPeerInfo) async {
|
||||||
if let request = pendingRequests.removeValue(forKey: peerInfo.pktID) {
|
// if let request = pendingRequests.removeValue(forKey: peerInfo.pktID) {
|
||||||
if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
|
// if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
|
||||||
SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
|
// SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
|
||||||
// 发送register包
|
// // 发送register包
|
||||||
var register = SDLRegister()
|
// var register = SDLRegister()
|
||||||
register.networkID = request.networkId
|
// register.networkID = request.networkId
|
||||||
register.srcMac = request.srcMac
|
// register.srcMac = request.srcMac
|
||||||
register.dstMac = request.dstMac
|
// register.dstMac = request.dstMac
|
||||||
|
//
|
||||||
udpHole.send(type: .register, data: try! register.serializedData(), remoteAddress: remoteAddress)
|
// udpHole.send(type: .register, data: try! register.serializedData(), remoteAddress: remoteAddress)
|
||||||
} else {
|
// } else {
|
||||||
SDLLogger.shared.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning)
|
// SDLLogger.shared.log("[SDLContext] hole sock address is invalid: \(peerInfo.v4Info)", level: .warning)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
private func endCooldown(for key: Data) {
|
private func endCooldown(for key: Data) {
|
||||||
self.coolingDown.remove(key)
|
self.coolingDown.remove(key)
|
||||||
@ -79,14 +79,14 @@ actor SDLPuncherActor {
|
|||||||
self.pendingRequests.removeValue(forKey: pktId)
|
self.pendingRequests.removeValue(forKey: pktId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func tryHole(using udpHole: SDLUDPHole, pktId: UInt32, request: RegisterRequest) {
|
// private func tryHole(using udpHole: SDLUDPHole, pktId: UInt32, request: RegisterRequest) {
|
||||||
var queryInfo = SDLQueryInfo()
|
// var queryInfo = SDLQueryInfo()
|
||||||
queryInfo.pktID = pktId
|
// queryInfo.pktID = pktId
|
||||||
queryInfo.dstMac = request.dstMac
|
// queryInfo.dstMac = request.dstMac
|
||||||
self.pendingRequests[pktId] = request
|
// self.pendingRequests[pktId] = request
|
||||||
|
//
|
||||||
if let queryData = try? queryInfo.serializedData() {
|
// if let queryData = try? queryInfo.serializedData() {
|
||||||
udpHole.send(type: .queryInfo, data: queryData, remoteAddress: self.querySocketAddress)
|
// udpHole.send(type: .queryInfo, data: queryData, remoteAddress: self.querySocketAddress)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,7 +35,7 @@ final class SDLQUICClient {
|
|||||||
case .ready:
|
case .ready:
|
||||||
self.readyCont?.resume()
|
self.readyCont?.resume()
|
||||||
self.readyCont = nil
|
self.readyCont = nil
|
||||||
case .failed(let error):
|
case .failed(_):
|
||||||
self.closeCont?.resume()
|
self.closeCont?.resume()
|
||||||
self.closeCont = nil
|
self.closeCont = nil
|
||||||
case .cancelled:
|
case .cancelled:
|
||||||
@ -52,8 +52,8 @@ final class SDLQUICClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func send(data: Data) {
|
func send(type: SDLPacketType, data: Data) {
|
||||||
transport.send(data)
|
self.transport.send(type: type, data: data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitReady() async throws {
|
func waitReady() async throws {
|
||||||
@ -89,12 +89,14 @@ final class SDLQUICTransport {
|
|||||||
private let connection: NWConnection
|
private let connection: NWConnection
|
||||||
|
|
||||||
init(host: String, port: UInt16) {
|
init(host: String, port: UInt16) {
|
||||||
let params = NWParameters(quic: .init())
|
let params = NWParameters(quic: .init(alpn: ["punchnet/1.0"]))
|
||||||
self.connection = NWConnection(host: .init(host), port: .init(rawValue: port)!, using: params)
|
self.connection = NWConnection(host: .init(host), port: .init(rawValue: port)!, using: params)
|
||||||
}
|
}
|
||||||
|
|
||||||
func start(queue: DispatchQueue, onEvent: @escaping (Event) -> Void) {
|
func start(queue: DispatchQueue, onEvent: @escaping (Event) -> Void) {
|
||||||
|
SDLLogger.shared.log("[SDLQUICTransport] call start")
|
||||||
connection.stateUpdateHandler = { state in
|
connection.stateUpdateHandler = { state in
|
||||||
|
SDLLogger.shared.log("[SDLQUICTransport] new state: \(state)")
|
||||||
switch state {
|
switch state {
|
||||||
case .ready: onEvent(.ready)
|
case .ready: onEvent(.ready)
|
||||||
case .failed(let e): onEvent(.failed(e))
|
case .failed(let e): onEvent(.failed(e))
|
||||||
@ -153,9 +155,10 @@ final class SDLQUICTransport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func send(_ data: Data) {
|
func send(type: SDLPacketType, data: Data) {
|
||||||
var len = UInt16(data.count).bigEndian
|
var len = UInt16(data.count).bigEndian
|
||||||
var packet = Data(Data(bytes: &len, count: 2))
|
var packet = Data(Data(bytes: &len, count: 2))
|
||||||
|
packet.append(type.rawValue)
|
||||||
packet.append(data)
|
packet.append(data)
|
||||||
|
|
||||||
connection.send(content: packet, completion: .contentProcessed { _ in })
|
connection.send(content: packet, completion: .contentProcessed { _ in })
|
||||||
@ -178,6 +181,13 @@ extension SDLQUICClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch packetType {
|
switch packetType {
|
||||||
|
case .welcome:
|
||||||
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
||||||
|
let welcome = try? SDLWelcome(serializedBytes: bytes) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return .welcome(welcome)
|
||||||
|
|
||||||
case .registerSuperAck:
|
case .registerSuperAck:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
||||||
let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else {
|
let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else {
|
||||||
|
|||||||
@ -6,10 +6,12 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
struct IdentityRuleMap {
|
struct IdentityRuleMap {
|
||||||
|
let version: UInt32
|
||||||
// map[proto][port]
|
// map[proto][port]
|
||||||
let ruleMap: [UInt8: [UInt16: Bool]]
|
let ruleMap: [UInt8: [UInt16: Bool]]
|
||||||
|
|
||||||
init(ruleMap: [UInt8: [UInt16: Bool]]) {
|
init(version: UInt32, ruleMap: [UInt8: [UInt16: Bool]]) {
|
||||||
|
self.version = version
|
||||||
self.ruleMap = ruleMap
|
self.ruleMap = ruleMap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,58 +7,6 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import NIO
|
import NIO
|
||||||
|
|
||||||
final class IdentitySession {
|
|
||||||
var version: UInt32
|
|
||||||
var totalNum: UInt32
|
|
||||||
private var parts: [UInt32: SDLPolicyResponse] = [:]
|
|
||||||
|
|
||||||
init(part: SDLPolicyResponse) {
|
|
||||||
self.version = part.version
|
|
||||||
self.totalNum = part.totalNum
|
|
||||||
self.parts[part.index] = part
|
|
||||||
}
|
|
||||||
|
|
||||||
func merge(part: SDLPolicyResponse) {
|
|
||||||
if part.version < version {
|
|
||||||
// 低版本数据丢弃
|
|
||||||
} else if part.version == version {
|
|
||||||
self.parts[part.index] = part
|
|
||||||
} else {
|
|
||||||
self.parts.removeAll()
|
|
||||||
self.parts[part.index] = part
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func process() -> Data? {
|
|
||||||
// parts是连续的,从0开始,并且数量等于total_num
|
|
||||||
let indexs = parts.keys.sorted().map { UInt32($0) }
|
|
||||||
guard indexs.count == self.totalNum && isContinuousFromZero(indexs: indexs) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var rulesData: Data = Data()
|
|
||||||
for i in 0..<totalNum {
|
|
||||||
if let part = self.parts[i] {
|
|
||||||
rulesData.append(part.rules)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SDLLogger.shared.log("[IdentitySession] get a completed rules: \(rulesData.count)")
|
|
||||||
|
|
||||||
return rulesData
|
|
||||||
}
|
|
||||||
|
|
||||||
private func isContinuousFromZero(indexs: [UInt32]) -> Bool {
|
|
||||||
guard !indexs.isEmpty else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return indexs.enumerated().allSatisfy { idx, value in
|
|
||||||
idx == value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
actor IdentityStore {
|
actor IdentityStore {
|
||||||
typealias IdentityID = UInt32
|
typealias IdentityID = UInt32
|
||||||
|
|
||||||
@ -66,7 +14,6 @@ actor IdentityStore {
|
|||||||
|
|
||||||
private let publisher: SnapshotPublisher<IdentitySnapshot>
|
private let publisher: SnapshotPublisher<IdentitySnapshot>
|
||||||
private var identityMap: [IdentityID: IdentityRuleMap] = [:]
|
private var identityMap: [IdentityID: IdentityRuleMap] = [:]
|
||||||
private var sessions: [IdentityID: IdentitySession] = [:]
|
|
||||||
|
|
||||||
init(publisher: SnapshotPublisher<IdentitySnapshot>) {
|
init(publisher: SnapshotPublisher<IdentitySnapshot>) {
|
||||||
self.publisher = publisher
|
self.publisher = publisher
|
||||||
@ -74,33 +21,29 @@ actor IdentityStore {
|
|||||||
|
|
||||||
func apply(policyResponse: SDLPolicyResponse) {
|
func apply(policyResponse: SDLPolicyResponse) {
|
||||||
let id = policyResponse.srcIdentityID
|
let id = policyResponse.srcIdentityID
|
||||||
let session = self.sessions[id, default: IdentitySession(part: policyResponse)]
|
let version = policyResponse.version
|
||||||
session.merge(part: policyResponse)
|
|
||||||
|
guard self.identityMap[id] == nil || ((self.identityMap[id]?.version ?? 0) < version) else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 判断一下是否接受完成
|
// 判断一下是否接受完成
|
||||||
if let rulesData = session.process() {
|
var buffer = alloctor.buffer(bytes: policyResponse.rules)
|
||||||
var buffer = alloctor.buffer(bytes: rulesData)
|
var ruleMap: [UInt8: [UInt16: Bool]] = [:]
|
||||||
var ruleMap: [UInt8: [UInt16: Bool]] = [:]
|
while true {
|
||||||
while true {
|
guard let proto = buffer.readInteger(endianness: .big, as: UInt8.self),
|
||||||
guard let proto = buffer.readInteger(endianness: .big, as: UInt8.self),
|
let port = buffer.readInteger(endianness: .big, as: UInt16.self) else {
|
||||||
let port = buffer.readInteger(endianness: .big, as: UInt16.self) else {
|
break
|
||||||
break
|
|
||||||
}
|
|
||||||
ruleMap[proto, default: [:]][port] = true
|
|
||||||
}
|
}
|
||||||
self.identityMap[id] = IdentityRuleMap(ruleMap: ruleMap)
|
ruleMap[proto, default: [:]][port] = true
|
||||||
|
|
||||||
// 删除当前的session信息
|
|
||||||
self.sessions.removeValue(forKey: id)
|
|
||||||
|
|
||||||
SDLLogger.shared.log("[IdentitySession] get compile Snapshot rules nums: \(self.identityMap[id]?.ruleMap.count), success: \(self.identityMap[id]?.isAllow(proto: 1, port: 80))")
|
|
||||||
|
|
||||||
// 发布新的快照信息
|
|
||||||
let snapshot = compileSnapshot()
|
|
||||||
publisher.publish(snapshot)
|
|
||||||
} else {
|
|
||||||
self.sessions[id] = session
|
|
||||||
}
|
}
|
||||||
|
self.identityMap[id] = IdentityRuleMap(version: version, ruleMap: ruleMap)
|
||||||
|
|
||||||
|
SDLLogger.shared.log("[IdentitySession] get compile Snapshot rules nums: \(self.identityMap[id]?.ruleMap.count), success: \(self.identityMap[id]?.isAllow(proto: 1, port: 80))")
|
||||||
|
|
||||||
|
// 发布新的快照信息
|
||||||
|
let snapshot = compileSnapshot()
|
||||||
|
publisher.publish(snapshot)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func compileSnapshot() -> IdentitySnapshot {
|
private func compileSnapshot() -> IdentitySnapshot {
|
||||||
|
|||||||
@ -78,6 +78,8 @@ struct SDLEmpty: Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var unknownFields = SwiftProtobuf.UnknownStorage()
|
var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||||
|
|
||||||
init() {}
|
init() {}
|
||||||
@ -89,6 +91,8 @@ struct SDLRegisterSuper: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var clientID: String = String()
|
var clientID: String = String()
|
||||||
|
|
||||||
/// 网络地址信息已经有https请求分配了
|
/// 网络地址信息已经有https请求分配了
|
||||||
@ -121,6 +125,8 @@ struct SDLRegisterSuperAck: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var aesKey: Data = Data()
|
var aesKey: Data = Data()
|
||||||
|
|
||||||
var sessionToken: Data = Data()
|
var sessionToken: Data = Data()
|
||||||
@ -135,6 +141,8 @@ struct SDLRegisterSuperNak: Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var errorCode: UInt32 = 0
|
var errorCode: UInt32 = 0
|
||||||
|
|
||||||
var errorMessage: String = String()
|
var errorMessage: String = String()
|
||||||
@ -149,6 +157,8 @@ struct SDLQueryInfo: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var dstMac: Data = Data()
|
var dstMac: Data = Data()
|
||||||
|
|
||||||
var unknownFields = SwiftProtobuf.UnknownStorage()
|
var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||||
@ -161,6 +171,8 @@ struct SDLPeerInfo: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var dstMac: Data = Data()
|
var dstMac: Data = Data()
|
||||||
|
|
||||||
var v4Info: SDLV4Info {
|
var v4Info: SDLV4Info {
|
||||||
@ -197,6 +209,8 @@ struct SDLArpRequest: Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var targetIp: UInt32 = 0
|
var targetIp: UInt32 = 0
|
||||||
|
|
||||||
var unknownFields = SwiftProtobuf.UnknownStorage()
|
var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||||
@ -209,6 +223,8 @@ struct SDLArpResponse: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var targetIp: UInt32 = 0
|
var targetIp: UInt32 = 0
|
||||||
|
|
||||||
var targetMac: Data = Data()
|
var targetMac: Data = Data()
|
||||||
@ -224,6 +240,8 @@ struct SDLPolicyRequest: Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var srcIdentityID: UInt32 = 0
|
var srcIdentityID: UInt32 = 0
|
||||||
|
|
||||||
var dstIdentityID: UInt32 = 0
|
var dstIdentityID: UInt32 = 0
|
||||||
@ -241,6 +259,8 @@ struct SDLPolicyResponse: @unchecked Sendable {
|
|||||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||||
// methods supported on all messages.
|
// methods supported on all messages.
|
||||||
|
|
||||||
|
var pktID: UInt32 = 0
|
||||||
|
|
||||||
var srcIdentityID: UInt32 = 0
|
var srcIdentityID: UInt32 = 0
|
||||||
|
|
||||||
var dstIdentityID: UInt32 = 0
|
var dstIdentityID: UInt32 = 0
|
||||||
@ -338,6 +358,8 @@ struct SDLStunRequest: @unchecked Sendable {
|
|||||||
/// Clears the value of `v6Info`. Subsequent reads from it will return its default value.
|
/// Clears the value of `v6Info`. Subsequent reads from it will return its default value.
|
||||||
mutating func clearV6Info() {self._v6Info = nil}
|
mutating func clearV6Info() {self._v6Info = nil}
|
||||||
|
|
||||||
|
var sessionToken: Data = Data()
|
||||||
|
|
||||||
var unknownFields = SwiftProtobuf.UnknownStorage()
|
var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||||
|
|
||||||
init() {}
|
init() {}
|
||||||
@ -589,34 +611,8 @@ extension SDLWelcome: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
|
|||||||
|
|
||||||
extension SDLEmpty: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLEmpty: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLEmpty"
|
static let protoMessageName: String = "SDLEmpty"
|
||||||
static let _protobuf_nameMap = SwiftProtobuf._NameMap()
|
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
|
||||||
// Load everything into unknown fields
|
|
||||||
while try decoder.nextFieldNumber() != nil {}
|
|
||||||
}
|
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
|
||||||
}
|
|
||||||
|
|
||||||
static func ==(lhs: SDLEmpty, rhs: SDLEmpty) -> Bool {
|
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
||||||
static let protoMessageName: String = "SDLRegisterSuper"
|
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "client_id"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "network_id"),
|
|
||||||
3: .same(proto: "mac"),
|
|
||||||
4: .same(proto: "ip"),
|
|
||||||
5: .standard(proto: "mask_len"),
|
|
||||||
6: .same(proto: "hostname"),
|
|
||||||
7: .standard(proto: "pub_key"),
|
|
||||||
8: .standard(proto: "access_token"),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -625,48 +621,93 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularStringField(value: &self.clientID) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
|
|
||||||
case 3: try { try decoder.decodeSingularBytesField(value: &self.mac) }()
|
|
||||||
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
|
|
||||||
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.maskLen) }()
|
|
||||||
case 6: try { try decoder.decodeSingularStringField(value: &self.hostname) }()
|
|
||||||
case 7: try { try decoder.decodeSingularStringField(value: &self.pubKey) }()
|
|
||||||
case 8: try { try decoder.decodeSingularStringField(value: &self.accessToken) }()
|
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func ==(lhs: SDLEmpty, rhs: SDLEmpty) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
|
static let protoMessageName: String = "SDLRegisterSuper"
|
||||||
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
|
1: .standard(proto: "pkt_id"),
|
||||||
|
2: .standard(proto: "client_id"),
|
||||||
|
3: .standard(proto: "network_id"),
|
||||||
|
4: .same(proto: "mac"),
|
||||||
|
5: .same(proto: "ip"),
|
||||||
|
6: .standard(proto: "mask_len"),
|
||||||
|
7: .same(proto: "hostname"),
|
||||||
|
8: .standard(proto: "pub_key"),
|
||||||
|
9: .standard(proto: "access_token"),
|
||||||
|
]
|
||||||
|
|
||||||
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
|
while let fieldNumber = try decoder.nextFieldNumber() {
|
||||||
|
// The use of inline closures is to circumvent an issue where the compiler
|
||||||
|
// allocates stack space for every case branch when no optimizations are
|
||||||
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
|
switch fieldNumber {
|
||||||
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
|
case 2: try { try decoder.decodeSingularStringField(value: &self.clientID) }()
|
||||||
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }()
|
||||||
|
case 4: try { try decoder.decodeSingularBytesField(value: &self.mac) }()
|
||||||
|
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
|
||||||
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.maskLen) }()
|
||||||
|
case 7: try { try decoder.decodeSingularStringField(value: &self.hostname) }()
|
||||||
|
case 8: try { try decoder.decodeSingularStringField(value: &self.pubKey) }()
|
||||||
|
case 9: try { try decoder.decodeSingularStringField(value: &self.accessToken) }()
|
||||||
|
default: break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if !self.clientID.isEmpty {
|
if !self.clientID.isEmpty {
|
||||||
try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 1)
|
try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if self.networkID != 0 {
|
if self.networkID != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 2)
|
try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
if !self.mac.isEmpty {
|
if !self.mac.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 3)
|
try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 4)
|
||||||
}
|
}
|
||||||
if self.ip != 0 {
|
if self.ip != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 4)
|
try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 5)
|
||||||
}
|
}
|
||||||
if self.maskLen != 0 {
|
if self.maskLen != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.maskLen, fieldNumber: 5)
|
try visitor.visitSingularUInt32Field(value: self.maskLen, fieldNumber: 6)
|
||||||
}
|
}
|
||||||
if !self.hostname.isEmpty {
|
if !self.hostname.isEmpty {
|
||||||
try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 6)
|
try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 7)
|
||||||
}
|
}
|
||||||
if !self.pubKey.isEmpty {
|
if !self.pubKey.isEmpty {
|
||||||
try visitor.visitSingularStringField(value: self.pubKey, fieldNumber: 7)
|
try visitor.visitSingularStringField(value: self.pubKey, fieldNumber: 8)
|
||||||
}
|
}
|
||||||
if !self.accessToken.isEmpty {
|
if !self.accessToken.isEmpty {
|
||||||
try visitor.visitSingularStringField(value: self.accessToken, fieldNumber: 8)
|
try visitor.visitSingularStringField(value: self.accessToken, fieldNumber: 9)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLRegisterSuper, rhs: SDLRegisterSuper) -> Bool {
|
static func ==(lhs: SDLRegisterSuper, rhs: SDLRegisterSuper) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.clientID != rhs.clientID {return false}
|
if lhs.clientID != rhs.clientID {return false}
|
||||||
if lhs.networkID != rhs.networkID {return false}
|
if lhs.networkID != rhs.networkID {return false}
|
||||||
if lhs.mac != rhs.mac {return false}
|
if lhs.mac != rhs.mac {return false}
|
||||||
@ -683,8 +724,9 @@ extension SDLRegisterSuper: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
|
|||||||
extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLRegisterSuperAck"
|
static let protoMessageName: String = "SDLRegisterSuperAck"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "aes_key"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "session_token"),
|
2: .standard(proto: "aes_key"),
|
||||||
|
3: .standard(proto: "session_token"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -693,24 +735,29 @@ extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
|
case 2: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }()
|
||||||
|
case 3: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if !self.aesKey.isEmpty {
|
if !self.aesKey.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 1)
|
try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if !self.sessionToken.isEmpty {
|
if !self.sessionToken.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 2)
|
try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLRegisterSuperAck, rhs: SDLRegisterSuperAck) -> Bool {
|
static func ==(lhs: SDLRegisterSuperAck, rhs: SDLRegisterSuperAck) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.aesKey != rhs.aesKey {return false}
|
if lhs.aesKey != rhs.aesKey {return false}
|
||||||
if lhs.sessionToken != rhs.sessionToken {return false}
|
if lhs.sessionToken != rhs.sessionToken {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
@ -721,8 +768,9 @@ extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
|
|||||||
extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLRegisterSuperNak"
|
static let protoMessageName: String = "SDLRegisterSuperNak"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "error_code"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "error_message"),
|
2: .standard(proto: "error_code"),
|
||||||
|
3: .standard(proto: "error_message"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -731,24 +779,29 @@ extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.errorCode) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularStringField(value: &self.errorMessage) }()
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.errorCode) }()
|
||||||
|
case 3: try { try decoder.decodeSingularStringField(value: &self.errorMessage) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if self.errorCode != 0 {
|
if self.errorCode != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.errorCode, fieldNumber: 1)
|
try visitor.visitSingularUInt32Field(value: self.errorCode, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if !self.errorMessage.isEmpty {
|
if !self.errorMessage.isEmpty {
|
||||||
try visitor.visitSingularStringField(value: self.errorMessage, fieldNumber: 2)
|
try visitor.visitSingularStringField(value: self.errorMessage, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLRegisterSuperNak, rhs: SDLRegisterSuperNak) -> Bool {
|
static func ==(lhs: SDLRegisterSuperNak, rhs: SDLRegisterSuperNak) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.errorCode != rhs.errorCode {return false}
|
if lhs.errorCode != rhs.errorCode {return false}
|
||||||
if lhs.errorMessage != rhs.errorMessage {return false}
|
if lhs.errorMessage != rhs.errorMessage {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
@ -759,7 +812,8 @@ extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImpl
|
|||||||
extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLQueryInfo"
|
static let protoMessageName: String = "SDLQueryInfo"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "dst_mac"),
|
1: .standard(proto: "pkt_id"),
|
||||||
|
2: .standard(proto: "dst_mac"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -768,20 +822,25 @@ extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
|
case 2: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if !self.dstMac.isEmpty {
|
if !self.dstMac.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1)
|
try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLQueryInfo, rhs: SDLQueryInfo) -> Bool {
|
static func ==(lhs: SDLQueryInfo, rhs: SDLQueryInfo) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.dstMac != rhs.dstMac {return false}
|
if lhs.dstMac != rhs.dstMac {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
return true
|
return true
|
||||||
@ -791,9 +850,10 @@ extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
|
|||||||
extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLPeerInfo"
|
static let protoMessageName: String = "SDLPeerInfo"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "dst_mac"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "v4_info"),
|
2: .standard(proto: "dst_mac"),
|
||||||
3: .standard(proto: "v6_info"),
|
3: .standard(proto: "v4_info"),
|
||||||
|
4: .standard(proto: "v6_info"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -802,9 +862,10 @@ extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularMessageField(value: &self._v4Info) }()
|
case 2: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }()
|
||||||
case 3: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
|
case 3: try { try decoder.decodeSingularMessageField(value: &self._v4Info) }()
|
||||||
|
case 4: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -815,19 +876,23 @@ extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
|
|||||||
// allocates stack space for every if/case branch local when no optimizations
|
// allocates stack space for every if/case branch local when no optimizations
|
||||||
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
|
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
|
||||||
// https://github.com/apple/swift-protobuf/issues/1182
|
// https://github.com/apple/swift-protobuf/issues/1182
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if !self.dstMac.isEmpty {
|
if !self.dstMac.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1)
|
try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
try { if let v = self._v4Info {
|
try { if let v = self._v4Info {
|
||||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 2)
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
|
||||||
} }()
|
} }()
|
||||||
try { if let v = self._v6Info {
|
try { if let v = self._v6Info {
|
||||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 4)
|
||||||
} }()
|
} }()
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLPeerInfo, rhs: SDLPeerInfo) -> Bool {
|
static func ==(lhs: SDLPeerInfo, rhs: SDLPeerInfo) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.dstMac != rhs.dstMac {return false}
|
if lhs.dstMac != rhs.dstMac {return false}
|
||||||
if lhs._v4Info != rhs._v4Info {return false}
|
if lhs._v4Info != rhs._v4Info {return false}
|
||||||
if lhs._v6Info != rhs._v6Info {return false}
|
if lhs._v6Info != rhs._v6Info {return false}
|
||||||
@ -839,7 +904,8 @@ extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
|
|||||||
extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLArpRequest"
|
static let protoMessageName: String = "SDLArpRequest"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "target_ip"),
|
1: .standard(proto: "pkt_id"),
|
||||||
|
2: .standard(proto: "target_ip"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -848,20 +914,25 @@ extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if self.targetIp != 0 {
|
if self.targetIp != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 1)
|
try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLArpRequest, rhs: SDLArpRequest) -> Bool {
|
static func ==(lhs: SDLArpRequest, rhs: SDLArpRequest) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.targetIp != rhs.targetIp {return false}
|
if lhs.targetIp != rhs.targetIp {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
return true
|
return true
|
||||||
@ -871,8 +942,9 @@ extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
|
|||||||
extension SDLArpResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLArpResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLArpResponse"
|
static let protoMessageName: String = "SDLArpResponse"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "target_ip"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "target_mac"),
|
2: .standard(proto: "target_ip"),
|
||||||
|
3: .standard(proto: "target_mac"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -881,24 +953,29 @@ extension SDLArpResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularBytesField(value: &self.targetMac) }()
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }()
|
||||||
|
case 3: try { try decoder.decodeSingularBytesField(value: &self.targetMac) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if self.targetIp != 0 {
|
if self.targetIp != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 1)
|
try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if !self.targetMac.isEmpty {
|
if !self.targetMac.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.targetMac, fieldNumber: 2)
|
try visitor.visitSingularBytesField(value: self.targetMac, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLArpResponse, rhs: SDLArpResponse) -> Bool {
|
static func ==(lhs: SDLArpResponse, rhs: SDLArpResponse) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.targetIp != rhs.targetIp {return false}
|
if lhs.targetIp != rhs.targetIp {return false}
|
||||||
if lhs.targetMac != rhs.targetMac {return false}
|
if lhs.targetMac != rhs.targetMac {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
@ -909,9 +986,10 @@ extension SDLArpResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
extension SDLPolicyRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLPolicyRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLPolicyRequest"
|
static let protoMessageName: String = "SDLPolicyRequest"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "src_identity_id"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "dst_identity_id"),
|
2: .standard(proto: "src_identity_id"),
|
||||||
3: .same(proto: "version"),
|
3: .standard(proto: "dst_identity_id"),
|
||||||
|
4: .same(proto: "version"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -920,28 +998,33 @@ extension SDLPolicyRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
|
||||||
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
|
||||||
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if self.srcIdentityID != 0 {
|
if self.srcIdentityID != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 1)
|
try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if self.dstIdentityID != 0 {
|
if self.dstIdentityID != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 2)
|
try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
if self.version != 0 {
|
if self.version != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 3)
|
try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 4)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLPolicyRequest, rhs: SDLPolicyRequest) -> Bool {
|
static func ==(lhs: SDLPolicyRequest, rhs: SDLPolicyRequest) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.srcIdentityID != rhs.srcIdentityID {return false}
|
if lhs.srcIdentityID != rhs.srcIdentityID {return false}
|
||||||
if lhs.dstIdentityID != rhs.dstIdentityID {return false}
|
if lhs.dstIdentityID != rhs.dstIdentityID {return false}
|
||||||
if lhs.version != rhs.version {return false}
|
if lhs.version != rhs.version {return false}
|
||||||
@ -953,10 +1036,11 @@ extension SDLPolicyRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme
|
|||||||
extension SDLPolicyResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
extension SDLPolicyResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||||
static let protoMessageName: String = "SDLPolicyResponse"
|
static let protoMessageName: String = "SDLPolicyResponse"
|
||||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||||
1: .standard(proto: "src_identity_id"),
|
1: .standard(proto: "pkt_id"),
|
||||||
2: .standard(proto: "dst_identity_id"),
|
2: .standard(proto: "src_identity_id"),
|
||||||
3: .same(proto: "version"),
|
3: .standard(proto: "dst_identity_id"),
|
||||||
4: .same(proto: "rules"),
|
4: .same(proto: "version"),
|
||||||
|
5: .same(proto: "rules"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -965,32 +1049,37 @@ extension SDLPolicyResponse: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
|
|||||||
// allocates stack space for every case branch when no optimizations are
|
// allocates stack space for every case branch when no optimizations are
|
||||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||||
switch fieldNumber {
|
switch fieldNumber {
|
||||||
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
|
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }()
|
||||||
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.srcIdentityID) }()
|
||||||
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.dstIdentityID) }()
|
||||||
case 4: try { try decoder.decodeSingularBytesField(value: &self.rules) }()
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.version) }()
|
||||||
|
case 5: try { try decoder.decodeSingularBytesField(value: &self.rules) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||||
|
if self.pktID != 0 {
|
||||||
|
try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1)
|
||||||
|
}
|
||||||
if self.srcIdentityID != 0 {
|
if self.srcIdentityID != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 1)
|
try visitor.visitSingularUInt32Field(value: self.srcIdentityID, fieldNumber: 2)
|
||||||
}
|
}
|
||||||
if self.dstIdentityID != 0 {
|
if self.dstIdentityID != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 2)
|
try visitor.visitSingularUInt32Field(value: self.dstIdentityID, fieldNumber: 3)
|
||||||
}
|
}
|
||||||
if self.version != 0 {
|
if self.version != 0 {
|
||||||
try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 3)
|
try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 4)
|
||||||
}
|
}
|
||||||
if !self.rules.isEmpty {
|
if !self.rules.isEmpty {
|
||||||
try visitor.visitSingularBytesField(value: self.rules, fieldNumber: 4)
|
try visitor.visitSingularBytesField(value: self.rules, fieldNumber: 5)
|
||||||
}
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func ==(lhs: SDLPolicyResponse, rhs: SDLPolicyResponse) -> Bool {
|
static func ==(lhs: SDLPolicyResponse, rhs: SDLPolicyResponse) -> Bool {
|
||||||
|
if lhs.pktID != rhs.pktID {return false}
|
||||||
if lhs.srcIdentityID != rhs.srcIdentityID {return false}
|
if lhs.srcIdentityID != rhs.srcIdentityID {return false}
|
||||||
if lhs.dstIdentityID != rhs.dstIdentityID {return false}
|
if lhs.dstIdentityID != rhs.dstIdentityID {return false}
|
||||||
if lhs.version != rhs.version {return false}
|
if lhs.version != rhs.version {return false}
|
||||||
@ -1140,6 +1229,7 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
5: .same(proto: "ip"),
|
5: .same(proto: "ip"),
|
||||||
6: .standard(proto: "nat_type"),
|
6: .standard(proto: "nat_type"),
|
||||||
7: .standard(proto: "v6_info"),
|
7: .standard(proto: "v6_info"),
|
||||||
|
8: .standard(proto: "session_token"),
|
||||||
]
|
]
|
||||||
|
|
||||||
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||||
@ -1155,6 +1245,7 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
|
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }()
|
||||||
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }()
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }()
|
||||||
case 7: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
|
case 7: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }()
|
||||||
|
case 8: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }()
|
||||||
default: break
|
default: break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1186,6 +1277,9 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
try { if let v = self._v6Info {
|
try { if let v = self._v6Info {
|
||||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
|
||||||
} }()
|
} }()
|
||||||
|
if !self.sessionToken.isEmpty {
|
||||||
|
try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 8)
|
||||||
|
}
|
||||||
try unknownFields.traverse(visitor: &visitor)
|
try unknownFields.traverse(visitor: &visitor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1197,6 +1291,7 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
|
|||||||
if lhs.ip != rhs.ip {return false}
|
if lhs.ip != rhs.ip {return false}
|
||||||
if lhs.natType != rhs.natType {return false}
|
if lhs.natType != rhs.natType {return false}
|
||||||
if lhs._v6Info != rhs._v6Info {return false}
|
if lhs._v6Info != rhs._v6Info {return false}
|
||||||
|
if lhs.sessionToken != rhs.sessionToken {return false}
|
||||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,9 @@ enum SDLPacketType: UInt8 {
|
|||||||
case policyRequest = 0xb0
|
case policyRequest = 0xb0
|
||||||
case policyResponse = 0xb1
|
case policyResponse = 0xb1
|
||||||
|
|
||||||
|
// 获取欢迎消息
|
||||||
|
case welcome = 0x4F
|
||||||
|
|
||||||
case data = 0xFF
|
case data = 0xFF
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,6 +96,9 @@ extension SDLStunProbeReply {
|
|||||||
// --MARK: 进来的消息, 这里需要采用代数类型来表示
|
// --MARK: 进来的消息, 这里需要采用代数类型来表示
|
||||||
enum SDLHoleMessage {
|
enum SDLHoleMessage {
|
||||||
case data(SDLData)
|
case data(SDLData)
|
||||||
|
case register(SDLRegister)
|
||||||
|
case registerAck(SDLRegisterAck)
|
||||||
|
case stunProbeReply(SDLStunProbeReply)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SDLQUICInboundMessage {
|
enum SDLQUICInboundMessage {
|
||||||
@ -105,12 +111,6 @@ enum SDLQUICInboundMessage {
|
|||||||
|
|
||||||
case peerInfo(SDLPeerInfo)
|
case peerInfo(SDLPeerInfo)
|
||||||
case event(SDLEvent)
|
case event(SDLEvent)
|
||||||
|
|
||||||
case stunProbeReply(SDLStunProbeReply)
|
|
||||||
|
|
||||||
//case register(SDLRegister)
|
|
||||||
//case registerAck(SDLRegisterAck)
|
|
||||||
|
|
||||||
case policyReponse(SDLPolicyResponse)
|
case policyReponse(SDLPolicyResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,11 +25,8 @@ final class SDLUDPHole: ChannelInboundHandler {
|
|||||||
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
|
||||||
private var channel: Channel?
|
private var channel: Channel?
|
||||||
|
|
||||||
public let signalStream: AsyncStream<(SocketAddress, SDLHoleSignal)>
|
public let messageStream: AsyncStream<(SocketAddress, SDLHoleMessage)>
|
||||||
private let signalContinuation: AsyncStream<(SocketAddress, SDLHoleSignal)>.Continuation
|
private let messageContinuation: AsyncStream<(SocketAddress, SDLHoleMessage)>.Continuation
|
||||||
|
|
||||||
public let dataStream: AsyncStream<SDLData>
|
|
||||||
private let dataContinuation: AsyncStream<SDLData>.Continuation
|
|
||||||
|
|
||||||
// 解决channelready的问题
|
// 解决channelready的问题
|
||||||
private var cont: CheckedContinuation<Void, Never>?
|
private var cont: CheckedContinuation<Void, Never>?
|
||||||
@ -42,8 +39,7 @@ final class SDLUDPHole: ChannelInboundHandler {
|
|||||||
|
|
||||||
// 启动函数
|
// 启动函数
|
||||||
init() throws {
|
init() throws {
|
||||||
(self.signalStream, self.signalContinuation) = AsyncStream.makeStream(of: (SocketAddress, SDLHoleSignal).self, bufferingPolicy: .unbounded)
|
(self.messageStream, self.messageContinuation) = AsyncStream.makeStream(of: (SocketAddress, SDLHoleMessage).self, bufferingPolicy: .unbounded)
|
||||||
(self.dataStream, self.dataContinuation) = AsyncStream.makeStream(of: SDLData.self, bufferingPolicy: .unbounded)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func start() throws {
|
func start() throws {
|
||||||
@ -90,12 +86,7 @@ final class SDLUDPHole: ChannelInboundHandler {
|
|||||||
let remoteAddress = envelope.remoteAddress
|
let remoteAddress = envelope.remoteAddress
|
||||||
do {
|
do {
|
||||||
if let message = try decode(buffer: &buffer) {
|
if let message = try decode(buffer: &buffer) {
|
||||||
switch message {
|
self.messageContinuation.yield((remoteAddress, message))
|
||||||
case .data(let data):
|
|
||||||
self.dataContinuation.yield(data)
|
|
||||||
case .signal(let signal):
|
|
||||||
self.signalContinuation.yield((remoteAddress, signal))
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode message, get null", level: .warning)
|
SDLLogger.shared.log("[SDLUDPHole] decode message, get null", level: .warning)
|
||||||
}
|
}
|
||||||
@ -105,9 +96,7 @@ final class SDLUDPHole: ChannelInboundHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func channelInactive(context: ChannelHandlerContext) {
|
func channelInactive(context: ChannelHandlerContext) {
|
||||||
self.signalContinuation.finish()
|
self.messageContinuation.finish()
|
||||||
self.dataContinuation.finish()
|
|
||||||
|
|
||||||
context.close(promise: nil)
|
context.close(promise: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,84 +146,19 @@ final class SDLUDPHole: ChannelInboundHandler {
|
|||||||
let registerPacket = try? SDLRegister(serializedBytes: bytes) else {
|
let registerPacket = try? SDLRegister(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .signal(.register(registerPacket))
|
return .register(registerPacket)
|
||||||
case .registerAck:
|
case .registerAck:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
||||||
let registerAck = try? SDLRegisterAck(serializedBytes: bytes) else {
|
let registerAck = try? SDLRegisterAck(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .signal(.registerAck(registerAck))
|
return .registerAck(registerAck)
|
||||||
case .stunProbeReply:
|
case .stunProbeReply:
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
||||||
let stunProbeReply = try? SDLStunProbeReply(serializedBytes: bytes) else {
|
let stunProbeReply = try? SDLStunProbeReply(serializedBytes: bytes) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return .signal(.stunProbeReply(stunProbeReply))
|
return .stunProbeReply(stunProbeReply)
|
||||||
case .registerSuperAck:
|
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
||||||
let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.registerSuperAck(registerSuperAck))
|
|
||||||
case .registerSuperNak:
|
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
||||||
let registerSuperNak = try? SDLRegisterSuperNak(serializedBytes: bytes) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.registerSuperNak(registerSuperNak))
|
|
||||||
case .peerInfo:
|
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
||||||
let peerInfo = try? SDLPeerInfo(serializedBytes: bytes) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.peerInfo(peerInfo))
|
|
||||||
case .policyResponse:
|
|
||||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
|
||||||
let policyResponse = try? SDLPolicyResponse(serializedBytes: bytes) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.policyReponse(policyResponse))
|
|
||||||
case .event:
|
|
||||||
guard let eventVal = buffer.readInteger(as: UInt8.self),
|
|
||||||
let event = SDLEventType(rawValue: eventVal),
|
|
||||||
let bytes = buffer.readBytes(length: buffer.readableBytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 15")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
switch event {
|
|
||||||
case .dropMacs:
|
|
||||||
guard let dropMacsEvent = try? SDLDropMacsEvent(serializedBytes: bytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 16")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.event(.dropMacs(dropMacsEvent)))
|
|
||||||
|
|
||||||
case .natChanged:
|
|
||||||
guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 16")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.event(.natChanged(natChangedEvent)))
|
|
||||||
case .sendRegister:
|
|
||||||
guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 17")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.event(.sendRegister(sendRegisterEvent)))
|
|
||||||
case .refreshAuth:
|
|
||||||
guard let refreshAuthEvent = try? SDLRefreshAuthEvent(serializedBytes: bytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 17")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.event(.refreshAuth(refreshAuthEvent)))
|
|
||||||
case .networkShutdown:
|
|
||||||
guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else {
|
|
||||||
SDLLogger.shared.log("[SDLUDPHole] decode error 18")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return .signal(.event(.networkShutdown(networkShutdownEvent)))
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
SDLLogger.shared.log("SDLUDPHole decode miss type: \(type)")
|
SDLLogger.shared.log("SDLUDPHole decode miss type: \(type)")
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user