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; } = [];
}