using Shadowsocks.Models; using Shadowsocks.Net; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace Shadowsocks.CLI.Client { public class Legacy { private TCPListener? _tcpListener; private UDPListener? _udpListener; public void Start(string listenSocks, string serverAddress, int serverPort, string method, string password, string? plugin, string? pluginOpts, string? pluginArgs) { var localEP = IPEndPoint.Parse(listenSocks); var server = new Server() { Host = serverAddress, Port = serverPort, Method = method, Password = password, Plugin = plugin, PluginOpts = pluginOpts, }; if (!string.IsNullOrEmpty(plugin) && !string.IsNullOrEmpty(pluginArgs)) { var processStartInfo = new ProcessStartInfo(plugin, pluginArgs); server.PluginArgs = processStartInfo.ArgumentList.ToList(); } var tcpRelay = new TCPRelay(server); _tcpListener = new TCPListener(localEP, new List() { tcpRelay, }); _tcpListener.Start(); var udpRelay = new UDPRelay(server); _udpListener = new UDPListener(localEP, new List() { udpRelay, }); _udpListener.Start(); } public void Stop() { _tcpListener?.Stop(); _udpListener?.Stop(); } } }