// // DNSDispatcher.swift // punchnet // // Created by 安礼成 on 2026/4/10. // import Foundation // MARK: - DNS 分流調度器 final class DNSDispatcher { // private let localClient: SDLLocalDNSClient // private let cloudClient: SDLDNSClient // 假設這是你原有的雲端 Client // private let logger: SDLLogger // private let internalDomain = "punchsky.com" // // init(localClient: SDLLocalDNSClient, cloudClient: SDLDNSClient, logger: SDLLogger) { // self.localClient = localClient // self.cloudClient = cloudClient // self.logger = logger // } // // /// 處理來自 TUN 的原始 IP 數據包 // func dispatch(packet: IPPacket) { // // 1. 獲取 UDP 載荷 (假設 IPv4 20字節 + UDP 8字節) // let udpPayload = packet.data.suffix(from: 28) // // // 2. 解析 DNS 內容 // let parser = DNSParser(data: udpPayload) // guard let dnsMsg = parser.parse(), let firstQuestion = dnsMsg.questions.first else { // return // } // // let domain = firstQuestion.name // // // 3. 根據域名分流 // if domain.hasSuffix(internalDomain) { // logger.log("[Dispatcher] Cloud Route: \(domain)", level: .debug) // cloudClient.forward(ipPacket: packet) // 雲端通常需要完整包做隧道封裝 // } else { // logger.log("[Dispatcher] Local Route: \(domain)", level: .debug) // localClient.query(dnsPayload: udpPayload) // 本地只需轉發載荷 // } // } }