punchnet-macos/Tun/Punchnet/Policy/PolicySnapshot.swift
2026-05-20 21:55:58 +08:00

37 lines
967 B
Swift

//
// PolicySnapshot.swift
// Tun
//
// Created by Codex on 2026/5/20.
//
import Foundation
final class PolicySnapshot: Snapshot {
private let identitySnapshot: IdentitySnapshot
init(identitySnapshot: IdentitySnapshot) {
self.identitySnapshot = identitySnapshot
}
func allows(srcIdentityID: UInt32, ipPacket: IPPacket) -> Bool {
let ruleMap = self.identitySnapshot.lookup(srcIdentityID)
let proto = ipPacket.header.proto
switch ipPacket.transportPacket {
case .tcp(let tcpPacket):
return ruleMap?.isAllow(proto: proto, port: tcpPacket.header.dstPort) ?? false
case .udp(let udpPacket):
return ruleMap?.isAllow(proto: proto, port: udpPacket.dstPort) ?? false
case .icmp:
return true
default:
return false
}
}
static func empty() -> PolicySnapshot {
return PolicySnapshot(identitySnapshot: .empty())
}
}