fix loggers
This commit is contained in:
parent
68e163f0f6
commit
055dad7010
@ -20,7 +20,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||
|
||||
let shared = UserDefaults(suiteName: "group.com.jihe.punchnetmac")
|
||||
let msg = shared?.string(forKey: "test_msg")
|
||||
SDLLogger.shared.log("NE read message: \(msg ?? "failed")")
|
||||
SDLLogger.log("NE read message: \(msg ?? "failed")", for: .debug)
|
||||
|
||||
DarwinNotificationCenter.shared.post(.vpnStatusChanged)
|
||||
|
||||
|
||||
@ -112,25 +112,25 @@ actor SDLContextActor {
|
||||
await self.startDnsLocalClient()
|
||||
|
||||
await self.supervisor.addWorker(name: "quicClient") {
|
||||
SDLLogger.shared.log("[SDLContext] try start quicClient")
|
||||
SDLLogger.log("[SDLContext] try start quicClient", for: .debug)
|
||||
let quicClient = try await self.startQUICClient()
|
||||
SDLLogger.shared.log("[SDLContext] quicClient running!!!!")
|
||||
SDLLogger.log("[SDLContext] quicClient running!!!!")
|
||||
await quicClient.waitClose()
|
||||
SDLLogger.shared.log("[SDLContext] quicClient closed!!!!")
|
||||
SDLLogger.log("[SDLContext] quicClient closed!!!!")
|
||||
}
|
||||
|
||||
await self.supervisor.addWorker(name: "noticeClient") {
|
||||
let noticeClient = try self.startNoticeClient()
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient running!!!!")
|
||||
SDLLogger.log("[SDLContext] noticeClient running!!!!")
|
||||
try await noticeClient.waitClose()
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient closed!!!!")
|
||||
SDLLogger.log("[SDLContext] noticeClient closed!!!!")
|
||||
}
|
||||
|
||||
await self.supervisor.addWorker(name: "udpHole") {
|
||||
let udpHole = try await self.startUDPHole()
|
||||
SDLLogger.shared.log("[SDLContext] udp running!!!!")
|
||||
SDLLogger.log("[SDLContext] udp running!!!!")
|
||||
try await udpHole.waitClose()
|
||||
SDLLogger.shared.log("[SDLContext] udp closed!!!!")
|
||||
SDLLogger.log("[SDLContext] udp closed!!!!")
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,13 +156,13 @@ actor SDLContextActor {
|
||||
try await quicClient.waitReady()
|
||||
// 这里必须等待quic的协商完成
|
||||
try await Task.sleep(for: .seconds(0.2))
|
||||
SDLLogger.shared.log("[SDLContext] start quic client: \(self.config.serverHost)")
|
||||
SDLLogger.log("[SDLContext] start quic client: \(self.config.serverHost)")
|
||||
|
||||
self.quicWorker = Task.detached {
|
||||
for await message in quicClient.messageStream {
|
||||
switch message {
|
||||
case .welcome(let welcome):
|
||||
SDLLogger.shared.log("[SDLContext] quic welcome: \(welcome)")
|
||||
SDLLogger.log("[SDLContext] quic welcome: \(welcome)")
|
||||
// 注册
|
||||
await self.startRegisterLoop()
|
||||
case .pong:
|
||||
@ -196,7 +196,7 @@ actor SDLContextActor {
|
||||
let noticeClient = try SDLNoticeClient(noticePort: self.config.noticePort)
|
||||
noticeClient.start()
|
||||
|
||||
SDLLogger.shared.log("[SDLContext] noticeClient started")
|
||||
SDLLogger.log("[SDLContext] noticeClient started")
|
||||
self.noticeClient = noticeClient
|
||||
|
||||
return noticeClient
|
||||
@ -209,7 +209,7 @@ actor SDLContextActor {
|
||||
// 启动monitor
|
||||
let monitor = SDLNetworkMonitor()
|
||||
monitor.start()
|
||||
SDLLogger.shared.log("[SDLContext] monitor started")
|
||||
SDLLogger.log("[SDLContext] monitor started")
|
||||
self.monitor = monitor
|
||||
|
||||
self.monitorWorker = Task.detached {
|
||||
@ -218,9 +218,9 @@ actor SDLContextActor {
|
||||
case .changed:
|
||||
// 需要重新探测网络的nat类型
|
||||
await self.probeNatType()
|
||||
SDLLogger.shared.log("didNetworkPathChanged, nat type is:", level: .info)
|
||||
SDLLogger.log("didNetworkPathChanged, nat type is:")
|
||||
case .unreachable:
|
||||
SDLLogger.shared.log("didNetworkPathUnreachable", level: .warning)
|
||||
SDLLogger.log("didNetworkPathUnreachable")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -231,9 +231,9 @@ actor SDLContextActor {
|
||||
self.dnsWorker = nil
|
||||
|
||||
// 启动dns服务
|
||||
let dnsClient = DNSCloudClient(host: self.config.serverIp, port: 15353, logger: SDLLogger.shared)
|
||||
let dnsClient = DNSCloudClient(host: self.config.serverIp, port: 15353)
|
||||
dnsClient.start()
|
||||
SDLLogger.shared.log("[SDLContext] dnsClient started")
|
||||
SDLLogger.log("[SDLContext] dnsClient started")
|
||||
self.dnsClient = dnsClient
|
||||
self.dnsWorker = Task.detached {
|
||||
// 处理事件流
|
||||
@ -254,7 +254,7 @@ actor SDLContextActor {
|
||||
// 启动dns服务
|
||||
let dnsLocalClient = DNSLocalClient()
|
||||
dnsLocalClient.start()
|
||||
SDLLogger.shared.log("[SDLContext] dnsClient started")
|
||||
SDLLogger.log("[SDLContext] dnsClient started")
|
||||
self.dnsLocalClient = dnsLocalClient
|
||||
self.dnsLocalWorker = Task.detached {
|
||||
// 处理事件流
|
||||
@ -277,7 +277,7 @@ actor SDLContextActor {
|
||||
// 启动udp服务器
|
||||
let udpHole = try SDLUDPHole()
|
||||
try udpHole.start()
|
||||
SDLLogger.shared.log("[SDLContext] udpHole started")
|
||||
SDLLogger.log("[SDLContext] udpHole started")
|
||||
|
||||
// 获取当前udp启动的地址
|
||||
let localAddress = udpHole.getLocalAddress()
|
||||
@ -297,7 +297,7 @@ actor SDLContextActor {
|
||||
await self.sendStunRequest()
|
||||
}
|
||||
|
||||
SDLLogger.shared.log("[SDLContext] udp pingTask cancel")
|
||||
SDLLogger.log("[SDLContext] udp pingTask cancel")
|
||||
}
|
||||
|
||||
// 处理消息流
|
||||
@ -318,14 +318,14 @@ actor SDLContextActor {
|
||||
do {
|
||||
try await self.handleHoleData(data: data)
|
||||
} catch let err {
|
||||
SDLLogger.shared.log("[SDLContext] handleHoleData get err: \(err)")
|
||||
SDLLogger.log("[SDLContext] handleHoleData get err: \(err)")
|
||||
}
|
||||
case .stunReply(_):
|
||||
//SDLLogger.shared.log("[SDLContext] get a stunReply: \(stunReply)")
|
||||
()
|
||||
}
|
||||
}
|
||||
SDLLogger.shared.log("[SDLContext] udp signalTask cancel")
|
||||
SDLLogger.log("[SDLContext] udp signalTask cancel")
|
||||
}
|
||||
|
||||
self.udpHole = udpHole
|
||||
@ -386,7 +386,7 @@ actor SDLContextActor {
|
||||
await self.whenRegistedSuper()
|
||||
break
|
||||
}
|
||||
SDLLogger.shared.log("[SDLContext] register super failed, retry")
|
||||
SDLLogger.log("[SDLContext] register super failed, retry")
|
||||
}
|
||||
self.registerTask = nil
|
||||
}
|
||||
@ -399,7 +399,7 @@ actor SDLContextActor {
|
||||
self.updatePolicyTask = Task {
|
||||
while !Task.isCancelled {
|
||||
try? await Task.sleep(for: .seconds(300))
|
||||
SDLLogger.shared.log("[SDLContext] updatePolicyTask execute")
|
||||
SDLLogger.log("[SDLContext] updatePolicyTask execute")
|
||||
await self.identifyStore.batUpdatePolicy(using: self.quicClient, dstIdentityID: self.config.identityId)
|
||||
}
|
||||
}
|
||||
@ -427,7 +427,7 @@ actor SDLContextActor {
|
||||
private func handleRegisterSuperAck(registerSuperAck: SDLRegisterSuperAck) async {
|
||||
// 需要对数据通过rsa的私钥解码
|
||||
guard let key = try? self.rsaCipher.decode(data: Data(registerSuperAck.key)) else {
|
||||
SDLLogger.shared.log("[SDLContext] registerSuperAck invalid key", level: .error)
|
||||
SDLLogger.log("[SDLContext] registerSuperAck invalid key")
|
||||
self.provider.cancelTunnelWithError(SDLError.invalidKey)
|
||||
return
|
||||
}
|
||||
@ -442,20 +442,20 @@ actor SDLContextActor {
|
||||
case "chacha20":
|
||||
self.dataCipher = CCChaCha20Cipher(regionId: regionId, keyData: key)
|
||||
default:
|
||||
SDLLogger.shared.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)", level: .error)
|
||||
SDLLogger.log("[SDLContext] registerSuperAck invalid algorithm \(algorithm)")
|
||||
self.provider.cancelTunnelWithError(SDLError.unsupportedAlgorithm(algorithm: algorithm))
|
||||
return
|
||||
}
|
||||
|
||||
SDLLogger.shared.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)", level: .info)
|
||||
SDLLogger.log("[SDLContext] registerSuperAck, use algorithm \(algorithm), key len: \(key.count)")
|
||||
// 服务器分配的tun网卡信息
|
||||
do {
|
||||
try await self.setNetworkSettings(config: self.config, dnsServer: DNSHelper.dnsServer)
|
||||
SDLLogger.shared.log("[SDLContext] setNetworkSettings successed")
|
||||
SDLLogger.log("[SDLContext] setNetworkSettings successed")
|
||||
self.state = .registered
|
||||
self.startReader()
|
||||
} catch let err {
|
||||
SDLLogger.shared.log("[SDLContext] setTunnelNetworkSettings get error: \(err)", level: .error)
|
||||
SDLLogger.log("[SDLContext] setTunnelNetworkSettings get error: \(err)")
|
||||
self.provider.cancelTunnelWithError(err)
|
||||
}
|
||||
}
|
||||
@ -478,7 +478,7 @@ actor SDLContextActor {
|
||||
let alertNotice = NoticeMessage.alert(alert: errorMessage)
|
||||
self.noticeClient?.send(data: alertNotice)
|
||||
}
|
||||
SDLLogger.shared.log("[SDLContext] Get a SuperNak message exit", level: .warning)
|
||||
SDLLogger.log("[SDLContext] Get a SuperNak message exit")
|
||||
|
||||
}
|
||||
|
||||
@ -486,10 +486,10 @@ actor SDLContextActor {
|
||||
switch event.event {
|
||||
case .natChanged(let natChangedEvent):
|
||||
let dstMac = natChangedEvent.mac
|
||||
SDLLogger.shared.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)", level: .info)
|
||||
SDLLogger.log("[SDLContext] natChangedEvent, dstMac: \(dstMac)")
|
||||
sessionManager.removeSession(dstMac: dstMac)
|
||||
case .sendRegister(let sendRegisterEvent):
|
||||
SDLLogger.shared.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] sendRegisterEvent, ip: \(sendRegisterEvent)")
|
||||
let address = SDLUtil.int32ToIp(sendRegisterEvent.natIp)
|
||||
if let remoteAddress = try? SocketAddress.makeAddressResolvingHost(address, port: Int(sendRegisterEvent.natPort)) {
|
||||
// 发送register包
|
||||
@ -524,14 +524,14 @@ actor SDLContextActor {
|
||||
registerSuper.accessToken = self.config.accessToken
|
||||
|
||||
if let registerSuperData = try? registerSuper.serializedData() {
|
||||
SDLLogger.shared.log("[SDLContext] will send register super")
|
||||
SDLLogger.log("[SDLContext] will send register super")
|
||||
self.quicClient?.send(type: .registerSuper, data: registerSuperData)
|
||||
}
|
||||
}
|
||||
|
||||
private func handleRegister(remoteAddress: SocketAddress, register: SDLRegister) throws {
|
||||
let networkAddr = config.networkAddress
|
||||
SDLLogger.shared.log("[SDLContext] register packet: \(register), network_address: \(networkAddr)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] register packet: \(register), network_address: \(networkAddr)")
|
||||
|
||||
// 判断目标地址是否是tun的网卡地址, 并且是在同一个网络下
|
||||
if register.dstMac == networkAddr.mac && register.networkID == networkAddr.networkId {
|
||||
@ -546,7 +546,7 @@ actor SDLContextActor {
|
||||
let session = Session(dstMac: register.srcMac, natAddress: remoteAddress)
|
||||
self.sessionManager.addSession(session: session)
|
||||
} else {
|
||||
SDLLogger.shared.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)", level: .warning)
|
||||
SDLLogger.log("[SDLContext] didReadRegister get a invalid packet, because dst_ip not matched: \(register.dstMac)")
|
||||
}
|
||||
}
|
||||
|
||||
@ -557,7 +557,7 @@ actor SDLContextActor {
|
||||
let session = Session(dstMac: registerAck.srcMac, natAddress: remoteAddress)
|
||||
self.sessionManager.addSession(session: session)
|
||||
} else {
|
||||
SDLLogger.shared.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)", level: .warning)
|
||||
SDLLogger.log("[SDLContext] didReadRegisterAck get a invalid packet, because dst_mac not matched: \(registerAck.dstMac)")
|
||||
}
|
||||
}
|
||||
|
||||
@ -584,18 +584,18 @@ actor SDLContextActor {
|
||||
if arpPacket.targetIP == networkAddr.ip {
|
||||
switch arpPacket.opcode {
|
||||
case .request:
|
||||
SDLLogger.shared.log("[SDLContext] get arp request packet", level: .debug)
|
||||
SDLLogger.log("[SDLContext] get arp request packet")
|
||||
let response = ARPPacket.arpResponse(for: arpPacket, mac: networkAddr.mac, ip: networkAddr.ip)
|
||||
await self.routeLayerPacket(dstMac: arpPacket.senderMAC, type: .arp, data: response.marshal())
|
||||
case .response:
|
||||
SDLLogger.shared.log("[SDLContext] get arp response packet", level: .debug)
|
||||
SDLLogger.log("[SDLContext] get arp response packet")
|
||||
await self.arpServer.append(ip: arpPacket.senderIP, mac: arpPacket.senderMAC)
|
||||
}
|
||||
} else {
|
||||
SDLLogger.shared.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))", level: .debug)
|
||||
SDLLogger.log("[SDLContext] get invalid arp packet: \(arpPacket), target_ip: \(SDLUtil.int32ToIp(arpPacket.targetIP)), net ip: \(SDLUtil.int32ToIp(networkAddr.ip))")
|
||||
}
|
||||
} else {
|
||||
SDLLogger.shared.log("[SDLContext] get invalid arp packet", level: .debug)
|
||||
SDLLogger.log("[SDLContext] get invalid arp packet")
|
||||
}
|
||||
case .ipv4:
|
||||
// 有数据是通过出口网关转发的,所有只判断是合法的ip包
|
||||
@ -610,20 +610,20 @@ actor SDLContextActor {
|
||||
if true || self.checkPolicy(ipPacket: ipPacket, ruleMap: ruleMap) {
|
||||
// 用来做debug
|
||||
if ipPacket.header.source == 168428037 {
|
||||
SDLLogger.sharedDebug.log("data: \(Array(ipPacket.data)), len: \(ipPacket.data.count)")
|
||||
SDLLogger.log("data: \(Array(ipPacket.data)), len: \(ipPacket.data.count)", for: .debug)
|
||||
}
|
||||
|
||||
let packet = NEPacket(data: ipPacket.data, protocolFamily: 2)
|
||||
self.provider.packetFlow.writePacketObjects([packet])
|
||||
SDLLogger.shared.log("[SDLContext] identity: \(data.identityID), allow, data count: \(ipPacket.data.count)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] identity: \(data.identityID), allow, data count: \(ipPacket.data.count)", for: .debug)
|
||||
}
|
||||
else {
|
||||
SDLLogger.shared.log("[SDLContext] not found identity: \(data.identityID) ruleMap", level: .debug)
|
||||
SDLLogger.log("[SDLContext] not found identity: \(data.identityID) ruleMap", for: .debug)
|
||||
// 向服务器请求权限逻辑
|
||||
await self.identifyStore.policyRequest(srcIdentityId: data.identityID, dstIdentityId: self.config.identityId, using: self.quicClient)
|
||||
}
|
||||
default:
|
||||
SDLLogger.shared.log("[SDLContext] get invalid packet", level: .debug)
|
||||
SDLLogger.log("[SDLContext] get invalid packet", for: .debug)
|
||||
}
|
||||
}
|
||||
|
||||
@ -710,14 +710,14 @@ actor SDLContextActor {
|
||||
if let dnsMessage = dnsParser.parse(), let name = dnsMessage.questions.first?.name {
|
||||
// 如果是内部域名,则转发整个ip包的内容到云端服务器
|
||||
if name.contains(self.config.networkAddress.networkDomain) {
|
||||
SDLLogger.shared.log("[SDLContext] get cloud dns request: \(name)")
|
||||
SDLLogger.log("[SDLContext] get cloud dns request: \(name)")
|
||||
self.dnsClient?.forward(ipPacketData: packet.data)
|
||||
}
|
||||
// 通过本地的dns解析,发送的是udp的payload部分
|
||||
else {
|
||||
// 尝试解析下对不对
|
||||
let dnsPayload = Data(packet.data[payloadOffset..<packet.data.count])
|
||||
SDLLogger.shared.log("[SDLContext] get local dns request: \(name)")
|
||||
SDLLogger.log("[SDLContext] get local dns request: \(name)")
|
||||
|
||||
let tracker = DNSLocalClient.DNSTracker(transactionID: dnsMessage.transactionID,
|
||||
clientIP: packet.header.source,
|
||||
@ -740,11 +740,11 @@ actor SDLContextActor {
|
||||
if SDLUtil.inSameNetwork(ip: dstIp, compareIp: networkAddr.ip, maskLen: networkAddr.maskLen) {
|
||||
// 查找arp缓存中是否有目标mac地址
|
||||
if let dstMac = await self.arpServer.query(ip: dstIp) {
|
||||
SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))", level: .debug)
|
||||
SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()), dst_mac is: \(SDLUtil.formatMacAddress(mac: dstMac))")
|
||||
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
|
||||
}
|
||||
else {
|
||||
SDLLogger.shared.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast", level: .debug)
|
||||
SDLLogger.log("[SDLContext] dstIp: \(dstIp.asIpAddress()) arp query not found, broadcast")
|
||||
// // 构造arp广播
|
||||
// let arpReqeust = ARPPacket.arpRequest(senderIP: networkAddr.ip, senderMAC: networkAddr.mac, targetIP: dstIp)
|
||||
// await self.routeLayerPacket(dstMac: ARPPacket.broadcastMac , type: .arp, data: arpReqeust.marshal())
|
||||
@ -756,7 +756,7 @@ actor SDLContextActor {
|
||||
// 如果配置了,转发数据个网络出口,否则丢弃
|
||||
else if let exitNode = config.exitNode {
|
||||
let exitNodeIp: UInt32 = exitNode.exitNodeIp
|
||||
SDLLogger.shared.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())", level: .debug)
|
||||
SDLLogger.log("[SDLContext] dstIp: \(packet.header.destination.asIpAddress()), use exit_node: \(exitNodeIp.asIpAddress())")
|
||||
// 查找arp缓存中是否有目标mac地址
|
||||
if let dstMac = await self.arpServer.query(ip: exitNodeIp) {
|
||||
await self.routeLayerPacket(dstMac: dstMac, type: .ipv4, data: packet.data)
|
||||
@ -794,14 +794,14 @@ actor SDLContextActor {
|
||||
else {
|
||||
// 通过session发送到对端
|
||||
if let session = self.sessionManager.getSession(toAddress: dstMac) {
|
||||
SDLLogger.shared.log("[SDLContext] send packet by session: \(session)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] send packet by session: \(session)")
|
||||
udpHole.send(type: .data, data: data, remoteAddress: session.natAddress)
|
||||
self.flowTracer.inc(num: data.count, type: .p2p)
|
||||
}
|
||||
else {
|
||||
// 通过super_node进行转发
|
||||
udpHole.send(type: .data, data: data, remoteAddress: self.config.stunSocketAddress)
|
||||
SDLLogger.shared.log("[SDLContext] send packet by super: \(self.config.stunSocketAddress)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] send packet by super: \(self.config.stunSocketAddress)")
|
||||
// 流量统计
|
||||
self.flowTracer.inc(num: data.count, type: .forward)
|
||||
|
||||
@ -860,7 +860,7 @@ actor SDLContextActor {
|
||||
}
|
||||
// 开始探测nat的类型
|
||||
self.natType = await self.proberActor.probeNatType(using: udpHole)
|
||||
SDLLogger.shared.log("[SDLContext] nat_type is: \(natType)")
|
||||
SDLLogger.log("[SDLContext] nat_type is: \(natType)")
|
||||
}
|
||||
|
||||
private func spawnLoop(_ body: @escaping () async throws -> Void) -> Task<Void, Never> {
|
||||
|
||||
@ -62,7 +62,7 @@ actor SDLPuncherActor {
|
||||
}
|
||||
|
||||
if let remoteAddress = try? await peerInfo.v4Info.socketAddress() {
|
||||
SDLLogger.shared.log("[SDLContext] hole sock address: \(remoteAddress)", level: .debug)
|
||||
SDLLogger.log("[SDLContext] hole sock address: \(remoteAddress)", for: .punchnet)
|
||||
// 发送register包
|
||||
var register = SDLRegister()
|
||||
register.networkID = requestContext.request.networkId
|
||||
|
||||
@ -61,7 +61,7 @@ final class SDLQUICClient {
|
||||
|
||||
func start() {
|
||||
connection.stateUpdateHandler = { state in
|
||||
SDLLogger.shared.log("[SDLQUICClient] new state: \(state)")
|
||||
SDLLogger.log("[SDLQUICClient] new state: \(state)", for: .debug)
|
||||
switch state {
|
||||
case .ready:
|
||||
self.readyCont.yield()
|
||||
@ -118,7 +118,7 @@ final class SDLQUICClient {
|
||||
self.send(type: .ping, data: Data())
|
||||
}
|
||||
|
||||
SDLLogger.shared.log("[SDLQUICClient] udp pingTask cancel")
|
||||
SDLLogger.log("[SDLQUICClient] udp pingTask cancel", for: .debug)
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ final class SDLQUICClient {
|
||||
|
||||
connection.send(content: packet, completion: .contentProcessed { error in
|
||||
if let error {
|
||||
SDLLogger.shared.log("[SDLQUICClient] send data get error: \(error)")
|
||||
SDLLogger.log("[SDLQUICClient] send data get error: \(error)", for: .debug)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -239,14 +239,14 @@ final class SDLQUICClient {
|
||||
case .event:
|
||||
guard let bytes = buffer.readBytes(length: buffer.readableBytes),
|
||||
let event = try? SDLEvent(serializedBytes: bytes) else {
|
||||
SDLLogger.shared.log("SDLQUICClient decode Event Error")
|
||||
SDLLogger.log("SDLQUICClient decode Event Error", for: .debug)
|
||||
return nil
|
||||
}
|
||||
return .event(event)
|
||||
case .pong:
|
||||
return .pong
|
||||
default:
|
||||
SDLLogger.shared.log("SDLQUICClient decode miss type: \(type)")
|
||||
SDLLogger.log("SDLQUICClient decode miss type: \(type)", for: .debug)
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -273,7 +273,7 @@ extension SDLQUICClient {
|
||||
// --- Step 1: 系统验证 ---
|
||||
var error: CFError?
|
||||
guard SecTrustEvaluateWithError(secTrust, &error) else {
|
||||
SDLLogger.shared.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")")
|
||||
SDLLogger.log("❌ 系统证书验证失败: \(error?.localizedDescription ?? "未知错误")", for: .debug)
|
||||
return false
|
||||
}
|
||||
|
||||
@ -282,21 +282,21 @@ extension SDLQUICClient {
|
||||
SecTrustSetPolicies(secTrust, policy)
|
||||
|
||||
guard SecTrustEvaluateWithError(secTrust, &error) else {
|
||||
SDLLogger.shared.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")")
|
||||
SDLLogger.log("❌ 主机名校验失败: \(error?.localizedDescription ?? "未知错误")", for: .debug)
|
||||
return false
|
||||
}
|
||||
|
||||
// --- Step 3: 获取叶子证书 ---
|
||||
guard let chain = SecTrustCopyCertificateChain(secTrust) as? [SecCertificate],
|
||||
let leafCertificate = chain.first else {
|
||||
SDLLogger.shared.log("❌ 无法获取证书链或叶子证书")
|
||||
SDLLogger.log("❌ 无法获取证书链或叶子证书", for: .debug)
|
||||
return false
|
||||
}
|
||||
|
||||
// --- Step 4: 提取公钥 ---
|
||||
guard let publicKey = SecCertificateCopyKey(leafCertificate),
|
||||
let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, nil) as Data? else {
|
||||
SDLLogger.shared.log("❌ 无法提取公钥")
|
||||
SDLLogger.log("❌ 无法提取公钥", for: .debug)
|
||||
return false
|
||||
}
|
||||
|
||||
@ -305,10 +305,10 @@ extension SDLQUICClient {
|
||||
let hashBase64 = Data(hash).base64EncodedString()
|
||||
|
||||
if pinnedPublicKeyHashes.contains(hashBase64) {
|
||||
SDLLogger.shared.log("✅ 公钥校验通过")
|
||||
SDLLogger.log("✅ 公钥校验通过", for: .debug)
|
||||
return true
|
||||
} else {
|
||||
SDLLogger.shared.log("⚠️ 公钥不匹配! 收到: \(hashBase64)")
|
||||
SDLLogger.log("⚠️ 公钥不匹配! 收到: \(hashBase64)", for: .debug)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ actor SDLSupervisor {
|
||||
} catch is CancellationError {
|
||||
break
|
||||
} catch let err {
|
||||
SDLLogger.shared.log("[Supervisor] worker \(name) crashed: \(err.localizedDescription)")
|
||||
SDLLogger.log("[Supervisor] worker \(name) crashed: \(err.localizedDescription)", for: .punchnet)
|
||||
try? await Task.sleep(for: retryDelay)
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,6 @@ import Network
|
||||
|
||||
final class DNSCloudClient {
|
||||
private var connection: NWConnection?
|
||||
private let logger: SDLLogger
|
||||
private let dnsServerAddress: NWEndpoint
|
||||
|
||||
// 用于对外输出收到的 DNS 响应包
|
||||
@ -21,8 +20,7 @@ final class DNSCloudClient {
|
||||
|
||||
/// - Parameter host: 你的 sn-server 地址 (如 "8.8.8.8")
|
||||
/// - Parameter port: 端口 (如 53)
|
||||
init(host: String, port: UInt16, logger: SDLLogger) {
|
||||
self.logger = logger
|
||||
init(host: String, port: UInt16 ) {
|
||||
self.dnsServerAddress = .hostPort(host: NWEndpoint.Host(host), port: NWEndpoint.Port(integerLiteral: port))
|
||||
|
||||
let (stream, continuation) = AsyncStream.makeStream(of: Data.self, bufferingPolicy: .unbounded)
|
||||
@ -46,10 +44,10 @@ final class DNSCloudClient {
|
||||
connection.stateUpdateHandler = { [weak self] state in
|
||||
switch state {
|
||||
case .ready:
|
||||
self?.logger.log("[DNSClient] Connection ready", level: .debug)
|
||||
SDLLogger.log("[DNSClient] Connection ready", for: .debug)
|
||||
self?.receiveLoop() // 开始循环接收数据
|
||||
case .failed(let error):
|
||||
self?.logger.log("[DNSClient] Connection failed: \(error)", level: .error)
|
||||
SDLLogger.log("[DNSClient] Connection failed: \(error)", for: .debug)
|
||||
self?.stop()
|
||||
case .cancelled:
|
||||
self?.packetContinuation.finish()
|
||||
@ -89,7 +87,7 @@ final class DNSCloudClient {
|
||||
|
||||
connection.send(content: ipPacketData, completion: .contentProcessed { [weak self] error in
|
||||
if let error = error {
|
||||
self?.logger.log("[DNSClient] Send error: \(error)", level: .error)
|
||||
SDLLogger.log("[DNSClient] Send error: \(error)", for: .debug)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ final class DNSLocalClient {
|
||||
case .ready:
|
||||
self?.receiveLoop(for: conn)
|
||||
case .failed(let error):
|
||||
SDLLogger.shared.log("[DNSLocalClient] failed with error: \(error.localizedDescription)")
|
||||
SDLLogger.log("[DNSLocalClient] failed with error: \(error.localizedDescription)", for: .debug)
|
||||
self?.stop()
|
||||
case .cancelled:
|
||||
self?.packetContinuation.finish()
|
||||
|
||||
@ -9,44 +9,33 @@ import os
|
||||
|
||||
public class SDLLogger: @unchecked Sendable {
|
||||
|
||||
public enum Subsystem: String {
|
||||
public enum Subsystem: String, CaseIterable {
|
||||
case punchnet = "com.jihe.punchnet"
|
||||
case debug = "com.jihe.punchnetdebug"
|
||||
case debug = "com.jihe.punchnet.debug"
|
||||
case trace = "com.jihe.punchnet.trace"
|
||||
}
|
||||
|
||||
public enum Level: Int8, CustomStringConvertible {
|
||||
case debug = 0
|
||||
case info = 1
|
||||
case warning = 2
|
||||
case error = 3
|
||||
|
||||
public var description: String {
|
||||
switch self {
|
||||
case .debug:
|
||||
return "Debug"
|
||||
case .info:
|
||||
return "Info"
|
||||
case .warning:
|
||||
return "Warning"
|
||||
case .error:
|
||||
return "Error"
|
||||
}
|
||||
static var loggers: [String: SDLLogger] {
|
||||
var loggers: [String: SDLLogger] = [:]
|
||||
for sub in Subsystem.allCases {
|
||||
loggers[sub.rawValue] = .init(subsystem: sub)
|
||||
}
|
||||
return loggers
|
||||
}
|
||||
|
||||
static let shared = SDLLogger(level: .debug, subsystem: .punchnet)
|
||||
static let sharedDebug = SDLLogger(level: .debug, subsystem: .debug)
|
||||
|
||||
private let level: Level
|
||||
private let log: Logger
|
||||
|
||||
private init(level: Level, subsystem: Subsystem) {
|
||||
self.level = level
|
||||
private init(subsystem: Subsystem) {
|
||||
self.log = Logger(subsystem: subsystem.rawValue, category: "punchnet")
|
||||
}
|
||||
|
||||
public func log(_ message: String, level: Level = .debug) {
|
||||
public func _log(_ message: String) {
|
||||
self.log.info("\(message, privacy: .public)")
|
||||
}
|
||||
|
||||
public static func log(_ message: String, for system: Subsystem = .punchnet) {
|
||||
if let logger = loggers[system.rawValue] {
|
||||
logger._log(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,7 +38,6 @@ final class SDLNoticeClient {
|
||||
}
|
||||
|
||||
self.channel = try bootstrap.bind(host: "0.0.0.0", port: 0).wait()
|
||||
SDLLogger.shared.log("[SDLNoticeClient] started", level: .debug)
|
||||
}
|
||||
|
||||
func start() {
|
||||
|
||||
@ -45,7 +45,6 @@ final class SDLUDPHole: ChannelInboundHandler {
|
||||
}
|
||||
|
||||
let channel = try bootstrap.bind(host: "0.0.0.0", port: 0).wait()
|
||||
SDLLogger.shared.log("[UDPHole] started", level: .debug)
|
||||
self.channel = channel
|
||||
}
|
||||
|
||||
@ -81,17 +80,17 @@ final class SDLUDPHole: ChannelInboundHandler {
|
||||
let remoteAddress = envelope.remoteAddress
|
||||
|
||||
if let rawBytes = buffer.getBytes(at: buffer.readerIndex, length: buffer.readableBytes) {
|
||||
SDLLogger.shared.log("[SDLUDPHole] get raw bytes: \(rawBytes.count), from: \(remoteAddress)")
|
||||
SDLLogger.log("[SDLUDPHole] get raw bytes: \(rawBytes.count), from: \(remoteAddress)", for: .punchnet)
|
||||
}
|
||||
|
||||
do {
|
||||
if let message = try decode(buffer: &buffer) {
|
||||
self.messageContinuation.yield((remoteAddress, message))
|
||||
} else {
|
||||
SDLLogger.shared.log("[SDLUDPHole] decode message, get null", level: .warning)
|
||||
SDLLogger.log("[SDLUDPHole] decode message, get null", for: .punchnet)
|
||||
}
|
||||
} catch let err {
|
||||
SDLLogger.shared.log("[SDLUDPHole] decode message, get error: \(err)", level: .warning)
|
||||
SDLLogger.log("[SDLUDPHole] decode message, get error: \(err)", for: .punchnet)
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +127,6 @@ final class SDLUDPHole: ChannelInboundHandler {
|
||||
private func decode(buffer: inout ByteBuffer) throws -> SDLHoleMessage? {
|
||||
guard let type = buffer.readInteger(as: UInt8.self),
|
||||
let packetType = SDLPacketType(rawValue: type) else {
|
||||
SDLLogger.shared.log("[SDLUDPHole] decode error 11")
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -164,7 +162,7 @@ final class SDLUDPHole: ChannelInboundHandler {
|
||||
}
|
||||
return .stunReply(stunReply)
|
||||
default:
|
||||
SDLLogger.shared.log("SDLUDPHole decode miss type: \(type)")
|
||||
SDLLogger.log("SDLUDPHole decode miss type: \(type)", for: .debug)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user