Refactor: Update Netch.Servers naming

This commit is contained in:
ChsBuffer
2021-08-31 11:48:49 +08:00
parent 8f80f9abef
commit 46d60babbc
42 changed files with 125 additions and 143 deletions

View File

@@ -6,7 +6,6 @@ using Netch.Enums;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers;
using Netch.Servers.Shadowsocks;
using Netch.Utils;
using Serilog;
using Serilog.Events;
@@ -56,8 +55,8 @@ namespace Netch.Controllers
switch (server)
{
case Socks5 socks5 when !socks5.Auth() || socks5.Auth() && ModeFeatures.HasFlag(ModeFeature.SupportSocks5Auth):
case Shadowsocks shadowsocks when !shadowsocks.HasPlugin() && ModeFeatures.HasFlag(ModeFeature.SupportShadowsocks) &&
case Socks5Server socks5 when !socks5.Auth() || socks5.Auth() && ModeFeatures.HasFlag(ModeFeature.SupportSocks5Auth):
case ShadowsocksServer shadowsocks when !shadowsocks.HasPlugin() && ModeFeatures.HasFlag(ModeFeature.SupportShadowsocks) &&
Global.Settings.Redirector.RedirectorSS:
break;
default:

View File

@@ -9,7 +9,6 @@ using Netch.Interfaces;
using Netch.Interops;
using Netch.Models;
using Netch.Servers;
using Netch.Servers.Shadowsocks;
using Netch.Utils;
using Serilog;
using static Netch.Interops.Redirector;
@@ -115,7 +114,7 @@ namespace Netch.Controllers
var offset = portType == PortType.UDP ? UdpNameListOffset : 0;
if (server is Socks5 socks5)
if (server is Socks5Server socks5)
{
Dial(NameList.TYPE_TCPTYPE + offset, "Socks5");
Dial(NameList.TYPE_TCPHOST + offset, $"{await socks5.AutoResolveHostnameAsync()}:{socks5.Port}");
@@ -123,7 +122,7 @@ namespace Netch.Controllers
Dial(NameList.TYPE_TCPPASS + offset, socks5.Password ?? string.Empty);
Dial(NameList.TYPE_TCPMETH + offset, string.Empty);
}
else if (server is Shadowsocks shadowsocks && !shadowsocks.HasPlugin() && _rdrConfig.RedirectorSS)
else if (server is ShadowsocksServer shadowsocks && !shadowsocks.HasPlugin() && _rdrConfig.RedirectorSS)
{
Dial(NameList.TYPE_TCPTYPE + offset, "Shadowsocks");
Dial(NameList.TYPE_TCPHOST + offset, $"{await shadowsocks.AutoResolveHostnameAsync()}:{shadowsocks.Port}");

View File

@@ -39,7 +39,7 @@ namespace Netch.Controllers
var outboundNetworkInterface = NetworkInterfaceUtils.GetBest();
var argument = new StringBuilder($@"-i \Device\NPF_{outboundNetworkInterface.Id}");
if (_server is Socks5 socks5 && !socks5.Auth())
if (_server is Socks5Server socks5 && !socks5.Auth())
argument.Append($" --destination {await socks5.AutoResolveHostnameAsync()}:{socks5.Port}");
else
Trace.Assert(false);

View File

@@ -35,7 +35,7 @@ namespace Netch.Controllers
_mode = mode;
_tunConfig = Global.Settings.TUNTAP;
if (server is Socks5Bridge socks5Bridge)
if (server is Socks5LocalServer socks5Bridge)
_serverRemoteAddress = await DnsUtils.LookupAsync(socks5Bridge.RemoteHostname);
if (_serverRemoteAddress != null && IPAddress.IsLoopback(_serverRemoteAddress))
@@ -56,7 +56,7 @@ namespace Netch.Controllers
Dial(NameList.TYPE_UDPREST, "");
Dial(NameList.TYPE_UDPTYPE, "Socks5");
if (server is Socks5 socks5)
if (server is Socks5Server socks5)
{
Dial(NameList.TYPE_TCPHOST, $"{await socks5.AutoResolveHostnameAsync()}:{socks5.Port}");

View File

@@ -1,7 +1,6 @@
using Netch.Properties;
using Netch.Utils;
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace Netch.Forms

View File

@@ -10,7 +10,7 @@ namespace Netch.Interfaces
public string? LocalAddress { get; set; }
public Task<Socks5> StartAsync(Server s);
public Task<Socks5Server> StartAsync(Server s);
}
public static class ServerControllerExtension

View File

@@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections.Generic;
namespace Netch.Models.GitHubRelease
{

View File

@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Net.Sockets;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

View File

@@ -5,11 +5,11 @@ using Netch.Controllers;
using Netch.Interfaces;
using Netch.Models;
namespace Netch.Servers.Shadowsocks
namespace Netch.Servers
{
public class SSController : Guard, IServerController
public class ShadowsocksController : Guard, IServerController
{
public SSController() : base("Shadowsocks.exe")
public ShadowsocksController() : base("Shadowsocks.exe")
{
}
@@ -23,9 +23,9 @@ namespace Netch.Servers.Shadowsocks
public string? LocalAddress { get; set; }
public async Task<Socks5> StartAsync(Server s)
public async Task<Socks5Server> StartAsync(Server s)
{
var server = (Shadowsocks)s;
var server = (ShadowsocksServer)s;
var arguments = new object?[]
{
@@ -41,7 +41,7 @@ namespace Netch.Servers.Shadowsocks
};
await StartGuardAsync(Arguments.Format(arguments));
return new Socks5Bridge(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
return new Socks5LocalServer(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
}
}
}

View File

@@ -1,13 +1,13 @@
using Netch.Forms;
using Netch.Utils;
namespace Netch.Servers.Shadowsocks.Form
namespace Netch.Servers
{
public class ShadowsocksForm : ServerForm
{
public ShadowsocksForm(Shadowsocks? server = default)
public ShadowsocksForm(ShadowsocksServer? server = default)
{
server ??= new Shadowsocks();
server ??= new ShadowsocksServer();
Server = server;
CreateTextBox("Password", "Password", s => !s.IsNullOrWhiteSpace(), s => server.Password = s, server.Password);
CreateComboBox("EncryptMethod", "Encrypt Method", SSGlobal.EncryptMethods, s => server.EncryptMethod = s, server.EncryptMethod);

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic;
using Netch.Models;
namespace Netch.Servers.Shadowsocks
namespace Netch.Servers
{
public class Shadowsocks : Server
public class ShadowsocksServer : Server
{
public override string Type { get; } = "SS";
public override string MaskedData()

View File

@@ -6,14 +6,12 @@ using System.Text.RegularExpressions;
using System.Web;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Shadowsocks.Form;
using Netch.Servers.Shadowsocks.Models.SSD;
using Netch.Utils;
using Serilog;
namespace Netch.Servers.Shadowsocks
namespace Netch.Servers
{
public class SSUtil : IServerUtil
public class ShadowsocksUtil : IServerUtil
{
public ushort Priority { get; } = 1;
@@ -25,11 +23,11 @@ namespace Netch.Servers.Shadowsocks
public string[] UriScheme { get; } = { "ss", "ssd" };
public Type ServerType { get; } = typeof(Shadowsocks);
public Type ServerType { get; } = typeof(ShadowsocksServer);
public void Edit(Server s)
{
new ShadowsocksForm((Shadowsocks)s).ShowDialog();
new ShadowsocksForm((ShadowsocksServer)s).ShowDialog();
}
public void Create()
@@ -39,7 +37,7 @@ namespace Netch.Servers.Shadowsocks
public string GetShareLink(Server s)
{
var server = (Shadowsocks)s;
var server = (ShadowsocksServer)s;
// ss://method:password@server:port#Remark
return "ss://" + ShareLink.URLSafeBase64Encode($"{server.EncryptMethod}:{server.Password}@{server.Hostname}:{server.Port}") + "#" +
HttpUtility.UrlEncode(server.Remark);
@@ -47,7 +45,7 @@ namespace Netch.Servers.Shadowsocks
public IServerController GetController()
{
return new SSController();
return new ShadowsocksController();
}
public IEnumerable<Server> ParseUri(string text)
@@ -63,7 +61,7 @@ namespace Netch.Servers.Shadowsocks
public bool CheckServer(Server s)
{
var server = (Shadowsocks)s;
var server = (ShadowsocksServer)s;
if (!SSGlobal.EncryptMethods.Contains(server.EncryptMethod))
{
Log.Warning("不支持的 SS 加密方式:{Method}", server.EncryptMethod);
@@ -75,9 +73,9 @@ namespace Netch.Servers.Shadowsocks
public IEnumerable<Server> ParseSsdUri(string s)
{
var json = JsonSerializer.Deserialize<Main>(ShareLink.URLSafeBase64Decode(s.Substring(6)))!;
var json = JsonSerializer.Deserialize<SSDJObject>(ShareLink.URLSafeBase64Decode(s.Substring(6)))!;
return json.servers.Select(server => new Shadowsocks
return json.servers.Select(server => new ShadowsocksServer
{
Remark = server.remarks,
Hostname = server.server,
@@ -92,9 +90,9 @@ namespace Netch.Servers.Shadowsocks
.Where(CheckServer);
}
public Shadowsocks ParseSsUri(string text)
public ShadowsocksServer ParseSsUri(string text)
{
var data = new Shadowsocks();
var data = new ShadowsocksServer();
text = text.Replace("/?", "?");
if (text.Contains("#"))

View File

@@ -1,9 +1,9 @@
#nullable disable
using System.Collections.Generic;
namespace Netch.Servers.Shadowsocks.Models.SSD
namespace Netch.Servers
{
public class Main
public class SSDJObject
{
/// <summary>
/// 机场名
@@ -38,6 +38,6 @@ namespace Netch.Servers.Shadowsocks.Models.SSD
/// <summary>
/// 服务器数组
/// </summary>
public List<SSDServer> servers;
public List<SSDServerJObject> servers;
}
}

View File

@@ -1,7 +1,7 @@
#nullable disable
namespace Netch.Servers.Shadowsocks.Models.SSD
namespace Netch.Servers
{
public class SSDServer
public class SSDServerJObject
{
/// <summary>
/// 加密方式

View File

@@ -1,6 +1,10 @@
#nullable disable
namespace Netch.Servers.Shadowsocks.Models
namespace Netch.Servers
{
/// <summary>
/// Import Shadowsocks Server from Json Configuration
/// <see cref="Utils.ShareLink.ParseText"/>
/// </summary>
public class ShadowsocksConfig
{
public string server { get; set; }

View File

@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
@@ -6,11 +5,11 @@ using Netch.Controllers;
using Netch.Interfaces;
using Netch.Models;
namespace Netch.Servers.ShadowsocksR
namespace Netch.Servers
{
public class SSRController : Guard, IServerController
public class ShadowsocksRController : Guard, IServerController
{
public SSRController() : base("ShadowsocksR.exe")
public ShadowsocksRController() : base("ShadowsocksR.exe")
{
}
@@ -24,9 +23,9 @@ namespace Netch.Servers.ShadowsocksR
public string? LocalAddress { get; set; }
public async Task<Socks5> StartAsync(Server s)
public async Task<Socks5Server> StartAsync(Server s)
{
var server = (ShadowsocksR)s;
var server = (ShadowsocksRServer)s;
var arguments = new object?[]
{
@@ -45,7 +44,7 @@ namespace Netch.Servers.ShadowsocksR
};
await StartGuardAsync(Arguments.Format(arguments));
return new Socks5Bridge(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
return new Socks5LocalServer(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
}
}
}

View File

@@ -1,13 +1,13 @@
using Netch.Forms;
using Netch.Utils;
namespace Netch.Servers.ShadowsocksR.Form
namespace Netch.Servers
{
public class ShadowsocksRForm : ServerForm
{
public ShadowsocksRForm(ShadowsocksR? server = default)
public ShadowsocksRForm(ShadowsocksRServer? server = default)
{
server ??= new ShadowsocksR();
server ??= new ShadowsocksRServer();
Server = server;
CreateTextBox("Password", "Password", s => !s.IsNullOrWhiteSpace(), s => server.Password = s, server.Password);
CreateComboBox("EncryptMethod", "Encrypt Method", SSRGlobal.EncryptMethods, s => server.EncryptMethod = s, server.EncryptMethod);

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic;
using Netch.Models;
namespace Netch.Servers.ShadowsocksR
namespace Netch.Servers
{
public class ShadowsocksR : Server
public class ShadowsocksRServer : Server
{
public override string Type { get; } = "SSR";
public override string MaskedData()

View File

@@ -3,14 +3,12 @@ using System.Collections.Generic;
using System.Text.RegularExpressions;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Shadowsocks;
using Netch.Servers.ShadowsocksR.Form;
using Netch.Utils;
using Serilog;
namespace Netch.Servers.ShadowsocksR
namespace Netch.Servers
{
public class SSRUtil : IServerUtil
public class ShadowsocksRUtil : IServerUtil
{
public ushort Priority { get; } = 1;
@@ -22,11 +20,11 @@ namespace Netch.Servers.ShadowsocksR
public string[] UriScheme { get; } = { "ssr" };
public Type ServerType { get; } = typeof(ShadowsocksR);
public Type ServerType { get; } = typeof(ShadowsocksRServer);
public void Edit(Server s)
{
new ShadowsocksRForm((ShadowsocksR)s).ShowDialog();
new ShadowsocksRForm((ShadowsocksRServer)s).ShowDialog();
}
public void Create()
@@ -36,7 +34,7 @@ namespace Netch.Servers.ShadowsocksR
public string GetShareLink(Server s)
{
var server = (ShadowsocksR)s;
var server = (ShadowsocksRServer)s;
// https://github.com/shadowsocksr-backup/shadowsocks-rss/wiki/SSR-QRcode-scheme
// ssr://base64(host:port:protocol:method:obfs:base64pass/?obfsparam=base64param&protoparam=base64param&remarks=base64remarks&group=base64group&udpport=0&uot=0)
@@ -50,7 +48,7 @@ namespace Netch.Servers.ShadowsocksR
public IServerController GetController()
{
return new SSRController();
return new ShadowsocksRController();
}
/// <summary>
@@ -113,7 +111,7 @@ namespace Netch.Servers.ShadowsocksR
if (SSGlobal.EncryptMethods.Contains(method) && protocol == "origin" && obfs == "plain")
return new[]
{
new Shadowsocks.Shadowsocks
new ShadowsocksServer
{
Hostname = serverAddr,
Port = serverPort,
@@ -126,7 +124,7 @@ namespace Netch.Servers.ShadowsocksR
return new[]
{
new ShadowsocksR
new ShadowsocksRServer
{
Hostname = serverAddr,
Port = serverPort,
@@ -144,7 +142,7 @@ namespace Netch.Servers.ShadowsocksR
public bool CheckServer(Server s)
{
var server = (ShadowsocksR)s;
var server = (ShadowsocksRServer)s;
if (!SSRGlobal.EncryptMethods.Contains(server.EncryptMethod))
{
Log.Error("不支持的 SSR 加密方式:{Method}", server.EncryptMethod);

View File

@@ -4,13 +4,13 @@ using Netch.Models;
namespace Netch.Servers
{
public class S5Controller : V2rayController
public class Socks5Controller : V2rayController
{
public override string Name { get; } = "Socks5";
public override async Task<Socks5> StartAsync(Server s)
public override async Task<Socks5Server> StartAsync(Server s)
{
var server = (Socks5)s;
var server = (Socks5Server)s;
if (!server.Auth())
throw new ArgumentException();

View File

@@ -4,9 +4,9 @@ namespace Netch.Servers
{
public class Socks5Form : ServerForm
{
public Socks5Form(Socks5? server = default)
public Socks5Form(Socks5Server? server = default)
{
server ??= new Socks5();
server ??= new Socks5Server();
Server = server;
CreateTextBox("Username", "Username", s => true, s => server.Username = s, server.Username);
CreateTextBox("Password", "Password", s => true, s => server.Password = s, server.Password);

View File

@@ -5,10 +5,12 @@
/// Encrypted proxy client's local socks5 server
/// (<see cref="RemoteHostname"/> property is used for saving remote address/hostname for special use)
/// </summary>
public class Socks5Bridge : Socks5
public class Socks5LocalServer : Socks5Server
{
public Socks5Bridge(string hostname, ushort port, string remoteHostname) : base(hostname, port)
public Socks5LocalServer(string hostname, ushort port, string remoteHostname)
{
Hostname = hostname;
Port = port;
RemoteHostname = remoteHostname;
}

View File

@@ -2,7 +2,7 @@
namespace Netch.Servers
{
public class Socks5 : Server
public class Socks5Server : Server
{
/// <summary>
/// 密码
@@ -21,17 +21,17 @@ namespace Netch.Servers
return $"Auth: {Auth()}";
}
public Socks5()
public Socks5Server()
{
}
public Socks5(string hostname, ushort port)
public Socks5Server(string hostname, ushort port)
{
Hostname = hostname;
Port = port;
}
public Socks5(string hostname, ushort port, string username, string password) : this(hostname, port)
public Socks5Server(string hostname, ushort port, string username, string password) : this(hostname, port)
{
Username = username;
Password = password;

View File

@@ -6,7 +6,7 @@ using Netch.Models;
namespace Netch.Servers
{
public class S5Util : IServerUtil
public class Socks5Util : IServerUtil
{
public ushort Priority { get; } = 0;
@@ -18,11 +18,11 @@ namespace Netch.Servers
public string[] UriScheme { get; } = { };
public Type ServerType { get; } = typeof(Socks5);
public Type ServerType { get; } = typeof(Socks5Server);
public void Edit(Server s)
{
new Socks5Form((Socks5)s).ShowDialog();
new Socks5Form((Socks5Server)s).ShowDialog();
}
public void Create()
@@ -32,7 +32,7 @@ namespace Netch.Servers
public string GetShareLink(Server s)
{
var server = (Socks5)s;
var server = (Socks5Server)s;
// https://t.me/socks?server=1.1.1.1&port=443
return $"https://t.me/socks?server={server.Hostname}&port={server.Port}" +
$"{(!string.IsNullOrWhiteSpace(server.Username) ? $"&user={server.Username}" : "")}" +
@@ -41,7 +41,7 @@ namespace Netch.Servers
public IServerController GetController()
{
return new S5Controller();
return new Socks5Controller();
}
public IEnumerable<Server> ParseUri(string text)
@@ -55,7 +55,7 @@ namespace Netch.Servers
if (!dict.ContainsKey("server") || !dict.ContainsKey("port"))
throw new FormatException();
var data = new Socks5
var data = new Socks5Server
{
Hostname = dict["server"],
Port = ushort.Parse(dict["port"])

View File

@@ -1,7 +1,7 @@
#nullable disable
using System.Collections.Generic;
namespace Netch.Servers.Models
namespace Netch.Servers
{
public class TrojanConfig
{

View File

@@ -6,7 +6,6 @@ using System.Threading.Tasks;
using Netch.Controllers;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Models;
using Netch.Utils;
namespace Netch.Servers
@@ -27,9 +26,9 @@ namespace Netch.Servers
public string? LocalAddress { get; set; }
public async Task<Socks5> StartAsync(Server s)
public async Task<Socks5Server> StartAsync(Server s)
{
var server = (Trojan)s;
var server = (TrojanServer)s;
var trojanConfig = new TrojanConfig
{
local_addr = this.LocalAddress(),
@@ -52,7 +51,7 @@ namespace Netch.Servers
}
await StartGuardAsync("-c ..\\data\\last.json");
return new Socks5Bridge(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
return new Socks5LocalServer(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname);
}
}
}

View File

@@ -1,12 +1,12 @@
using Netch.Forms;
namespace Netch.Servers.Form
namespace Netch.Servers
{
public class TrojanForm : ServerForm
{
public TrojanForm(Trojan? server = default)
public TrojanForm(TrojanServer? server = default)
{
server ??= new Trojan();
server ??= new TrojanServer();
Server = server;
CreateTextBox("Password", "Password", s => true, s => server.Password = s, server.Password);
CreateTextBox("Host", "Host", s => true, s => server.Host = s, server.Host);

View File

@@ -2,7 +2,7 @@ using Netch.Models;
namespace Netch.Servers
{
public class Trojan : Server
public class TrojanServer : Server
{
public override string Type { get; } = "Trojan";
public override string MaskedData()

View File

@@ -4,7 +4,6 @@ using System.Text.RegularExpressions;
using System.Web;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Form;
namespace Netch.Servers
{
@@ -20,11 +19,11 @@ namespace Netch.Servers
public string[] UriScheme { get; } = { "trojan" };
public Type ServerType { get; } = typeof(Trojan);
public Type ServerType { get; } = typeof(TrojanServer);
public void Edit(Server s)
{
new TrojanForm((Trojan)s).ShowDialog();
new TrojanForm((TrojanServer)s).ShowDialog();
}
public void Create()
@@ -34,7 +33,7 @@ namespace Netch.Servers
public string GetShareLink(Server s)
{
var server = (Trojan)s;
var server = (TrojanServer)s;
return $"trojan://{HttpUtility.UrlEncode(server.Password)}@{server.Hostname}:{server.Port}#{server.Remark}";
}
@@ -45,7 +44,7 @@ namespace Netch.Servers
public IEnumerable<Server> ParseUri(string text)
{
var data = new Trojan();
var data = new TrojanServer();
text = text.Replace("/?", "?");
if (text.Contains("#"))

View File

@@ -1,9 +1,6 @@
namespace Netch.Servers.Models
namespace Netch.Servers
{
/// <summary>
/// 使用 v2rayN 定义的 VMess 链接格式
/// </summary>
public class V2rayNSharing
public class V2rayNJObject
{
/// <summary>
/// 链接版本

View File

@@ -1,7 +1,7 @@
#nullable disable
// ReSharper disable InconsistentNaming
namespace Netch.Servers.V2ray.Models
namespace Netch.Servers
{
public struct V2rayConfig
{

View File

@@ -1,12 +1,10 @@
using System.Threading.Tasks;
using Netch.Models;
using Netch.Servers.V2ray.Models;
using Netch.Utils;
using V2rayConfig = Netch.Servers.V2ray.Models.V2rayConfig;
#pragma warning disable VSTHRD200
namespace Netch.Servers.Utils
namespace Netch.Servers
{
public static class V2rayConfigUtils
{
@@ -44,7 +42,7 @@ namespace Netch.Servers.Utils
switch (server)
{
case Socks5 socks5:
case Socks5Server socks5:
{
outbound.protocol = "socks";
outbound.settings.servers = new object[]
@@ -71,7 +69,7 @@ namespace Netch.Servers.Utils
outbound.mux.concurrency = -1;
break;
}
case VLESS vless:
case VLESSServer vless:
{
outbound.protocol = "vless";
outbound.settings.vnext = new[]
@@ -107,7 +105,7 @@ namespace Netch.Servers.Utils
break;
}
case VMess vmess:
case VMessServer vmess:
{
outbound.protocol = "vmess";
outbound.settings.vnext = new[]
@@ -139,7 +137,7 @@ namespace Netch.Servers.Utils
return outbound;
}
private static StreamSettings boundStreamSettings(VMess server)
private static StreamSettings boundStreamSettings(VMessServer server)
{
// https://xtls.github.io/config/transports

View File

@@ -6,7 +6,6 @@ using System.Threading.Tasks;
using Netch.Controllers;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Utils;
namespace Netch.Servers
{
@@ -28,7 +27,7 @@ namespace Netch.Servers
public string? LocalAddress { get; set; }
public virtual async Task<Socks5> StartAsync(Server s)
public virtual async Task<Socks5Server> StartAsync(Server s)
{
await using (var fileStream = new FileStream(Constants.TempConfig, FileMode.Create, FileAccess.Write, FileShare.Read))
{
@@ -36,7 +35,7 @@ namespace Netch.Servers
}
await StartGuardAsync("-config ..\\data\\last.json");
return new Socks5Bridge(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), s.Hostname);
return new Socks5LocalServer(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), s.Hostname);
}
}
}

View File

@@ -13,7 +13,7 @@ namespace Netch.Servers
public static IEnumerable<Server> ParseVUri(string text)
{
var scheme = ShareLink.GetUriScheme(text).ToLower();
var server = scheme switch { "vmess" => new VMess(), "vless" => new VLESS(), _ => throw new ArgumentOutOfRangeException() };
var server = scheme switch { "vmess" => new VMessServer(), "vless" => new VLESSServer(), _ => throw new ArgumentOutOfRangeException() };
if (text.Contains("#"))
{
server.Remark = Uri.UnescapeDataString(text.Split('#')[1]);
@@ -58,7 +58,7 @@ namespace Netch.Servers
{
server.ServerName = parameter.Get("sni") ?? "";
if (server.TLSSecureType == "xtls")
((VLESS)server).Flow = parameter.Get("flow") ?? "";
((VLESSServer)server).Flow = parameter.Get("flow") ?? "";
}
}
@@ -77,7 +77,7 @@ namespace Netch.Servers
public static string GetVShareLink(Server s, string scheme = "vmess")
{
// https://github.com/XTLS/Xray-core/issues/91
var server = (VMess)s;
var server = (VMessServer)s;
var parameter = new Dictionary<string, string>();
// protocol-specific fields
parameter.Add("type", server.TransferProtocol);
@@ -138,7 +138,7 @@ namespace Netch.Servers
if (server.TLSSecureType == "xtls")
{
var flow = ((VLESS)server).Flow;
var flow = ((VLESSServer)server).Flow;
if (!flow.IsNullOrWhiteSpace())
parameter.Add("flow", flow!.Replace("-udp443", ""));
}

View File

@@ -1,13 +1,13 @@
using System.Collections.Generic;
using Netch.Forms;
namespace Netch.Servers.VLESSForm
namespace Netch.Servers
{
internal class VLESSForm : ServerForm
{
public VLESSForm(VLESS? server = default)
public VLESSForm(VLESSServer? server = default)
{
server ??= new VLESS();
server ??= new VLESSServer();
Server = server;
CreateTextBox("Sni", "ServerName(Sni)", s => true, s => server.ServerName = s, server.ServerName);
CreateTextBox("UUID", "UUID", s => true, s => server.UserID = s, server.UserID);

View File

@@ -2,7 +2,7 @@ using System.Collections.Generic;
namespace Netch.Servers
{
public class VLESS : VMess
public class VLESSServer : VMessServer
{
public override string Type { get; } = "VLESS";

View File

@@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers;
namespace Netch.Servers
{
@@ -18,16 +17,16 @@ namespace Netch.Servers
public string[] UriScheme { get; } = { "vless" };
public Type ServerType { get; } = typeof(VLESS);
public Type ServerType { get; } = typeof(VLESSServer);
public void Edit(Server s)
{
new VLESSForm.VLESSForm((VLESS)s).ShowDialog();
new VLESSForm((VLESSServer)s).ShowDialog();
}
public void Create()
{
new VLESSForm.VLESSForm().ShowDialog();
new VLESSForm().ShowDialog();
}
public string GetShareLink(Server s)

View File

@@ -1,13 +1,13 @@
using System.Collections.Generic;
using Netch.Forms;
namespace Netch.Servers.Form
namespace Netch.Servers
{
public class VMessForm : ServerForm
{
public VMessForm(VMess? server = default)
public VMessForm(VMessServer? server = default)
{
server ??= new VMess();
server ??= new VMessServer();
Server = server;
CreateTextBox("Sni", "ServerName(Sni)", s => true, s => server.ServerName = s, server.ServerName);
CreateTextBox("UserId", "User ID", s => true, s => server.UserID = s, server.UserID);

View File

@@ -3,7 +3,7 @@ using Netch.Models;
namespace Netch.Servers
{
public class VMess : Server
public class VMessServer : Server
{
private string _tlsSecureType = VMessGlobal.TLSSecure[0];

View File

@@ -5,8 +5,6 @@ using System.Text.Json;
using System.Text.Json.Serialization;
using Netch.Interfaces;
using Netch.Models;
using Netch.Servers.Form;
using Netch.Servers.Models;
using Netch.Utils;
namespace Netch.Servers
@@ -23,11 +21,11 @@ namespace Netch.Servers
public string[] UriScheme { get; } = { "vmess" };
public Type ServerType { get; } = typeof(VMess);
public Type ServerType { get; } = typeof(VMessServer);
public void Edit(Server s)
{
new VMessForm((VMess)s).ShowDialog();
new VMessForm((VMessServer)s).ShowDialog();
}
public void Create()
@@ -39,9 +37,9 @@ namespace Netch.Servers
{
if (Global.Settings.V2RayConfig.V2rayNShareLink)
{
var server = (VMess)s;
var server = (VMessServer)s;
var vmessJson = JsonSerializer.Serialize(new V2rayNSharing
var vmessJson = JsonSerializer.Serialize(new V2rayNJObject
{
v = 2,
ps = server.Remark,
@@ -75,7 +73,7 @@ namespace Netch.Servers
public IEnumerable<Server> ParseUri(string text)
{
var data = new VMess();
var data = new VMessServer();
string s;
try
@@ -87,7 +85,7 @@ namespace Netch.Servers
return V2rayUtils.ParseVUri(text);
}
V2rayNSharing vmess = JsonSerializer.Deserialize<V2rayNSharing>(s,
V2rayNJObject vmess = JsonSerializer.Deserialize<V2rayNJObject>(s,
new JsonSerializerOptions { NumberHandling = JsonNumberHandling.WriteAsString | JsonNumberHandling.AllowReadingFromString })!;
data.Remark = vmess.ps;

View File

@@ -8,7 +8,6 @@ using Microsoft.Diagnostics.Tracing.Session;
using Microsoft.VisualStudio.Threading;
using Netch.Controllers;
using Netch.Enums;
using Netch.Models;
using Serilog;
namespace Netch.Utils

View File

@@ -5,8 +5,7 @@ using System.Linq;
using System.Text;
using System.Text.Json;
using Netch.Models;
using Netch.Servers.Shadowsocks;
using Netch.Servers.Shadowsocks.Models;
using Netch.Servers;
using Serilog;
namespace Netch.Utils
@@ -33,7 +32,7 @@ namespace Netch.Utils
try
{
list.AddRange(JsonSerializer.Deserialize<List<ShadowsocksConfig>>(text)!.Select(server => new Shadowsocks
list.AddRange(JsonSerializer.Deserialize<List<ShadowsocksConfig>>(text)!.Select(server => new ShadowsocksServer
{
Hostname = server.server,
Port = server.server_port,