一些更新

This commit is contained in:
snltty
2024-12-05 17:04:49 +08:00
parent 0f472f3b1c
commit f246f71861
30 changed files with 292 additions and 117 deletions

View File

@@ -37,7 +37,7 @@ jobs:
release_name: v1.6.1.${{ steps.date.outputs.today }}
draft: false
prerelease: false
body: "1. 优化中继节点\r\n2. 优化虚拟网的端口转发,仅有变化时重建列表\r\n3. 优化网点对网和网对网,目标下线后,更新路由\r\n4. 优化端口转发,端口监听失败多尝试几次\r\n5. 新增PCP以客户端为中继节点"
body: "1. 优化中继节点\r\n2. 优化虚拟网的端口转发,仅有变化时重建列表\r\n3. 优化网点对网和网对网,目标下线后,更新路由\r\n4. 优化端口转发,端口监听失败多尝试几次\r\n5. 测试中。。"
- name: upload-win-x86-oss
id: upload-win-x86-oss
uses: tvrcgo/oss-action@v0.1.1

View File

@@ -101,6 +101,7 @@ namespace linker.libs
public void Enqueue(LoggerModel model)
{
if (string.IsNullOrWhiteSpace(model.Content)) return;
queue.Enqueue(model);
}
}

View File

@@ -7,7 +7,7 @@ using System.Collections.Concurrent;
using System.Net.Sockets;
using System.Net;
using linker.tunnel.wanport;
using System.Collections.Generic;
using System.Transactions;
namespace linker.tunnel
{
@@ -137,6 +137,18 @@ namespace linker.tunnel
/// <param name="denyProtocols">本次连接排除那些打洞协议</param>
/// <returns></returns>
public async Task<ITunnelConnection> ConnectAsync(string remoteMachineId, string transactionId, TunnelProtocolType denyProtocols)
{
return await ConnectAsync(remoteMachineId, transactionId, transactionId, denyProtocols);
}
/// <summary>
/// 开始连接对方
/// </summary>
/// <param name="remoteMachineId">对方id</param>
/// <param name="transactionId">事务id随便起你喜欢就好</param>
/// <param name="transactionTag">事务tag随便起你喜欢就好</param>
/// <param name="denyProtocols">本次连接排除那些打洞协议</param>
/// <returns></returns>
public async Task<ITunnelConnection> ConnectAsync(string remoteMachineId, string transactionId, string transactionTag, TunnelProtocolType denyProtocols)
{
if (connectingDic.TryAdd(remoteMachineId, true) == false) return null;
@@ -200,12 +212,13 @@ namespace linker.tunnel
{
Direction = (TunnelDirection)i,
TransactionId = transactionId,
TransactionTag = transactionTag,
TransportName = transport.Name,
TransportType = transport.ProtocolType,
Local = localInfo.Result,
Remote = remoteInfo.Result,
SSL = transportItem.SSL,
FlowId = Interlocked.Increment(ref flowid)
FlowId = Interlocked.Increment(ref flowid),
};
OnConnecting(tunnelTransportInfo);
ParseRemoteEndPoint(tunnelTransportInfo);
@@ -440,7 +453,6 @@ namespace linker.tunnel
}
TimerHelper.Async(async () =>
{
try
{
ITunnelConnection connection = null;

View File

@@ -29,6 +29,7 @@ namespace linker.tunnel.connection
{
P2P = 0,
Relay = 1,
Node = 2,
}
/// <summary>
/// 隧道方向
@@ -82,6 +83,10 @@ namespace linker.tunnel.connection
/// </summary>
public string TransactionId { get; }
/// <summary>
/// 事务标签
/// </summary>
public string TransactionTag { get; }
/// <summary>
/// 协议
/// </summary>
public string TransportName { get; }

View File

@@ -21,6 +21,7 @@ namespace linker.tunnel.connection
public string RemoteMachineId { get; init; }
public string RemoteMachineName { get; init; }
public string TransactionId { get; init; }
public string TransactionTag { get; init; }
public string TransportName { get; init; }
public string Label { get; init; }
public TunnelMode Mode { get; init; }

View File

@@ -18,6 +18,7 @@ namespace linker.tunnel.connection
public string RemoteMachineId { get; init; }
public string RemoteMachineName { get; init; }
public string TransactionId { get; init; }
public string TransactionTag { get; init; }
public string TransportName { get; init; }
public string Label { get; init; }
public TunnelMode Mode { get; init; }

View File

@@ -17,6 +17,7 @@ namespace linker.tunnel.connection
public string RemoteMachineId { get; init; }
public string RemoteMachineName { get; init; }
public string TransactionId { get; init; }
public string TransactionTag { get; init; }
public string TransportName { get; init; }
public string Label { get; init; }
public TunnelMode Mode { get; init; }

View File

@@ -171,19 +171,7 @@ namespace linker.tunnel.transport
/// </summary>
public byte Order { get; set; }
}
public sealed class TunnelTransportItemInfoEqualityComparer : IEqualityComparer<TunnelTransportItemInfo>
{
public bool Equals(TunnelTransportItemInfo x, TunnelTransportItemInfo y)
{
return x.Name == y.Name;
}
public int GetHashCode(TunnelTransportItemInfo obj)
{
return obj.Name.GetHashCode();
}
}
public sealed partial class TunnelTransportInfo
{
/// <summary>
@@ -225,6 +213,11 @@ namespace linker.tunnel.transport
/// </summary>
public uint FlowId { get; set; }
/// <summary>
/// 标签
/// </summary>
public string TransactionTag { get; set; }
/// <summary>
/// 目标ip列表
/// </summary>

View File

@@ -244,6 +244,7 @@ namespace linker.tunnel.transport
Connection = connection,
IPEndPoint = remoteEP,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
RemoteMachineName = tunnelTransportInfo.Remote.MachineName,
TransportName = Name,
@@ -635,6 +636,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = state.TransactionId,
TransactionTag = state.TransactionTag,
TransportName = state.TransportName,
IPEndPoint = remoteEP,
Label = string.Empty,

View File

@@ -195,6 +195,7 @@ namespace linker.tunnel.transport
Socket = targetSocket,
IPEndPoint = targetSocket.RemoteEndPoint as IPEndPoint,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
RemoteMachineName = tunnelTransportInfo.Remote.MachineName,
TransportName = Name,
@@ -296,6 +297,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = _state.TransactionId,
TransactionTag = _state.TransactionTag,
TransportName = _state.TransportName,
IPEndPoint = socket.RemoteEndPoint as IPEndPoint,
Label = string.Empty,

View File

@@ -180,6 +180,7 @@ namespace linker.tunnel.transport
Socket = socket,
IPEndPoint = socket.RemoteEndPoint as IPEndPoint,
TransactionId = state.TransactionId,
TransactionTag = state.TransactionTag,
RemoteMachineId = state.Remote.MachineId,
RemoteMachineName = state.Remote.MachineName,
TransportName = Name,
@@ -235,6 +236,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = state.TransactionId,
TransactionTag = state.TransactionTag,
TransportName = state.TransportName,
IPEndPoint = socket.RemoteEndPoint as IPEndPoint,
Label = string.Empty,

View File

@@ -264,6 +264,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
TransportName = tunnelTransportInfo.TransportName,
IPEndPoint = socket.RemoteEndPoint as IPEndPoint,
Label = string.Empty,
@@ -318,6 +319,7 @@ namespace linker.tunnel.transport
Socket = targetSocket,
IPEndPoint = targetSocket.RemoteEndPoint as IPEndPoint,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
RemoteMachineName = tunnelTransportInfo.Remote.MachineName,
TransportName = Name,

View File

@@ -179,6 +179,7 @@ namespace linker.tunnel.transport
UdpClient = remoteUdp,
IPEndPoint = remoteEP,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
RemoteMachineName = tunnelTransportInfo.Remote.MachineName,
TransportName = Name,
@@ -401,6 +402,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = state.TransactionId,
TransactionTag = state.TransactionTag,
TransportName = state.TransportName,
IPEndPoint = remoteEP,
Label = string.Empty,

View File

@@ -264,6 +264,7 @@ namespace linker.tunnel.transport
Type = TunnelType.P2P,
Mode = TunnelMode.Server,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
TransportName = tunnelTransportInfo.TransportName,
IPEndPoint = state.RemoteEndPoint,
Label = string.Empty,
@@ -317,6 +318,7 @@ namespace linker.tunnel.transport
{
IPEndPoint = ep,
TransactionId = tunnelTransportInfo.TransactionId,
TransactionTag = tunnelTransportInfo.TransactionTag,
RemoteMachineId = tunnelTransportInfo.Remote.MachineId,
RemoteMachineName = tunnelTransportInfo.Remote.MachineName,
TransportName = Name,

View File

@@ -134,7 +134,7 @@ export default {
const state = reactive({
show: true,
protocolTypes:{1:'tcp',2:'udp',4:'msquic'},
types:{0:'打洞',1:'中继'},
types:{0:'打洞',1:'中继',2:'节点'},
transactions:{'forward':'端口转发','tuntap':'虚拟网卡','socks5':'代理转发'},
machineName:connections.value.currentName,
currentRow:{},

View File

@@ -12,7 +12,7 @@
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 2">
<span class="point node" title="中继连接"></span>
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
@@ -38,7 +38,7 @@
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 2">
<span class="point node" title="中继连接"></span>
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>

View File

@@ -10,7 +10,7 @@
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 2">
<span class="point node" title="中继连接"></span>
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>

View File

@@ -10,7 +10,7 @@
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 2">
<span class="point node" title="中继连接"></span>
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>

View File

@@ -22,10 +22,10 @@
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>1. 优化中继节点
2. 优化虚拟网的端口转发,仅有变化时重建列表
2. 优化虚拟网的端口转发,仅有变化时重建列表
3. 优化网点对网和网对网,目标下线后,更新路由
4. 优化端口转发,端口监听失败多尝试几次
5. 新增PCP以客户端为中继节点</Description>
5. 测试中。。</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>

View File

@@ -35,7 +35,7 @@ namespace linker.plugins.forward
this.messengerSender = messengerSender;
clientSignInState.NetworkEnabledHandle += Reset;
CheckTask();
}
@@ -94,69 +94,95 @@ namespace linker.plugins.forward
groupid = fileConfig.Data.Client.Group.Id;
await Task.Delay(5000).ConfigureAwait(false);
Start(10);
Start(false);
});
}
private void Start(int times = 1)
private void CheckTask()
{
uint maxid = running.Data.Forwards.Count > 0 ? running.Data.Forwards.Max(c => c.Id) : 1;
ns.Reset(maxid);
foreach (var item in running.Data.Forwards.Where(c => c.GroupId == fileConfig.Data.Client.Group.Id))
TimerHelper.SetInterval(() =>
{
if (item.Started)
lock (this)
{
Start(item, times);
var items = running.Data.Forwards
.Where(c => c.GroupId == fileConfig.Data.Client.Group.Id)
.Where(c => c.Started && c.Proxy == false && string.IsNullOrWhiteSpace(c.Msg) == false);
foreach (var item in items)
{
Start(item, false);
}
}
else
return true;
}, 30000);
}
private void Start(bool errorStop = true)
{
lock (this)
{
uint maxid = running.Data.Forwards.Count > 0 ? running.Data.Forwards.Max(c => c.Id) : 1;
ns.Reset(maxid);
foreach (var item in running.Data.Forwards.Where(c => c.GroupId == fileConfig.Data.Client.Group.Id))
{
Stop(item);
if (item.Started)
{
Start(item, errorStop);
}
else
{
Stop(item);
}
}
DataVersion.Add();
}
}
private void Start(ForwardInfo forwardInfo, bool errorStop = true)
{
if (forwardInfo.Proxy == false)
{
try
{
forwardProxy.Start(new System.Net.IPEndPoint(forwardInfo.BindIPAddress, forwardInfo.Port), forwardInfo.TargetEP, forwardInfo.MachineId, forwardInfo.BufferSize);
forwardInfo.Port = forwardProxy.LocalEndpoint.Port;
if (forwardInfo.Port > 0)
{
forwardInfo.Started = true;
forwardInfo.Proxy = true;
forwardInfo.Msg = string.Empty;
LoggerHelper.Instance.Debug($"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
}
else
{
if (errorStop)
{
forwardInfo.Started = false;
}
forwardInfo.Msg = $"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail";
LoggerHelper.Instance.Error(forwardInfo.Msg);
}
}
catch (Exception ex)
{
if (errorStop)
{
forwardInfo.Started = false;
}
forwardInfo.Msg = $"{ex.Message},start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail";
LoggerHelper.Instance.Error(ex);
}
}
DataVersion.Add();
}
private void Start(ForwardInfo forwardInfo,int times = 1)
{
TimerHelper.Async(async () =>
{
for (int i = 0; i < times && forwardInfo.Proxy == false; i++)
{
try
{
forwardProxy.Start(new System.Net.IPEndPoint(forwardInfo.BindIPAddress, forwardInfo.Port), forwardInfo.TargetEP, forwardInfo.MachineId, forwardInfo.BufferSize);
forwardInfo.Port = forwardProxy.LocalEndpoint.Port;
if (forwardInfo.Port > 0)
{
forwardInfo.Proxy = true;
forwardInfo.Msg = string.Empty;
LoggerHelper.Instance.Debug($"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
break;
}
else
{
forwardInfo.Msg = $"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail, retry times {times-i}";
LoggerHelper.Instance.Error(forwardInfo.Msg);
}
}
catch (Exception ex)
{
forwardInfo.Msg = $"{ex.Message},start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail, retry times {times - i}";
LoggerHelper.Instance.Error(ex);
}
await Task.Delay(10000);
}
Version.Add();
});
Version.Add();
}
private void Stop()
{
foreach (var item in running.Data.Forwards)
lock (this)
{
Stop(item);
foreach (var item in running.Data.Forwards)
{
Stop(item);
}
}
}
private void Stop(ForwardInfo forwardInfo)

View File

@@ -1,4 +1,5 @@
using linker.config;
using linker.plugins.pcp.messenger;
using linker.startup;
using Microsoft.Extensions.DependencyInjection;
@@ -22,10 +23,13 @@ namespace linker.plugins.pcp
{
serviceCollection.AddSingleton<PcpConfigTransfer>();
serviceCollection.AddSingleton<PcpTransfer>();
serviceCollection.AddSingleton<PcpClientMessenger>();
}
public void AddServer(ServiceCollection serviceCollection, FileConfig config)
{
serviceCollection.AddSingleton<PcpServerMessenger>();
}
public void UseClient(ServiceProvider serviceProvider, FileConfig config)

View File

@@ -1,4 +1,5 @@
using linker.libs;
using linker.libs.extends;
using linker.tunnel;
using linker.tunnel.connection;
@@ -17,8 +18,13 @@ namespace linker.plugins.pcp
tunnelTransfer.SetConnectedCallback(transactionId, OnConnected);
}
private void OnConnected(ITunnelConnection connection)
{
TunnelTagInfo tag = connection.TransactionTag.DeJson<TunnelTagInfo>();
//connection.TransactionId = tag.OriginTransactionId;
// connection.Type = TunnelType.Node;
if (OnConnectedCallbacks.TryGetValue(Helper.GlobalString, out List<Action<ITunnelConnection>> callbacks))
{
foreach (var item in callbacks)
@@ -34,18 +40,12 @@ namespace linker.plugins.pcp
}
}
}
public async Task<ITunnelConnection> ConnectAsync(string remoteMachineId, string transactionId, TunnelProtocolType denyProtocols)
{
await Task.CompletedTask;
return null;
}
public void AddConnection(ITunnelConnection connection)
{
pcpConfigTransfer.AddConnection(connection);
}
private Dictionary<string, List<Action<ITunnelConnection>>> OnConnectedCallbacks { get; } = new Dictionary<string, List<Action<ITunnelConnection>>>();
/// <summary>
/// 设置成功回调
@@ -75,5 +75,25 @@ namespace linker.plugins.pcp
}
public void AddConnection(ITunnelConnection connection)
{
pcpConfigTransfer.AddConnection(connection);
}
sealed class TunnelTagInfo
{
/// <summary>
/// 节点id
/// </summary>
public string NodeId { get; set; }
/// <summary>
/// 原本的事务id
/// </summary>
public string TransactionId { get; set; }
/// <summary>
/// 是哪边的l 和 r
/// </summary>
public char Side { get; set; } = 'l';
}
}
}

View File

@@ -0,0 +1,107 @@
using linker.plugins.signin.messenger;
using linker.tunnel;
using linker.tunnel.transport;
using linker.libs;
using MemoryPack;
using linker.plugins.messenger;
namespace linker.plugins.pcp.messenger
{
public sealed class PcpClientMessenger : IMessenger
{
private readonly TunnelTransfer tunnel;
private readonly IMessengerSender messengerSender;
public PcpClientMessenger(TunnelTransfer tunnel, IMessengerSender messengerSender)
{
this.tunnel = tunnel;
this.messengerSender = messengerSender;
}
[MessengerId((ushort)PcpMessengerIds.Begin)]
public void Begin(IConnection connection)
{
connection.Write(Helper.TrueArray);
}
[MessengerId((ushort)PcpMessengerIds.Fail)]
public void Fail(IConnection connection)
{
}
[MessengerId((ushort)PcpMessengerIds.Success)]
public void Success(IConnection connection)
{
}
}
public sealed class PcpServerMessenger : IMessenger
{
private readonly IMessengerSender messengerSender;
private readonly SignCaching signCaching;
public PcpServerMessenger(IMessengerSender messengerSender, SignCaching signCaching)
{
this.messengerSender = messengerSender;
this.signCaching = signCaching;
}
[MessengerId((ushort)PcpMessengerIds.BeginForward)]
public async Task BeginForward(IConnection connection)
{
TunnelTransportInfo tunnelTransportInfo = MemoryPackSerializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cacheTo) && signCaching.TryGet(connection.Id, out SignCacheInfo cacheFrom) && cacheFrom.GroupId == cacheTo.GroupId)
{
tunnelTransportInfo.Local.MachineName = cacheFrom.MachineName;
tunnelTransportInfo.Remote.MachineName = cacheTo.MachineName;
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cacheTo.Connection,
MessengerId = (ushort)PcpMessengerIds.Begin,
Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
connection.Write(Helper.TrueArray);
}
}
[MessengerId((ushort)PcpMessengerIds.FailForward)]
public async Task FailForward(IConnection connection)
{
TunnelTransportInfo tunnelTransportInfo = MemoryPackSerializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
{
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)PcpMessengerIds.Fail,
Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
}
}
[MessengerId((ushort)PcpMessengerIds.SuccessForward)]
public async Task SuccessForward(IConnection connection)
{
TunnelTransportInfo tunnelTransportInfo = MemoryPackSerializer.Deserialize<TunnelTransportInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(tunnelTransportInfo.Remote.MachineId, out SignCacheInfo cache) && signCaching.TryGet(connection.Id, out SignCacheInfo cache1) && cache.GroupId == cache1.GroupId)
{
tunnelTransportInfo.Local.MachineName = cache1.MachineName;
tunnelTransportInfo.Remote.MachineName = cache.MachineName;
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)PcpMessengerIds.Success,
Payload = MemoryPackSerializer.Serialize(tunnelTransportInfo)
}).ConfigureAwait(false);
}
}
}
}

View File

@@ -0,0 +1,18 @@
namespace linker.plugins.pcp.messenger
{
public enum PcpMessengerIds : ushort
{
_ = 3100,
Begin = 3101,
BeginForward = 3102,
Fail = 3103,
FailForward = 3104,
Success = 3105,
SuccessForward = 3106,
None = 3199
}
}

View File

@@ -127,16 +127,15 @@ namespace linker.plugins.sforward
if (sForwardAddResultInfo.Success)
{
forwardInfo.Proxy = true;
LoggerHelper.Instance.Debug(sForwardAddResultInfo.Message);
forwardInfo.Msg = string.Empty;
LoggerHelper.Instance.Debug(sForwardAddResultInfo.Message);
}
else
{
forwardInfo.Started = false;
LoggerHelper.Instance.Error(sForwardAddResultInfo.Message);
forwardInfo.Msg = sForwardAddResultInfo.Message;
LoggerHelper.Instance.Error(sForwardAddResultInfo.Message);
}
}
});
}

View File

@@ -66,10 +66,6 @@ namespace linker.plugins.tunnel
}
protected virtual void OffLine(string machineId)
{
}
protected virtual async ValueTask<bool> WaitAsync(string machineId)
{
await ValueTask.CompletedTask;
@@ -105,7 +101,6 @@ namespace linker.plugins.tunnel
//不在线就不必连了
if (await clientSignInTransfer.GetOnline(machineId) == false)
{
OffLine(machineId);
return null;
}

View File

@@ -93,7 +93,7 @@ namespace linker.config
TunnelWanPortProtocolType ProtocolType => info.ProtocolType;
[MemoryPackConstructor]
SerializableTunnelWanPortProtocolInfo(string machineId, TunnelWanPortProtocolType protocolType)
SerializableTunnelWanPortProtocolInfo(string machineId, TunnelWanPortProtocolType protocolType)
{
var info = new TunnelWanPortProtocolInfo { MachineId = machineId, ProtocolType = protocolType };
this.info = info;
@@ -317,9 +317,11 @@ namespace linker.config
[MemoryPackInclude]
uint FlowId => tunnelTransportInfo.FlowId;
//[MemoryPackInclude]
//string TransactionTag => tunnelTransportInfo.TransactionTag;
[MemoryPackConstructor]
SerializableTunnelTransportInfo(TunnelTransportWanPortInfo local, TunnelTransportWanPortInfo remote, string transactionId, TunnelProtocolType transportType, string transportName, TunnelDirection direction, bool ssl, byte bufferSize, uint flowid)
SerializableTunnelTransportInfo(TunnelTransportWanPortInfo local, TunnelTransportWanPortInfo remote, string transactionId, TunnelProtocolType transportType, string transportName, TunnelDirection direction, bool ssl, byte bufferSize, uint flowid/*, string transactionTag*/)
{
var tunnelTransportInfo = new TunnelTransportInfo
{
@@ -331,7 +333,8 @@ namespace linker.config
Direction = direction,
SSL = ssl,
BufferSize = bufferSize,
FlowId = flowid
FlowId = flowid,
// TransactionTag = transactionTag
};
this.tunnelTransportInfo = tunnelTransportInfo;
}

View File

@@ -6,7 +6,6 @@ using linker.tunnel.transport;
using linker.libs;
using MemoryPack;
using linker.plugins.messenger;
using System.Collections.Concurrent;
namespace linker.plugins.tunnel.messenger
{
@@ -101,8 +100,6 @@ namespace linker.plugins.tunnel.messenger
{
private readonly IMessengerSender messengerSender;
private readonly SignCaching signCaching;
private readonly ConcurrentDictionary<string, TunnelRecordInfo> records = new ConcurrentDictionary<string, TunnelRecordInfo>();
public TunnelServerMessenger(IMessengerSender messengerSender, SignCaching signCaching)
{
this.messengerSender = messengerSender;
@@ -211,21 +208,4 @@ namespace linker.plugins.tunnel.messenger
}
}
[MemoryPackable]
public sealed partial class TunnelRecordInfo
{
public string MachineName { get; set; }
public uint Times { get; set; }
public ConcurrentDictionary<string, TunnelRecordItemInfo> To { get; set; } = new ConcurrentDictionary<string, TunnelRecordItemInfo>();
}
[MemoryPackable]
public sealed partial class TunnelRecordItemInfo
{
public string MachineName { get; set; }
public uint Times { get; set; }
}
}

View File

@@ -54,10 +54,7 @@ namespace linker.plugins.tuntap
ipConnections.AddOrUpdate(ip, connection, (a, b) => connection);
};
}
protected override void OffLine(string machineId)
{
}
/// <summary>
/// 收到隧道数据,写入网卡
/// </summary>

View File

@@ -1,7 +1,7 @@
v1.6.1
2024-12-04 17:42:21
2024-12-05 17:04:48
1. 优化中继节点
2. 优化虚拟网的端口转发,仅有变化时重建列表
2. 优化虚拟网的端口转发,仅有变化时重建列表
3. 优化网点对网和网对网,目标下线后,更新路由
4. 优化端口转发,端口监听失败多尝试几次
5. 新增PCP以客户端为中继节点
5. 测试中。。