mirror of
https://github.com/2dust/v2rayN.git
synced 2026-07-26 18:02:05 +03:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
654d7d83d0 | ||
|
|
027252e687 | ||
|
|
5478c90180 | ||
|
|
28f30d7e97 |
@@ -1,7 +1,7 @@
|
||||
<Project>
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>7.16.8</Version>
|
||||
<Version>7.16.9</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -1273,7 +1273,7 @@ public static class ConfigHandler
|
||||
}
|
||||
else if (node.ConfigType == EConfigType.Custom && node.PreSocksPort > 0)
|
||||
{
|
||||
var preCoreType = config.RunningCoreType = config.TunModeItem.EnableTun ? ECoreType.sing_box : ECoreType.Xray;
|
||||
var preCoreType = AppManager.Instance.RunningCoreType = config.TunModeItem.EnableTun ? ECoreType.sing_box : ECoreType.Xray;
|
||||
itemSocks = new ProfileItem()
|
||||
{
|
||||
CoreType = preCoreType,
|
||||
|
||||
@@ -193,19 +193,6 @@ public class ActionPrecheckManager
|
||||
}
|
||||
}
|
||||
|
||||
// ws with tls, tls alpn should contain "http/1.1" in xray core
|
||||
// rfc6455
|
||||
// https://github.com/XTLS/Xray-core/blob/81f8f398c7b2b845853b1e85087c6122acc6db0b/transport/internet/tls/tls.go#L95-L116
|
||||
if (item.Network == nameof(ETransport.ws)
|
||||
&& item.StreamSecurity == Global.StreamSecurity)
|
||||
{
|
||||
var alpnList = Utils.String2List(item.Alpn) ?? [];
|
||||
if (alpnList.Count > 0 && !alpnList.Contains("http/1.1"))
|
||||
{
|
||||
errors.Add(ResUI.AlpnMustContainHttp11ForWsTls);
|
||||
}
|
||||
}
|
||||
|
||||
return errors;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,23 @@ public sealed class AppManager
|
||||
|
||||
public string LinuxSudoPwd { get; set; }
|
||||
|
||||
public bool ShowInTaskbar { get; set; }
|
||||
|
||||
public ECoreType RunningCoreType { get; set; }
|
||||
|
||||
public bool IsRunningCore(ECoreType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.Xray when RunningCoreType is ECoreType.Xray or ECoreType.v2fly or ECoreType.v2fly_v5:
|
||||
case ECoreType.sing_box when RunningCoreType is ECoreType.sing_box or ECoreType.mihomo:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Property
|
||||
|
||||
#region App
|
||||
|
||||
@@ -125,7 +125,7 @@ public sealed class CoreInfoManager
|
||||
new CoreInfo
|
||||
{
|
||||
CoreType = ECoreType.mihomo,
|
||||
CoreExes = ["mihomo-windows-amd64-v1", "mihomo-windows-amd64-compatible", "mihomo-windows-amd64", "mihomo-linux-amd64", "clash", "mihomo"],
|
||||
CoreExes = GetMihomoCoreExes(),
|
||||
Arguments = "-f {0}" + PortableMode(),
|
||||
Url = GetCoreUrl(ECoreType.mihomo),
|
||||
ReleaseApiUrl = urlMihomo.Replace(Global.GithubUrl, Global.GithubApiUrl),
|
||||
@@ -248,4 +248,34 @@ public sealed class CoreInfoManager
|
||||
{
|
||||
return $"{Global.GithubUrl}/{Global.CoreUrls[eCoreType]}/releases";
|
||||
}
|
||||
|
||||
private static List<string>? GetMihomoCoreExes()
|
||||
{
|
||||
var names = new List<string>();
|
||||
|
||||
if (Utils.IsWindows())
|
||||
{
|
||||
names.Add("mihomo-windows-amd64-v1");
|
||||
names.Add("mihomo-windows-amd64-compatible");
|
||||
names.Add("mihomo-windows-amd64");
|
||||
names.Add("mihomo-windows-arm64");
|
||||
}
|
||||
else if (Utils.IsLinux())
|
||||
{
|
||||
names.Add("mihomo-linux-amd64-v1");
|
||||
names.Add("mihomo-linux-amd64");
|
||||
names.Add("mihomo-linux-arm64");
|
||||
}
|
||||
else if (Utils.IsMacOS())
|
||||
{
|
||||
names.Add("mihomo-darwin-amd64-v1");
|
||||
names.Add("mihomo-darwin-amd64");
|
||||
names.Add("mihomo-darwin-arm64");
|
||||
}
|
||||
|
||||
names.Add("clash");
|
||||
names.Add("mihomo");
|
||||
|
||||
return names;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ public class CoreManager
|
||||
|
||||
private async Task CoreStart(ProfileItem node)
|
||||
{
|
||||
var coreType = _config.RunningCoreType = AppManager.Instance.GetCoreType(node, node.ConfigType);
|
||||
var coreType = AppManager.Instance.RunningCoreType = AppManager.Instance.GetCoreType(node, node.ConfigType);
|
||||
var coreInfo = CoreInfoManager.Instance.GetCoreInfo(coreType);
|
||||
|
||||
var displayLog = node.ConfigType != EConfigType.Custom || node.DisplayLog;
|
||||
|
||||
@@ -8,21 +8,6 @@ public class Config
|
||||
public string IndexId { get; set; }
|
||||
public string SubIndexId { get; set; }
|
||||
|
||||
public ECoreType RunningCoreType { get; set; }
|
||||
|
||||
public bool IsRunningCore(ECoreType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ECoreType.Xray when RunningCoreType is ECoreType.Xray or ECoreType.v2fly or ECoreType.v2fly_v5:
|
||||
case ECoreType.sing_box when RunningCoreType is ECoreType.sing_box or ECoreType.mihomo:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion property
|
||||
|
||||
#region other entities
|
||||
|
||||
@@ -99,8 +99,7 @@ public class UIItem
|
||||
public bool EnableDragDropSort { get; set; }
|
||||
public bool DoubleClick2Activate { get; set; }
|
||||
public bool AutoHideStartup { get; set; }
|
||||
public bool Hide2TrayWhenClose { get; set; }
|
||||
public bool ShowInTaskbar { get; set; }
|
||||
public bool Hide2TrayWhenClose { get; set; }
|
||||
public bool MacOSShowInDock { get; set; }
|
||||
public List<ColumnItem> MainColumnItem { get; set; }
|
||||
public List<WindowSizeItem> WindowSizeItem { get; set; }
|
||||
|
||||
11
v2rayN/ServiceLib/Resx/ResUI.Designer.cs
generated
11
v2rayN/ServiceLib/Resx/ResUI.Designer.cs
generated
@@ -19,7 +19,7 @@ namespace ServiceLib.Resx {
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
public class ResUI {
|
||||
@@ -78,15 +78,6 @@ namespace ServiceLib.Resx {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 ALPN must contain 'http/1.1' when using WebSocket with TLS. 的本地化字符串。
|
||||
/// </summary>
|
||||
public static string AlpnMustContainHttp11ForWsTls {
|
||||
get {
|
||||
return ResourceManager.GetString("AlpnMustContainHttp11ForWsTls", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找类似 Export share link to clipboard successfully 的本地化字符串。
|
||||
/// </summary>
|
||||
|
||||
@@ -1641,7 +1641,4 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>Configuration Item 2, Select and add from self-built</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>ALPN must contain 'http/1.1' when using WebSocket with TLS.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1638,7 +1638,4 @@ Si un certificat auto-signé est utilisé ou si le système contient une CA non
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>Élément de config 2 : choisir et ajouter depuis self-hosted</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>Avec WebSocket et TLS, l’ALPN doit inclure ‘http/1.1’.</value>
|
||||
</data>
|
||||
</root>
|
||||
|
||||
@@ -1641,7 +1641,4 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>Configuration Item 2, Select and add from self-built</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>ALPN must contain 'http/1.1' when using WebSocket with TLS.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1641,7 +1641,4 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>Configuration Item 2, Select and add from self-built</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>ALPN must contain 'http/1.1' when using WebSocket with TLS.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1641,7 +1641,4 @@ The "Get Certificate" action may fail if a self-signed certificate is used or if
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>Configuration Item 2, Select and add from self-built</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>ALPN must contain 'http/1.1' when using WebSocket with TLS.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1638,7 +1638,4 @@
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>子配置项二,从自建中选择添加</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>使用 WebSocket+TLS 时,ALPN 必须包含 'http/1.1'。</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1638,7 +1638,4 @@
|
||||
<data name="menuServerList2" xml:space="preserve">
|
||||
<value>子配置項二,從自建中選擇新增</value>
|
||||
</data>
|
||||
<data name="AlpnMustContainHttp11ForWsTls" xml:space="preserve">
|
||||
<value>ALPN must contain 'http/1.1' when using WebSocket with TLS.</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -10,7 +10,7 @@ public partial class CoreConfigSingboxService
|
||||
singboxConfig.inbounds = [];
|
||||
|
||||
if (!_config.TunModeItem.EnableTun
|
||||
|| (_config.TunModeItem.EnableTun && _config.TunModeItem.EnableExInbound && _config.RunningCoreType == ECoreType.sing_box))
|
||||
|| (_config.TunModeItem.EnableTun && _config.TunModeItem.EnableExInbound && AppManager.Instance.RunningCoreType == ECoreType.sing_box))
|
||||
{
|
||||
var inbound = new Inbound4Sbox()
|
||||
{
|
||||
|
||||
@@ -61,7 +61,7 @@ public class StatisticsSingboxService
|
||||
await Task.Delay(1000);
|
||||
try
|
||||
{
|
||||
if (!_config.IsRunningCore(ECoreType.sing_box))
|
||||
if (!AppManager.Instance.IsRunningCore(ECoreType.sing_box))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class StatisticsXrayService
|
||||
await Task.Delay(1000);
|
||||
try
|
||||
{
|
||||
if (_config.RunningCoreType != ECoreType.Xray)
|
||||
if (AppManager.Instance.RunningCoreType != ECoreType.Xray)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ public class ClashConnectionsViewModel : MyReactiveObject
|
||||
{
|
||||
await Task.Delay(1000 * 5);
|
||||
numOfExecuted++;
|
||||
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
|
||||
if (!(AutoRefresh && AppManager.Instance.ShowInTaskbar && AppManager.Instance.IsRunningCore(ECoreType.sing_box)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -437,7 +437,7 @@ public class ClashProxiesViewModel : MyReactiveObject
|
||||
{
|
||||
await Task.Delay(1000 * 60);
|
||||
numOfExecuted++;
|
||||
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
|
||||
if (!(AutoRefresh && AppManager.Instance.ShowInTaskbar && AppManager.Instance.IsRunningCore(ECoreType.sing_box)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -253,7 +253,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
|
||||
private async Task Init()
|
||||
{
|
||||
_config.UiItem.ShowInTaskbar = true;
|
||||
AppManager.Instance.ShowInTaskbar = true;
|
||||
|
||||
//await ConfigHandler.InitBuiltinRouting(_config);
|
||||
await ConfigHandler.InitBuiltinDNS(_config);
|
||||
@@ -306,7 +306,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
|
||||
private async Task UpdateStatisticsHandler(ServerSpeedItem update)
|
||||
{
|
||||
if (!_config.UiItem.ShowInTaskbar)
|
||||
if (!AppManager.Instance.ShowInTaskbar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -560,7 +560,7 @@ public class MainWindowViewModel : MyReactiveObject
|
||||
});
|
||||
AppEvents.TestServerRequested.Publish();
|
||||
|
||||
var showClashUI = _config.IsRunningCore(ECoreType.sing_box);
|
||||
var showClashUI = AppManager.Instance.IsRunningCore(ECoreType.sing_box);
|
||||
if (showClashUI)
|
||||
{
|
||||
AppEvents.ProxiesReloadRequested.Publish();
|
||||
|
||||
@@ -44,7 +44,7 @@ public class MsgViewModel : MyReactiveObject
|
||||
|
||||
EnqueueQueueMsg(msg);
|
||||
|
||||
if (!_config.UiItem.ShowInTaskbar)
|
||||
if (!AppManager.Instance.ShowInTaskbar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -549,7 +549,7 @@ public class StatusBarViewModel : MyReactiveObject
|
||||
|
||||
try
|
||||
{
|
||||
if (_config.IsRunningCore(ECoreType.sing_box))
|
||||
if (AppManager.Instance.IsRunningCore(ECoreType.sing_box))
|
||||
{
|
||||
SpeedProxyDisplay = string.Format(ResUI.SpeedDisplayText, EInboundProtocol.mixed, Utils.HumanFy(update.ProxyUp), Utils.HumanFy(update.ProxyDown));
|
||||
SpeedDirectDisplay = string.Empty;
|
||||
|
||||
@@ -409,8 +409,8 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||
{
|
||||
var bl = blShow ??
|
||||
(Utils.IsLinux()
|
||||
? (!_config.UiItem.ShowInTaskbar ^ (WindowState == WindowState.Minimized))
|
||||
: !_config.UiItem.ShowInTaskbar);
|
||||
? (!AppManager.Instance.ShowInTaskbar ^ (WindowState == WindowState.Minimized))
|
||||
: !AppManager.Instance.ShowInTaskbar);
|
||||
if (bl)
|
||||
{
|
||||
Show();
|
||||
@@ -436,7 +436,7 @@ public partial class MainWindow : WindowBase<MainWindowViewModel>
|
||||
Hide();
|
||||
}
|
||||
|
||||
_config.UiItem.ShowInTaskbar = bl;
|
||||
AppManager.Instance.ShowInTaskbar = bl;
|
||||
}
|
||||
|
||||
protected override void OnLoaded(object? sender, RoutedEventArgs e)
|
||||
|
||||
@@ -376,7 +376,7 @@ public partial class MainWindow
|
||||
|
||||
public void ShowHideWindow(bool? blShow)
|
||||
{
|
||||
var bl = blShow ?? !_config.UiItem.ShowInTaskbar;
|
||||
var bl = blShow ?? !AppManager.Instance.ShowInTaskbar;
|
||||
if (bl)
|
||||
{
|
||||
this?.Show();
|
||||
@@ -391,7 +391,7 @@ public partial class MainWindow
|
||||
{
|
||||
this?.Hide();
|
||||
}
|
||||
_config.UiItem.ShowInTaskbar = bl;
|
||||
AppManager.Instance.ShowInTaskbar = bl;
|
||||
}
|
||||
|
||||
protected override void OnLoaded(object? sender, RoutedEventArgs e)
|
||||
|
||||
Reference in New Issue
Block a user