diff --git a/shells/version.txt b/shells/version.txt index 7909d9bf..d9b3b41e 100644 --- a/shells/version.txt +++ b/shells/version.txt @@ -1,5 +1,5 @@ v1.9.6 -2025-11-25 09:52:47 +2025-11-25 17:11:30 1. 一些累计更新,一些BUG修复 2. 优化客户端数据同步,减少服务器流量 3. 去除cdkey,改为发电解锁中继速度 diff --git a/src/linker.messenger.channel/Channel.cs b/src/linker.messenger.channel/Channel.cs index db60271f..11f6867b 100644 --- a/src/linker.messenger.channel/Channel.cs +++ b/src/linker.messenger.channel/Channel.cs @@ -2,7 +2,6 @@ using linker.libs.extends; using linker.libs.timer; using linker.messenger.pcp; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.tunnel; using linker.tunnel.connection; @@ -73,17 +72,15 @@ namespace linker.messenger.channel protected virtual string TransactionId { get; } private readonly TunnelTransfer tunnelTransfer; - private readonly RelayClientTransfer relayTransfer; private readonly PcpTransfer pcpTransfer; private readonly SignInClientTransfer signInClientTransfer; private readonly ISignInClientStore signInClientStore; private readonly ChannelConnectionCaching channelConnectionCaching; - public Channel(TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + public Channel(TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, ISignInClientStore signInClientStore, ChannelConnectionCaching channelConnectionCaching) { this.tunnelTransfer = tunnelTransfer; - this.relayTransfer = relayTransfer; this.pcpTransfer = pcpTransfer; this.signInClientTransfer = signInClientTransfer; this.signInClientStore = signInClientStore; @@ -91,8 +88,6 @@ namespace linker.messenger.channel //监听打洞成功 tunnelTransfer.SetConnectedCallback(TransactionId, OnConnected); - //监听中继成功 - relayTransfer.SetConnectedCallback(TransactionId, OnConnected); //监听节点中继成功回调 pcpTransfer.SetConnectedCallback(TransactionId, OnConnected); @@ -167,7 +162,6 @@ namespace linker.messenger.channel { channelConnectionCaching.Add(connection); } - } catch (Exception) { @@ -181,55 +175,29 @@ namespace linker.messenger.channel } private async Task RelayAndP2P(string machineId, TunnelProtocolType denyProtocols) { - //中继 - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} relay to {machineId}"); - ITunnelConnection connection = await relayTransfer.ConnectAsync(signInClientStore.Id, machineId, TransactionId, denyProtocols).ConfigureAwait(false); - if (connection != null) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} relay success,{connection.ToString()}"); - } - + ITunnelConnection connection = null; //正在后台打洞 if (tunnelTransfer.IsBackground(machineId, TransactionId)) { return connection; } + //隧道连接 + connection = await tunnelTransfer.ConnectAsync(machineId, TransactionId, denyProtocols).ConfigureAwait(false); if (connection != null) { - //后台打洞 - tunnelTransfer.StartBackground(machineId, TransactionId, denyProtocols, () => - { - return channelConnectionCaching.TryGetValue(machineId, TransactionId, out ITunnelConnection connection) && connection.Connected && connection.Type == TunnelType.P2P; - }, async (_connection) => - { - //后台打洞失败,pcp - if (_connection == null) - { - await pcpTransfer.ConnectAsync(machineId, TransactionId, denyProtocols).ConfigureAwait(false); - } - }, 3, 10000); + return connection; } - else + + //后台打洞 + tunnelTransfer.StartBackground(machineId, TransactionId, denyProtocols, () => { - //打洞 - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} p2p to {machineId}"); - connection = await tunnelTransfer.ConnectAsync(machineId, TransactionId, denyProtocols).ConfigureAwait(false); - if (connection != null) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} p2p success,{connection.ToString()}"); - } - if (connection == null) - { - //pcp - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} pcp to {machineId}"); - connection = await pcpTransfer.ConnectAsync(machineId, TransactionId, denyProtocols).ConfigureAwait(false); - } - if (connection != null) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"{TransactionId} pcp success,{connection.ToString()}"); - } - } + return channelConnectionCaching.TryGetValue(machineId, TransactionId, out ITunnelConnection connection) && connection.Connected; + }, async (_connection) => + { + await Task.CompletedTask; + }, 3, 10000); + return connection; } diff --git a/src/linker.messenger.flow/FlowForward.cs b/src/linker.messenger.flow/FlowForward.cs index 2aaf5f7d..1e61d0b7 100644 --- a/src/linker.messenger.flow/FlowForward.cs +++ b/src/linker.messenger.flow/FlowForward.cs @@ -4,7 +4,6 @@ using linker.libs.timer; using linker.messenger.channel; using linker.messenger.forward.proxy; using linker.messenger.pcp; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.tunnel; using linker.tunnel.connection; @@ -18,9 +17,9 @@ namespace linker.messenger.flow { private readonly FlowForward forwardFlow; private readonly FlowTunnel flowTunnel; - public FlowForwardProxy(FlowForward forwardFlow, FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + public FlowForwardProxy(FlowForward forwardFlow, FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, ChannelConnectionCaching channelConnectionCaching) - : base(signInClientStore, tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, channelConnectionCaching) + : base(signInClientStore, tunnelTransfer, pcpTransfer, signInClientTransfer, channelConnectionCaching) { this.forwardFlow = forwardFlow; this.flowTunnel = flowTunnel; diff --git a/src/linker.messenger.flow/FlowSocks5.cs b/src/linker.messenger.flow/FlowSocks5.cs index 69b10882..de153d4a 100644 --- a/src/linker.messenger.flow/FlowSocks5.cs +++ b/src/linker.messenger.flow/FlowSocks5.cs @@ -3,7 +3,6 @@ using linker.libs.extends; using linker.libs.timer; using linker.messenger.channel; using linker.messenger.pcp; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.messenger.socks5; using linker.tunnel; @@ -19,9 +18,9 @@ namespace linker.messenger.flow private readonly FlowSocks5 flowSocks5; private readonly FlowTunnel flowTunnel; - public FlowSocks5Proxy(FlowSocks5 flowSocks5, FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + public FlowSocks5Proxy(FlowSocks5 flowSocks5, FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, Socks5CidrDecenterManager socks5CidrDecenterManager, ChannelConnectionCaching channelConnectionCaching) - : base(signInClientStore, tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, socks5CidrDecenterManager, channelConnectionCaching) + : base(signInClientStore, tunnelTransfer, pcpTransfer, signInClientTransfer, socks5CidrDecenterManager, channelConnectionCaching) { this.flowSocks5 = flowSocks5; this.flowTunnel = flowTunnel; diff --git a/src/linker.messenger.flow/FlowTunnel.cs b/src/linker.messenger.flow/FlowTunnel.cs index 137343c4..0608d86f 100644 --- a/src/linker.messenger.flow/FlowTunnel.cs +++ b/src/linker.messenger.flow/FlowTunnel.cs @@ -2,11 +2,9 @@ using linker.libs.extends; using linker.messenger.channel; using linker.messenger.pcp; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.messenger.tuntap; using linker.messenger.tuntap.cidr; -using linker.nat; using linker.tunnel; using linker.tunnel.connection; using System.Collections.Concurrent; @@ -18,11 +16,11 @@ namespace linker.messenger.flow { private readonly FlowTunnel flowTunnel; - public FlowTuntapProxy(FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + public FlowTuntapProxy(FlowTunnel flowTunnel, ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, TuntapConfigTransfer tuntapConfigTransfer, TuntapCidrConnectionManager tuntapCidrConnectionManager, TuntapCidrDecenterManager tuntapCidrDecenterManager, TuntapCidrMapfileManager tuntapCidrMapfileManager,TuntapDecenter tuntapDecenter, ChannelConnectionCaching channelConnectionCaching) - : base(signInClientStore, tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, + : base(signInClientStore, tunnelTransfer, pcpTransfer, signInClientTransfer, tuntapConfigTransfer, tuntapCidrConnectionManager, tuntapCidrDecenterManager, tuntapCidrMapfileManager, tuntapDecenter, channelConnectionCaching) { this.flowTunnel = flowTunnel; diff --git a/src/linker.messenger.forward/proxy/ForwardProxyChan.cs b/src/linker.messenger.forward/proxy/ForwardProxyChan.cs index 6cebf605..4f893e55 100644 --- a/src/linker.messenger.forward/proxy/ForwardProxyChan.cs +++ b/src/linker.messenger.forward/proxy/ForwardProxyChan.cs @@ -2,12 +2,10 @@ using linker.tunnel.connection; using System.Collections.Concurrent; using System.Net; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.messenger.channel; using linker.messenger.pcp; using linker.libs; -using System.Net.Sockets; namespace linker.messenger.forward.proxy { @@ -22,9 +20,9 @@ namespace linker.messenger.forward.proxy protected override string TransactionId => "forward"; - public ForwardProxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, - SignInClientTransfer signInClientTransfer, ChannelConnectionCaching channelConnectionCaching) - : base(tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) + public ForwardProxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, + SignInClientTransfer signInClientTransfer, ChannelConnectionCaching channelConnectionCaching) + : base(tunnelTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) { TaskUdp(); } @@ -107,7 +105,7 @@ namespace linker.messenger.forward.proxy Add(token.Connection.RemoteMachineId, token.IPEndPoint, token.ReadPacket.Length, 0); return true; } - private async Task SendToConnection(ITunnelConnection connection,ForwardReadPacket packet,IPEndPoint ep) + private async Task SendToConnection(ITunnelConnection connection, ForwardReadPacket packet, IPEndPoint ep) { if (connection == null) { diff --git a/src/linker.messenger.relay/Entry.cs b/src/linker.messenger.relay/Entry.cs index 08813e3d..43c42d50 100644 --- a/src/linker.messenger.relay/Entry.cs +++ b/src/linker.messenger.relay/Entry.cs @@ -3,8 +3,12 @@ using linker.messenger.relay.client; using linker.messenger.relay.messenger; using linker.messenger.relay.server; using linker.messenger.relay.server.validator; +using linker.messenger.relay.transport; using linker.messenger.relay.webapi; using linker.messenger.sync; +using linker.tunnel; +using linker.tunnel.transport; +using linker.tunnel.wanport; using Microsoft.Extensions.DependencyInjection; namespace linker.messenger.relay { @@ -12,7 +16,9 @@ namespace linker.messenger.relay { public static ServiceCollection AddRelayClient(this ServiceCollection serviceCollection) { - serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); @@ -25,11 +31,17 @@ namespace linker.messenger.relay } public static ServiceProvider UseRelayClient(this ServiceProvider serviceProvider) { + TunnelTransfer tunnelTransfer = serviceProvider.GetService(); + tunnelTransfer.AddTransport(serviceProvider.GetService()); + tunnelTransfer.AddProtocol(serviceProvider.GetService()); + + + IMessengerResolver messengerResolver = serviceProvider.GetService(); messengerResolver.AddMessenger(new List { serviceProvider.GetService() }); SyncTreansfer syncTreansfer = serviceProvider.GetService(); - syncTreansfer.AddSyncs(new List { serviceProvider.GetService() }); + syncTreansfer.AddSyncs(new List { serviceProvider.GetService() }); linker.messenger.api.IWebServer apiServer = serviceProvider.GetService(); apiServer.AddPlugins(new List { serviceProvider.GetService() }); diff --git a/src/linker.messenger.relay/client/IRelayClientStore.cs b/src/linker.messenger.relay/client/IRelayClientStore.cs index 90737799..eec19ad1 100644 --- a/src/linker.messenger.relay/client/IRelayClientStore.cs +++ b/src/linker.messenger.relay/client/IRelayClientStore.cs @@ -1,5 +1,4 @@ -using linker.messenger.relay.client.transport; -using linker.tunnel.connection; +using linker.tunnel.connection; namespace linker.messenger.relay.client { @@ -17,11 +16,6 @@ namespace linker.messenger.relay.client /// public TunnelProtocolType DefaultProtocol { get; } - /// - /// 服务器配置 - /// - public RelayServerInfo Server { get; } - /// /// 设置默认节点id /// @@ -32,11 +26,6 @@ namespace linker.messenger.relay.client /// /// public void SetDefaultProtocol(TunnelProtocolType protocol); - /// - /// 设置中继服务器 - /// - /// - public void SetServer(RelayServerInfo server); /// /// 提交 diff --git a/src/linker.messenger.relay/client/RelayApiController.cs b/src/linker.messenger.relay/client/RelayApiController.cs index b63a7f5c..3b6334dc 100644 --- a/src/linker.messenger.relay/client/RelayApiController.cs +++ b/src/linker.messenger.relay/client/RelayApiController.cs @@ -7,7 +7,6 @@ using linker.messenger.relay.messenger; using linker.messenger.relay.server; using linker.messenger.signin; using linker.messenger.sync; -using linker.tunnel; using linker.tunnel.connection; using System.Collections.Concurrent; @@ -19,7 +18,6 @@ namespace linker.messenger.relay.client public sealed class RelayApiController : IApiController { private readonly RelayClientTestTransfer relayTestTransfer; - private readonly RelayClientTransfer relayTransfer; private readonly IRelayClientStore relayClientStore; private readonly SignInClientState signInClientState; private readonly IMessengerSender messengerSender; @@ -27,11 +25,10 @@ namespace linker.messenger.relay.client private readonly ISignInClientStore signInClientStore; private readonly SyncTreansfer syncTreansfer; - public RelayApiController(RelayClientTestTransfer relayTestTransfer, RelayClientTransfer relayTransfer, IRelayClientStore relayClientStore, + public RelayApiController(RelayClientTestTransfer relayTestTransfer, IRelayClientStore relayClientStore, SignInClientState signInClientState, IMessengerSender messengerSender, ISerializer serializer, ISignInClientStore signInClientStore, SyncTreansfer syncTreansfer) { this.relayTestTransfer = relayTestTransfer; - this.relayTransfer = relayTransfer; this.relayClientStore = relayClientStore; this.signInClientState = signInClientState; this.messengerSender = messengerSender; @@ -40,13 +37,6 @@ namespace linker.messenger.relay.client this.syncTreansfer = syncTreansfer; } - [Access(AccessValue.Config)] - public bool SetServers(ApiControllerParamsInfo param) - { - RelayServerInfo info = param.Content.DeJson(); - relayClientStore.SetServer(info); - return true; - } public List Subscribe(ApiControllerParamsInfo param) { relayTestTransfer.Subscribe(); @@ -68,25 +58,6 @@ namespace linker.messenger.relay.client } } - /// - /// 正在操作列表 - /// - /// - /// - public RelayOperatingInfo Operating(ApiControllerParamsInfo param) - { - ulong hashCode = ulong.Parse(param.Content); - if (relayTransfer.OperatingVersion.Eq(hashCode, out ulong version) == false) - { - return new RelayOperatingInfo - { - List = relayTransfer.Operating, - HashCode = version - }; - } - return new RelayOperatingInfo { HashCode = version }; - } - /// /// 连接 /// @@ -99,9 +70,7 @@ namespace linker.messenger.relay.client { relayConnectInfo.Protocol = TunnelProtocolType.Tcp; } - //relayClientStore.SetDefaultNodeId(relayConnectInfo.NodeId); - //relayClientStore.SetDefaultProtocol(relayConnectInfo.Protocol); - _ = relayTransfer.ConnectAsync(relayConnectInfo.FromMachineId, relayConnectInfo.ToMachineId, relayConnectInfo.TransactionId, relayConnectInfo.NodeId, relayConnectInfo.Protocol); + //_ = relayTransfer.ConnectAsync(relayConnectInfo.FromMachineId, relayConnectInfo.ToMachineId, relayConnectInfo.TransactionId, relayConnectInfo.NodeId, relayConnectInfo.Protocol); return true; } diff --git a/src/linker.messenger.relay/client/RelayClientTestTransfer.cs b/src/linker.messenger.relay/client/RelayClientTestTransfer.cs index 638f277e..f0962490 100644 --- a/src/linker.messenger.relay/client/RelayClientTestTransfer.cs +++ b/src/linker.messenger.relay/client/RelayClientTestTransfer.cs @@ -1,8 +1,8 @@ using linker.libs; using linker.libs.timer; -using linker.messenger.relay.client.transport; using linker.messenger.relay.server; using linker.messenger.signin; +using linker.tunnel.transport; using System.Net; using System.Net.NetworkInformation; @@ -13,18 +13,16 @@ namespace linker.messenger.relay.client /// public sealed class RelayClientTestTransfer { - private readonly RelayClientTransfer relayTransfer; + private readonly TransportRelay transportRelay; private readonly SignInClientState signInClientState; - private readonly ISignInClientStore signInClientStore; private readonly IRelayClientStore relayClientStore; public List Nodes { get; private set; } = new List(); - public RelayClientTestTransfer(RelayClientTransfer relayTransfer, SignInClientState signInClientState, ISignInClientStore signInClientStore, IRelayClientStore relayClientStore) + public RelayClientTestTransfer(TransportRelay transportRelay, SignInClientState signInClientState, IRelayClientStore relayClientStore) { - this.relayTransfer = relayTransfer; + this.transportRelay = transportRelay; this.signInClientState = signInClientState; - this.signInClientStore = signInClientStore; this.relayClientStore = relayClientStore; TestTask(); @@ -40,20 +38,16 @@ namespace linker.messenger.relay.client { try { - IRelayClientTransport transport = relayTransfer.Transports.FirstOrDefault(d => d.Type == relayClientStore.Server.RelayType); - if (transport != null) + Nodes = await transportRelay.RelayTestAsync().ConfigureAwait(false); + var tasks = Nodes.Select(async (c) => { - Nodes = await transport.RelayTestAsync().ConfigureAwait(false); - var tasks = Nodes.Select(async (c) => - { - c.EndPoint = c.EndPoint == null || c.EndPoint.Address.Equals(IPAddress.Any) ? signInClientState.Connection.Address : c.EndPoint; + c.EndPoint = c.EndPoint == null || c.EndPoint.Address.Equals(IPAddress.Any) ? signInClientState.Connection.Address : c.EndPoint; - using Ping ping = new Ping(); - var resp = await ping.SendPingAsync(c.EndPoint.Address, 1000); - c.Delay = resp.Status == IPStatus.Success ? (int)resp.RoundtripTime : -1; - }); - await Task.WhenAll(tasks).ConfigureAwait(false); - } + using Ping ping = new Ping(); + var resp = await ping.SendPingAsync(c.EndPoint.Address, 1000); + c.Delay = resp.Status == IPStatus.Success ? (int)resp.RoundtripTime : -1; + }); + await Task.WhenAll(tasks).ConfigureAwait(false); } catch (Exception) { diff --git a/src/linker.messenger.relay/client/RelayClientTransfer.cs b/src/linker.messenger.relay/client/RelayClientTransfer.cs deleted file mode 100644 index 080b4b01..00000000 --- a/src/linker.messenger.relay/client/RelayClientTransfer.cs +++ /dev/null @@ -1,224 +0,0 @@ -using linker.messenger.relay.client.transport; -using linker.tunnel.connection; -using linker.libs; -using linker.libs.extends; -using linker.messenger.signin; -using System.Collections.Concurrent; - -namespace linker.messenger.relay.client -{ - /// - /// 中继 - /// - public sealed class RelayClientTransfer - { - public List Transports { get; private set; } - - public VersionManager OperatingVersion => operating.DataVersion; - public ConcurrentDictionary Operating => operating.StringKeyValue; - private readonly OperatingMultipleManager operating = new OperatingMultipleManager(); - - private Dictionary>> OnConnected { get; } = new Dictionary>>(); - - private readonly IRelayClientStore relayClientStore; - private readonly ISignInClientStore signInClientStore; - public RelayClientTransfer(IMessengerSender messengerSender, ISerializer serializer, IRelayClientStore relayClientStore, SignInClientState signInClientState, IMessengerStore messengerStore, ISignInClientStore signInClientStore) - { - this.relayClientStore = relayClientStore; - this.signInClientStore = signInClientStore; - Transports = new List { - new RelayClientTransportSelfHost(messengerSender,serializer,relayClientStore,signInClientState,messengerStore), - new RelayClientTransportSelfHostUdp(messengerSender,serializer,relayClientStore,signInClientState,messengerStore), - }; - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Info($"load relay transport:{string.Join(",", Transports.Select(c => c.GetType().Name))}"); - } - - /// - /// 设置中继成功回调 - /// - /// 事务 - /// - public void SetConnectedCallback(string transactionId, Action callback) - { - if (OnConnected.TryGetValue(transactionId, out List> callbacks) == false) - { - callbacks = new List>(); - OnConnected[transactionId] = callbacks; - } - callbacks.Add(callback); - } - /// - /// 一处中继成功回调 - /// - /// 事务 - /// - public void RemoveConnectedCallback(string transactionId, Action callback) - { - if (OnConnected.TryGetValue(transactionId, out List> callbacks)) - { - callbacks.Remove(callback); - } - } - - public async Task ConnectAsync(string fromMachineId, string remoteMachineId, string transactionId, string nodeId, TunnelProtocolType protocol) - { - return await ConnectAsync(fromMachineId, remoteMachineId, transactionId, TunnelProtocolType.All & (~protocol), nodeId, protocol).ConfigureAwait(false); - } - /// - /// 中继连接对方 - /// - /// 自己的id - /// 对方id - /// 事务 - /// - public async Task ConnectAsync(string fromMachineId, string remoteMachineId, string transactionId, TunnelProtocolType denyProtocols, string nodeId = "", TunnelProtocolType protocol = TunnelProtocolType.None) - { - if (string.IsNullOrWhiteSpace(nodeId)) nodeId = relayClientStore.DefaultNodeId; - if(protocol == TunnelProtocolType.None) protocol = relayClientStore.DefaultProtocol; - - if (operating.StartOperation(BuildKey(remoteMachineId, transactionId)) == false) - { - return null; - } - try - { - if (relayClientStore.Server.Disabled) - { - return null; - } - - IEnumerable transports = Transports - //优先的 - .Where(c => c.ProtocolType == protocol) - //其次的 - .Concat(Transports.Where(c => c.ProtocolType != protocol)) - //不包含在禁用列表里的 - .Where(c => (denyProtocols & c.ProtocolType)!= c.ProtocolType); - - foreach (IRelayClientTransport transport in transports) - { - if (transport == null) - { - continue; - } - - RelayInfo relayInfo = new RelayInfo - { - FlowingId = 0, - FromMachineId = fromMachineId, - FromMachineName = string.Empty, - RemoteMachineId = remoteMachineId, - RemoteMachineName = string.Empty, - TransactionId = transactionId, - TransportName = transport.Name, - SSL = relayClientStore.Server.SSL, - NodeId = nodeId, - UserId = signInClientStore.Server.UserId, - }; - - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Info($"relay {transport.Name} to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} {relayInfo.ToJson()}"); - ITunnelConnection connection = await transport.RelayAsync(relayInfo).ConfigureAwait(false); - if (connection != null) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Debug($"relay {transport.Name} to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}"); - ConnectedCallback(relayInfo, connection); - return connection; - } - else - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Error($"relay {transport.Name} to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} fail,{relayInfo.ToJson()}"); - } - } - } - catch (Exception ex) - { - LoggerHelper.Instance.Error(ex); - } - finally - { - operating.StopOperation(BuildKey(remoteMachineId, transactionId)); - } - return null; - } - /// - /// 收到对方的中继请求 - /// - /// - /// - public async Task OnBeginAsync(transport.RelayInfo relayInfo) - { - if (operating.StartOperation(BuildKey(relayInfo.FromMachineId, relayInfo.TransactionId)) == false) - { - return false; - } - - try - { - IRelayClientTransport _transports = Transports.FirstOrDefault(c => c.Name == relayInfo.TransportName); - if (_transports == null) return false; - - await _transports.OnBeginAsync(relayInfo, (connection) => - { - if (connection != null) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Debug($"relay from {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}"); - ConnectedCallback(relayInfo, connection); - } - else - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - LoggerHelper.Instance.Error($"relay from {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} error,{relayInfo.ToJson()}"); - } - }).ConfigureAwait(false); - return true; - } - catch (Exception ex) - { - if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) - { - LoggerHelper.Instance.Error(ex); - } - } - finally - { - operating.StopOperation(BuildKey(relayInfo.FromMachineId, relayInfo.TransactionId)); - } - return false; - } - - /// - /// 回调 - /// - /// - /// - private void ConnectedCallback(transport.RelayInfo relayInfo, ITunnelConnection connection) - { - if (OnConnected.TryGetValue(Helper.GlobalString, out List> callbacks)) - { - foreach (var item in callbacks) - { - item(connection); - } - } - if (OnConnected.TryGetValue(connection.TransactionId, out callbacks)) - { - foreach (var callabck in callbacks) - { - callabck(connection); - } - } - } - - - - private string BuildKey(string remoteMachineId, string transactionId) - { - return $"{remoteMachineId}@{transactionId}"; - } - } -} \ No newline at end of file diff --git a/src/linker.messenger.relay/client/transport/IRelayClientTransport.cs b/src/linker.messenger.relay/client/transport/IRelayClientTransport.cs index 4afd6e28..c313fc65 100644 --- a/src/linker.messenger.relay/client/transport/IRelayClientTransport.cs +++ b/src/linker.messenger.relay/client/transport/IRelayClientTransport.cs @@ -112,19 +112,4 @@ namespace linker.messenger.relay.client.transport public string UserId { get; set; } } - - public sealed partial class RelayServerInfo - { - public RelayServerInfo() { } - /// - /// 禁用 - /// - public bool Disabled { get; set; } - /// - /// 开启ssl - /// - public bool SSL { get; set; } = true; - - public RelayClientType RelayType { get; set; } = RelayClientType.Linker; - } } diff --git a/src/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs b/src/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs index 0df7536f..17303930 100644 --- a/src/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs +++ b/src/linker.messenger.relay/client/transport/RelayClientTransportSelfHost.cs @@ -26,15 +26,13 @@ namespace linker.messenger.relay.client.transport private readonly IMessengerSender messengerSender; private readonly ISerializer serializer; - private readonly IRelayClientStore relayClientStore; private readonly SignInClientState signInClientState; private readonly IMessengerStore messengerStore; - public RelayClientTransportSelfHost(IMessengerSender messengerSender, ISerializer serializer, IRelayClientStore relayClientStore, SignInClientState signInClientState, IMessengerStore messengerStore) + public RelayClientTransportSelfHost(IMessengerSender messengerSender, ISerializer serializer, SignInClientState signInClientState, IMessengerStore messengerStore) { this.messengerSender = messengerSender; this.serializer = serializer; - this.relayClientStore = relayClientStore; this.signInClientState = signInClientState; this.messengerStore = messengerStore; } diff --git a/src/linker.messenger.relay/messenger/RelayMessenger.cs b/src/linker.messenger.relay/messenger/RelayMessenger.cs index 7ba1f4ce..3e5eba73 100644 --- a/src/linker.messenger.relay/messenger/RelayMessenger.cs +++ b/src/linker.messenger.relay/messenger/RelayMessenger.cs @@ -1,11 +1,9 @@  using linker.messenger.relay.client.transport; using linker.libs; -using linker.messenger.relay.client; using linker.messenger.relay.server; using linker.messenger.signin; using linker.messenger.relay.server.validator; -using linker.libs.extends; namespace linker.messenger.relay.messenger { @@ -14,25 +12,8 @@ namespace linker.messenger.relay.messenger /// public class RelayClientMessenger : IMessenger { - private readonly RelayClientTransfer relayTransfer; - private readonly ISerializer serializer; - public RelayClientMessenger(RelayClientTransfer relayTransfer, ISerializer serializer) + public RelayClientMessenger() { - this.relayTransfer = relayTransfer; - this.serializer = serializer; - } - - /// - /// 收到中继请求 - /// - /// - /// - [MessengerId((ushort)RelayMessengerIds.Relay)] - public async Task Relay(IConnection connection) - { - client.transport.RelayInfo info = serializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span); - bool res = await relayTransfer.OnBeginAsync(info).ConfigureAwait(false); - connection.Write(res ? Helper.TrueArray : Helper.FalseArray); } } @@ -128,7 +109,6 @@ namespace linker.messenger.relay.messenger } connection.Write(serializer.Serialize(result)); } - private async Task> GetNodes(SignCacheInfo from) { return await relayServerTransfer.GetNodes(from.Super, from.UserId, from.MachineId); diff --git a/src/linker.messenger.relay/transport/TransportRelay.cs b/src/linker.messenger.relay/transport/TransportRelay.cs new file mode 100644 index 00000000..0f502e05 --- /dev/null +++ b/src/linker.messenger.relay/transport/TransportRelay.cs @@ -0,0 +1,93 @@ +using linker.libs; +using linker.messenger; +using linker.messenger.relay.messenger; +using linker.messenger.relay.server; +using linker.messenger.signin; +using linker.tunnel.connection; +using linker.tunnel.wanport; +using System.Security.Cryptography.X509Certificates; + +namespace linker.tunnel.transport +{ + public class TransportRelay : ITunnelTransport + { + public string Name => "TcpRelay"; + + public string Label => "TCP、服务器中继"; + + public TunnelProtocolType ProtocolType => TunnelProtocolType.Tcp; + + public TunnelWanPortProtocolType AllowWanPortProtocolType => TunnelWanPortProtocolType.Other; + + public bool Reverse => true; + + public bool DisableReverse => false; + + public bool SSL => true; + + public bool DisableSSL => false; + + public byte Order => 0; + + public Action OnConnected { get; set; } = (state) => { }; + + + private readonly IMessengerSender messengerSender; + private readonly ISerializer serializer; + private readonly SignInClientState signInClientState; + private readonly IMessengerStore messengerStore; + + public TransportRelay(IMessengerSender messengerSender, ISerializer serializer, SignInClientState signInClientState, IMessengerStore messengerStore) + { + this.messengerSender = messengerSender; + this.serializer = serializer; + this.signInClientState = signInClientState; + this.messengerStore = messengerStore; + } + + + public virtual async Task ConnectAsync(TunnelTransportInfo tunnelTransportInfo) + { + return null; + } + + public virtual async Task OnBegin(TunnelTransportInfo tunnelTransportInfo) + { + + } + + public virtual void OnFail(TunnelTransportInfo tunnelTransportInfo) + { + } + + public virtual void OnSuccess(TunnelTransportInfo tunnelTransportInfo) + { + } + + public virtual void SetSSL(X509Certificate certificate) + { + } + + public async Task> RelayTestAsync() + { + try + { + MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap + { + Connection = signInClientState.Connection, + MessengerId = (ushort)RelayMessengerIds.Nodes188, + Timeout = 2000 + }).ConfigureAwait(false); + + if (resp.Code == MessageResponeCodes.OK) + { + return serializer.Deserialize>(resp.Data.Span); + } + } + catch (Exception) + { + } + return new List(); + } + } +} diff --git a/src/linker.messenger.relay/transport/TunnelWanPortProtocolRelay.cs b/src/linker.messenger.relay/transport/TunnelWanPortProtocolRelay.cs new file mode 100644 index 00000000..ad2ee0d0 --- /dev/null +++ b/src/linker.messenger.relay/transport/TunnelWanPortProtocolRelay.cs @@ -0,0 +1,23 @@ +using linker.tunnel.wanport; +using System.Net; + +namespace linker.messenger.relay.transport +{ + public sealed class TunnelWanPortProtocolRelay : ITunnelWanPortProtocol + { + public string Name => "relay"; + + public TunnelWanPortProtocolType ProtocolType => TunnelWanPortProtocolType.Other; + + public TunnelWanPortProtocolRelay() { } + + public async Task GetAsync(IPEndPoint server) + { + return new TunnelWanPortEndPoint + { + Local = new IPEndPoint(IPAddress.Loopback, 0), + Remote = server + }; + } + } +} diff --git a/src/linker.messenger.socks5/proxy/Socks5Proxy.cs b/src/linker.messenger.socks5/proxy/Socks5Proxy.cs index 2cb1138c..fdcd9ed7 100644 --- a/src/linker.messenger.socks5/proxy/Socks5Proxy.cs +++ b/src/linker.messenger.socks5/proxy/Socks5Proxy.cs @@ -3,7 +3,6 @@ using linker.tunnel.connection; using linker.libs; using System.Net; using System.Net.Sockets; -using linker.messenger.relay.client; using linker.messenger.channel; using linker.messenger.signin; using linker.messenger.pcp; @@ -21,9 +20,9 @@ namespace linker.messenger.socks5 private readonly Socks5CidrDecenterManager socks5CidrDecenterManager; - public Socks5Proxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + public Socks5Proxy(ISignInClientStore signInClientStore, TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, Socks5CidrDecenterManager socks5CidrDecenterManager, ChannelConnectionCaching channelConnectionCaching) - : base(tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) + : base(tunnelTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) { this.socks5CidrDecenterManager = socks5CidrDecenterManager; TaskUdp(); diff --git a/src/linker.messenger.store.file/ConfigApiController.cs b/src/linker.messenger.store.file/ConfigApiController.cs index 2fce9bc4..8783fb84 100644 --- a/src/linker.messenger.store.file/ConfigApiController.cs +++ b/src/linker.messenger.store.file/ConfigApiController.cs @@ -4,7 +4,6 @@ using linker.libs; using linker.messenger.signin; using linker.messenger.api; using System.Text; -using linker.messenger.relay.client.transport; using System.Text.Json; using System.Collections; using linker.libs.web; @@ -263,9 +262,6 @@ namespace linker.messenger.store.file client.AccessBits = accessStore.AssignAccess(configExportInfo.Access); client.FullAccess = configExportInfo.FullAccess && config.Data.Client.FullAccess; - if (configExportInfo.Relay) client.Relay = new RelayClientInfo { Servers = [client.Relay.Servers[0]] }; - else client.Relay = new RelayClientInfo { Servers = [new RelayServerInfo { }] }; - if (configExportInfo.Server) { client.Server.Host = config.Data.Client.Server.Host; @@ -304,7 +300,6 @@ namespace linker.messenger.store.file Groups = new SignInClientGroupInfo[] { client.Group }, Servers = new SignInClientServerInfo[] { client.Server }, client.Updater, - Relay = new { Servers = new RelayServerInfo[] { client.Relay.Server } }, client.Tunnel, }, common, new { Install = true, Modes = new string[] { "client" } }); } diff --git a/src/linker.messenger.store.file/relay/Config.cs b/src/linker.messenger.store.file/relay/Config.cs index 3a638245..6c8a0e87 100644 --- a/src/linker.messenger.store.file/relay/Config.cs +++ b/src/linker.messenger.store.file/relay/Config.cs @@ -1,6 +1,4 @@ -using linker.libs; -using linker.messenger.relay.client.transport; -using linker.messenger.relay.server; +using linker.messenger.relay.server; using linker.tunnel.connection; @@ -18,22 +16,6 @@ namespace linker.messenger.store.file public TunnelProtocolType DefaultProtocol { get; set; } = TunnelProtocolType.None; } - public sealed partial class ConfigClientInfo - { - public RelayClientInfo Relay { get; set; } = new RelayClientInfo(); - } - public sealed class RelayClientInfo - { - /// - /// 中继服务器列表 - /// - public RelayServerInfo[] Servers { get; set; } = new RelayServerInfo[] { new RelayServerInfo { } }; - - [SaveJsonIgnore] - public RelayServerInfo Server => Servers[0]; - - } - public partial class ConfigServerInfo { /// @@ -52,12 +34,4 @@ namespace linker.messenger.store.file public RelayServerMasterInfo Master { get; set; } = new RelayServerMasterInfo { }; } - public sealed class CdkeyConfigInfo - { -#if DEBUG - public string SecretKey { get; set; } = Helper.GlobalString; -#else - public string SecretKey { get; set; } = Guid.NewGuid().ToString().ToUpper(); -#endif - } } diff --git a/src/linker.messenger.store.file/relay/RelayClientStore.cs b/src/linker.messenger.store.file/relay/RelayClientStore.cs index 2e14b2b7..39c14ef8 100644 --- a/src/linker.messenger.store.file/relay/RelayClientStore.cs +++ b/src/linker.messenger.store.file/relay/RelayClientStore.cs @@ -1,6 +1,4 @@ using linker.messenger.relay.client; -using linker.messenger.relay.client.transport; -using linker.messenger.signin; using linker.tunnel.connection; namespace linker.messenger.store.file.relay @@ -9,21 +7,13 @@ namespace linker.messenger.store.file.relay { public string DefaultNodeId => runningConfig.Data.Relay.DefaultNodeId; public TunnelProtocolType DefaultProtocol => runningConfig.Data.Relay.DefaultProtocol; - public RelayServerInfo Server => config.Data.Client.Relay.Server; - - private readonly SignInClientState signInClientState; - private readonly ISignInClientStore signInClientStore; - private readonly FileConfig config; private readonly RunningConfig runningConfig; - public RelayClientStore(SignInClientState signInClientState, ISignInClientStore signInClientStore, FileConfig config, RunningConfig runningConfig) + public RelayClientStore(FileConfig config, RunningConfig runningConfig) { - this.signInClientState = signInClientState; - this.signInClientStore = signInClientStore; - this.config = config; this.runningConfig = runningConfig; } @@ -39,11 +29,6 @@ namespace linker.messenger.store.file.relay runningConfig.Data.Update(); } - public void SetServer(RelayServerInfo server) - { - config.Data.Client.Relay.Servers = [server]; - config.Data.Update(); - } public bool Confirm() { config.Data.Update(); diff --git a/src/linker.messenger.tuntap/TuntapProxy.cs b/src/linker.messenger.tuntap/TuntapProxy.cs index ad61ce2b..eadf31e4 100644 --- a/src/linker.messenger.tuntap/TuntapProxy.cs +++ b/src/linker.messenger.tuntap/TuntapProxy.cs @@ -1,7 +1,6 @@ using linker.libs; using linker.messenger.channel; using linker.messenger.pcp; -using linker.messenger.relay.client; using linker.messenger.signin; using linker.messenger.tuntap.cidr; using linker.nat; @@ -31,11 +30,11 @@ namespace linker.messenger.tuntap private readonly TuntapDecenter tuntapDecenter; public TuntapProxy(ISignInClientStore signInClientStore, - TunnelTransfer tunnelTransfer, RelayClientTransfer relayTransfer, PcpTransfer pcpTransfer, + TunnelTransfer tunnelTransfer, PcpTransfer pcpTransfer, SignInClientTransfer signInClientTransfer, TuntapConfigTransfer tuntapConfigTransfer, TuntapCidrConnectionManager tuntapCidrConnectionManager, TuntapCidrDecenterManager tuntapCidrDecenterManager, TuntapCidrMapfileManager tuntapCidrMapfileManager, TuntapDecenter tuntapDecenter, ChannelConnectionCaching channelConnectionCaching) - : base(tunnelTransfer, relayTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) + : base(tunnelTransfer, pcpTransfer, signInClientTransfer, signInClientStore, channelConnectionCaching) { this.tuntapConfigTransfer = tuntapConfigTransfer; this.tuntapCidrConnectionManager = tuntapCidrConnectionManager; diff --git a/src/linker.tunnel/TunnelTransfer.cs b/src/linker.tunnel/TunnelTransfer.cs index 7ebfa8b1..f6c71629 100644 --- a/src/linker.tunnel/TunnelTransfer.cs +++ b/src/linker.tunnel/TunnelTransfer.cs @@ -58,6 +58,21 @@ namespace linker.tunnel LoggerHelper.Instance.Info($"load tunnel transport:{string.Join(",", transports.Select(c => c.GetType().Name))}"); } + public void AddTransport(ITunnelTransport transport) + { + if (transports.Any(c => c.Name == transport.Name) == false) + { + transport.OnConnected = OnConnected; + transports.Add(transport); + _ = RebuildTransports(); + } + } + public void AddProtocol(ITunnelWanPortProtocol protocol) + { + tunnelWanPortTransfer.AddProtocol(protocol); + } + + /// /// 刷新一下网络信息,比如路由级别,本机IP等 /// @@ -423,6 +438,8 @@ namespace linker.tunnel private void ParseRemoteEndPoint(TunnelTransportInfo tunnelTransportInfo) { + if (tunnelTransportInfo.Local == null || tunnelTransportInfo.Remote == null) return; + //要连接哪些IP List eps = new List(); var excludeips = tunnelMessengerAdapter.GetExcludeIps(); diff --git a/src/linker.tunnel/TunnelUpnpTransfer.cs b/src/linker.tunnel/TunnelUpnpTransfer.cs index d663c6d6..ddc7647e 100644 --- a/src/linker.tunnel/TunnelUpnpTransfer.cs +++ b/src/linker.tunnel/TunnelUpnpTransfer.cs @@ -62,7 +62,7 @@ namespace linker.tunnel { if (await HasMap(device, Protocol.Tcp, MapInfo.PublicPort).ConfigureAwait(false) == false) { - Mapping mapping = new Mapping(Protocol.Tcp, MapInfo.PrivatePort, MapInfo.PublicPort, 86400, $"linker-tcp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); + Mapping mapping = new Mapping(Protocol.Tcp, MapInfo.PrivatePort, MapInfo.PublicPort, 7 * 24 * 60 * 60, $"linker-tcp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); await device.CreatePortMapAsync(mapping).ConfigureAwait(false); Mapping m = await device.GetSpecificMappingAsync(Protocol.Tcp, mapping.PublicPort).ConfigureAwait(false); } @@ -75,7 +75,7 @@ namespace linker.tunnel { if (await HasMap(device, Protocol.Udp, MapInfo.PublicPort).ConfigureAwait(false) == false) { - Mapping mapping = new Mapping(Protocol.Udp, MapInfo.PrivatePort, MapInfo.PublicPort, 86400, $"linker-udp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); + Mapping mapping = new Mapping(Protocol.Udp, MapInfo.PrivatePort, MapInfo.PublicPort, 7 * 24 * 60 * 60, $"linker-udp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); await device.CreatePortMapAsync(mapping).ConfigureAwait(false); Mapping m = await device.GetSpecificMappingAsync(Protocol.Udp, mapping.PublicPort).ConfigureAwait(false); } diff --git a/src/linker.tunnel/transport/TransportMsQuic.cs b/src/linker.tunnel/transport/TransportMsQuic.cs index 08c2acce..e70a4c03 100644 --- a/src/linker.tunnel/transport/TransportMsQuic.cs +++ b/src/linker.tunnel/transport/TransportMsQuic.cs @@ -21,7 +21,7 @@ namespace linker.tunnel.transport /// public sealed class TransportMsQuic : ITunnelTransport { - public string Name => "msquic"; + public string Name => "MsQuic"; public string Label => "MsQuic,win10+、linux"; diff --git a/src/linker.tunnel/transport/TransportUdp.cs b/src/linker.tunnel/transport/TransportUdp.cs index fe353173..a34fcff2 100644 --- a/src/linker.tunnel/transport/TransportUdp.cs +++ b/src/linker.tunnel/transport/TransportUdp.cs @@ -25,7 +25,7 @@ namespace linker.tunnel.transport /// public sealed class TransportUdp : ITunnelTransport { - public string Name => "udp"; + public string Name => "Udp"; public string Label => "UDP、非常纯"; diff --git a/src/linker.tunnel/wanport/ITunnelWanPortProtocol.cs b/src/linker.tunnel/wanport/ITunnelWanPortProtocol.cs index 5d87cf69..dbfd2b76 100644 --- a/src/linker.tunnel/wanport/ITunnelWanPortProtocol.cs +++ b/src/linker.tunnel/wanport/ITunnelWanPortProtocol.cs @@ -35,5 +35,6 @@ namespace linker.tunnel.wanport { Tcp = 1, Udp = 2, + Other = 4, } } diff --git a/src/linker.tunnel/wanport/TunnelWanPortTransfer.cs b/src/linker.tunnel/wanport/TunnelWanPortTransfer.cs index c98aca11..6f4551c5 100644 --- a/src/linker.tunnel/wanport/TunnelWanPortTransfer.cs +++ b/src/linker.tunnel/wanport/TunnelWanPortTransfer.cs @@ -20,6 +20,14 @@ namespace linker.tunnel.wanport { } + public void AddProtocol(ITunnelWanPortProtocol protocol) + { + if (!tunnelWanPorts.Any(c => c.ProtocolType == protocol.ProtocolType)) + { + tunnelWanPorts.Add(protocol); + } + } + /// /// 获取外网端口 /// diff --git a/src/linker.web/src/apis/relay.js b/src/linker.web/src/apis/relay.js index 76922c56..d644467b 100644 --- a/src/linker.web/src/apis/relay.js +++ b/src/linker.web/src/apis/relay.js @@ -6,15 +6,9 @@ export const getDefault = () => { export const syncDefault = (data) => { return sendWebsocketMsg('relay/SyncDefault', data); } -export const setRelayServers = (servers) => { - return sendWebsocketMsg('relay/SetServers', servers); -} export const setRelaySubscribe = () => { return sendWebsocketMsg('relay/Subscribe'); } -export const relayOperating = (data) => { - return sendWebsocketMsg('relay/Operating',data); -} export const relayConnect = (data) => { return sendWebsocketMsg('relay/Connect', data); } diff --git a/src/linker.web/src/assets/style.css b/src/linker.web/src/assets/style.css index b624ef8f..76e15e1b 100644 --- a/src/linker.web/src/assets/style.css +++ b/src/linker.web/src/assets/style.css @@ -179,6 +179,11 @@ html.dark .el-switch__core .el-switch__action{ background-color: #ccc; } html.dark .el-dialog{border: 1px solid #575c61;} +html .el-overlay { + border-radius: 4px; +} + + body { overflow: hidden; diff --git a/src/linker.web/src/lang/zh-cn.js b/src/linker.web/src/lang/zh-cn.js index 53fb25c5..128fed4d 100644 --- a/src/linker.web/src/lang/zh-cn.js +++ b/src/linker.web/src/lang/zh-cn.js @@ -15,7 +15,7 @@ export default { 'head.home': '首页', 'head.server': '服务器', 'head.group': '分组', - 'head.protocol': '打洞协议', + 'head.protocol': '隧道协议', 'head.action': '验证', 'head.firewall': '防火墙', 'head.wakeup': '唤醒', @@ -47,7 +47,7 @@ export default { 'home.tuntapRoute':'网卡路由', 'home.firewall':'防火墙', 'home.wakeup':'唤醒', - 'home.protocol':'打洞协议', + 'home.protocol':'隧道协议', 'home.action':'验证', 'home.flowStatis':'流量统计', 'home.delete':'删除', @@ -116,7 +116,7 @@ export default { 'status.exportServer': '服务器配置', 'status.exportSuper': '服务器密码', 'status.exportGroup': '当前分组', - 'status.exportTunnel': '打洞协议', + 'status.exportTunnel': '隧道协议', 'status.exportCdkey': 'cdkey密钥', 'status.exportWhiteList': '白名单密钥', @@ -448,7 +448,7 @@ export default { 'server.asyncRelaySecretKey': '中继密钥', 'server.asyncSForwardSecretKey': '服务器穿透密钥', 'server.asyncUpdaterSecretKey': '更新配置', - 'server.asyncTunnelTransports': '打洞协议', + 'server.asyncTunnelTransports': '隧道协议', 'server.asyncSignInUserId': '用户唯一标识', 'server.asyncActionStatic': '自定义验证参数', 'server.asyncFirewall': '防火墙选中项', diff --git a/src/linker.web/src/views/components/adv/Index.vue b/src/linker.web/src/views/components/adv/Index.vue index 13279c8b..31aa5991 100644 --- a/src/linker.web/src/views/components/adv/Index.vue +++ b/src/linker.web/src/views/components/adv/Index.vue @@ -53,6 +53,9 @@ export default {