mirror of
https://github.com/snltty/linker.git
synced 2025-10-07 01:52:51 +08:00
demo
This commit is contained in:
268
linker.messenger.example/Program.cs
Normal file
268
linker.messenger.example/Program.cs
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
using linker.libs;
|
||||||
|
using linker.libs.extends;
|
||||||
|
using linker.messenger.relay.messenger;
|
||||||
|
using linker.messenger.relay.server;
|
||||||
|
using linker.messenger.relay.server.caching;
|
||||||
|
using linker.messenger.relay.server.validator;
|
||||||
|
using linker.messenger.signin;
|
||||||
|
using linker.messenger.tunnel;
|
||||||
|
using linker.plugins.tunnel;
|
||||||
|
using linker.tunnel.transport;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
|
||||||
|
namespace linker.messenger.example
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
public static PublicConfigInfo publicConfigInfo = new PublicConfigInfo();
|
||||||
|
|
||||||
|
static ISerializer serializer;
|
||||||
|
static IMessengerSender messengerSender;
|
||||||
|
static IMessengerResolver messengerResolver;
|
||||||
|
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
//序列化
|
||||||
|
serializer = new Serializer();
|
||||||
|
|
||||||
|
//信标发送和接受
|
||||||
|
messengerSender = new MessengerSender();
|
||||||
|
messengerResolver = new MessengerResolver(messengerSender);
|
||||||
|
messengerResolver.Initialize(publicConfigInfo.Certificate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static SignCaching signCaching;
|
||||||
|
static SignInArgsTransfer signInArgsTransfer;
|
||||||
|
static ISignInStore signInStore;
|
||||||
|
|
||||||
|
static TunnelExternalResolver tunnelExternalResolver;
|
||||||
|
static TunnelMessengerAdapter tunnelMessengerAdapter;
|
||||||
|
static void Server()
|
||||||
|
{
|
||||||
|
|
||||||
|
//登录相关
|
||||||
|
signInArgsTransfer = new SignInArgsTransfer();
|
||||||
|
//signInArgsTransfer.LoadArgs(new List<ISignInArgs>());
|
||||||
|
signInStore = new SignInStore();
|
||||||
|
signCaching = new SignCaching(signInStore, signInArgsTransfer);
|
||||||
|
SignInServerMessenger signInServerMessenger = new SignInServerMessenger(messengerSender, signCaching, serializer);
|
||||||
|
|
||||||
|
//打洞相关
|
||||||
|
tunnelExternalResolver = new TunnelExternalResolver();
|
||||||
|
TunnelServerMessenger tunnelServerMessenger = new TunnelServerMessenger(messengerSender, signCaching, serializer);
|
||||||
|
|
||||||
|
//中继相关
|
||||||
|
IRelayServerMasterStore relayServerMasterStore = new RelayServerMasterStore();
|
||||||
|
IRelayServerNodeStore relayServerNodeStore = new RelayServerNodeStore();
|
||||||
|
RelayServerNodeTransfer relayServerNodeTransfer = new RelayServerNodeTransfer(serializer, relayServerNodeStore, relayServerMasterStore);
|
||||||
|
RelayServerResolver relayServerResolver = new RelayServerResolver(relayServerNodeTransfer, serializer);
|
||||||
|
IRelayServerCaching relayServerCaching = new RelayServerCachingMemory(serializer);
|
||||||
|
RelayServerMasterTransfer relayServerMasterTransfer = new RelayServerMasterTransfer(relayServerCaching, serializer, relayServerMasterStore);
|
||||||
|
RelayServerReportResolver relayServerReportResolver = new RelayServerReportResolver(relayServerMasterTransfer);
|
||||||
|
//自定义中继验证
|
||||||
|
RelayServerValidatorTransfer relayServerValidatorTransfer = new RelayServerValidatorTransfer();
|
||||||
|
//relayServerValidatorTransfer.LoadValidators(new List<IRelayServerValidator> { });
|
||||||
|
RelayServerMessenger relayServerMessenger = new RelayServerMessenger(messengerSender, signCaching, serializer, relayServerMasterTransfer, relayServerValidatorTransfer);
|
||||||
|
|
||||||
|
//加载这些信标处理器
|
||||||
|
messengerResolver.LoadMessenger(new List<IMessenger>
|
||||||
|
{
|
||||||
|
signInServerMessenger,
|
||||||
|
tunnelServerMessenger,
|
||||||
|
relayServerMessenger
|
||||||
|
});
|
||||||
|
|
||||||
|
//TCP
|
||||||
|
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||||
|
socket.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
|
||||||
|
socket.Listen(int.MaxValue);
|
||||||
|
TimerHelper.Async(async () =>
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var client = await socket.AcceptAsync();
|
||||||
|
TimerHelper.Async(async () =>
|
||||||
|
{
|
||||||
|
var bytes = new byte[1024];
|
||||||
|
int length = await client.ReceiveAsync(bytes.AsMemory(0, 1));
|
||||||
|
//信标
|
||||||
|
if (bytes[0] == 0)
|
||||||
|
{
|
||||||
|
await messengerResolver.BeginReceiveServer(socket, Helper.EmptyArray);
|
||||||
|
}
|
||||||
|
//外网端口
|
||||||
|
else if (bytes[0] == 1)
|
||||||
|
{
|
||||||
|
await tunnelExternalResolver.Resolve(client, Helper.EmptyArray);
|
||||||
|
}
|
||||||
|
//中继节点报告
|
||||||
|
else if (bytes[0] == 2)
|
||||||
|
{
|
||||||
|
await relayServerReportResolver.Resolve(client, Helper.EmptyArray);
|
||||||
|
}
|
||||||
|
//中继
|
||||||
|
else if (bytes[0] == 3)
|
||||||
|
{
|
||||||
|
await relayServerResolver.Resolve(client, Helper.EmptyArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//UDP
|
||||||
|
Socket socketUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||||
|
socketUdp.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
|
||||||
|
socketUdp.WindowsUdpBug();
|
||||||
|
TimerHelper.Async(async () =>
|
||||||
|
{
|
||||||
|
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||||
|
byte[] buffer = new byte[1 * 1024 * 1024];
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
SocketReceiveFromResult result = await socketUdp.ReceiveFromAsync(buffer, SocketFlags.None, endPoint).ConfigureAwait(false);
|
||||||
|
IPEndPoint ep = result.RemoteEndPoint as IPEndPoint;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await tunnelExternalResolver.Resolve(socketUdp, ep, buffer.AsMemory(0, result.ReceivedBytes));
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class PublicConfigInfo
|
||||||
|
{
|
||||||
|
public string MachineId { get; set; }
|
||||||
|
public IConnection SignConnection { get; set; }
|
||||||
|
public IPAddress[] LocalIps { get; set; }
|
||||||
|
public int RouteLevel { get; set; }
|
||||||
|
public X509Certificate2 Certificate { get; set; }
|
||||||
|
public List<TunnelTransportItemInfo> TunnelTransports { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public int Port { get; set; } = 12345;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 中继节点信息存储库
|
||||||
|
/// </summary>
|
||||||
|
public sealed class RelayServerNodeStore : IRelayServerNodeStore
|
||||||
|
{
|
||||||
|
public byte Flag => 2;
|
||||||
|
|
||||||
|
public int ServicePort => Program.publicConfigInfo.Port;
|
||||||
|
|
||||||
|
public RelayServerNodeInfo Node => new RelayServerNodeInfo { };
|
||||||
|
|
||||||
|
public void Confirm()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetMaxGbTotalLastBytes(ulong value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetMaxGbTotalMonth(int month)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 中继主机信息存储库
|
||||||
|
/// </summary>
|
||||||
|
public sealed class RelayServerMasterStore : IRelayServerMasterStore
|
||||||
|
{
|
||||||
|
public RelayServerMasterInfo Master => new RelayServerMasterInfo { SecretKey = "snltty" };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义打洞的存储库
|
||||||
|
/// </summary>
|
||||||
|
public sealed class TunnelMessengerAdapterStore : ITunnelMessengerAdapterStore
|
||||||
|
{
|
||||||
|
public IConnection SignConnection => Program.publicConfigInfo.SignConnection;
|
||||||
|
|
||||||
|
public NetworkInfo Network => new NetworkInfo { MachineId = Program.publicConfigInfo.MachineId, LocalIps = Program.publicConfigInfo.LocalIps, RouteLevel = Program.publicConfigInfo.RouteLevel };
|
||||||
|
|
||||||
|
public X509Certificate2 Certificate => Program.publicConfigInfo.Certificate;
|
||||||
|
|
||||||
|
public List<TunnelTransportItemInfo> TunnelTransports => Program.publicConfigInfo.TunnelTransports;
|
||||||
|
|
||||||
|
public TunnelMessengerAdapterStore()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public bool SetTunnelTransports(List<TunnelTransportItemInfo> list)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义序列化
|
||||||
|
/// </summary>
|
||||||
|
public sealed class Serializer : ISerializer
|
||||||
|
{
|
||||||
|
public T Deserialize<T>(ReadOnlySpan<byte> buffer)
|
||||||
|
{
|
||||||
|
return buffer.GetString().DeJson<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] Serialize<T>(T value)
|
||||||
|
{
|
||||||
|
return value.ToJson().ToBytes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义登录持久化存储
|
||||||
|
/// </summary>
|
||||||
|
public sealed class SignInStore : ISignInStore
|
||||||
|
{
|
||||||
|
public void Confirm()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Delete(string id)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SignCacheInfo Find(string id)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<SignCacheInfo> Find()
|
||||||
|
{
|
||||||
|
return new List<SignCacheInfo>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Insert(SignCacheInfo value)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string NewId()
|
||||||
|
{
|
||||||
|
return Guid.NewGuid().ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Update(SignCacheInfo value)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
18
linker.messenger.example/linker.messenger.example.csproj
Normal file
18
linker.messenger.example/linker.messenger.example.csproj
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<EnablePreviewFeatures>true</EnablePreviewFeatures>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\linker.messenger.relay\linker.messenger.relay.csproj" />
|
||||||
|
<ProjectReference Include="..\linker.messenger.tunnel\linker.messenger.tunnel.csproj" />
|
||||||
|
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
|
||||||
|
<ProjectReference Include="..\linker.signin\linker.messenger.signin.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@@ -71,6 +71,8 @@ namespace linker.messenger.relay.client
|
|||||||
IRelayClientTransport transport = Transports.FirstOrDefault(c => c.Type == relayClientStore.RelayType && relayClientStore.Disabled == false);
|
IRelayClientTransport transport = Transports.FirstOrDefault(c => c.Type == relayClientStore.RelayType && relayClientStore.Disabled == false);
|
||||||
if (transport == null)
|
if (transport == null)
|
||||||
{
|
{
|
||||||
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
|
LoggerHelper.Instance.Error($"relay to {remoteMachineId} fail,transport not found {relayClientStore.RelayType},{relayClientStore.Disabled}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@ using linker.messenger.relay.server;
|
|||||||
|
|
||||||
namespace linker.messenger.relay.client.transport
|
namespace linker.messenger.relay.client.transport
|
||||||
{
|
{
|
||||||
public sealed class RelayClientTransportSelfHost : IRelayClientTransport
|
public class RelayClientTransportSelfHost : IRelayClientTransport
|
||||||
{
|
{
|
||||||
public string Name => "Linker";
|
public string Name => "Linker";
|
||||||
public RelayClientType Type => RelayClientType.Linker;
|
public RelayClientType Type => RelayClientType.Linker;
|
||||||
|
@@ -46,7 +46,7 @@ namespace linker.messenger.relay.messenger
|
|||||||
private readonly RelayServerValidatorTransfer relayValidatorTransfer;
|
private readonly RelayServerValidatorTransfer relayValidatorTransfer;
|
||||||
private readonly ISerializer serializer;
|
private readonly ISerializer serializer;
|
||||||
|
|
||||||
public RelayServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer, ISerializer serializer)
|
public RelayServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, ISerializer serializer, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer)
|
||||||
{
|
{
|
||||||
this.messengerSender = messengerSender;
|
this.messengerSender = messengerSender;
|
||||||
this.signCaching = signCaching;
|
this.signCaching = signCaching;
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
using linker.libs;
|
using linker.libs;
|
||||||
using linker.libs.extends;
|
using linker.libs.extends;
|
||||||
using linker.messenger.relay.server.caching;
|
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
@@ -19,13 +18,11 @@ namespace linker.messenger.relay.server
|
|||||||
RelaySpeedLimit limitTotal = new RelaySpeedLimit();
|
RelaySpeedLimit limitTotal = new RelaySpeedLimit();
|
||||||
|
|
||||||
private readonly ISerializer serializer;
|
private readonly ISerializer serializer;
|
||||||
private readonly IRelayServerCaching relayCaching;
|
|
||||||
private readonly IRelayServerNodeStore relayServerNodeStore;
|
private readonly IRelayServerNodeStore relayServerNodeStore;
|
||||||
private readonly IRelayServerMasterStore relayServerMasterStore;
|
private readonly IRelayServerMasterStore relayServerMasterStore;
|
||||||
public RelayServerNodeTransfer(ISerializer serializer, IRelayServerCaching relayCaching, IRelayServerNodeStore relayServerNodeStore, IRelayServerMasterStore relayServerMasterStore)
|
public RelayServerNodeTransfer(ISerializer serializer, IRelayServerNodeStore relayServerNodeStore, IRelayServerMasterStore relayServerMasterStore)
|
||||||
{
|
{
|
||||||
this.serializer = serializer;
|
this.serializer = serializer;
|
||||||
this.relayCaching = relayCaching;
|
|
||||||
this.relayServerNodeStore = relayServerNodeStore;
|
this.relayServerNodeStore = relayServerNodeStore;
|
||||||
this.relayServerMasterStore = relayServerMasterStore;
|
this.relayServerMasterStore = relayServerMasterStore;
|
||||||
|
|
||||||
|
@@ -97,7 +97,6 @@ namespace linker.plugins.tunnel
|
|||||||
transportUdpPortMap,
|
transportUdpPortMap,
|
||||||
new TransportUdp(),
|
new TransportUdp(),
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private NetworkInfo GetLocalConfig()
|
private NetworkInfo GetLocalConfig()
|
||||||
|
@@ -12,6 +12,7 @@ namespace linker.messenger
|
|||||||
public interface IMessengerResolver
|
public interface IMessengerResolver
|
||||||
{
|
{
|
||||||
public void Initialize(string certificate, string password);
|
public void Initialize(string certificate, string password);
|
||||||
|
public void Initialize(X509Certificate2 certificate);
|
||||||
public Task<IConnection> BeginReceiveClient(Socket socket);
|
public Task<IConnection> BeginReceiveClient(Socket socket);
|
||||||
public Task<IConnection> BeginReceiveClient(Socket socket, bool sendFlag, byte flag);
|
public Task<IConnection> BeginReceiveClient(Socket socket, bool sendFlag, byte flag);
|
||||||
public void LoadMessenger(List<IMessenger> list);
|
public void LoadMessenger(List<IMessenger> list);
|
||||||
@@ -31,7 +32,7 @@ namespace linker.messenger
|
|||||||
|
|
||||||
private readonly IMessengerSender messengerSender;
|
private readonly IMessengerSender messengerSender;
|
||||||
|
|
||||||
private X509Certificate serverCertificate;
|
private X509Certificate2 serverCertificate;
|
||||||
public MessengerResolver(IMessengerSender messengerSender)
|
public MessengerResolver(IMessengerSender messengerSender)
|
||||||
{
|
{
|
||||||
this.messengerSender = messengerSender;
|
this.messengerSender = messengerSender;
|
||||||
@@ -42,7 +43,7 @@ namespace linker.messenger
|
|||||||
string path = Path.GetFullPath(certificate);
|
string path = Path.GetFullPath(certificate);
|
||||||
if (File.Exists(path))
|
if (File.Exists(path))
|
||||||
{
|
{
|
||||||
serverCertificate = new X509Certificate(path, password);
|
serverCertificate = new X509Certificate2(path, password, X509KeyStorageFlags.Exportable);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -50,6 +51,10 @@ namespace linker.messenger
|
|||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void Initialize(X509Certificate2 certificate)
|
||||||
|
{
|
||||||
|
serverCertificate = certificate;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void AddReceive(ushort id, ulong bytes) { }
|
public virtual void AddReceive(ushort id, ulong bytes) { }
|
||||||
public virtual void AddSendt(ushort id, ulong bytes) { }
|
public virtual void AddSendt(ushort id, ulong bytes) { }
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
using linker.libs;
|
using linker.libs;
|
||||||
using linker.libs.extends;
|
using linker.libs.extends;
|
||||||
using linker.messenger;
|
|
||||||
|
|
||||||
namespace linker.messenger.signin
|
namespace linker.messenger.signin
|
||||||
{
|
{
|
||||||
@@ -10,7 +9,7 @@ namespace linker.messenger.signin
|
|||||||
private readonly IMessengerSender messengerSender;
|
private readonly IMessengerSender messengerSender;
|
||||||
private readonly ISerializer serializer;
|
private readonly ISerializer serializer;
|
||||||
|
|
||||||
public SignInServerMessenger(SignCaching signCaching, IMessengerSender messengerSender, ISerializer serializer)
|
public SignInServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, ISerializer serializer)
|
||||||
{
|
{
|
||||||
this.signCaching = signCaching;
|
this.signCaching = signCaching;
|
||||||
this.messengerSender = messengerSender;
|
this.messengerSender = messengerSender;
|
||||||
|
16
linker.sln
16
linker.sln
@@ -19,7 +19,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.signin", "
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.tunnel", "linker.messenger.tunnel\linker.messenger.tunnel.csproj", "{92582A55-8BBF-4B82-892D-75CEC8969EAF}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.tunnel", "linker.messenger.tunnel\linker.messenger.tunnel.csproj", "{92582A55-8BBF-4B82-892D-75CEC8969EAF}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.relay", "linker.messenger.relay\linker.messenger.relay.csproj", "{90E99334-FBF6-423F-A636-89B1E71D8FEE}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.relay", "linker.messenger.relay\linker.messenger.relay.csproj", "{90E99334-FBF6-423F-A636-89B1E71D8FEE}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.example", "linker.messenger.example\linker.messenger.example.csproj", "{98970DF9-0996-4111-97BA-DD495A098498}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -139,6 +141,18 @@ Global
|
|||||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x64.Build.0 = Release|Any CPU
|
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.ActiveCfg = Release|Any CPU
|
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.Build.0 = Release|Any CPU
|
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@@ -30,7 +30,7 @@ namespace linker.plugins.relay
|
|||||||
|
|
||||||
public void AddClient(ServiceCollection serviceCollection, FileConfig config)
|
public void AddClient(ServiceCollection serviceCollection, FileConfig config)
|
||||||
{
|
{
|
||||||
serviceCollection.AddSingleton<RelayClientTransportSelfHost>();
|
serviceCollection.AddSingleton<PlusRelayClientTransportSelfHost>();
|
||||||
serviceCollection.AddSingleton<RelayClientTransfer>();
|
serviceCollection.AddSingleton<RelayClientTransfer>();
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using linker.messenger;
|
using linker.libs;
|
||||||
|
using linker.messenger;
|
||||||
using linker.messenger.relay.client;
|
using linker.messenger.relay.client;
|
||||||
using linker.messenger.relay.client.transport;
|
using linker.messenger.relay.client.transport;
|
||||||
using linker.plugins.client;
|
using linker.plugins.client;
|
||||||
@@ -7,7 +8,11 @@ using System.Security.Cryptography.X509Certificates;
|
|||||||
|
|
||||||
namespace linker.plugins.relay.client
|
namespace linker.plugins.relay.client
|
||||||
{
|
{
|
||||||
public class PlusRelayClientStore : IRelayClientStore
|
public sealed class PlusRelayClientTransportSelfHost : RelayClientTransportSelfHost
|
||||||
|
{
|
||||||
|
public PlusRelayClientTransportSelfHost(IMessengerSender messengerSender,ISerializer serializer, IRelayClientStore relayClientStore) :base(messengerSender, serializer, relayClientStore) { }
|
||||||
|
}
|
||||||
|
public sealed class PlusRelayClientStore : IRelayClientStore
|
||||||
{
|
{
|
||||||
public byte Flag => (byte)(ResolverType.Relay);
|
public byte Flag => (byte)(ResolverType.Relay);
|
||||||
|
|
||||||
|
@@ -1,6 +1,4 @@
|
|||||||
using linker.messenger.relay.server;
|
using linker.messenger.relay.server;
|
||||||
using linker.plugins.resolver;
|
|
||||||
using linker.plugins.server;
|
|
||||||
|
|
||||||
namespace linker.plugins.relay.server
|
namespace linker.plugins.relay.server
|
||||||
{
|
{
|
||||||
|
@@ -1,32 +1,36 @@
|
|||||||
using linker.tunnel.transport;
|
using linker.tunnel.transport;
|
||||||
using linker.plugins.client;
|
using linker.plugins.client;
|
||||||
using linker.messenger;
|
using linker.messenger;
|
||||||
using linker.messenger.tunnel;
|
|
||||||
using System.Security.Cryptography.X509Certificates;
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
|
||||||
namespace linker.plugins.tunnel
|
namespace linker.plugins.tunnel
|
||||||
{
|
{
|
||||||
|
public sealed class PlusTunnelMessengerAdapter
|
||||||
|
{
|
||||||
|
public PlusTunnelMessengerAdapter(ClientSignInState clientSignInState,TunnelConfigTransfer tunnelConfigTransfer, TunnelMessengerAdapter tunnelMessengerAdapter)
|
||||||
|
{
|
||||||
|
|
||||||
|
clientSignInState.NetworkEnabledHandle += (times) => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||||
|
tunnelConfigTransfer.OnChanged += () => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||||
|
}
|
||||||
|
}
|
||||||
public sealed class PlusTunnelMessengerAdapterStore : ITunnelMessengerAdapterStore
|
public sealed class PlusTunnelMessengerAdapterStore : ITunnelMessengerAdapterStore
|
||||||
{
|
{
|
||||||
public IConnection SignConnection => clientSignInState.Connection;
|
public IConnection SignConnection => clientSignInState.Connection;
|
||||||
|
|
||||||
public NetworkInfo Network => GetLocalConfig();
|
public NetworkInfo Network => GetLocalConfig();
|
||||||
|
|
||||||
public X509Certificate2 Certificate => tunnelConfigTransfer.Certificate;
|
public X509Certificate2 Certificate => tunnelConfigTransfer.Certificate;
|
||||||
|
|
||||||
public List<TunnelTransportItemInfo> TunnelTransports => tunnelConfigTransfer.Transports;
|
public List<TunnelTransportItemInfo> TunnelTransports => tunnelConfigTransfer.Transports;
|
||||||
|
|
||||||
private readonly ClientSignInState clientSignInState;
|
private readonly ClientSignInState clientSignInState;
|
||||||
private readonly ClientConfigTransfer clientConfigTransfer;
|
private readonly ClientConfigTransfer clientConfigTransfer;
|
||||||
private readonly TunnelConfigTransfer tunnelConfigTransfer;
|
private readonly TunnelConfigTransfer tunnelConfigTransfer;
|
||||||
public PlusTunnelMessengerAdapterStore(ClientSignInState clientSignInState, ClientConfigTransfer clientConfigTransfer, TunnelConfigTransfer tunnelConfigTransfer, TunnelMessengerAdapter tunnelMessengerAdapter)
|
public PlusTunnelMessengerAdapterStore(ClientSignInState clientSignInState, ClientConfigTransfer clientConfigTransfer, TunnelConfigTransfer tunnelConfigTransfer)
|
||||||
{
|
{
|
||||||
this.clientSignInState = clientSignInState;
|
this.clientSignInState = clientSignInState;
|
||||||
this.clientConfigTransfer = clientConfigTransfer;
|
this.clientConfigTransfer = clientConfigTransfer;
|
||||||
this.tunnelConfigTransfer = tunnelConfigTransfer;
|
this.tunnelConfigTransfer = tunnelConfigTransfer;
|
||||||
|
|
||||||
clientSignInState.NetworkEnabledHandle += (times) => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
|
||||||
tunnelConfigTransfer.OnChanged += () => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetTunnelTransports(List<TunnelTransportItemInfo> list)
|
public bool SetTunnelTransports(List<TunnelTransportItemInfo> list)
|
||||||
|
@@ -44,6 +44,8 @@ namespace linker.plugins.tunnel
|
|||||||
//命令接口
|
//命令接口
|
||||||
serviceCollection.AddSingleton<PlusTunnelClientMessenger>();
|
serviceCollection.AddSingleton<PlusTunnelClientMessenger>();
|
||||||
serviceCollection.AddSingleton<ITunnelMessengerAdapterStore, PlusTunnelMessengerAdapterStore>();
|
serviceCollection.AddSingleton<ITunnelMessengerAdapterStore, PlusTunnelMessengerAdapterStore>();
|
||||||
|
serviceCollection.AddSingleton<TunnelMessengerAdapter>();
|
||||||
|
serviceCollection.AddSingleton<PlusTunnelMessengerAdapter>();
|
||||||
|
|
||||||
|
|
||||||
serviceCollection.AddSingleton<TunnelExcludeIPTypesLoader>();
|
serviceCollection.AddSingleton<TunnelExcludeIPTypesLoader>();
|
||||||
@@ -75,6 +77,7 @@ namespace linker.plugins.tunnel
|
|||||||
TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService<TunnelConfigTransfer>();
|
TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService<TunnelConfigTransfer>();
|
||||||
|
|
||||||
ITunnelMessengerAdapterStore tunnelAdapter = serviceProvider.GetService<ITunnelMessengerAdapterStore>();
|
ITunnelMessengerAdapterStore tunnelAdapter = serviceProvider.GetService<ITunnelMessengerAdapterStore>();
|
||||||
|
PlusTunnelMessengerAdapter plusTunnelMessengerAdapter = serviceProvider.GetService<PlusTunnelMessengerAdapter>();
|
||||||
|
|
||||||
LoggerHelper.Instance.Info($"tunnel route level getting.");
|
LoggerHelper.Instance.Info($"tunnel route level getting.");
|
||||||
tunnelConfigTransfer.RefreshRouteLevel();
|
tunnelConfigTransfer.RefreshRouteLevel();
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
v1.6.4
|
v1.6.4
|
||||||
2024-12-19 17:21:14
|
2024-12-20 17:18:32
|
||||||
1. 优化UI,显示网络计算IP数
|
1. 优化UI,显示网络计算IP数
|
||||||
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
|
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
|
||||||
3. 优化网卡的端口转发
|
3. 优化网卡的端口转发
|
||||||
|
Reference in New Issue
Block a user