mirror of
https://github.com/2dust/v2rayN.git
synced 2026-01-15 10:29:33 +00:00
Some checks are pending
release Linux / build (Release) (push) Waiting to run
release Linux / rpm (push) Blocked by required conditions
release macOS / build (Release) (push) Waiting to run
release Windows desktop (Avalonia UI) / build (Release) (push) Waiting to run
release Windows / build (Release) (push) Waiting to run
Introduces EchConfigList and EchForceQuery fields to ProfileItem and V2rayConfig models, updates related handlers and services to process these fields, and extends the AddServerWindow UI to allow user input for ECH configuration. Also adds localization entries for the new fields and updates extension methods for string handling.
166 lines
4.5 KiB
C#
166 lines
4.5 KiB
C#
namespace ServiceLib.Models;
|
|
|
|
[Serializable]
|
|
public class ProfileItem : ReactiveObject
|
|
{
|
|
public ProfileItem()
|
|
{
|
|
IndexId = string.Empty;
|
|
ConfigType = EConfigType.VMess;
|
|
ConfigVersion = 2;
|
|
Address = string.Empty;
|
|
Port = 0;
|
|
Id = string.Empty;
|
|
AlterId = 0;
|
|
Security = string.Empty;
|
|
Network = string.Empty;
|
|
Remarks = string.Empty;
|
|
HeaderType = string.Empty;
|
|
RequestHost = string.Empty;
|
|
Path = string.Empty;
|
|
StreamSecurity = string.Empty;
|
|
AllowInsecure = string.Empty;
|
|
Subid = string.Empty;
|
|
Flow = string.Empty;
|
|
}
|
|
|
|
#region function
|
|
|
|
public string GetSummary()
|
|
{
|
|
var summary = $"[{ConfigType.ToString()}] ";
|
|
if (IsComplex())
|
|
{
|
|
summary += $"[{CoreType.ToString()}]{Remarks}";
|
|
}
|
|
else
|
|
{
|
|
var arrAddr = Address.Contains(':') ? Address.Split(':') : Address.Split('.');
|
|
var addr = arrAddr.Length switch
|
|
{
|
|
> 2 => $"{arrAddr.First()}***{arrAddr.Last()}",
|
|
> 1 => $"***{arrAddr.Last()}",
|
|
_ => Address
|
|
};
|
|
summary += $"{Remarks}({addr}:{Port})";
|
|
}
|
|
return summary;
|
|
}
|
|
|
|
public List<string>? GetAlpn()
|
|
{
|
|
return Alpn.IsNullOrEmpty() ? null : Utils.String2List(Alpn);
|
|
}
|
|
|
|
public string GetNetwork()
|
|
{
|
|
if (Network.IsNullOrEmpty() || !Global.Networks.Contains(Network))
|
|
{
|
|
return Global.DefaultNetwork;
|
|
}
|
|
return Network.TrimEx();
|
|
}
|
|
|
|
public bool IsComplex()
|
|
{
|
|
return ConfigType.IsComplexType();
|
|
}
|
|
|
|
public bool IsValid()
|
|
{
|
|
if (IsComplex())
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (Address.IsNullOrEmpty() || Port is <= 0 or >= 65536)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
switch (ConfigType)
|
|
{
|
|
case EConfigType.VMess:
|
|
if (Id.IsNullOrEmpty() || !Utils.IsGuidByParse(Id))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
break;
|
|
|
|
case EConfigType.VLESS:
|
|
if (Id.IsNullOrEmpty() || (!Utils.IsGuidByParse(Id) && Id.Length > 30))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!Global.Flows.Contains(Flow))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
break;
|
|
|
|
case EConfigType.Shadowsocks:
|
|
if (Id.IsNullOrEmpty())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(Security) || !Global.SsSecuritiesInSingbox.Contains(Security))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if ((ConfigType is EConfigType.VLESS or EConfigType.Trojan)
|
|
&& StreamSecurity == Global.StreamSecurityReality
|
|
&& PublicKey.IsNullOrEmpty())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
#endregion function
|
|
|
|
[PrimaryKey]
|
|
public string IndexId { get; set; }
|
|
|
|
public EConfigType ConfigType { get; set; }
|
|
public int ConfigVersion { get; set; }
|
|
public string Address { get; set; }
|
|
public int Port { get; set; }
|
|
public string Ports { get; set; }
|
|
public string Id { get; set; }
|
|
public int AlterId { get; set; }
|
|
public string Security { get; set; }
|
|
public string Network { get; set; }
|
|
public string Remarks { get; set; }
|
|
public string HeaderType { get; set; }
|
|
public string RequestHost { get; set; }
|
|
public string Path { get; set; }
|
|
public string StreamSecurity { get; set; }
|
|
public string AllowInsecure { get; set; }
|
|
public string Subid { get; set; }
|
|
public bool IsSub { get; set; } = true;
|
|
public string Flow { get; set; }
|
|
public string Sni { get; set; }
|
|
public string Alpn { get; set; } = string.Empty;
|
|
public ECoreType? CoreType { get; set; }
|
|
public int? PreSocksPort { get; set; }
|
|
public string Fingerprint { get; set; }
|
|
public bool DisplayLog { get; set; } = true;
|
|
public string PublicKey { get; set; }
|
|
public string ShortId { get; set; }
|
|
public string SpiderX { get; set; }
|
|
public string Mldsa65Verify { get; set; }
|
|
public string Extra { get; set; }
|
|
public bool? MuxEnabled { get; set; }
|
|
public string Cert { get; set; }
|
|
public string EchConfigList { get; set; }
|
|
public string EchForceQuery { get; set; }
|
|
}
|