diff --git a/Tun/Punchnet/Actors/SDLSuperClientActor.swift b/Tun/Punchnet/Actors/SDLSuperClientActor.swift deleted file mode 100644 index f8ef759..0000000 --- a/Tun/Punchnet/Actors/SDLSuperClientActor.swift +++ /dev/null @@ -1,312 +0,0 @@ -// -// SDLWebsocketClient.swift -// Tun -// -// Created by 安礼成 on 2024/3/28. -// - -import Foundation -import NIOCore -import NIOPosix - -// --MARK: 和SuperNode的客户端 -actor SDLSuperClientActor { - // 发送的消息格式 - private typealias TcpMessage = (packetId: UInt32, type: SDLPacketType, data: Data) - - private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) - private let asyncChannel: NIOAsyncChannel - private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: TcpMessage.self, bufferingPolicy: .unbounded) - private var continuations: [UInt32:CheckedContinuation] = [:] - - public let eventFlow: AsyncStream - private let inboundContinuation: AsyncStream.Continuation - - // id生成器 - var idGenerator = SDLIdGenerator(seed: 1) - - private let logger: SDLLogger - - // 定义事件类型 - enum SuperEvent { - case ready - case event(SDLEvent) - case command(UInt32, SDLCommand) - } - - enum SuperClientError: Error { - case timeout - case connectionClosed - case cancelled - } - - init(host: String, port: Int, logger: SDLLogger) async throws { - self.logger = logger - - (self.eventFlow, self.inboundContinuation) = AsyncStream.makeStream(of: SuperEvent.self, bufferingPolicy: .unbounded) - let bootstrap = ClientBootstrap(group: self.group) - .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) - .channelInitializer { channel in - return channel.pipeline.addHandlers([ - ByteToMessageHandler(FixedHeaderDecoder()), - MessageToByteHandler(FixedHeaderEncoder()) - ]) - } - - self.asyncChannel = try await bootstrap.connect(host: host, port: port) - .flatMapThrowing { channel in - return try NIOAsyncChannel(wrappingChannelSynchronously: channel, configuration: .init( - inboundType: ByteBuffer.self, - outboundType: ByteBuffer.self - )) - } - .get() - } - - func start() async throws { - try await withTaskCancellationHandler { - try await self.asyncChannel.executeThenClose { inbound, outbound in - self.inboundContinuation.yield(.ready) - - try await withThrowingTaskGroup(of: Void.self) { group in - group.addTask { - defer { - self.logger.log("[SDLSuperClient] inbound closed", level: .warning) - } - - for try await var packet in inbound { - try Task.checkCancellation() - - if let message = SDLSuperClientDecoder.decode(buffer: &packet) { - if !message.isPong() { - self.logger.log("[SDLSuperClient] read message: \(message)", level: .debug) - } - - switch message.packet { - case .event(let event): - self.inboundContinuation.yield(.event(event)) - case .command(let command): - self.inboundContinuation.yield(.command(message.msgId, command)) - default: - await self.fireCallback(message: message) - } - } - } - } - - group.addTask { - defer { - self.logger.log("[SDLSuperClient] outbound closed", level: .warning) - } - - for await (packetId, type, data) in self.writeStream { - try Task.checkCancellation() - - var buffer = self.asyncChannel.channel.allocator.buffer(capacity: data.count + 5) - buffer.writeInteger(packetId, as: UInt32.self) - buffer.writeBytes([type.rawValue]) - buffer.writeBytes(data) - try await outbound.write(buffer) - } - } - - // --MARK: 心跳机制 - group.addTask { - defer { - self.logger.log("[SDLSuperClient] ping task closed", level: .warning) - } - - while true { - try Task.checkCancellation() - await self.ping() - try await Task.sleep(nanoseconds: 5 * 1_000_000_000) - } - } - - // 迭代等待所有任务的退出, 第一个异常会被抛出 - if let _ = try await group.next() { - group.cancelAll() - } - } - } - } onCancel: { - self.inboundContinuation.finish() - self.writeContinuation.finish() - self.logger.log("[SDLSuperClient] withTaskCancellationHandler cancel") - Task { - await self.failAllContinuations(SuperClientError.cancelled) - } - } - } - - // -- MARK: apis - func unregister() throws { - self.send(type: .unregisterSuper, packetId: 0, data: Data()) - } - - private func ping() { - self.send(type: .ping, packetId: 0, data: Data()) - } - - func request(type: SDLPacketType, data: Data, timeout: Duration = .seconds(5)) async throws -> SDLSuperInboundMessage { - let packetId = idGenerator.nextId() - - return try await withCheckedThrowingContinuation { cont in - self.continuations[packetId] = cont - self.writeContinuation.yield(TcpMessage(packetId: packetId, type: type, data: data)) - Task { - try? await Task.sleep(for: timeout) - self.timeout(packetId: packetId) - } - } - } - - func send(type: SDLPacketType, packetId: UInt32, data: Data) { - self.writeContinuation.yield(TcpMessage(packetId: packetId, type: type, data: data)) - } - - // 处理回调函数 - private func fireCallback(message: SDLSuperInboundMessage) { - guard let cont = self.continuations.removeValue(forKey: message.msgId) else { - return - } - cont.resume(returning: message) - } - - private func failAllContinuations(_ error: Error) { - let all = continuations - continuations.removeAll() - - for (_, cont) in all { - cont.resume(throwing: error) - } - } - - private func timeout(packetId: UInt32) { - guard let cont = self.continuations.removeValue(forKey: packetId) else { - return - } - cont.resume(throwing: SuperClientError.timeout) - } - - deinit { - try! group.syncShutdownGracefully() - } - -} - -// --MARK: 编解码器 -private struct SDLSuperClientDecoder { - // 消息格式为: <> - static func decode(buffer: inout ByteBuffer) -> SDLSuperInboundMessage? { - guard let msgId = buffer.readInteger(as: UInt32.self), - let type = buffer.readInteger(as: UInt8.self), - let messageType = SDLPacketType(rawValue: type) else { - return nil - } - - switch messageType { - case .empty: - return .init(msgId: msgId, packet: .empty) - case .registerSuperAck: - guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else { - return nil - } - return .init(msgId: msgId, packet: .registerSuperAck(registerSuperAck)) - - case .registerSuperNak: - guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let registerSuperNak = try? SDLRegisterSuperNak(serializedBytes: bytes) else { - return nil - } - return .init(msgId: msgId, packet: .registerSuperNak(registerSuperNak)) - - case .peerInfo: - guard let bytes = buffer.readBytes(length: buffer.readableBytes), - let peerInfo = try? SDLPeerInfo(serializedBytes: bytes) else { - return nil - } - - return .init(msgId: msgId, packet: .peerInfo(peerInfo)) - case .pong: - return .init(msgId: msgId, packet: .pong) - - case .command: - guard let commandVal = buffer.readInteger(as: UInt8.self), - let command = SDLCommandType(rawValue: commandVal), - let bytes = buffer.readBytes(length: buffer.readableBytes) else { - return nil - } - - switch command { - case .changeNetwork: - guard let changeNetworkCommand = try? SDLChangeNetworkCommand(serializedBytes: bytes) else { - return nil - } - - return .init(msgId: msgId, packet: .command(.changeNetwork(changeNetworkCommand))) - } - - case .event: - guard let eventVal = buffer.readInteger(as: UInt8.self), - let event = SDLEventType(rawValue: eventVal), - let bytes = buffer.readBytes(length: buffer.readableBytes) else { - return nil - } - - switch event { - case .natChanged: - guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else { - return nil - } - return .init(msgId: msgId, packet: .event(.natChanged(natChangedEvent))) - case .sendRegister: - guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else { - return nil - } - return .init(msgId: msgId, packet: .event(.sendRegister(sendRegisterEvent))) - case .networkShutdown: - guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else { - return nil - } - return .init(msgId: msgId, packet: .event(.networkShutdown(networkShutdownEvent))) - } - - default: - return nil - } - } -} - -private final class FixedHeaderEncoder: MessageToByteEncoder, @unchecked Sendable { - typealias InboundIn = ByteBuffer - typealias InboundOut = ByteBuffer - - func encode(data: ByteBuffer, out: inout ByteBuffer) throws { - let len = data.readableBytes - out.writeInteger(UInt16(len)) - out.writeBytes(data.readableBytesView) - } -} - -private final class FixedHeaderDecoder: ByteToMessageDecoder, @unchecked Sendable { - typealias InboundIn = ByteBuffer - typealias InboundOut = ByteBuffer - - func decode(context: ChannelHandlerContext, buffer: inout ByteBuffer) throws -> DecodingState { - guard let len = buffer.getInteger(at: buffer.readerIndex, endianness: .big, as: UInt16.self) else { - return .needMoreData - } - - if buffer.readableBytes >= len + 2 { - buffer.moveReaderIndex(forwardBy: 2) - if let bytes = buffer.readBytes(length: Int(len)) { - context.fireChannelRead(self.wrapInboundOut(ByteBuffer(bytes: bytes))) - } - return .continue - } else { - return .needMoreData - } - } -} diff --git a/Tun/Punchnet/Actors/SDLUDPHoleActor.swift b/Tun/Punchnet/Actors/SDLUDPHoleActor.swift index 497d8ad..e09b6a7 100644 --- a/Tun/Punchnet/Actors/SDLUDPHoleActor.swift +++ b/Tun/Punchnet/Actors/SDLUDPHoleActor.swift @@ -11,6 +11,8 @@ import NIOPosix // 处理和sn-server服务器之间的通讯 actor SDLUDPHoleActor { + typealias HoleMessage = (SocketAddress, SDLHoleInboundMessage) + private let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) private let asyncChannel: NIOAsyncChannel, AddressedEnvelope> private let (writeStream, writeContinuation) = AsyncStream.makeStream(of: UDPMessage.self, bufferingPolicy: .unbounded) @@ -19,35 +21,22 @@ actor SDLUDPHoleActor { private var promises: [UInt32:EventLoopPromise] = [:] public var localAddress: SocketAddress? - public let eventFlow: AsyncStream - private let eventContinuation: AsyncStream.Continuation + public let messageStream: AsyncStream + private let messageContinuation: AsyncStream.Continuation private let logger: SDLLogger - // 依赖的外表能力 - struct Capabilities { - let logger: @Sendable (String) async -> Void - - } - struct UDPMessage { let remoteAddress: SocketAddress let type: SDLPacketType let data: Data } - // 定义事件类型 - enum UDPEvent { - case ready - case message(SocketAddress, SDLHoleInboundMessage) - case data(SDLData) - } - // 启动函数 init(logger: SDLLogger) async throws { self.logger = logger - (self.eventFlow, self.eventContinuation) = AsyncStream.makeStream(of: UDPEvent.self, bufferingPolicy: .unbounded) + (self.messageStream, self.messageContinuation) = AsyncStream.makeStream(of: HoleMessage.self, bufferingPolicy: .unbounded) let bootstrap = DatagramBootstrap(group: group) .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1) @@ -68,7 +57,6 @@ actor SDLUDPHoleActor { func start() async throws { try await withTaskCancellationHandler { try await self.asyncChannel.executeThenClose {inbound, outbound in - self.eventContinuation.yield(.ready) try await withThrowingTaskGroup(of: Void.self) { group in group.addTask { defer { @@ -85,12 +73,12 @@ actor SDLUDPHoleActor { switch message { case .data(let data): self.logger.log("[SDLUDPHole] read data: \(data.format()), from: \(remoteAddress)", level: .debug) - self.eventContinuation.yield(.data(data)) + self.messageContinuation.yield((remoteAddress, .data(data))) case .stunProbeReply(let probeReply): // 执行并移除回调 await self.trigger(probeReply: probeReply) default: - self.eventContinuation.yield(.message(remoteAddress, message)) + () } } else { self.logger.log("[SDLUDPHole] decode message, get null", level: .warning) @@ -126,7 +114,7 @@ actor SDLUDPHoleActor { } } onCancel: { self.writeContinuation.finish() - self.eventContinuation.finish() + self.messageContinuation.finish() self.logger.log("[SDLUDPHole] withTaskCancellationHandler cancel") } } @@ -196,6 +184,52 @@ actor SDLUDPHoleActor { case .stunProbeReply: let stunProbeReply = try SDLStunProbeReply(serializedBytes: bytes) return .stunProbeReply(stunProbeReply) + case .registerSuperAck: + guard let bytes = buffer.readBytes(length: buffer.readableBytes), + let registerSuperAck = try? SDLRegisterSuperAck(serializedBytes: bytes) else { + return nil + } + return .registerSuperAck(registerSuperAck) + case .registerSuperNak: + guard let bytes = buffer.readBytes(length: buffer.readableBytes), + let registerSuperNak = try? SDLRegisterSuperNak(serializedBytes: bytes) else { + return nil + } + return .registerSuperNak(registerSuperNak) + + case .peerInfo: + guard let bytes = buffer.readBytes(length: buffer.readableBytes), + let peerInfo = try? SDLPeerInfo(serializedBytes: bytes) else { + return nil + } + + return .peerInfo(peerInfo) + + case .event: + guard let eventVal = buffer.readInteger(as: UInt8.self), + let event = SDLEventType(rawValue: eventVal), + let bytes = buffer.readBytes(length: buffer.readableBytes) else { + return nil + } + + switch event { + case .natChanged: + guard let natChangedEvent = try? SDLNatChangedEvent(serializedBytes: bytes) else { + return nil + } + return .event(.natChanged(natChangedEvent)) + case .sendRegister: + guard let sendRegisterEvent = try? SDLSendRegisterEvent(serializedBytes: bytes) else { + return nil + } + return .event(.sendRegister(sendRegisterEvent)) + case .networkShutdown: + guard let networkShutdownEvent = try? SDLNetworkShutdownEvent(serializedBytes: bytes) else { + return nil + } + return .event(.networkShutdown(networkShutdownEvent)) + } + default: return nil } @@ -204,7 +238,7 @@ actor SDLUDPHoleActor { deinit { try? self.group.syncShutdownGracefully() self.writeContinuation.finish() - self.eventContinuation.finish() + self.messageContinuation.finish() } } diff --git a/Tun/Punchnet/SDLContext.swift b/Tun/Punchnet/SDLContext.swift index 398378c..867ac7a 100644 --- a/Tun/Punchnet/SDLContext.swift +++ b/Tun/Punchnet/SDLContext.swift @@ -49,7 +49,6 @@ public class SDLContext { // 依赖的变量 var udpHoleActor: SDLUDPHoleActor? - var superClientActor: SDLSuperClientActor? var providerActor: SDLTunnelProviderActor var puncherActor: SDLPuncherActor // dns的client对象 @@ -156,7 +155,6 @@ public class SDLContext { public func stop() async { self.rootTask?.cancel() - self.superClientActor = nil self.udpHoleActor = nil self.noticeClient = nil @@ -215,31 +213,6 @@ public class SDLContext { } - private func startSuperClient() async throws { - self.superClientActor = try await SDLSuperClientActor(host: self.config.superHost, port: self.config.superPort, logger: self.logger) - try await withThrowingTaskGroup(of: Void.self) { group in - defer { - self.logger.log("[SDLContext] super client task cancel", level: .warning) - } - - group.addTask { - try await self.superClientActor?.start() - } - - group.addTask { - if let eventFlow = self.superClientActor?.eventFlow { - for try await event in eventFlow { - try await self.handleSuperEvent(event: event) - } - } - } - - if let _ = try await group.next() { - group.cancelAll() - } - } - } - private func startMonitor() async { self.monitor = SDLNetworkMonitor() for await event in self.monitor!.eventStream { diff --git a/Tun/Punchnet/SDLMessage.pb.swift b/Tun/Punchnet/SDLMessage.pb.swift index c988ec2..9c11032 100644 --- a/Tun/Punchnet/SDLMessage.pb.swift +++ b/Tun/Punchnet/SDLMessage.pb.swift @@ -51,123 +51,62 @@ struct SDLV6Info: @unchecked Sendable { init() {} } -/// 设备网络地址信息 -struct SDLDevAddr: @unchecked Sendable { +/// 客户端层面通过token或者账号密码登录, 服务器端不管这个, +/// 只是验证凭证是否合法 (access_token) +/// 这里修改成了扁平的结构, 否则有些字段不好找放的位置 +struct SDLRegisterSuper: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var pktID: UInt32 = 0 + + var clientID: String = String() + var networkID: UInt32 = 0 var mac: Data = Data() - var netAddr: UInt32 = 0 + var ip: UInt32 = 0 - var netBitLen: UInt32 = 0 - - var networkDomain: String = String() - - var unknownFields = SwiftProtobuf.UnknownStorage() - - init() {} -} - -/// tcp通讯消息 -struct SDLEmpty: Sendable { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - var unknownFields = SwiftProtobuf.UnknownStorage() - - init() {} -} - -struct SDLRegisterSuper: Sendable { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - var version: UInt32 = 0 - - var installedChannel: String = String() - - var clientID: String = String() - - var devAddr: SDLDevAddr { - get {return _devAddr ?? SDLDevAddr()} - set {_devAddr = newValue} - } - /// Returns true if `devAddr` has been explicitly set. - var hasDevAddr: Bool {return self._devAddr != nil} - /// Clears the value of `devAddr`. Subsequent reads from it will return its default value. - mutating func clearDevAddr() {self._devAddr = nil} - - var pubKey: String = String() - - var token: String = String() - - var networkCode: String = String() + var maskLen: UInt32 = 0 var hostname: String = String() + var pubKey: String = String() + + var accessToken: String = String() + var unknownFields = SwiftProtobuf.UnknownStorage() init() {} - - fileprivate var _devAddr: SDLDevAddr? = nil } +/// 这里修改成了udp的方式,后续需要验证: session_token struct SDLRegisterSuperAck: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. - var devAddr: SDLDevAddr { - get {return _devAddr ?? SDLDevAddr()} - set {_devAddr = newValue} - } - /// Returns true if `devAddr` has been explicitly set. - var hasDevAddr: Bool {return self._devAddr != nil} - /// Clears the value of `devAddr`. Subsequent reads from it will return its default value. - mutating func clearDevAddr() {self._devAddr = nil} + var pktID: UInt32 = 0 var aesKey: Data = Data() - var upgradeType: UInt32 = 0 - - var upgradePrompt: String { - get {return _upgradePrompt ?? String()} - set {_upgradePrompt = newValue} - } - /// Returns true if `upgradePrompt` has been explicitly set. - var hasUpgradePrompt: Bool {return self._upgradePrompt != nil} - /// Clears the value of `upgradePrompt`. Subsequent reads from it will return its default value. - mutating func clearUpgradePrompt() {self._upgradePrompt = nil} - - var upgradeAddress: String { - get {return _upgradeAddress ?? String()} - set {_upgradeAddress = newValue} - } - /// Returns true if `upgradeAddress` has been explicitly set. - var hasUpgradeAddress: Bool {return self._upgradeAddress != nil} - /// Clears the value of `upgradeAddress`. Subsequent reads from it will return its default value. - mutating func clearUpgradeAddress() {self._upgradeAddress = nil} + var sessionToken: Data = Data() var unknownFields = SwiftProtobuf.UnknownStorage() init() {} - - fileprivate var _devAddr: SDLDevAddr? = nil - fileprivate var _upgradePrompt: String? = nil - fileprivate var _upgradeAddress: String? = nil } +/// 注册失败时候的消息体 struct SDLRegisterSuperNak: Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var pktID: UInt32 = 0 + var errorCode: UInt32 = 0 var errorMessage: String = String() @@ -177,13 +116,22 @@ struct SDLRegisterSuperNak: Sendable { init() {} } +/// 网络地址查询 struct SDLQueryInfo: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var pktID: UInt32 = 0 + + var networkID: UInt32 = 0 + + var srcMac: Data = Data() + var dstMac: Data = Data() + var sessionToken: Data = Data() + var unknownFields = SwiftProtobuf.UnknownStorage() init() {} @@ -194,6 +142,10 @@ struct SDLPeerInfo: @unchecked Sendable { // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var pktID: UInt32 = 0 + + var networkID: UInt32 = 0 + var dstMac: Data = Data() var v4Info: SDLV4Info { @@ -222,11 +174,29 @@ struct SDLPeerInfo: @unchecked Sendable { fileprivate var _v6Info: SDLV6Info? = nil } +struct SDLEmptyPeerInfo: @unchecked Sendable { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var pktID: UInt32 = 0 + + var networkID: UInt32 = 0 + + var dstMac: Data = Data() + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} +} + struct SDLNatChangedEvent: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var networkID: UInt32 = 0 + var mac: Data = Data() var ip: UInt32 = 0 @@ -236,11 +206,41 @@ struct SDLNatChangedEvent: @unchecked Sendable { init() {} } +/// 被清理掉的Endpoints +struct SDLDropMacsEvent: @unchecked Sendable { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var networkID: UInt32 = 0 + + var macs: [Data] = [] + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} +} + +/// 通知端上必须重新校验 +struct SDLRefreshAuthEvent: Sendable { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var networkID: UInt32 = 0 + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} +} + struct SDLSendRegisterEvent: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var networkID: UInt32 = 0 + var dstMac: Data = Data() var natIp: UInt32 = 0 @@ -270,6 +270,8 @@ struct SDLNetworkShutdownEvent: Sendable { // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. + var networkID: UInt32 = 0 + var message: String = String() var unknownFields = SwiftProtobuf.UnknownStorage() @@ -277,79 +279,12 @@ struct SDLNetworkShutdownEvent: Sendable { init() {} } -struct SDLChangeNetworkCommand: @unchecked Sendable { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - var devAddr: SDLDevAddr { - get {return _devAddr ?? SDLDevAddr()} - set {_devAddr = newValue} - } - /// Returns true if `devAddr` has been explicitly set. - var hasDevAddr: Bool {return self._devAddr != nil} - /// Clears the value of `devAddr`. Subsequent reads from it will return its default value. - mutating func clearDevAddr() {self._devAddr = nil} - - var aesKey: Data = Data() - - var unknownFields = SwiftProtobuf.UnknownStorage() - - init() {} - - fileprivate var _devAddr: SDLDevAddr? = nil -} - -struct SDLCommandAck: Sendable { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// status = true, 表示成功;status = false 表示失败,message是失败原因描述 - var status: Bool = false - - var message: String { - get {return _message ?? String()} - set {_message = newValue} - } - /// Returns true if `message` has been explicitly set. - var hasMessage: Bool {return self._message != nil} - /// Clears the value of `message`. Subsequent reads from it will return its default value. - mutating func clearMessage() {self._message = nil} - - var unknownFields = SwiftProtobuf.UnknownStorage() - - init() {} - - fileprivate var _message: String? = nil -} - -struct SDLFlows: Sendable { - // SwiftProtobuf.Message conformance is added in an extension below. See the - // `Message` and `Message+*Additions` files in the SwiftProtobuf library for - // methods supported on all messages. - - /// 服务器转发流量 - var forwardNum: UInt32 = 0 - - /// p2p直接流量 - var p2PNum: UInt32 = 0 - - /// 接收的流量 - var inboundNum: UInt32 = 0 - - var unknownFields = SwiftProtobuf.UnknownStorage() - - init() {} -} - +/// UDP通讯消息 struct SDLStunRequest: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. - var cookie: UInt32 = 0 - var clientID: String = String() var networkID: UInt32 = 0 @@ -369,6 +304,8 @@ struct SDLStunRequest: @unchecked Sendable { /// Clears the value of `v6Info`. Subsequent reads from it will return its default value. mutating func clearV6Info() {self._v6Info = nil} + var sessionToken: Data = Data() + var unknownFields = SwiftProtobuf.UnknownStorage() init() {} @@ -381,7 +318,11 @@ struct SDLStunReply: Sendable { // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. - var cookie: UInt32 = 0 + var networkID: UInt32 = 0 + + var code: UInt32 = 0 + + var message: String = String() var unknownFields = SwiftProtobuf.UnknownStorage() @@ -405,6 +346,10 @@ struct SDLData: @unchecked Sendable { var data: Data = Data() + var sessionToken: Data = Data() + + var identityID: UInt32 = 0 + var unknownFields = SwiftProtobuf.UnknownStorage() init() {} @@ -472,7 +417,7 @@ struct SDLStunProbeReply: Sendable { init() {} } -struct SDLArpRequest: Sendable { +struct SDLArpRequest: @unchecked Sendable { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. @@ -481,6 +426,8 @@ struct SDLArpRequest: Sendable { var targetIp: UInt32 = 0 + var sessionToken: Data = Data() + var unknownFields = SwiftProtobuf.UnknownStorage() init() {} @@ -586,605 +533,18 @@ extension SDLV6Info: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation } } -extension SDLDevAddr: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLDevAddr" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "network_id"), - 2: .same(proto: "mac"), - 3: .standard(proto: "net_addr"), - 4: .standard(proto: "net_bit_len"), - 5: .standard(proto: "network_domain"), - ] - - mutating func decodeMessage(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.networkID) }() - case 2: try { try decoder.decodeSingularBytesField(value: &self.mac) }() - case 3: try { try decoder.decodeSingularUInt32Field(value: &self.netAddr) }() - case 4: try { try decoder.decodeSingularUInt32Field(value: &self.netBitLen) }() - case 5: try { try decoder.decodeSingularStringField(value: &self.networkDomain) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if self.networkID != 0 { - try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) - } - if !self.mac.isEmpty { - try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 2) - } - if self.netAddr != 0 { - try visitor.visitSingularUInt32Field(value: self.netAddr, fieldNumber: 3) - } - if self.netBitLen != 0 { - try visitor.visitSingularUInt32Field(value: self.netBitLen, fieldNumber: 4) - } - if !self.networkDomain.isEmpty { - try visitor.visitSingularStringField(value: self.networkDomain, fieldNumber: 5) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLDevAddr, rhs: SDLDevAddr) -> Bool { - if lhs.networkID != rhs.networkID {return false} - if lhs.mac != rhs.mac {return false} - if lhs.netAddr != rhs.netAddr {return false} - if lhs.netBitLen != rhs.netBitLen {return false} - if lhs.networkDomain != rhs.networkDomain {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLEmpty: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLEmpty" - static let _protobuf_nameMap = SwiftProtobuf._NameMap() - - mutating func decodeMessage(decoder: inout D) throws { - // Load everything into unknown fields - while try decoder.nextFieldNumber() != nil {} - } - - func traverse(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 = [ - 1: .same(proto: "version"), - 2: .standard(proto: "installed_channel"), - 3: .standard(proto: "client_id"), - 4: .standard(proto: "dev_addr"), - 5: .standard(proto: "pub_key"), - 6: .same(proto: "token"), - 7: .standard(proto: "network_code"), - 8: .same(proto: "hostname"), - ] - - mutating func decodeMessage(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.version) }() - case 2: try { try decoder.decodeSingularStringField(value: &self.installedChannel) }() - case 3: try { try decoder.decodeSingularStringField(value: &self.clientID) }() - case 4: try { try decoder.decodeSingularMessageField(value: &self._devAddr) }() - case 5: try { try decoder.decodeSingularStringField(value: &self.pubKey) }() - case 6: try { try decoder.decodeSingularStringField(value: &self.token) }() - case 7: try { try decoder.decodeSingularStringField(value: &self.networkCode) }() - case 8: try { try decoder.decodeSingularStringField(value: &self.hostname) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - if self.version != 0 { - try visitor.visitSingularUInt32Field(value: self.version, fieldNumber: 1) - } - if !self.installedChannel.isEmpty { - try visitor.visitSingularStringField(value: self.installedChannel, fieldNumber: 2) - } - if !self.clientID.isEmpty { - try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 3) - } - try { if let v = self._devAddr { - try visitor.visitSingularMessageField(value: v, fieldNumber: 4) - } }() - if !self.pubKey.isEmpty { - try visitor.visitSingularStringField(value: self.pubKey, fieldNumber: 5) - } - if !self.token.isEmpty { - try visitor.visitSingularStringField(value: self.token, fieldNumber: 6) - } - if !self.networkCode.isEmpty { - try visitor.visitSingularStringField(value: self.networkCode, fieldNumber: 7) - } - if !self.hostname.isEmpty { - try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 8) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLRegisterSuper, rhs: SDLRegisterSuper) -> Bool { - if lhs.version != rhs.version {return false} - if lhs.installedChannel != rhs.installedChannel {return false} - if lhs.clientID != rhs.clientID {return false} - if lhs._devAddr != rhs._devAddr {return false} - if lhs.pubKey != rhs.pubKey {return false} - if lhs.token != rhs.token {return false} - if lhs.networkCode != rhs.networkCode {return false} - if lhs.hostname != rhs.hostname {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLRegisterSuperAck" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "dev_addr"), - 2: .standard(proto: "aes_key"), - 3: .standard(proto: "upgrade_type"), - 4: .standard(proto: "upgrade_prompt"), - 5: .standard(proto: "upgrade_address"), - ] - - mutating func decodeMessage(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.decodeSingularMessageField(value: &self._devAddr) }() - case 2: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }() - case 3: try { try decoder.decodeSingularUInt32Field(value: &self.upgradeType) }() - case 4: try { try decoder.decodeSingularStringField(value: &self._upgradePrompt) }() - case 5: try { try decoder.decodeSingularStringField(value: &self._upgradeAddress) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - try { if let v = self._devAddr { - try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } }() - if !self.aesKey.isEmpty { - try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 2) - } - if self.upgradeType != 0 { - try visitor.visitSingularUInt32Field(value: self.upgradeType, fieldNumber: 3) - } - try { if let v = self._upgradePrompt { - try visitor.visitSingularStringField(value: v, fieldNumber: 4) - } }() - try { if let v = self._upgradeAddress { - try visitor.visitSingularStringField(value: v, fieldNumber: 5) - } }() - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLRegisterSuperAck, rhs: SDLRegisterSuperAck) -> Bool { - if lhs._devAddr != rhs._devAddr {return false} - if lhs.aesKey != rhs.aesKey {return false} - if lhs.upgradeType != rhs.upgradeType {return false} - if lhs._upgradePrompt != rhs._upgradePrompt {return false} - if lhs._upgradeAddress != rhs._upgradeAddress {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLRegisterSuperNak" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "error_code"), - 2: .standard(proto: "error_message"), - ] - - mutating func decodeMessage(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.errorCode) }() - case 2: try { try decoder.decodeSingularStringField(value: &self.errorMessage) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if self.errorCode != 0 { - try visitor.visitSingularUInt32Field(value: self.errorCode, fieldNumber: 1) - } - if !self.errorMessage.isEmpty { - try visitor.visitSingularStringField(value: self.errorMessage, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLRegisterSuperNak, rhs: SDLRegisterSuperNak) -> Bool { - if lhs.errorCode != rhs.errorCode {return false} - if lhs.errorMessage != rhs.errorMessage {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLQueryInfo" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "dst_mac"), - ] - - mutating func decodeMessage(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.decodeSingularBytesField(value: &self.dstMac) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if !self.dstMac.isEmpty { - try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLQueryInfo, rhs: SDLQueryInfo) -> Bool { - if lhs.dstMac != rhs.dstMac {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLPeerInfo" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "dst_mac"), - 2: .standard(proto: "v4_info"), - 3: .standard(proto: "v6_info"), - ] - - mutating func decodeMessage(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.decodeSingularBytesField(value: &self.dstMac) }() - case 2: try { try decoder.decodeSingularMessageField(value: &self._v4Info) }() - case 3: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - if !self.dstMac.isEmpty { - try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1) - } - try { if let v = self._v4Info { - try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } }() - try { if let v = self._v6Info { - try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } }() - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLPeerInfo, rhs: SDLPeerInfo) -> Bool { - if lhs.dstMac != rhs.dstMac {return false} - if lhs._v4Info != rhs._v4Info {return false} - if lhs._v6Info != rhs._v6Info {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLNatChangedEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLNatChangedEvent" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "mac"), - 2: .same(proto: "ip"), - ] - - mutating func decodeMessage(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.decodeSingularBytesField(value: &self.mac) }() - case 2: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if !self.mac.isEmpty { - try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 1) - } - if self.ip != 0 { - try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLNatChangedEvent, rhs: SDLNatChangedEvent) -> Bool { - if lhs.mac != rhs.mac {return false} - if lhs.ip != rhs.ip {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLSendRegisterEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLSendRegisterEvent" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "dst_mac"), - 2: .standard(proto: "nat_ip"), - 3: .standard(proto: "nat_port"), - 4: .standard(proto: "nat_type"), - 5: .standard(proto: "v6_info"), - ] - - mutating func decodeMessage(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.decodeSingularBytesField(value: &self.dstMac) }() - case 2: try { try decoder.decodeSingularUInt32Field(value: &self.natIp) }() - case 3: try { try decoder.decodeSingularUInt32Field(value: &self.natPort) }() - case 4: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }() - case 5: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - if !self.dstMac.isEmpty { - try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 1) - } - if self.natIp != 0 { - try visitor.visitSingularUInt32Field(value: self.natIp, fieldNumber: 2) - } - if self.natPort != 0 { - try visitor.visitSingularUInt32Field(value: self.natPort, fieldNumber: 3) - } - if self.natType != 0 { - try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 4) - } - try { if let v = self._v6Info { - try visitor.visitSingularMessageField(value: v, fieldNumber: 5) - } }() - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLSendRegisterEvent, rhs: SDLSendRegisterEvent) -> Bool { - if lhs.dstMac != rhs.dstMac {return false} - if lhs.natIp != rhs.natIp {return false} - if lhs.natPort != rhs.natPort {return false} - if lhs.natType != rhs.natType {return false} - if lhs._v6Info != rhs._v6Info {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLNetworkShutdownEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLNetworkShutdownEvent" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "message"), - ] - - mutating func decodeMessage(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.decodeSingularStringField(value: &self.message) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if !self.message.isEmpty { - try visitor.visitSingularStringField(value: self.message, fieldNumber: 1) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLNetworkShutdownEvent, rhs: SDLNetworkShutdownEvent) -> Bool { - if lhs.message != rhs.message {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLChangeNetworkCommand: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLChangeNetworkCommand" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "dev_addr"), - 2: .standard(proto: "aes_key"), - ] - - mutating func decodeMessage(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.decodeSingularMessageField(value: &self._devAddr) }() - case 2: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - try { if let v = self._devAddr { - try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } }() - if !self.aesKey.isEmpty { - try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 2) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLChangeNetworkCommand, rhs: SDLChangeNetworkCommand) -> Bool { - if lhs._devAddr != rhs._devAddr {return false} - if lhs.aesKey != rhs.aesKey {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLCommandAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLCommandAck" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "status"), - 2: .same(proto: "message"), - ] - - mutating func decodeMessage(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.decodeSingularBoolField(value: &self.status) }() - case 2: try { try decoder.decodeSingularStringField(value: &self._message) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - if self.status != false { - try visitor.visitSingularBoolField(value: self.status, fieldNumber: 1) - } - try { if let v = self._message { - try visitor.visitSingularStringField(value: v, fieldNumber: 2) - } }() - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLCommandAck, rhs: SDLCommandAck) -> Bool { - if lhs.status != rhs.status {return false} - if lhs._message != rhs._message {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLFlows: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLFlows" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .standard(proto: "forward_num"), - 2: .standard(proto: "p2p_num"), - 3: .standard(proto: "inbound_num"), - ] - - mutating func decodeMessage(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.forwardNum) }() - case 2: try { try decoder.decodeSingularUInt32Field(value: &self.p2PNum) }() - case 3: try { try decoder.decodeSingularUInt32Field(value: &self.inboundNum) }() - default: break - } - } - } - - func traverse(visitor: inout V) throws { - if self.forwardNum != 0 { - try visitor.visitSingularUInt32Field(value: self.forwardNum, fieldNumber: 1) - } - if self.p2PNum != 0 { - try visitor.visitSingularUInt32Field(value: self.p2PNum, fieldNumber: 2) - } - if self.inboundNum != 0 { - try visitor.visitSingularUInt32Field(value: self.inboundNum, fieldNumber: 3) - } - try unknownFields.traverse(visitor: &visitor) - } - - static func ==(lhs: SDLFlows, rhs: SDLFlows) -> Bool { - if lhs.forwardNum != rhs.forwardNum {return false} - if lhs.p2PNum != rhs.p2PNum {return false} - if lhs.inboundNum != rhs.inboundNum {return false} - if lhs.unknownFields != rhs.unknownFields {return false} - return true - } -} - -extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLStunRequest" - static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "cookie"), + 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: "nat_type"), - 7: .standard(proto: "v6_info"), + 6: .standard(proto: "mask_len"), + 7: .same(proto: "hostname"), + 8: .standard(proto: "pub_key"), + 9: .standard(proto: "access_token"), ] mutating func decodeMessage(decoder: inout D) throws { @@ -1193,25 +553,23 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement // 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.cookie) }() + 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.natType) }() - case 7: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() + 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(visitor: inout V) throws { - // The use of inline closures is to circumvent an issue where the compiler - // allocates stack space for every if/case branch local when no optimizations - // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and - // https://github.com/apple/swift-protobuf/issues/1182 - if self.cookie != 0 { - try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1) + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) } if !self.clientID.isEmpty { try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 2) @@ -1225,32 +583,42 @@ extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement if self.ip != 0 { try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 5) } - if self.natType != 0 { - try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 6) + if self.maskLen != 0 { + try visitor.visitSingularUInt32Field(value: self.maskLen, fieldNumber: 6) + } + if !self.hostname.isEmpty { + try visitor.visitSingularStringField(value: self.hostname, fieldNumber: 7) + } + if !self.pubKey.isEmpty { + try visitor.visitSingularStringField(value: self.pubKey, fieldNumber: 8) + } + if !self.accessToken.isEmpty { + try visitor.visitSingularStringField(value: self.accessToken, fieldNumber: 9) } - try { if let v = self._v6Info { - try visitor.visitSingularMessageField(value: v, fieldNumber: 7) - } }() try unknownFields.traverse(visitor: &visitor) } - static func ==(lhs: SDLStunRequest, rhs: SDLStunRequest) -> Bool { - if lhs.cookie != rhs.cookie {return false} + static func ==(lhs: SDLRegisterSuper, rhs: SDLRegisterSuper) -> Bool { + if lhs.pktID != rhs.pktID {return false} if lhs.clientID != rhs.clientID {return false} if lhs.networkID != rhs.networkID {return false} if lhs.mac != rhs.mac {return false} if lhs.ip != rhs.ip {return false} - if lhs.natType != rhs.natType {return false} - if lhs._v6Info != rhs._v6Info {return false} + if lhs.maskLen != rhs.maskLen {return false} + if lhs.hostname != rhs.hostname {return false} + if lhs.pubKey != rhs.pubKey {return false} + if lhs.accessToken != rhs.accessToken {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true } } -extension SDLStunReply: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { - static let protoMessageName: String = "SDLStunReply" +extension SDLRegisterSuperAck: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLRegisterSuperAck" static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ - 1: .same(proto: "cookie"), + 1: .standard(proto: "pkt_id"), + 2: .standard(proto: "aes_key"), + 3: .standard(proto: "session_token"), ] mutating func decodeMessage(decoder: inout D) throws { @@ -1259,21 +627,569 @@ extension SDLStunReply: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat // 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.cookie) }() + case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pktID) }() + case 2: try { try decoder.decodeSingularBytesField(value: &self.aesKey) }() + case 3: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }() default: break } } } func traverse(visitor: inout V) throws { - if self.cookie != 0 { - try visitor.visitSingularUInt32Field(value: self.cookie, fieldNumber: 1) + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) + } + if !self.aesKey.isEmpty { + try visitor.visitSingularBytesField(value: self.aesKey, fieldNumber: 2) + } + if !self.sessionToken.isEmpty { + try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 3) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLRegisterSuperAck, rhs: SDLRegisterSuperAck) -> Bool { + if lhs.pktID != rhs.pktID {return false} + if lhs.aesKey != rhs.aesKey {return false} + if lhs.sessionToken != rhs.sessionToken {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLRegisterSuperNak: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLRegisterSuperNak" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "pkt_id"), + 2: .standard(proto: "error_code"), + 3: .standard(proto: "error_message"), + ] + + mutating func decodeMessage(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.decodeSingularUInt32Field(value: &self.errorCode) }() + case 3: try { try decoder.decodeSingularStringField(value: &self.errorMessage) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) + } + if self.errorCode != 0 { + try visitor.visitSingularUInt32Field(value: self.errorCode, fieldNumber: 2) + } + if !self.errorMessage.isEmpty { + try visitor.visitSingularStringField(value: self.errorMessage, fieldNumber: 3) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLRegisterSuperNak, rhs: SDLRegisterSuperNak) -> Bool { + if lhs.pktID != rhs.pktID {return false} + if lhs.errorCode != rhs.errorCode {return false} + if lhs.errorMessage != rhs.errorMessage {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLQueryInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLQueryInfo" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "pkt_id"), + 2: .standard(proto: "network_id"), + 3: .standard(proto: "src_mac"), + 4: .standard(proto: "dst_mac"), + 5: .standard(proto: "session_token"), + ] + + mutating func decodeMessage(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.decodeSingularUInt32Field(value: &self.networkID) }() + case 3: try { try decoder.decodeSingularBytesField(value: &self.srcMac) }() + case 4: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }() + case 5: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) + } + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 2) + } + if !self.srcMac.isEmpty { + try visitor.visitSingularBytesField(value: self.srcMac, fieldNumber: 3) + } + if !self.dstMac.isEmpty { + try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 4) + } + if !self.sessionToken.isEmpty { + try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 5) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLQueryInfo, rhs: SDLQueryInfo) -> Bool { + if lhs.pktID != rhs.pktID {return false} + if lhs.networkID != rhs.networkID {return false} + if lhs.srcMac != rhs.srcMac {return false} + if lhs.dstMac != rhs.dstMac {return false} + if lhs.sessionToken != rhs.sessionToken {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLPeerInfo" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "pkt_id"), + 2: .standard(proto: "network_id"), + 3: .standard(proto: "dst_mac"), + 4: .standard(proto: "v4_info"), + 5: .standard(proto: "v6_info"), + ] + + mutating func decodeMessage(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.decodeSingularUInt32Field(value: &self.networkID) }() + case 3: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }() + case 4: try { try decoder.decodeSingularMessageField(value: &self._v4Info) }() + case 5: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) + } + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 2) + } + if !self.dstMac.isEmpty { + try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 3) + } + try { if let v = self._v4Info { + try visitor.visitSingularMessageField(value: v, fieldNumber: 4) + } }() + try { if let v = self._v6Info { + try visitor.visitSingularMessageField(value: v, fieldNumber: 5) + } }() + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLPeerInfo, rhs: SDLPeerInfo) -> Bool { + if lhs.pktID != rhs.pktID {return false} + if lhs.networkID != rhs.networkID {return false} + if lhs.dstMac != rhs.dstMac {return false} + if lhs._v4Info != rhs._v4Info {return false} + if lhs._v6Info != rhs._v6Info {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLEmptyPeerInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLEmptyPeerInfo" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "pkt_id"), + 2: .standard(proto: "network_id"), + 3: .standard(proto: "dst_mac"), + ] + + mutating func decodeMessage(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.decodeSingularUInt32Field(value: &self.networkID) }() + case 3: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.pktID != 0 { + try visitor.visitSingularUInt32Field(value: self.pktID, fieldNumber: 1) + } + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 2) + } + if !self.dstMac.isEmpty { + try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 3) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLEmptyPeerInfo, rhs: SDLEmptyPeerInfo) -> Bool { + if lhs.pktID != rhs.pktID {return false} + if lhs.networkID != rhs.networkID {return false} + if lhs.dstMac != rhs.dstMac {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLNatChangedEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLNatChangedEvent" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + 2: .same(proto: "mac"), + 3: .same(proto: "ip"), + ] + + mutating func decodeMessage(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.networkID) }() + case 2: try { try decoder.decodeSingularBytesField(value: &self.mac) }() + case 3: try { try decoder.decodeSingularUInt32Field(value: &self.ip) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + if !self.mac.isEmpty { + try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 2) + } + if self.ip != 0 { + try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 3) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLNatChangedEvent, rhs: SDLNatChangedEvent) -> Bool { + if lhs.networkID != rhs.networkID {return false} + if lhs.mac != rhs.mac {return false} + if lhs.ip != rhs.ip {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLDropMacsEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLDropMacsEvent" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + 2: .same(proto: "macs"), + ] + + mutating func decodeMessage(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.networkID) }() + case 2: try { try decoder.decodeRepeatedBytesField(value: &self.macs) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + if !self.macs.isEmpty { + try visitor.visitRepeatedBytesField(value: self.macs, fieldNumber: 2) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLDropMacsEvent, rhs: SDLDropMacsEvent) -> Bool { + if lhs.networkID != rhs.networkID {return false} + if lhs.macs != rhs.macs {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLRefreshAuthEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLRefreshAuthEvent" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + ] + + mutating func decodeMessage(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.networkID) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLRefreshAuthEvent, rhs: SDLRefreshAuthEvent) -> Bool { + if lhs.networkID != rhs.networkID {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLSendRegisterEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLSendRegisterEvent" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + 2: .standard(proto: "dst_mac"), + 3: .standard(proto: "nat_ip"), + 4: .standard(proto: "nat_port"), + 5: .standard(proto: "nat_type"), + 6: .standard(proto: "v6_info"), + ] + + mutating func decodeMessage(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.networkID) }() + case 2: try { try decoder.decodeSingularBytesField(value: &self.dstMac) }() + case 3: try { try decoder.decodeSingularUInt32Field(value: &self.natIp) }() + case 4: try { try decoder.decodeSingularUInt32Field(value: &self.natPort) }() + case 5: try { try decoder.decodeSingularUInt32Field(value: &self.natType) }() + case 6: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + if !self.dstMac.isEmpty { + try visitor.visitSingularBytesField(value: self.dstMac, fieldNumber: 2) + } + if self.natIp != 0 { + try visitor.visitSingularUInt32Field(value: self.natIp, fieldNumber: 3) + } + if self.natPort != 0 { + try visitor.visitSingularUInt32Field(value: self.natPort, fieldNumber: 4) + } + if self.natType != 0 { + try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 5) + } + try { if let v = self._v6Info { + try visitor.visitSingularMessageField(value: v, fieldNumber: 6) + } }() + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLSendRegisterEvent, rhs: SDLSendRegisterEvent) -> Bool { + if lhs.networkID != rhs.networkID {return false} + if lhs.dstMac != rhs.dstMac {return false} + if lhs.natIp != rhs.natIp {return false} + if lhs.natPort != rhs.natPort {return false} + if lhs.natType != rhs.natType {return false} + if lhs._v6Info != rhs._v6Info {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLNetworkShutdownEvent: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLNetworkShutdownEvent" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + 2: .same(proto: "message"), + ] + + mutating func decodeMessage(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.networkID) }() + case 2: try { try decoder.decodeSingularStringField(value: &self.message) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + if !self.message.isEmpty { + try visitor.visitSingularStringField(value: self.message, fieldNumber: 2) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLNetworkShutdownEvent, rhs: SDLNetworkShutdownEvent) -> Bool { + if lhs.networkID != rhs.networkID {return false} + if lhs.message != rhs.message {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLStunRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLStunRequest" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "client_id"), + 2: .standard(proto: "network_id"), + 3: .same(proto: "mac"), + 4: .same(proto: "ip"), + 5: .standard(proto: "nat_type"), + 6: .standard(proto: "v6_info"), + 7: .standard(proto: "session_token"), + ] + + mutating func decodeMessage(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.decodeSingularStringField(value: &self.clientID) }() + 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.natType) }() + case 6: try { try decoder.decodeSingularMessageField(value: &self._v6Info) }() + case 7: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + if !self.clientID.isEmpty { + try visitor.visitSingularStringField(value: self.clientID, fieldNumber: 1) + } + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 2) + } + if !self.mac.isEmpty { + try visitor.visitSingularBytesField(value: self.mac, fieldNumber: 3) + } + if self.ip != 0 { + try visitor.visitSingularUInt32Field(value: self.ip, fieldNumber: 4) + } + if self.natType != 0 { + try visitor.visitSingularUInt32Field(value: self.natType, fieldNumber: 5) + } + try { if let v = self._v6Info { + try visitor.visitSingularMessageField(value: v, fieldNumber: 6) + } }() + if !self.sessionToken.isEmpty { + try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 7) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: SDLStunRequest, rhs: SDLStunRequest) -> Bool { + if lhs.clientID != rhs.clientID {return false} + if lhs.networkID != rhs.networkID {return false} + if lhs.mac != rhs.mac {return false} + if lhs.ip != rhs.ip {return false} + if lhs.natType != rhs.natType {return false} + if lhs._v6Info != rhs._v6Info {return false} + if lhs.sessionToken != rhs.sessionToken {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension SDLStunReply: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "SDLStunReply" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .standard(proto: "network_id"), + 2: .same(proto: "code"), + 3: .same(proto: "message"), + ] + + mutating func decodeMessage(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.networkID) }() + case 2: try { try decoder.decodeSingularUInt32Field(value: &self.code) }() + case 3: try { try decoder.decodeSingularStringField(value: &self.message) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + if self.networkID != 0 { + try visitor.visitSingularUInt32Field(value: self.networkID, fieldNumber: 1) + } + if self.code != 0 { + try visitor.visitSingularUInt32Field(value: self.code, fieldNumber: 2) + } + if !self.message.isEmpty { + try visitor.visitSingularStringField(value: self.message, fieldNumber: 3) } try unknownFields.traverse(visitor: &visitor) } static func ==(lhs: SDLStunReply, rhs: SDLStunReply) -> Bool { - if lhs.cookie != rhs.cookie {return false} + if lhs.networkID != rhs.networkID {return false} + if lhs.code != rhs.code {return false} + if lhs.message != rhs.message {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true } @@ -1288,6 +1204,8 @@ extension SDLData: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBa 4: .standard(proto: "is_p2p"), 5: .same(proto: "ttl"), 6: .same(proto: "data"), + 7: .standard(proto: "session_token"), + 8: .standard(proto: "identity_id"), ] mutating func decodeMessage(decoder: inout D) throws { @@ -1302,6 +1220,8 @@ extension SDLData: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBa case 4: try { try decoder.decodeSingularBoolField(value: &self.isP2P) }() case 5: try { try decoder.decodeSingularUInt32Field(value: &self.ttl) }() case 6: try { try decoder.decodeSingularBytesField(value: &self.data) }() + case 7: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }() + case 8: try { try decoder.decodeSingularUInt32Field(value: &self.identityID) }() default: break } } @@ -1326,6 +1246,12 @@ extension SDLData: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBa if !self.data.isEmpty { try visitor.visitSingularBytesField(value: self.data, fieldNumber: 6) } + if !self.sessionToken.isEmpty { + try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 7) + } + if self.identityID != 0 { + try visitor.visitSingularUInt32Field(value: self.identityID, fieldNumber: 8) + } try unknownFields.traverse(visitor: &visitor) } @@ -1336,6 +1262,8 @@ extension SDLData: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBa if lhs.isP2P != rhs.isP2P {return false} if lhs.ttl != rhs.ttl {return false} if lhs.data != rhs.data {return false} + if lhs.sessionToken != rhs.sessionToken {return false} + if lhs.identityID != rhs.identityID {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true } @@ -1516,6 +1444,7 @@ extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ 1: .standard(proto: "network_id"), 2: .standard(proto: "target_ip"), + 3: .standard(proto: "session_token"), ] mutating func decodeMessage(decoder: inout D) throws { @@ -1526,6 +1455,7 @@ extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa switch fieldNumber { case 1: try { try decoder.decodeSingularUInt32Field(value: &self.networkID) }() case 2: try { try decoder.decodeSingularUInt32Field(value: &self.targetIp) }() + case 3: try { try decoder.decodeSingularBytesField(value: &self.sessionToken) }() default: break } } @@ -1538,12 +1468,16 @@ extension SDLArpRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa if self.targetIp != 0 { try visitor.visitSingularUInt32Field(value: self.targetIp, fieldNumber: 2) } + if !self.sessionToken.isEmpty { + try visitor.visitSingularBytesField(value: self.sessionToken, fieldNumber: 3) + } try unknownFields.traverse(visitor: &visitor) } static func ==(lhs: SDLArpRequest, rhs: SDLArpRequest) -> Bool { if lhs.networkID != rhs.networkID {return false} if lhs.targetIp != rhs.targetIp {return false} + if lhs.sessionToken != rhs.sessionToken {return false} if lhs.unknownFields != rhs.unknownFields {return false} return true } diff --git a/Tun/Punchnet/SDLMessage.swift b/Tun/Punchnet/SDLMessage.swift index 888eb2a..811e664 100644 --- a/Tun/Punchnet/SDLMessage.swift +++ b/Tun/Punchnet/SDLMessage.swift @@ -46,13 +46,6 @@ enum SDLPacketType: UInt8 { case data = 0xFF } -// 升级策略 -enum SDLUpgradeType: UInt32 { - case none = 0 - case normal = 1 - case force = 2 -} - // Id生成器 struct SDLIdGenerator: Sendable { // 消息体id @@ -71,29 +64,6 @@ struct SDLIdGenerator: Sendable { // 定义事件类型 -// 命令类型 -enum SDLEventType: UInt8 { - case natChanged = 0x03 - case sendRegister = 0x04 - case networkShutdown = 0xFF -} - -enum SDLEvent { - case natChanged(SDLNatChangedEvent) - case sendRegister(SDLSendRegisterEvent) - case networkShutdown(SDLNetworkShutdownEvent) -} - -// --MARK: 定义命令类型 - -enum SDLCommandType: UInt8 { - case changeNetwork = 0x01 -} - -enum SDLCommand { - case changeNetwork(SDLChangeNetworkCommand) -} - // --MARK: 网络类型探测 // 探测的Attr属性 enum SDLProbeAttr: UInt8 { @@ -130,6 +100,14 @@ extension SDLStunProbeReply { // --MARK: 进来的消息, 这里需要采用代数类型来表示 enum SDLHoleInboundMessage { + case registerSuperAck(SDLRegisterSuperAck) + case registerSuperNak(SDLRegisterSuperNak) + + case peerInfo(SDLPeerInfo) + case pong + + case event(SDLEvent) + case stunReply(SDLStunReply) case stunProbeReply(SDLStunProbeReply) @@ -138,29 +116,15 @@ enum SDLHoleInboundMessage { case registerAck(SDLRegisterAck) } -// --MARK: 定义消息类型 - -struct SDLSuperInboundMessage { - let msgId: UInt32 - let packet: InboundPacket - - enum InboundPacket { - case empty - case registerSuperAck(SDLRegisterSuperAck) - case registerSuperNak(SDLRegisterSuperNak) - case peerInfo(SDLPeerInfo) - case pong - case event(SDLEvent) - case command(SDLCommand) - } - - func isPong() -> Bool { - switch self.packet { - case .pong: - return true - default: - return false - } - } - +// 命令类型 +enum SDLEventType: UInt8 { + case natChanged = 0x03 + case sendRegister = 0x04 + case networkShutdown = 0xFF +} + +enum SDLEvent { + case natChanged(SDLNatChangedEvent) + case sendRegister(SDLSendRegisterEvent) + case networkShutdown(SDLNetworkShutdownEvent) }