using System.Net; namespace LumaTunnel.Shared.Models; public enum ProxyMode { Rule, Global, Direct } public enum RouteAction { Tunnel, Direct } public enum RuleKind { Domain, DomainSuffix, IpCidr, Port } public sealed record RoutingRule { public Guid Id { get; init; } = Guid.NewGuid(); public bool Enabled { get; init; } = true; public int Priority { get; init; } public required RuleKind Kind { get; init; } public required string Value { get; init; } public required RouteAction Action { get; init; } public string? Note { get; init; } } public sealed record ProxyTarget(string Host, int Port, IPAddress? Address = null) { public override string ToString() => $"{Host}:{Port}"; } public sealed record ProxyEngineOptions { public IPAddress ListenAddress { get; init; } = IPAddress.Loopback; public int HttpPort { get; init; } = 7890; public int SocksPort { get; init; } = 7891; public ProxyMode Mode { get; init; } = ProxyMode.Rule; public TimeSpan ConnectTimeout { get; init; } = TimeSpan.FromSeconds(10); }