From ec19ca5d8bbb65532a7de573f790942ed1d5190e Mon Sep 17 00:00:00 2001
From: snltty <1069410172@qq.com>
Date: Sun, 7 Jul 2024 20:01:27 +0800
Subject: [PATCH] sync
---
linker.tunnel/TunnelTransfer.cs | 6 +-
linker.tunnel/adapter/ITunnelAdapter.cs | 4 +-
.../wanport/TunnelWanPortTransfer.cs | 1 +
linker.web/src/apis/forward.js | 3 +
linker.web/src/apis/running.js | 5 +
linker.web/src/apis/sforward.js | 3 +
linker.web/src/apis/signin.js | 3 +
linker.web/src/assets/style.css | 9 +-
linker.web/src/components/Head.vue | 89 ----
linker.web/src/components/status/Api.vue | 99 ++++-
linker.web/src/main.js | 3 +-
.../src/views/devices/ConnectionsEdit.vue | 9 +-
linker.web/src/views/devices/Device.vue | 12 +-
linker.web/src/views/devices/Forward.vue | 12 +-
linker.web/src/views/devices/ForwardCopy.vue | 154 +++++++
linker.web/src/views/devices/ForwardEdit.vue | 13 +-
linker.web/src/views/devices/List.vue | 411 +++---------------
linker.web/src/views/devices/SForwardCopy.vue | 146 +++++++
linker.web/src/views/devices/SForwardEdit.vue | 13 +-
linker.web/src/views/devices/Tunnel.vue | 19 +-
linker.web/src/views/devices/TunnelEdit.vue | 5 +-
linker.web/src/views/devices/Tuntap.vue | 17 +-
linker.web/src/views/devices/TuntapEdit.vue | 6 +-
linker.web/src/views/devices/connections.js | 102 +++++
linker.web/src/views/devices/devices.js | 95 ++++
linker.web/src/views/devices/forward.js | 69 +++
linker.web/src/views/devices/sforward.js | 61 +++
linker.web/src/views/devices/tunnel.js | 49 +++
linker.web/src/views/devices/tuntap.js | 62 +++
linker.web/src/views/settings/ExcludeIP.vue | 5 +-
.../src/views/settings/RelayServers.vue | 5 +-
linker.web/src/views/settings/SForward.vue | 3 +
.../src/views/settings/SignInServers.vue | 5 +-
linker.web/src/views/settings/Transports.vue | 5 +-
.../src/views/settings/TunnelServers.vue | 5 +-
linker.web/src/views/settings/Version.vue | 50 +++
linker/client/ClientSignInTransfer.cs | 1 +
linker/client/ClientStartup.cs | 5 +-
.../config/RunningConfigApiController.cs | 28 ++
linker/client/config/RunningConfigTransfer.cs | 37 +-
.../plugins/forward/ForwardApiController.cs | 26 +-
linker/plugins/forward/config/Config.cs | 6 +
.../forward/messenger/ForwardMessenger.cs | 54 +++
.../forward/messenger/ForwardMessengerIds.cs | 3 +
linker/plugins/relay/RelayTransfer.cs | 1 +
.../plugins/sforward/SForwardApiController.cs | 22 +-
linker/plugins/sforward/SForwardTransfer.cs | 2 +-
.../sforward/messenger/SForwardMessenger.cs | 68 ++-
.../messenger/SForwardMessengerIds.cs | 3 +
linker/plugins/signIn/SignInApiController.cs | 15 +
.../signIn/messenger/SignInMessenger.cs | 67 ++-
.../signIn/messenger/SignInMessengerIds.cs | 2 +
linker/plugins/tunnel/TunnelAdapter.cs | 8 +-
linker/plugins/tunnel/TunnelApiController.cs | 4 +-
linker/plugins/tunnel/TunnelConfigTransfer.cs | 19 +-
.../tunnel/messenger/TunnelMessenger.cs | 6 +-
56 files changed, 1384 insertions(+), 551 deletions(-)
create mode 100644 linker.web/src/apis/running.js
create mode 100644 linker.web/src/views/devices/ForwardCopy.vue
create mode 100644 linker.web/src/views/devices/SForwardCopy.vue
create mode 100644 linker.web/src/views/devices/connections.js
create mode 100644 linker.web/src/views/devices/devices.js
create mode 100644 linker.web/src/views/devices/forward.js
create mode 100644 linker.web/src/views/devices/sforward.js
create mode 100644 linker.web/src/views/devices/tunnel.js
create mode 100644 linker.web/src/views/devices/tuntap.js
create mode 100644 linker.web/src/views/settings/Version.vue
create mode 100644 linker/client/config/RunningConfigApiController.cs
diff --git a/linker.tunnel/TunnelTransfer.cs b/linker.tunnel/TunnelTransfer.cs
index 579227db..06ddbb78 100644
--- a/linker.tunnel/TunnelTransfer.cs
+++ b/linker.tunnel/TunnelTransfer.cs
@@ -42,6 +42,7 @@ namespace linker.tunnel
}
var transportItems = tunnelAdapter.GetTunnelTransports();
+ var names = transportItems.Select(c => c.Name);
transportItems = transportItems.Concat(transports.Select(c => new TunnelTransportItemInfo
{
Label = c.Label,
@@ -74,8 +75,7 @@ namespace linker.tunnel
}
}
-
- tunnelAdapter.SetTunnelTransports(transportItems);
+ tunnelAdapter.SetTunnelTransports(transportItems, names.SequenceEqual(transportItems.Select(c => c.Name)) == false);
LoggerHelper.Instance.Warning($"load tunnel transport:{string.Join(",", transports.Select(c => c.Name))}");
LoggerHelper.Instance.Warning($"used tunnel transport:{string.Join(",", transportItems.Where(c => c.Disabled == false).Select(c => c.Name))}");
@@ -136,7 +136,7 @@ namespace linker.tunnel
foreach (var wanPortProtocol in tunnelAdapter.GetTunnelWanPortProtocols().Where(c => c.Disabled == false && string.IsNullOrWhiteSpace(c.Host) == false))
{
-
+
//这个打洞协议不支持这个外网端口协议
if ((transport.AllowWanPortProtocolType & wanPortProtocol.ProtocolType) != wanPortProtocol.ProtocolType)
{
diff --git a/linker.tunnel/adapter/ITunnelAdapter.cs b/linker.tunnel/adapter/ITunnelAdapter.cs
index 5f48fe6c..b50b043d 100644
--- a/linker.tunnel/adapter/ITunnelAdapter.cs
+++ b/linker.tunnel/adapter/ITunnelAdapter.cs
@@ -26,7 +26,7 @@ namespace linker.tunnel.adapter
/// 保存外网端口协议列表
///
///
- public void SetTunnelWanPortProtocols(List protocols);
+ public void SetTunnelWanPortProtocols(List protocols,bool updateVersion);
///
/// 获取打洞协议列表
@@ -37,7 +37,7 @@ namespace linker.tunnel.adapter
/// 保存打洞协议列表
///
///
- public void SetTunnelTransports(List transports);
+ public void SetTunnelTransports(List transports, bool updateVersion);
///
/// 获取本地网络信息
diff --git a/linker.tunnel/wanport/TunnelWanPortTransfer.cs b/linker.tunnel/wanport/TunnelWanPortTransfer.cs
index 716ccc51..a4a266e4 100644
--- a/linker.tunnel/wanport/TunnelWanPortTransfer.cs
+++ b/linker.tunnel/wanport/TunnelWanPortTransfer.cs
@@ -14,6 +14,7 @@ namespace linker.tunnel.wanport
public TunnelWanPortTransfer()
{
+
}
///
diff --git a/linker.web/src/apis/forward.js b/linker.web/src/apis/forward.js
index 4c854826..9145e190 100644
--- a/linker.web/src/apis/forward.js
+++ b/linker.web/src/apis/forward.js
@@ -10,6 +10,9 @@ export const removeForwardConnection = (id) => {
export const getForwardInfo = () => {
return sendWebsocketMsg('forwardclient/get');
}
+export const getForwardRemoteInfo = (data) => {
+ return sendWebsocketMsg('forwardclient/getremote', data);
+}
export const getForwardIpv4 = () => {
return sendWebsocketMsg('forwardclient/bindips');
}
diff --git a/linker.web/src/apis/running.js b/linker.web/src/apis/running.js
new file mode 100644
index 00000000..50513199
--- /dev/null
+++ b/linker.web/src/apis/running.js
@@ -0,0 +1,5 @@
+import { sendWebsocketMsg } from './request'
+
+export const updateVersion = (data) => {
+ return sendWebsocketMsg('RunningConfig/UpdateVersion', data);
+}
diff --git a/linker.web/src/apis/sforward.js b/linker.web/src/apis/sforward.js
index a72e31a9..7aa098a5 100644
--- a/linker.web/src/apis/sforward.js
+++ b/linker.web/src/apis/sforward.js
@@ -9,6 +9,9 @@ export const setSForwardSecretKey = (data) => {
export const getSForwardInfo = () => {
return sendWebsocketMsg('sforwardclient/get');
}
+export const getSForwardRemoteInfo = (data) => {
+ return sendWebsocketMsg('sforwardclient/getremote', data);
+}
export const removeSForwardInfo = (id) => {
return sendWebsocketMsg('sforwardclient/remove', id);
}
diff --git a/linker.web/src/apis/signin.js b/linker.web/src/apis/signin.js
index 204b4ff1..9e786323 100644
--- a/linker.web/src/apis/signin.js
+++ b/linker.web/src/apis/signin.js
@@ -16,6 +16,9 @@ export const getSignInfo = () => {
export const getSignInList = (data) => {
return sendWebsocketMsg('signInclient/List', data);
}
+export const getSignInIds = (data) => {
+ return sendWebsocketMsg('signInclient/ids', data);
+}
export const signInDel = (machineId) => {
return sendWebsocketMsg('signInclient/del', machineId);
}
diff --git a/linker.web/src/assets/style.css b/linker.web/src/assets/style.css
index 01037771..9becf7a4 100644
--- a/linker.web/src/assets/style.css
+++ b/linker.web/src/assets/style.css
@@ -304,14 +304,11 @@ span.split-pad10 {
background-color: #fafafa;
}
-.el-table--border,
-.el-table--group,
-.el-table-filter,
-.el-table td,
-.el-table th.is-leaf {
- border-color: var(--main-border-color);
+.el-table thead.is-group th.el-table__cell {
+ background: var(--el-table-header-bg-color) !important;
}
+
.el-pagination.is-background .el-pager li:not(.disabled).active {
background-color: var(--main-color);
}
diff --git a/linker.web/src/components/Head.vue b/linker.web/src/components/Head.vue
index bae38401..3f07466a 100644
--- a/linker.web/src/components/Head.vue
+++ b/linker.web/src/components/Head.vue
@@ -20,105 +20,16 @@
-
-
-
- 确 定
-
-
diff --git a/linker.web/src/main.js b/linker.web/src/main.js
index 760fa33f..891e756a 100644
--- a/linker.web/src/main.js
+++ b/linker.web/src/main.js
@@ -15,7 +15,7 @@ import 'element-plus/theme-chalk/display.css'
import 'element-plus/theme-chalk/dark/css-vars.css'
import {
- ArrowDown, Top, Bottom, Delete, Plus, Select, Refresh
+ ArrowDown, Top, Bottom, Delete, Plus, Select, Refresh, Search
} from '@element-plus/icons-vue'
app.component(ArrowDown.name, ArrowDown);
app.component(Top.name, Top);
@@ -24,6 +24,7 @@ app.component(Delete.name, Delete);
app.component(Plus.name, Plus);
app.component(Select.name, Select);
app.component(Refresh.name, Refresh);
+app.component(Search.name, Search);
app.use(ElementPlus, { size: 'default' }).use(router).mount('#app');
diff --git a/linker.web/src/views/devices/ConnectionsEdit.vue b/linker.web/src/views/devices/ConnectionsEdit.vue
index e90cac01..5c42ab6f 100644
--- a/linker.web/src/views/devices/ConnectionsEdit.vue
+++ b/linker.web/src/views/devices/ConnectionsEdit.vue
@@ -51,16 +51,17 @@
+
\ No newline at end of file
diff --git a/linker.web/src/views/devices/ForwardEdit.vue b/linker.web/src/views/devices/ForwardEdit.vue
index 884d1802..9d5909bb 100644
--- a/linker.web/src/views/devices/ForwardEdit.vue
+++ b/linker.web/src/views/devices/ForwardEdit.vue
@@ -4,6 +4,7 @@
添加
刷新
+ 复制转发配置
@@ -96,11 +97,12 @@
+
\ No newline at end of file
diff --git a/linker.web/src/views/devices/SForwardEdit.vue b/linker.web/src/views/devices/SForwardEdit.vue
index 20e740eb..e16a04fd 100644
--- a/linker.web/src/views/devices/SForwardEdit.vue
+++ b/linker.web/src/views/devices/SForwardEdit.vue
@@ -1,9 +1,10 @@
-
+
添加
刷新
+ 复制穿透配置
@@ -85,11 +86,12 @@
+
\ No newline at end of file
diff --git a/linker/client/ClientSignInTransfer.cs b/linker/client/ClientSignInTransfer.cs
index df919cef..9792905b 100644
--- a/linker/client/ClientSignInTransfer.cs
+++ b/linker/client/ClientSignInTransfer.cs
@@ -176,6 +176,7 @@ namespace linker.client
public async Task UpdateServers(ClientServerInfo[] servers)
{
await SetServers(servers);
+ runningConfigTransfer.IncrementVersion(configKey);
SyncServers();
}
private void SetServers(Memory data)
diff --git a/linker/client/ClientStartup.cs b/linker/client/ClientStartup.cs
index 07c309af..0ce5ef36 100644
--- a/linker/client/ClientStartup.cs
+++ b/linker/client/ClientStartup.cs
@@ -5,6 +5,7 @@ using System.Reflection;
using linker.client.args;
using linker.client.config;
using linker.config;
+using linker.client.config.messenger;
namespace linker.client
{
@@ -23,6 +24,8 @@ namespace linker.client
{
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
+ serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
@@ -43,7 +46,7 @@ namespace linker.client
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
-
+ serviceCollection.AddSingleton();
}
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
diff --git a/linker/client/config/RunningConfigApiController.cs b/linker/client/config/RunningConfigApiController.cs
new file mode 100644
index 00000000..94749e51
--- /dev/null
+++ b/linker/client/config/RunningConfigApiController.cs
@@ -0,0 +1,28 @@
+using linker.libs.api;
+using linker.client.capi;
+using linker.libs.extends;
+
+namespace linker.client.config
+{
+ public sealed class RunningConfigApiController : IApiClientController
+ {
+ private readonly RunningConfigTransfer runningConfigTransfer;
+
+ public RunningConfigApiController(RunningConfigTransfer runningConfigTransfer)
+ {
+ this.runningConfigTransfer = runningConfigTransfer;
+ }
+
+ public void UpdateVersion(ApiControllerParamsInfo param)
+ {
+ UpdateVersionInfo info = param.Content.DeJson();
+ runningConfigTransfer.UpdateVersion(info.Key, info.Version);
+ }
+
+ public sealed class UpdateVersionInfo
+ {
+ public string Key { get; set; }
+ public ulong Version { get; set; }
+ }
+ }
+}
diff --git a/linker/client/config/RunningConfigTransfer.cs b/linker/client/config/RunningConfigTransfer.cs
index dbfd5312..69fa2ce6 100644
--- a/linker/client/config/RunningConfigTransfer.cs
+++ b/linker/client/config/RunningConfigTransfer.cs
@@ -2,7 +2,6 @@
using linker.libs;
using linker.server;
using MemoryPack;
-using System;
using System.Collections.Concurrent;
namespace linker.client.config
@@ -45,7 +44,7 @@ namespace linker.client.config
public Memory InputConfig(ConfigVersionInfo info)
{
- CheckVersion(info.Key, out ulong version);
+ ulong version = GetVersion(info.Key);
if (setters.TryGetValue(info.Key, out Action> setter) && info.Version > version)
{
@@ -54,7 +53,12 @@ namespace linker.client.config
}
else if (getters.TryGetValue(info.Key, out Func> getter) && version > info.Version)
{
- return getter();
+ return MemoryPackSerializer.Serialize(new ConfigVersionInfo
+ {
+ Data = getter(),
+ Key = info.Key,
+ Version = version
+ });
}
return Helper.EmptyArray;
@@ -64,8 +68,7 @@ namespace linker.client.config
private object syncLockObj = new();
public void Sync(string key, Memory data)
{
- CheckVersion(key, out ulong version);
-
+ ulong version = GetVersion(key);
sender.SendReply(new MessageRequestWrap
{
Connection = clientSignInState.Connection,
@@ -93,31 +96,25 @@ namespace linker.client.config
});
}
- private void CheckVersion(string key, out ulong version)
- {
- if (runningConfig.Data.Versions.TryGetValue(key, out version) == false)
- {
- version = 1;
- }
- else
- {
- version++;
- }
- runningConfig.Data.Versions[key] = version;
- runningConfig.Data.Update();
- }
private ulong GetVersion(string key)
{
if (runningConfig.Data.Versions.TryGetValue(key, out ulong version) == false)
{
- return 0;
+ version = 1;
+ runningConfig.Data.Versions[key] = version;
+ runningConfig.Data.Update();
}
return version;
}
- private void UpdateVersion(string key, ulong version)
+ public void UpdateVersion(string key, ulong version)
{
runningConfig.Data.Versions[key] = version;
runningConfig.Data.Update();
}
+ public void IncrementVersion(string key)
+ {
+ ulong version = GetVersion(key);
+ UpdateVersion(key, version + 1);
+ }
}
}
diff --git a/linker/plugins/forward/ForwardApiController.cs b/linker/plugins/forward/ForwardApiController.cs
index c1882b91..da19c4ac 100644
--- a/linker/plugins/forward/ForwardApiController.cs
+++ b/linker/plugins/forward/ForwardApiController.cs
@@ -7,6 +7,10 @@ using linker.libs;
using linker.plugins.forward.proxy;
using linker.tunnel.connection;
using System.Collections.Concurrent;
+using linker.plugins.forward.messenger;
+using linker.server;
+using linker.client;
+using MemoryPack;
namespace linker.plugins.forward
{
@@ -14,11 +18,15 @@ namespace linker.plugins.forward
{
private readonly ForwardTransfer forwardTransfer;
private readonly ForwardProxy forwardProxy;
+ private readonly MessengerSender messengerSender;
+ private readonly ClientSignInState clientSignInState;
- public ForwardClientApiController(ForwardTransfer forwardTransfer, ForwardProxy forwardProxy)
+ public ForwardClientApiController(ForwardTransfer forwardTransfer, ForwardProxy forwardProxy, MessengerSender messengerSender, ClientSignInState clientSignInState)
{
this.forwardTransfer = forwardTransfer;
this.forwardProxy = forwardProxy;
+ this.messengerSender = messengerSender;
+ this.clientSignInState = clientSignInState;
}
public ConcurrentDictionary Connections(ApiControllerParamsInfo param)
@@ -51,6 +59,21 @@ namespace linker.plugins.forward
{
return forwardTransfer.Get();
}
+ public async Task> GetRemote(ApiControllerParamsInfo param)
+ {
+ GetForwardInfo request = param.Content.DeJson();
+ MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
+ {
+ Connection = clientSignInState.Connection,
+ MessengerId = (ushort)ForwardMessengerIds.GetForward,
+ Payload = MemoryPackSerializer.Serialize(request)
+ }).ConfigureAwait(false);
+ if (resp.Code == MessageResponeCodes.OK)
+ {
+ return MemoryPackSerializer.Deserialize>(resp.Data.Span);
+ }
+ return new List();
+ }
public IPAddress[] BindIPs(ApiControllerParamsInfo param)
{
@@ -62,7 +85,6 @@ namespace linker.plugins.forward
ForwardInfo info = param.Content.DeJson();
return forwardTransfer.Add(info);
}
-
public bool Remove(ApiControllerParamsInfo param)
{
if (uint.TryParse(param.Content, out uint id))
diff --git a/linker/plugins/forward/config/Config.cs b/linker/plugins/forward/config/Config.cs
index a0a965c2..53efa1a4 100644
--- a/linker/plugins/forward/config/Config.cs
+++ b/linker/plugins/forward/config/Config.cs
@@ -40,4 +40,10 @@ namespace linker.client.config
public List EndPoints { get; set; }
}
+ [MemoryPackable]
+ public sealed partial class GetForwardInfo
+ {
+ public string MachineId { get; set; }
+ public string ToMachineId { get; set; }
+ }
}
diff --git a/linker/plugins/forward/messenger/ForwardMessenger.cs b/linker/plugins/forward/messenger/ForwardMessenger.cs
index 0cd7bfe0..ed8d98f0 100644
--- a/linker/plugins/forward/messenger/ForwardMessenger.cs
+++ b/linker/plugins/forward/messenger/ForwardMessenger.cs
@@ -1,7 +1,9 @@
using linker.client.config;
using linker.plugins.signin.messenger;
using linker.server;
+using LiteDB;
using MemoryPack;
+using System.Net;
namespace linker.plugins.forward.messenger
{
@@ -45,6 +47,34 @@ namespace linker.plugins.forward.messenger
});
}
}
+
+ [MessengerId((ushort)ForwardMessengerIds.GetForward)]
+ public void GetForward(IConnection connection)
+ {
+ GetForwardInfo info = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ if (signCaching.TryGet(info.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache1.GroupId == cache.GroupId)
+ {
+ uint requestid = connection.ReceiveRequestWrap.RequestId;
+ sender.SendReply(new MessageRequestWrap
+ {
+ Connection = cache.Connection,
+ MessengerId = (ushort)ForwardMessengerIds.Get,
+ Payload = connection.ReceiveRequestWrap.Payload
+ }).ContinueWith(async (result) =>
+ {
+ if (result.Result.Code == MessageResponeCodes.OK)
+ {
+ await sender.ReplyOnly(new MessageResponseWrap
+ {
+ Connection = connection,
+ Code = MessageResponeCodes.OK,
+ Payload = result.Result.Data,
+ RequestId = requestid
+ }).ConfigureAwait(false);
+ }
+ });
+ }
+ }
}
public sealed class ForwardClientMessenger : IMessenger
@@ -75,7 +105,31 @@ namespace linker.plugins.forward.messenger
}).ConfigureAwait(false);
});
}
+
+ [MessengerId((ushort)ForwardMessengerIds.Get)]
+ public void Get(IConnection connection)
+ {
+ GetForwardInfo info = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ if (forwardTransfer.Get().TryGetValue(info.ToMachineId, out List list))
+ {
+ var result = list.Select(c => new ForwardRemoteInfo { BufferSize = c.BufferSize, Name = c.Name, Port = c.Port, TargetEP = c.TargetEP }).ToList();
+ connection.Write(MemoryPackSerializer.Serialize(result));
+ return;
+ }
+ connection.Write(MemoryPackSerializer.Serialize(new List()));
+ }
}
+ [MemoryPackable]
+ public sealed partial class ForwardRemoteInfo
+ {
+ public string Name { get; set; }
+ public int Port { get; set; }
+
+ [MemoryPackAllowSerialize]
+ public IPEndPoint TargetEP { get; set; }
+
+ public byte BufferSize { get; set; } = 3;
+ }
}
diff --git a/linker/plugins/forward/messenger/ForwardMessengerIds.cs b/linker/plugins/forward/messenger/ForwardMessengerIds.cs
index 6bf64f19..4a7cf461 100644
--- a/linker/plugins/forward/messenger/ForwardMessengerIds.cs
+++ b/linker/plugins/forward/messenger/ForwardMessengerIds.cs
@@ -7,6 +7,9 @@
TestForward = 2401,
Test = 2402,
+ GetForward = 2403,
+ Get = 2404,
+
Max = 2499
}
}
diff --git a/linker/plugins/relay/RelayTransfer.cs b/linker/plugins/relay/RelayTransfer.cs
index 8c14d213..69d95134 100644
--- a/linker/plugins/relay/RelayTransfer.cs
+++ b/linker/plugins/relay/RelayTransfer.cs
@@ -85,6 +85,7 @@ namespace linker.plugins.relay
{
running.Data.Relay.Servers = servers;
running.Data.Update();
+ runningConfigTransfer.IncrementVersion(configKey);
SyncServers();
}
private void SetServers(Memory data)
diff --git a/linker/plugins/sforward/SForwardApiController.cs b/linker/plugins/sforward/SForwardApiController.cs
index 4e1a746a..7d48b7e4 100644
--- a/linker/plugins/sforward/SForwardApiController.cs
+++ b/linker/plugins/sforward/SForwardApiController.cs
@@ -2,24 +2,22 @@
using linker.libs.extends;
using linker.client.capi;
using linker.client.config;
-using linker.server;
using linker.client;
-using linker.plugins.sforward.messenger;
+using linker.server;
using MemoryPack;
+using linker.plugins.sforward.messenger;
namespace linker.plugins.sforward
{
public sealed class SForwardClientApiController : IApiClientController
{
private readonly SForwardTransfer forwardTransfer;
- private readonly RunningConfig runningConfig;
private readonly MessengerSender messengerSender;
private readonly ClientSignInState clientSignInState;
- public SForwardClientApiController(SForwardTransfer forwardTransfer, RunningConfig runningConfig, MessengerSender messengerSender, ClientSignInState clientSignInState)
+ public SForwardClientApiController(SForwardTransfer forwardTransfer, MessengerSender messengerSender, ClientSignInState clientSignInState)
{
this.forwardTransfer = forwardTransfer;
- this.runningConfig = runningConfig;
this.messengerSender = messengerSender;
this.clientSignInState = clientSignInState;
}
@@ -38,6 +36,20 @@ namespace linker.plugins.sforward
{
return forwardTransfer.Get();
}
+ public async Task> GetRemote(ApiControllerParamsInfo param)
+ {
+ MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
+ {
+ Connection = clientSignInState.Connection,
+ MessengerId = (ushort)SForwardMessengerIds.GetForward,
+ Payload = MemoryPackSerializer.Serialize(param.Content)
+ }).ConfigureAwait(false);
+ if (resp.Code == MessageResponeCodes.OK)
+ {
+ return MemoryPackSerializer.Deserialize>(resp.Data.Span);
+ }
+ return new List();
+ }
public bool Add(ApiControllerParamsInfo param)
{
diff --git a/linker/plugins/sforward/SForwardTransfer.cs b/linker/plugins/sforward/SForwardTransfer.cs
index a59db280..40bf83ca 100644
--- a/linker/plugins/sforward/SForwardTransfer.cs
+++ b/linker/plugins/sforward/SForwardTransfer.cs
@@ -46,6 +46,7 @@ namespace linker.plugins.sforward
{
running.Data.SForwardSecretKey = key;
running.Data.Update();
+ runningConfigTransfer.IncrementVersion(configKey);
SyncKey();
}
private void SetSecretKey(Memory data)
@@ -237,7 +238,6 @@ namespace linker.plugins.sforward
Start();
running.Data.SForwards.Remove(old);
running.Data.Update();
-
return true;
}
}
diff --git a/linker/plugins/sforward/messenger/SForwardMessenger.cs b/linker/plugins/sforward/messenger/SForwardMessenger.cs
index f5d82447..0aedd645 100644
--- a/linker/plugins/sforward/messenger/SForwardMessenger.cs
+++ b/linker/plugins/sforward/messenger/SForwardMessenger.cs
@@ -6,6 +6,9 @@ using linker.server;
using MemoryPack;
using linker.plugins.sforward.proxy;
using linker.config;
+using LiteDB;
+using System.Net;
+using linker.plugins.forward.messenger;
namespace linker.plugins.sforward.messenger
{
@@ -151,6 +154,34 @@ namespace linker.plugins.sforward.messenger
}
}
+ [MessengerId((ushort)SForwardMessengerIds.GetForward)]
+ public void GetForward(IConnection connection)
+ {
+ string machineId = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ if (signCaching.TryGet(machineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache1.GroupId == cache.GroupId)
+ {
+ uint requestid = connection.ReceiveRequestWrap.RequestId;
+ sender.SendReply(new MessageRequestWrap
+ {
+ Connection = cache.Connection,
+ MessengerId = (ushort)SForwardMessengerIds.Get,
+ Payload = connection.ReceiveRequestWrap.Payload
+ }).ContinueWith(async (result) =>
+ {
+ if (result.Result.Code == MessageResponeCodes.OK)
+ {
+ await sender.ReplyOnly(new MessageResponseWrap
+ {
+ Connection = connection,
+ Code = MessageResponeCodes.OK,
+ Payload = result.Result.Data,
+ RequestId = requestid
+ }).ConfigureAwait(false);
+ }
+ });
+ }
+ }
+
private async Task WebConnect(string host, int port, ulong id)
{
if (sForwardServerCahing.TryGet(host, out string machineId) && signCaching.TryGet(machineId, out SignCacheInfo sign) && sign.Connected)
@@ -159,7 +190,7 @@ namespace linker.plugins.sforward.messenger
{
Connection = sign.Connection,
MessengerId = (ushort)SForwardMessengerIds.Proxy,
- Payload = MemoryPackSerializer.Serialize(new SForwardProxyInfo { Domain = host, RemotePort = port, Id = id, BufferSize= configWrap.Data.Server.SForward.BufferSize })
+ Payload = MemoryPackSerializer.Serialize(new SForwardProxyInfo { Domain = host, RemotePort = port, Id = id, BufferSize = configWrap.Data.Server.SForward.BufferSize })
}).ConfigureAwait(false);
}
return false;
@@ -196,11 +227,13 @@ namespace linker.plugins.sforward.messenger
{
private readonly SForwardProxy proxy;
private readonly RunningConfig runningConfig;
+ private readonly SForwardTransfer sForwardTransfer;
- public SForwardClientMessenger(SForwardProxy proxy, RunningConfig runningConfig)
+ public SForwardClientMessenger(SForwardProxy proxy, RunningConfig runningConfig, SForwardTransfer sForwardTransfer)
{
this.proxy = proxy;
this.runningConfig = runningConfig;
+ this.sForwardTransfer = sForwardTransfer;
}
[MessengerId((ushort)SForwardMessengerIds.Proxy)]
@@ -213,7 +246,7 @@ namespace linker.plugins.sforward.messenger
SForwardInfo sForwardInfo = runningConfig.Data.SForwards.FirstOrDefault(c => c.Domain == sForwardProxyInfo.Domain);
if (sForwardInfo != null)
{
- _ = proxy.OnConnectTcp(sForwardProxyInfo.BufferSize,sForwardProxyInfo.Id, new System.Net.IPEndPoint(connection.Address.Address, sForwardProxyInfo.RemotePort), sForwardInfo.LocalEP);
+ _ = proxy.OnConnectTcp(sForwardProxyInfo.BufferSize, sForwardProxyInfo.Id, new System.Net.IPEndPoint(connection.Address.Address, sForwardProxyInfo.RemotePort), sForwardInfo.LocalEP);
}
}
else if (sForwardProxyInfo.RemotePort > 0)
@@ -225,6 +258,7 @@ namespace linker.plugins.sforward.messenger
}
}
}
+
[MessengerId((ushort)SForwardMessengerIds.ProxyUdp)]
public void ProxyUdp(IConnection connection)
{
@@ -238,5 +272,33 @@ namespace linker.plugins.sforward.messenger
}
}
}
+
+ [MessengerId((ushort)SForwardMessengerIds.Get)]
+ public void Get(IConnection connection)
+ {
+ List result = sForwardTransfer.Get().Select(c => new SForwardRemoteInfo
+ {
+ BufferSize = c.BufferSize,
+ Domain = c.Domain,
+ LocalEP = c.LocalEP,
+ Name = c.Name,
+ RemotePort = c.RemotePort,
+ }).ToList();
+ connection.Write(MemoryPackSerializer.Serialize(result));
+ }
+ }
+
+ [MemoryPackable]
+ public sealed partial class SForwardRemoteInfo
+ {
+ public string Name { get; set; }
+
+ public string Domain { get; set; }
+ public int RemotePort { get; set; }
+
+ public byte BufferSize { get; set; } = 3;
+
+ [MemoryPackAllowSerialize]
+ public IPEndPoint LocalEP { get; set; }
}
}
diff --git a/linker/plugins/sforward/messenger/SForwardMessengerIds.cs b/linker/plugins/sforward/messenger/SForwardMessengerIds.cs
index 2c46a503..7d57693d 100644
--- a/linker/plugins/sforward/messenger/SForwardMessengerIds.cs
+++ b/linker/plugins/sforward/messenger/SForwardMessengerIds.cs
@@ -10,6 +10,9 @@
Proxy = 2303,
ProxyUdp = 2304,
+ GetForward = 2305,
+ Get = 2306,
+
Max = 2399
}
}
diff --git a/linker/plugins/signIn/SignInApiController.cs b/linker/plugins/signIn/SignInApiController.cs
index ae62078f..b0a46628 100644
--- a/linker/plugins/signIn/SignInApiController.cs
+++ b/linker/plugins/signIn/SignInApiController.cs
@@ -74,6 +74,21 @@ namespace linker.plugins.signin
}
return new SignInListResponseInfo { };
}
+ public async Task Ids(ApiControllerParamsInfo param)
+ {
+ SignInIdsRequestInfo request = param.Content.DeJson();
+ MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
+ {
+ Connection = clientSignInState.Connection,
+ MessengerId = (ushort)SignInMessengerIds.Ids,
+ Payload = MemoryPackSerializer.Serialize(request)
+ }).ConfigureAwait(false);
+ if (resp.Code == MessageResponeCodes.OK)
+ {
+ return MemoryPackSerializer.Deserialize(resp.Data.Span);
+ }
+ return new SignInIdsResponseInfo { };
+ }
public async Task SetName(ApiControllerParamsInfo param)
{
diff --git a/linker/plugins/signIn/messenger/SignInMessenger.cs b/linker/plugins/signIn/messenger/SignInMessenger.cs
index c73cb125..d3bca969 100644
--- a/linker/plugins/signIn/messenger/SignInMessenger.cs
+++ b/linker/plugins/signIn/messenger/SignInMessenger.cs
@@ -8,11 +8,9 @@ namespace linker.plugins.signin.messenger
{
public sealed class SignInClientMessenger : IMessenger
{
- private readonly ConfigWrap config;
private readonly ClientSignInTransfer clientSignInTransfer;
public SignInClientMessenger(ConfigWrap config, ClientSignInTransfer clientSignInTransfer)
{
- this.config = config;
this.clientSignInTransfer = clientSignInTransfer;
}
@@ -58,13 +56,12 @@ namespace linker.plugins.signin.messenger
public void List(IConnection connection)
{
SignInListRequestInfo request = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
-
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
{
IEnumerable list = signCaching.Get(cache.GroupId).OrderByDescending(c => c.MachineName).OrderByDescending(c => c.LastSignIn).OrderByDescending(c => c.Version).ToList();
if (string.IsNullOrWhiteSpace(request.Name) == false)
{
- list = list.Where(c => c.MachineName.Contains(request.Name));
+ list = list.Where(c => c.Version.Contains(request.Name) || c.IP.ToString().Contains(request.Name) || c.MachineName.Contains(request.Name) || request.Ids.Contains(c.MachineId));
}
int count = list.Count();
list = list.Skip((request.Page - 1) * request.Size).Take(request.Size);
@@ -109,6 +106,31 @@ namespace linker.plugins.signin.messenger
connection.Write(MemoryPackSerializer.Serialize(config.Data.Version));
}
+
+ [MessengerId((ushort)SignInMessengerIds.Ids)]
+ public void Ids(IConnection connection)
+ {
+ SignInIdsRequestInfo request = MemoryPackSerializer.Deserialize(connection.ReceiveRequestWrap.Payload.Span);
+ if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
+ {
+ IEnumerable list = signCaching.Get(cache.GroupId).OrderByDescending(c => c.MachineName).OrderByDescending(c => c.LastSignIn).OrderByDescending(c => c.Version).ToList();
+ if (string.IsNullOrWhiteSpace(request.Name) == false)
+ {
+ list = list.Where(c => c.MachineName.Contains(request.Name));
+ }
+ int count = list.Count();
+ list = list.Skip((request.Page - 1) * request.Size).Take(request.Size);
+
+ SignInIdsResponseInfo response = new SignInIdsResponseInfo
+ {
+ Request = request,
+ Count = count,
+ List = list.Select(c => new SignInIdsResponseItemInfo { MachineId = c.MachineId, MachineName = c.MachineName }).ToList()
+ };
+
+ connection.Write(MemoryPackSerializer.Serialize(response));
+ }
+ }
}
[MemoryPackable]
@@ -130,6 +152,10 @@ namespace linker.plugins.signin.messenger
/// 按名称搜索
///
public string Name { get; set; }
+ ///
+ /// 按id获取
+ ///
+ public string[] Ids { get; set; }
}
[MemoryPackable]
@@ -139,4 +165,37 @@ namespace linker.plugins.signin.messenger
public int Count { get; set; }
public List List { get; set; } = new List();
}
+
+
+ [MemoryPackable]
+ public sealed partial class SignInIdsRequestInfo
+ {
+ ///
+ /// 当前页
+ ///
+ public int Page { get; set; } = 1;
+ ///
+ /// 每页大小
+ ///
+ public int Size { get; set; } = 10;
+ ///
+ /// 按名称搜索
+ ///
+ public string Name { get; set; }
+ }
+
+ [MemoryPackable]
+ public sealed partial class SignInIdsResponseInfo
+ {
+ public SignInIdsRequestInfo Request { get; set; } = new SignInIdsRequestInfo();
+ public int Count { get; set; }
+ public List List { get; set; } = new List();
+ }
+
+ [MemoryPackable]
+ public sealed partial class SignInIdsResponseItemInfo
+ {
+ public string MachineId { get; set; }
+ public string MachineName { get; set; }
+ }
}
diff --git a/linker/plugins/signIn/messenger/SignInMessengerIds.cs b/linker/plugins/signIn/messenger/SignInMessengerIds.cs
index 91438414..bcd64f76 100644
--- a/linker/plugins/signIn/messenger/SignInMessengerIds.cs
+++ b/linker/plugins/signIn/messenger/SignInMessengerIds.cs
@@ -11,6 +11,8 @@
Version = 7,
+ Ids = 8,
+
None = 99
}
}
diff --git a/linker/plugins/tunnel/TunnelAdapter.cs b/linker/plugins/tunnel/TunnelAdapter.cs
index 6d5838f2..0991c2cc 100644
--- a/linker/plugins/tunnel/TunnelAdapter.cs
+++ b/linker/plugins/tunnel/TunnelAdapter.cs
@@ -68,10 +68,12 @@ namespace linker.plugins.tunnel
{
return running.Data.Tunnel.Servers;
}
- public void SetTunnelWanPortProtocols(List compacts)
+ public void SetTunnelWanPortProtocols(List compacts, bool updateVersion)
{
running.Data.Tunnel.Servers = compacts;
running.Data.Update();
+ if (updateVersion)
+ runningConfigTransfer.IncrementVersion(wanPortConfigKey);
SyncWanPort();
}
private void SetTunnelWanPortProtocols(Memory data)
@@ -84,10 +86,12 @@ namespace linker.plugins.tunnel
{
return running.Data.Tunnel.Transports;
}
- public void SetTunnelTransports(List transports)
+ public void SetTunnelTransports(List transports, bool updateVersion)
{
running.Data.Tunnel.Transports = transports;
running.Data.Update();
+ if (updateVersion)
+ runningConfigTransfer.IncrementVersion(transportConfigKey);
SyncTransport();
}
private void SetTunnelTransports(Memory data)
diff --git a/linker/plugins/tunnel/TunnelApiController.cs b/linker/plugins/tunnel/TunnelApiController.cs
index 96a9c17c..c9769afc 100644
--- a/linker/plugins/tunnel/TunnelApiController.cs
+++ b/linker/plugins/tunnel/TunnelApiController.cs
@@ -81,7 +81,7 @@ namespace linker.plugins.tunnel
public bool SetServers(ApiControllerParamsInfo param)
{
List info = param.Content.DeJson>();
- tunnelMessengerAdapter.SetTunnelWanPortProtocols(info);
+ tunnelMessengerAdapter.SetTunnelWanPortProtocols(info,true);
return true;
}
@@ -127,7 +127,7 @@ namespace linker.plugins.tunnel
public bool SetTransports(ApiControllerParamsInfo param)
{
List info = param.Content.DeJson>();
- tunnelMessengerAdapter.SetTunnelTransports(info);
+ tunnelMessengerAdapter.SetTunnelTransports(info, true);
return true;
}
diff --git a/linker/plugins/tunnel/TunnelConfigTransfer.cs b/linker/plugins/tunnel/TunnelConfigTransfer.cs
index 5df7bdd1..44785aa3 100644
--- a/linker/plugins/tunnel/TunnelConfigTransfer.cs
+++ b/linker/plugins/tunnel/TunnelConfigTransfer.cs
@@ -3,6 +3,7 @@ using linker.client.config;
using linker.config;
using linker.plugins.tunnel.messenger;
using linker.server;
+using linker.tunnel.adapter;
using linker.tunnel.wanport;
using MemoryPack;
using System.Collections.Concurrent;
@@ -16,6 +17,7 @@ namespace linker.plugins.tunnel
private readonly ClientSignInState clientSignInState;
private readonly MessengerSender messengerSender;
private readonly RunningConfigTransfer runningConfigTransfer;
+ private readonly ITunnelAdapter tunnelAdapter;
private string exipConfigKey = "excludeIPConfig";
@@ -24,13 +26,14 @@ namespace linker.plugins.tunnel
private ConcurrentDictionary configs = new ConcurrentDictionary();
public ConcurrentDictionary Config => configs;
- public TunnelConfigTransfer(ConfigWrap config, RunningConfig running, ClientSignInState clientSignInState, MessengerSender messengerSender, RunningConfigTransfer runningConfigTransfer)
+ public TunnelConfigTransfer(ConfigWrap config, RunningConfig running, ClientSignInState clientSignInState, MessengerSender messengerSender, RunningConfigTransfer runningConfigTransfer, ITunnelAdapter tunnelAdapter)
{
this.config = config;
this.running = running;
this.clientSignInState = clientSignInState;
this.messengerSender = messengerSender;
this.runningConfigTransfer = runningConfigTransfer;
+ this.tunnelAdapter = tunnelAdapter;
clientSignInState.NetworkEnabledHandle += (times) =>
{
@@ -48,9 +51,11 @@ namespace linker.plugins.tunnel
}
private void InitConfig()
{
- if (running.Data.Tunnel.Servers.FirstOrDefault(c => c.Type == TunnelWanPortType.Linker && c.ProtocolType == TunnelWanPortProtocolType.Udp) == null)
+ bool updateVersion = false;
+ List server = running.Data.Tunnel.Servers;
+ if (server.FirstOrDefault(c => c.Type == TunnelWanPortType.Linker && c.ProtocolType == TunnelWanPortProtocolType.Udp) == null)
{
- running.Data.Tunnel.Servers.Add(new TunnelWanPortInfo
+ server.Add(new TunnelWanPortInfo
{
Name = "Linker Udp",
Type = TunnelWanPortType.Linker,
@@ -58,10 +63,11 @@ namespace linker.plugins.tunnel
Disabled = false,
Host = running.Data.Client.Servers.FirstOrDefault().Host,
});
+ updateVersion = true;
}
- if (running.Data.Tunnel.Servers.FirstOrDefault(c => c.Type == TunnelWanPortType.Linker && c.ProtocolType == TunnelWanPortProtocolType.Tcp) == null)
+ if (server.FirstOrDefault(c => c.Type == TunnelWanPortType.Linker && c.ProtocolType == TunnelWanPortProtocolType.Tcp) == null)
{
- running.Data.Tunnel.Servers.Add(new TunnelWanPortInfo
+ server.Add(new TunnelWanPortInfo
{
Name = "Linker Tcp",
Type = TunnelWanPortType.Linker,
@@ -69,7 +75,9 @@ namespace linker.plugins.tunnel
Disabled = false,
Host = running.Data.Client.Servers.FirstOrDefault().Host,
});
+ updateVersion = true;
}
+ tunnelAdapter.SetTunnelWanPortProtocols(server, updateVersion);
}
///
@@ -147,6 +155,7 @@ namespace linker.plugins.tunnel
{
running.Data.Tunnel.ExcludeIPs = ips;
running.Data.Update();
+ runningConfigTransfer.IncrementVersion(exipConfigKey);
SyncExcludeIP();
}
private void SettExcludeIPs(Memory data)
diff --git a/linker/plugins/tunnel/messenger/TunnelMessenger.cs b/linker/plugins/tunnel/messenger/TunnelMessenger.cs
index db92ff9d..265f5299 100644
--- a/linker/plugins/tunnel/messenger/TunnelMessenger.cs
+++ b/linker/plugins/tunnel/messenger/TunnelMessenger.cs
@@ -6,8 +6,6 @@ using linker.tunnel.adapter;
using linker.tunnel.transport;
using linker.libs;
using MemoryPack;
-using linker.tunnel.wanport;
-using linker.client.config;
namespace linker.plugins.tunnel.messenger
{
@@ -15,13 +13,11 @@ namespace linker.plugins.tunnel.messenger
{
private readonly TunnelTransfer tunnel;
private readonly TunnelConfigTransfer tunnelConfigTransfer;
- private readonly ITunnelAdapter tunnelMessengerAdapter;
- public TunnelClientMessenger(TunnelTransfer tunnel, TunnelConfigTransfer tunnelConfigTransfer, ITunnelAdapter tunnelMessengerAdapter)
+ public TunnelClientMessenger(TunnelTransfer tunnel, TunnelConfigTransfer tunnelConfigTransfer)
{
this.tunnel = tunnel;
this.tunnelConfigTransfer = tunnelConfigTransfer;
- this.tunnelMessengerAdapter = tunnelMessengerAdapter;
}
[MessengerId((ushort)TunnelMessengerIds.Begin)]