using System.Text.Json.Serialization; using MoShiro.Protocol; namespace MoShiro.Agent; /// 要拨的一个监听节点的一条路径(一个 IP 族):地址、端口和固定证书用的公钥。 public sealed class DialEndpoint { [JsonPropertyName("ip_version")] public string IpVersion { get; set; } = IpVersions.V4; [JsonIgnore] public string PathKey => NodeId + "~" + IpVersion; [JsonPropertyName("node_id")] public string NodeId { get; set; } = ""; [JsonPropertyName("host")] public string Host { get; set; } = ""; [JsonPropertyName("tcp_port")] public int TcpPort { get; set; } [JsonPropertyName("quic_ports")] public List QuicPorts { get; set; } = [7443]; /// 监听方的 TLS 证书公钥(SPKI,base64):证书按它的 SHA-256 指纹固定,敲门密钥由它派生。 [JsonPropertyName("public_key")] public string PublicKey { get; set; } = ""; } /// dial_targets.json:最近一次从面板同步到的拨号目标(配置,不是测量数据);面板连不上时节点靠它继续测量。 public sealed class DialCache { [JsonPropertyName("version")] public long Version { get; set; } [JsonPropertyName("targets")] public List Targets { get; set; } = []; }