using System; using System.Net; namespace FastGithub.Configuration { /// /// Sni自定义值表达式 /// @domain变量表示取域名值 /// @ipadress变量表示取ip /// @random变量表示取随机值 /// public struct TlsSniPattern { /// /// 获取表示式值 /// public string Value { get; } /// /// 无SNI /// public static TlsSniPattern None { get; } = new TlsSniPattern(string.Empty); /// /// 域名SNI /// public static TlsSniPattern Domain { get; } = new TlsSniPattern("@domain"); /// /// IP值的SNI /// public static TlsSniPattern IPAddress { get; } = new TlsSniPattern("@ipaddress"); /// /// 随机值的SNI /// public static TlsSniPattern Random { get; } = new TlsSniPattern("@random"); /// /// Sni自定义值表达式 /// /// 表示式值 public TlsSniPattern(string? value) { this.Value = value ?? string.Empty; } /// /// 更新域名 /// /// public TlsSniPattern WithDomain(string domain) { var value = this.Value.Replace(Domain.Value, domain, StringComparison.OrdinalIgnoreCase); return new TlsSniPattern(value); } /// /// 更新ip地址 /// /// public TlsSniPattern WithIPAddress(IPAddress address) { var value = this.Value.Replace(IPAddress.Value, address.ToString(), StringComparison.OrdinalIgnoreCase); return new TlsSniPattern(value); } /// /// 更新随机数 /// public TlsSniPattern WithRandom() { var value = this.Value.Replace(Random.Value, Environment.TickCount64.ToString(), StringComparison.OrdinalIgnoreCase); return new TlsSniPattern(value); } /// /// 转换为文本 /// /// public override string ToString() { return this.Value; } } }