diff --git a/v2rayN/ServiceLib/Global.cs b/v2rayN/ServiceLib/Global.cs index 3fc549f9972..13d6850bda4 100644 --- a/v2rayN/ServiceLib/Global.cs +++ b/v2rayN/ServiceLib/Global.cs @@ -7,19 +7,8 @@ public class Global public const string AppName = "v2rayN"; public const string GithubUrl = "https://github.com"; public const string GithubApiUrl = "https://api.github.com/repos"; - public const string V2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases"; - public const string XrayCoreUrl = "https://github.com/XTLS/Xray-core/releases"; - public const string NUrl = @"https://github.com/2dust/v2rayN/releases"; - public const string MihomoCoreUrl = "https://github.com/MetaCubeX/mihomo/releases"; - public const string HysteriaCoreUrl = "https://github.com/apernet/hysteria/releases"; - public const string NaiveproxyCoreUrl = "https://github.com/klzgrad/naiveproxy/releases"; - public const string TuicCoreUrl = "https://github.com/EAimTY/tuic/releases"; - public const string SingboxCoreUrl = "https://github.com/SagerNet/sing-box/releases"; public const string GeoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat"; public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; - public const string JuicityCoreUrl = "https://github.com/juicity/juicity/releases"; - public const string BrookCoreUrl = "https://github.com/txthinking/brook/releases"; - public const string OvertlsCoreUrl = "https://github.com/ShadowsocksR-Live/overtls/releases"; public const string SingboxRulesetUrl = @"https://raw.githubusercontent.com/2dust/sing-box-rules/rule-set-{0}/{1}.srs"; public const string IPAPIUrl = "https://api.ip.sb/geoip"; @@ -170,27 +159,27 @@ public class Global public static readonly Dictionary ProtocolShares = new() { - {EConfigType.VMess,"vmess://"}, - {EConfigType.Shadowsocks,"ss://"}, - {EConfigType.SOCKS,"socks://"}, - {EConfigType.VLESS,"vless://"}, - {EConfigType.Trojan,"trojan://"}, - {EConfigType.Hysteria2,"hysteria2://"}, - {EConfigType.TUIC,"tuic://"}, - {EConfigType.WireGuard,"wireguard://"} + { EConfigType.VMess, "vmess://" }, + { EConfigType.Shadowsocks, "ss://" }, + { EConfigType.SOCKS, "socks://" }, + { EConfigType.VLESS, "vless://" }, + { EConfigType.Trojan, "trojan://" }, + { EConfigType.Hysteria2, "hysteria2://" }, + { EConfigType.TUIC, "tuic://" }, + { EConfigType.WireGuard, "wireguard://" } }; public static readonly Dictionary ProtocolTypes = new() { - {EConfigType.VMess,"vmess"}, - {EConfigType.Shadowsocks,"shadowsocks"}, - {EConfigType.SOCKS,"socks"}, - {EConfigType.HTTP,"http"}, - {EConfigType.VLESS,"vless"}, - {EConfigType.Trojan,"trojan"}, - {EConfigType.Hysteria2,"hysteria2"}, - {EConfigType.TUIC,"tuic"}, - {EConfigType.WireGuard,"wireguard"} + { EConfigType.VMess, "vmess" }, + { EConfigType.Shadowsocks, "shadowsocks" }, + { EConfigType.SOCKS, "socks" }, + { EConfigType.HTTP, "http" }, + { EConfigType.VLESS, "vless" }, + { EConfigType.Trojan, "trojan" }, + { EConfigType.Hysteria2, "hysteria2" }, + { EConfigType.TUIC, "tuic" }, + { EConfigType.WireGuard, "wireguard" } }; public static readonly List VmessSecurities = @@ -502,6 +491,23 @@ public class Global "http" ]; + public static readonly Dictionary CoreUrls = new() + { + { ECoreType.v2fly, "v2fly/v2ray-core" }, + { ECoreType.v2fly_v5, "v2fly/v2ray-core" }, + { ECoreType.Xray, "XTLS/Xray-core" }, + { ECoreType.sing_box, "SagerNet/sing-box" }, + { ECoreType.mihomo, "MetaCubeX/mihomo" }, + { ECoreType.hysteria, "apernet/hysteria" }, + { ECoreType.hysteria2, "apernet/hysteria" }, + { ECoreType.naiveproxy, "klzgrad/naiveproxy" }, + { ECoreType.tuic, "EAimTY/tuic" }, + { ECoreType.juicity, "juicity/juicity" }, + { ECoreType.brook, "txthinking/brook" }, + { ECoreType.overtls, "ShadowsocksR-Live/overtls" }, + { ECoreType.v2rayN, "2dust/v2rayN" }, + }; + #endregion const } } diff --git a/v2rayN/ServiceLib/Handler/CoreInfoHandler.cs b/v2rayN/ServiceLib/Handler/CoreInfoHandler.cs index 4b97810538d..84371e33b2a 100644 --- a/v2rayN/ServiceLib/Handler/CoreInfoHandler.cs +++ b/v2rayN/ServiceLib/Handler/CoreInfoHandler.cs @@ -52,19 +52,24 @@ public string GetCoreExecFile(CoreInfo? coreInfo, out string msg) private void InitCoreInfo() { + var urlN = GetCoreUrl(ECoreType.v2rayN); + var urlXray = GetCoreUrl(ECoreType.Xray); + var urlMihomo = GetCoreUrl(ECoreType.mihomo); + var urlSingbox = GetCoreUrl(ECoreType.sing_box); + _coreInfo = [ new CoreInfo { CoreType = ECoreType.v2rayN, - Url = Global.NUrl, - ReleaseApiUrl = Global.NUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), - DownloadUrlWin64 = Global.NUrl + "/download/{0}/v2rayN-windows-64.zip", - DownloadUrlWinArm64 = Global.NUrl + "/download/{0}/v2rayN-windows-arm64.zip", - DownloadUrlLinux64 = Global.NUrl + "/download/{0}/v2rayN-linux-64.zip", - DownloadUrlLinuxArm64 = Global.NUrl + "/download/{0}/v2rayN-linux-arm64.zip", - DownloadUrlOSX64 = Global.NUrl + "/download/{0}/v2rayN-macos-64.zip", - DownloadUrlOSXArm64 = Global.NUrl + "/download/{0}/v2rayN-macos-arm64.zip", + Url = GetCoreUrl(ECoreType.v2rayN), + ReleaseApiUrl = urlN.Replace(Global.GithubUrl, Global.GithubApiUrl), + DownloadUrlWin64 = urlN + "/download/{0}/v2rayN-windows-64.zip", + DownloadUrlWinArm64 = urlN + "/download/{0}/v2rayN-windows-arm64.zip", + DownloadUrlLinux64 = urlN + "/download/{0}/v2rayN-linux-64.zip", + DownloadUrlLinuxArm64 = urlN + "/download/{0}/v2rayN-linux-arm64.zip", + DownloadUrlOSX64 = urlN + "/download/{0}/v2rayN-macos-64.zip", + DownloadUrlOSXArm64 = urlN + "/download/{0}/v2rayN-macos-arm64.zip", }, new CoreInfo @@ -72,8 +77,7 @@ private void InitCoreInfo() CoreType = ECoreType.v2fly, CoreExes = ["wv2ray", "v2ray"], Arguments = "{0}", - Url = Global.V2flyCoreUrl, - ReleaseApiUrl = Global.V2flyCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + Url = GetCoreUrl(ECoreType.v2fly), Match = "V2Ray", VersionArg = "-version", }, @@ -83,8 +87,7 @@ private void InitCoreInfo() CoreType = ECoreType.v2fly_v5, CoreExes = ["v2ray"], Arguments = "run -c {0} -format jsonv5", - Url = Global.V2flyCoreUrl, - ReleaseApiUrl = Global.V2flyCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + Url = GetCoreUrl(ECoreType.v2fly_v5), Match = "V2Ray", VersionArg = "version", }, @@ -94,14 +97,14 @@ private void InitCoreInfo() CoreType = ECoreType.Xray, CoreExes = ["wxray","xray"], Arguments = "run -c {0}", - Url = Global.XrayCoreUrl, - ReleaseApiUrl = Global.XrayCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), - DownloadUrlWin64 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-64.zip", - DownloadUrlWinArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-arm64-v8a.zip", - DownloadUrlLinux64 = Global.XrayCoreUrl + "/download/{0}/Xray-linux-64.zip", - DownloadUrlLinuxArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-linux-arm64-v8a.zip", - DownloadUrlOSX64 = Global.XrayCoreUrl + "/download/{0}/Xray-macos-64.zip", - DownloadUrlOSXArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-macos-arm64-v8a.zip", + Url = GetCoreUrl(ECoreType.Xray), + ReleaseApiUrl = urlXray.Replace(Global.GithubUrl, Global.GithubApiUrl), + DownloadUrlWin64 = urlXray + "/download/{0}/Xray-windows-64.zip", + DownloadUrlWinArm64 = urlXray + "/download/{0}/Xray-windows-arm64-v8a.zip", + DownloadUrlLinux64 = urlXray + "/download/{0}/Xray-linux-64.zip", + DownloadUrlLinuxArm64 = urlXray + "/download/{0}/Xray-linux-arm64-v8a.zip", + DownloadUrlOSX64 = urlXray + "/download/{0}/Xray-macos-64.zip", + DownloadUrlOSXArm64 = urlXray + "/download/{0}/Xray-macos-arm64-v8a.zip", Match = "Xray", VersionArg = "-version", }, @@ -111,14 +114,14 @@ private void InitCoreInfo() CoreType = ECoreType.mihomo, CoreExes = ["mihomo-windows-amd64-compatible", "mihomo-windows-amd64", "mihomo-linux-amd64", "clash", "mihomo"], Arguments = "-f {0}" + PortableMode(), - Url = Global.MihomoCoreUrl, - ReleaseApiUrl = Global.MihomoCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), - DownloadUrlWin64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-windows-amd64-compatible-{0}.zip", - DownloadUrlWinArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-windows-arm64-{0}.zip", - DownloadUrlLinux64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-linux-amd64-compatible-{0}.gz", - DownloadUrlLinuxArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-linux-arm64-{0}.gz", - DownloadUrlOSX64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-darwin-amd64-compatible-{0}.gz", - DownloadUrlOSXArm64 = Global.MihomoCoreUrl + "/download/{0}/mihomo-darwin-arm64-{0}.gz", + Url = GetCoreUrl(ECoreType.mihomo), + ReleaseApiUrl = urlMihomo.Replace(Global.GithubUrl, Global.GithubApiUrl), + DownloadUrlWin64 = urlMihomo + "/download/{0}/mihomo-windows-amd64-compatible-{0}.zip", + DownloadUrlWinArm64 = urlMihomo + "/download/{0}/mihomo-windows-arm64-{0}.zip", + DownloadUrlLinux64 = urlMihomo + "/download/{0}/mihomo-linux-amd64-compatible-{0}.gz", + DownloadUrlLinuxArm64 = urlMihomo + "/download/{0}/mihomo-linux-arm64-{0}.gz", + DownloadUrlOSX64 = urlMihomo + "/download/{0}/mihomo-darwin-amd64-compatible-{0}.gz", + DownloadUrlOSXArm64 = urlMihomo + "/download/{0}/mihomo-darwin-arm64-{0}.gz", Match = "Mihomo", VersionArg = "-v", }, @@ -128,7 +131,7 @@ private void InitCoreInfo() CoreType = ECoreType.hysteria, CoreExes = ["hysteria-windows-amd64", "hysteria"], Arguments = "-c {0}", - Url = Global.HysteriaCoreUrl, + Url = GetCoreUrl(ECoreType.hysteria), }, new CoreInfo @@ -136,7 +139,7 @@ private void InitCoreInfo() CoreType = ECoreType.naiveproxy, CoreExes = [ "naive", "naiveproxy"], Arguments = "{0}", - Url = Global.NaiveproxyCoreUrl, + Url = GetCoreUrl(ECoreType.naiveproxy), }, new CoreInfo @@ -144,7 +147,7 @@ private void InitCoreInfo() CoreType = ECoreType.tuic, CoreExes = ["tuic-client", "tuic"], Arguments = "-c {0}", - Url = Global.TuicCoreUrl, + Url = GetCoreUrl(ECoreType.tuic), }, new CoreInfo @@ -152,15 +155,15 @@ private void InitCoreInfo() CoreType = ECoreType.sing_box, CoreExes = ["sing-box-client", "sing-box"], Arguments = "run -c {0} --disable-color", - Url = Global.SingboxCoreUrl, - - ReleaseApiUrl = Global.SingboxCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), - DownloadUrlWin64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-amd64.zip", - DownloadUrlWinArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-arm64.zip", - DownloadUrlLinux64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-linux-amd64.tar.gz", - DownloadUrlLinuxArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-linux-arm64.tar.gz", - DownloadUrlOSX64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-darwin-amd64.tar.gz", - DownloadUrlOSXArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-darwin-arm64.tar.gz", + Url = GetCoreUrl(ECoreType.sing_box), + + ReleaseApiUrl = urlSingbox.Replace(Global.GithubUrl, Global.GithubApiUrl), + DownloadUrlWin64 = urlSingbox + "/download/{0}/sing-box-{1}-windows-amd64.zip", + DownloadUrlWinArm64 = urlSingbox + "/download/{0}/sing-box-{1}-windows-arm64.zip", + DownloadUrlLinux64 = urlSingbox + "/download/{0}/sing-box-{1}-linux-amd64.tar.gz", + DownloadUrlLinuxArm64 = urlSingbox + "/download/{0}/sing-box-{1}-linux-arm64.tar.gz", + DownloadUrlOSX64 = urlSingbox + "/download/{0}/sing-box-{1}-darwin-amd64.tar.gz", + DownloadUrlOSXArm64 = urlSingbox + "/download/{0}/sing-box-{1}-darwin-arm64.tar.gz", Match = "sing-box", VersionArg = "version", }, @@ -170,7 +173,7 @@ private void InitCoreInfo() CoreType = ECoreType.juicity, CoreExes = ["juicity-client", "juicity"], Arguments = "run -c {0}", - Url = Global.JuicityCoreUrl + Url = GetCoreUrl(ECoreType.juicity) }, new CoreInfo @@ -178,7 +181,7 @@ private void InitCoreInfo() CoreType = ECoreType.hysteria2, CoreExes = ["hysteria-windows-amd64", "hysteria-linux-amd64", "hysteria"], Arguments = "-c {0}", - Url = Global.HysteriaCoreUrl, + Url = GetCoreUrl(ECoreType.hysteria2), }, new CoreInfo @@ -186,7 +189,7 @@ private void InitCoreInfo() CoreType = ECoreType.brook, CoreExes = ["brook_windows_amd64", "brook_linux_amd64", "brook"], Arguments = " {0}", - Url = Global.BrookCoreUrl, + Url = GetCoreUrl(ECoreType.brook), AbsolutePath = true, }, @@ -195,16 +198,21 @@ private void InitCoreInfo() CoreType = ECoreType.overtls, CoreExes = [ "overtls-bin", "overtls"], Arguments = "-r client -c {0}", - Url = Global.OvertlsCoreUrl, + Url = GetCoreUrl(ECoreType.overtls), AbsolutePath = false, } ]; } - private string PortableMode() + private static string PortableMode() { return $" -d {Utils.GetBinPath("").AppendQuotes()}"; } + + private static string GetCoreUrl(ECoreType eCoreType) + { + return $"{Global.GithubUrl}/{Global.CoreUrls[eCoreType]}/releases"; + } } }