This commit is contained in:
snltty
2024-06-24 21:59:50 +08:00
parent 4ebaaa2640
commit 5d2754d6cb
156 changed files with 966 additions and 909 deletions

View File

@@ -18,6 +18,8 @@
[![star](https://gitee.com/snltty/linker/badge/star.svg?theme=dark)](https://gitee.com/snltty/linker/stargazers)
[![fork](https://gitee.com/snltty/linker/badge/fork.svg?theme=dark)](https://gitee.com/snltty/linker/members)
<a href="./Linker.Tunnel/README.md">Linker.Tunnel 打洞库说明,在你的项目集成</a>
</div>
## 简单说明
@@ -31,7 +33,7 @@
- [x] 打洞连接客户端之间打洞连接TCP打洞、MsQuic打洞 **tunnel**
1. 默认msquic.dll win11+ <a target="_blank" href="https://github.com/dotnet/runtime/tree/main/src/libraries/System.Net.Quic">官方说明</a>win10 请删除 msquic.dll将 msquic-openssl.dll 更名为 msquic.dll
1. 默认msquic.dll win11+ <a target="_blank" href="https://github.com/dotnet/runtime/tree/main/src/libraries/System.Net.Quic">官方说明</a>win10 请删除 msquic.dll将 msquic-openssl.dll 更名为 msquic.dll
2. linux 请按官方说明安装msquic
- [x] 中继连接,客户端之间通过服务器转发连接 **relay**

View File

@@ -1,4 +1,4 @@
namespace linker.libs
namespace Linker.Libs
{
public static class BooleanHelper
{

View File

@@ -1,7 +1,7 @@
using System.Diagnostics;
using System.IO;
namespace linker.libs
namespace Linker.Libs
{
public sealed class CommandHelper
{

View File

@@ -1,7 +1,7 @@
using System;
using System.IO;
namespace linker.libs
namespace Linker.Libs
{
public static class FireWallHelper
{

View File

@@ -2,7 +2,7 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace linker.libs
namespace Linker.Libs
{
public static class GCHelper
{

View File

@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
namespace linker.libs
namespace Linker.Libs
{
public static class Helper
{

View File

@@ -3,12 +3,12 @@ using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
namespace linker.libs
namespace Linker.Libs
{
public sealed class Logger
public sealed class LoggerHelper
{
private static readonly Lazy<Logger> lazy = new Lazy<Logger>(() => new Logger());
public static Logger Instance => lazy.Value;
private static readonly Lazy<LoggerHelper> lazy = new Lazy<LoggerHelper>(() => new LoggerHelper());
public static LoggerHelper Instance => lazy.Value;
private readonly ConcurrentQueue<LoggerModel> queue = new ConcurrentQueue<LoggerModel>();
public Action<LoggerModel> OnLogger { get; set; } = (param) => { };
@@ -20,7 +20,7 @@ namespace linker.libs
public LoggerTypes LoggerLevel { get; set; } = LoggerTypes.WARNING;
#endif
private Logger()
private LoggerHelper()
{
Task.Factory.StartNew(async () =>
{

View File

@@ -6,7 +6,7 @@ using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
namespace linker.libs
namespace Linker.Libs
{
public static class NetworkHelper
{

View File

@@ -1,6 +1,6 @@
using System.Threading;
namespace linker.libs
namespace Linker.Libs
{
public sealed class NumberSpace
{

View File

@@ -1,6 +1,6 @@
using System;
namespace linker.libs
namespace Linker.Libs
{
public sealed class ReceiveDataBuffer
{

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace linker.libs
namespace Linker.Libs
{
public sealed class ReflectionHelper
{

View File

@@ -1,5 +1,5 @@
using linker.libs.extends;
using linker.libs.websocket;
using Linker.Libs.Extends;
using Linker.Libs.Websocket;
using System;
using System.Buffers;
using System.Collections.Concurrent;
@@ -11,7 +11,7 @@ using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace linker.libs.api
namespace Linker.Libs.Api
{
/// <summary>
/// 前段接口服务
@@ -42,7 +42,7 @@ namespace linker.libs.api
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
server.OnConnecting = (connection, header) =>
{
@@ -134,7 +134,7 @@ namespace linker.libs.api
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
return new ApiControllerResponseInfo
{
Content = ex.Message,
@@ -175,7 +175,7 @@ namespace linker.libs.api
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -222,7 +222,7 @@ namespace linker.libs.api
}
catch (Exception)
{
//Logger.Instance.Error(ex);
//LoggerHelper.Instance.Error(ex);
}
}
}
@@ -251,7 +251,7 @@ namespace linker.libs.api
}
catch (Exception)
{
//Logger.Instance.Error(ex);
//LoggerHelper.Instance.Error(ex);
}
}
}

View File

@@ -1,8 +1,8 @@
using linker.libs.websocket;
using Linker.Libs.Websocket;
using System;
using System.Text.Json.Serialization;
namespace linker.libs.api
namespace Linker.Libs.Api
{
/// <summary>
/// 前段接口

View File

@@ -1,7 +1,7 @@
using linker.libs.websocket;
using Linker.Libs.Websocket;
using System;
namespace linker.libs.api
namespace Linker.Libs.Api
{
/// <summary>
/// 前端接口服务

View File

@@ -3,7 +3,7 @@ using System.Buffers.Binary;
using System.Linq;
using System.Net;
namespace linker.libs.extends
namespace Linker.Libs.Extends
{
public static class IPEndPointExtends
{

View File

@@ -2,7 +2,7 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace linker.libs.extends
namespace Linker.Libs.Extends
{
public static class NumberExtends
{

View File

@@ -1,8 +1,8 @@
using linker.libs.jsonConverters;
using Linker.Libs.JsonConverters;
using System.Text.Json;
using System.Text.Unicode;
namespace linker.libs.extends
namespace Linker.Libs.Extends
{
public static class SerialzeExtends
{

View File

@@ -3,7 +3,7 @@ using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
namespace linker.libs.extends
namespace Linker.Libs.Extends
{
public static class SocketExtends
{

View File

@@ -5,7 +5,7 @@ using System.Security.Cryptography;
using System.Text;
using System.Text.Unicode;
namespace linker.libs.extends
namespace Linker.Libs.Extends
{
/// <summary>
/// | Method | Mean | Error | StdDev | Median | Rank | Gen0 | Allocated |

View File

@@ -2,7 +2,7 @@
using System.Text.Json.Serialization;
using System.Text.Json;
namespace linker.libs.jsonConverters
namespace Linker.Libs.JsonConverters
{
public sealed class DateTimeConverter : JsonConverter<DateTime>
{

View File

@@ -3,7 +3,7 @@ using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace linker.libs.jsonConverters
namespace Linker.Libs.JsonConverters
{
public sealed class IPAddressJsonConverter : JsonConverter<IPAddress>
{

View File

@@ -3,7 +3,7 @@ using System.Net;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace linker.libs.jsonConverters
namespace Linker.Libs.JsonConverters
{
public sealed class IPEndpointJsonConverter : JsonConverter<IPEndPoint>
{

View File

@@ -7,13 +7,13 @@
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Configurations>Debug;Release</Configurations>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<Title>linker libs</Title>
<Title>Linker libs</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker libs</Description>
<Description>Linker libs</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageProjectUrl>https://github.com/snltty/Linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/Linker</RepositoryUrl>
<Version>1.1.0</Version>
<AssemblyVersion>1.1.0.1</AssemblyVersion>
<FileVersion>1.1.0.1</FileVersion>

View File

@@ -1,6 +1,6 @@
using System;
namespace linker.libs.socks5
namespace Linker.Libs.Socks5
{
/// <summary>
/// 数据验证结果

View File

@@ -1,11 +1,11 @@
using linker.libs.extends;
using Linker.Libs.Extends;
using System;
using System.Buffers;
using System.Buffers.Binary;
using System.Net;
using System.Text;
namespace linker.libs.socks5
namespace Linker.Libs.Socks5
{
/// <summary>
/// socks5 数据包解析和组装

View File

@@ -1,4 +1,4 @@
namespace linker.libs.web
namespace Linker.Libs.Web
{
/// <summary>
/// web服务

View File

@@ -4,7 +4,7 @@ using System.IO;
using System.Net;
using System.Threading.Tasks;
namespace linker.libs.web
namespace Linker.Libs.Web
{
/// <summary>
/// 本地web管理端服务器
@@ -35,7 +35,7 @@ namespace linker.libs.web
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}, TaskCreationOptions.LongRunning);
}

View File

@@ -1,11 +1,10 @@
using linker.libs;
using linker.libs.extends;
using Linker.Libs.Extends;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
namespace linker.libs.websocket
namespace Linker.Libs.Websocket
{
/// <summary>
/// wensocket客户端
@@ -158,8 +157,8 @@ namespace linker.libs.websocket
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
OnConnectFail(ex.Message);
}
}
@@ -187,8 +186,8 @@ namespace linker.libs.websocket
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
}
private void TargetProcessReceive()
@@ -232,8 +231,8 @@ namespace linker.libs.websocket
catch (Exception ex)
{
CloseClientSocket();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
}

View File

@@ -1,12 +1,11 @@
using linker.libs;
using System;
using System;
using System.Buffers;
using System.Buffers.Binary;
using System.Net;
using System.Security.Cryptography;
using System.Text;
namespace linker.libs.websocket
namespace Linker.Libs.Websocket
{
/// <summary>
/// websocket解析器

View File

@@ -1,5 +1,4 @@
using linker.libs;
using linker.libs.extends;
using Linker.Libs.Extends;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -8,7 +7,7 @@ using System.Net;
using System.Net.Sockets;
using System.Text;
namespace linker.libs.websocket
namespace Linker.Libs.Websocket
{
/// <summary>
/// websocket服务端
@@ -131,7 +130,7 @@ namespace linker.libs.websocket
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
private void ProcessAccept(SocketAsyncEventArgs e)

View File

@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
using System.Security;
using System.Text;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static unsafe class ADVAPI32
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static class GDI32
{

View File

@@ -4,7 +4,7 @@ using System.Net;
using System.Reflection.Metadata;
using System.Runtime.InteropServices;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static unsafe class Kernel32
{

View File

@@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
public static class MSvcrt
{

View File

@@ -2,7 +2,7 @@
using System.Runtime.InteropServices;
using System.Text;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
public static class NetApi32
{

View File

@@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
internal class Powrprof
{

View File

@@ -4,7 +4,7 @@ using System.Runtime.InteropServices;
using System.Runtime.Versioning;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static class SECUR32
{

View File

@@ -1,6 +1,6 @@
using System.Runtime.InteropServices;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
// https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-isos
public class Shlwapi

View File

@@ -3,7 +3,7 @@ using System;
using System.Runtime.InteropServices;
using System.Text;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static class User32
{

View File

@@ -2,7 +2,7 @@
using System.Runtime.InteropServices;
using System.Security;
namespace linker.libs.winapis;
namespace Linker.Libs.Winapis;
public static class WTSAPI32
{

View File

@@ -1,4 +1,4 @@
using linker.libs.winapis;
using Linker.Libs.Winapis;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -10,13 +10,13 @@ using System.Runtime.Serialization;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
using static linker.libs.winapis.WTSAPI32;
using static linker.libs.winapis.ADVAPI32;
using static linker.libs.winapis.Kernel32;
using static linker.libs.winapis.NetApi32;
using static linker.libs.winapis.User32;
using static Linker.Libs.Winapis.WTSAPI32;
using static Linker.Libs.Winapis.ADVAPI32;
using static Linker.Libs.Winapis.Kernel32;
using static Linker.Libs.Winapis.NetApi32;
using static Linker.Libs.Winapis.User32;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
public class Win32Interop
{
@@ -113,22 +113,22 @@ namespace linker.libs.winapis
nint inputDesktop = OpenInputDesktop();
if (inputDesktop == nint.Zero)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error($"OpenInputDesktop fail");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error($"OpenInputDesktop fail");
return false;
}
bool result = SetThreadDesktop(inputDesktop);
if (result == false)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error($"SetThreadDesktop fail");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error($"SetThreadDesktop fail");
}
result &= SwitchDesktop(inputDesktop);
if (result == false)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error($"SwitchDesktop fail");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error($"SwitchDesktop fail");
}
lastInputDesktop = inputDesktop;
@@ -136,9 +136,9 @@ namespace linker.libs.winapis
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
return false;
}
@@ -248,7 +248,7 @@ namespace linker.libs.winapis
}
catch(Exception ex)
{
Logger.Instance.Debug($"CreateInteractiveSystemProcess {ex}");
LoggerHelper.Instance.Debug($"CreateInteractiveSystemProcess {ex}");
}
}

View File

@@ -5,7 +5,7 @@ using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
public static class Wininet
{

View File

@@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace linker.libs.winapis
namespace Linker.Libs.Winapis
{
public static class Wlanapi
{

View File

@@ -1,6 +1,6 @@
namespace linker.service
namespace Linker.Service
{
partial class LinkService
partial class LinkerService
{
/// <summary>
/// 必需的设计器变量。

View File

@@ -1,18 +1,18 @@
using System.Diagnostics;
using System.ServiceProcess;
namespace linker.service
namespace Linker.Service
{
partial class LinkService : ServiceBase
partial class LinkerService : ServiceBase
{
private readonly string[] args;
public LinkService(string[] args)
public LinkerService(string[] args)
{
this.args = args;
InitializeComponent();
}
private string mainExeName = "linker";
private string mainExeName = "Linker";
private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
protected override void OnStart(string[] _args)

View File

@@ -1,6 +1,6 @@
using System.ServiceProcess;
namespace linker.service
namespace Linker.Service
{
internal class Program
{
@@ -15,7 +15,7 @@ namespace linker.service
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new LinkService(args)
new LinkerService(args)
};
ServiceBase.Run(ServicesToRun);
}

View File

@@ -4,7 +4,7 @@
<_LastSelectedProfileId>D:\desktop\cmonitor\cmonitor.sas.service\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
</PropertyGroup>
<ItemGroup>
<Compile Update="LinkService.cs">
<Compile Update="LinkerService.cs">
<SubType>Component</SubType>
</Compile>
</ItemGroup>

View File

@@ -3,15 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33110.190
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker", "linker\linker.csproj", "{267DE8BE-F91C-4CCB-9D58-D33FDA661126}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linker", "Linker\Linker.csproj", "{267DE8BE-F91C-4CCB-9D58-D33FDA661126}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.libs", "linker.libs\linker.libs.csproj", "{00EECF97-99EB-4B12-AAEF-ED2363914275}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linker.Libs", "Linker.libs\Linker.Libs.csproj", "{00EECF97-99EB-4B12-AAEF-ED2363914275}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.tests", "linker.tests\linker.tests.csproj", "{04AA3054-5350-4D8B-97F6-31495AE0609D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linker.Tests", "Linker.tests\Linker.Tests.csproj", "{04AA3054-5350-4D8B-97F6-31495AE0609D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.service", "linker.service\linker.service.csproj", "{E8AB5039-3A42-424F-AAEC-A102C8CAA305}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linker.Service", "Linker.service\Linker.Service.csproj", "{E8AB5039-3A42-424F-AAEC-A102C8CAA305}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.tunnel", "linker.tunnel\linker.tunnel.csproj", "{AFADE8D6-AB00-456B-9F43-53BC95B7B608}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Linker.Tunnel", "Linker.tunnel\Linker.Tunnel.csproj", "{AFADE8D6-AB00-456B-9F43-53BC95B7B608}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -1,10 +1,10 @@
using linker.serializes;
using linker.tunnel.connection;
using linker.tunnel.transport;
using Linker.Serializes;
using Linker.Tunnel.Connection;
using Linker.Tunnel.Transport;
using MemoryPack;
using System.Net;
namespace linker.tests
namespace Linker.Tests
{
[TestClass]
public class MemoryPackIPEndPointSerialize

View File

@@ -19,7 +19,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\linker\linker.csproj" />
<ProjectReference Include="..\Linker\Linker.csproj" />
</ItemGroup>
</Project>

61
linker.tunnel/README.md Normal file
View File

@@ -0,0 +1,61 @@
## Linker.Tunnel 打洞库说明
### 说明
你需要自己实现信标服务器,用于交换打洞信息
```
nuget 安装 Linker.Tunnel
```
### 1、初始化
```
//实现你的适配器
ITunnelAdapter tunnelAdapter = new MyTunnelAdapter();
//获取外网端口类列表
List<ITunnelWanPort> tunnelWanPorts = new List<ITunnelWanPort>{
new TunnelWanPortLinker(), //这是 linker项目的获取外网IP端口的类你可以实现你自己的类
new MyTunnelWanPort() //你自己实现的类
};
//创建一个获取外网端口处理器
TunnelWanPortTransfer tunnelWanPortTransfer = new TunnelWanPortTransfer();
tunnelWanPortTransfer.Init(tunnelAdapter,tunnelWanPorts);
//打洞协议列表
List<ITunnelTransport> transports = new List<ITunnelTransport>{
new TransportMsQuic(), //内置的QUIC
new TransportTcpNutssb() //内置的TCP
};
//创建一个打洞处理器
TunnelTransfer tunnelTransfer = new TunnelTransfer();
tunnelTransfer.Init(tunnelAdapter);
```
### 2、监听打洞成功事件
```
//监听打洞成功事件
tunnelTransfer.SetConnectedCallback("你的事务名",Action<ITunnelConnection> callback);
//移除打洞成功事件
tunnelTransfer.RemoveConnectedCallback("你的事务名",Action<ITunnelConnection> callback)
```
### 3、打洞
```
//会通过 ITunnelAdapter.SendConnectBegin 发送给对方,你需要实现这个方法
tunnelTransfer.ConnectAsync("对方的名字或编号,你自己定,取决于的你信标服务器实现","事务名");
//对方收到消息,你应该调用
tunnelTransfer.OnBegin();
//打洞失败则会调用 ITunnelAdapter.SendConnectFail 发送给对方,你需要实现这个方法
//对方收到消息,你应该调用
tunnelTransfer.OnFail();
//打洞成功则会调用 ITunnelAdapter.SendConnectSuccess 发送给对方,你需要实现这个方法
//对方收到消息,你应该调用
tunnelTransfer.OnSuccess();
```

View File

@@ -1,14 +1,14 @@
using linker.tunnel.adapter;
using linker.tunnel.connection;
using linker.tunnel.transport;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Adapter;
using Linker.Tunnel.Connection;
using Linker.Tunnel.Transport;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
using System.Net.Sockets;
using System.Net;
using linker.tunnel.wanport;
using Linker.Tunnel.WanPort;
namespace linker.tunnel
namespace Linker.Tunnel
{
public sealed class TunnelTransfer
{
@@ -19,10 +19,8 @@ namespace linker.tunnel
private ConcurrentDictionary<string, bool> connectingDic = new ConcurrentDictionary<string, bool>();
private Dictionary<string, List<Action<ITunnelConnection>>> OnConnected { get; } = new Dictionary<string, List<Action<ITunnelConnection>>>();
public TunnelTransfer(TunnelWanPortTransfer compactTransfer, ITunnelAdapter tunnelAdapter)
public TunnelTransfer()
{
this.compactTransfer = compactTransfer;
this.tunnelAdapter = tunnelAdapter;
}
/// <summary>
@@ -52,8 +50,8 @@ namespace linker.tunnel
tunnelAdapter.SetTunnelTransports(transportItems);
Logger.Instance.Warning($"load tunnel transport:{string.Join(",", transports.Select(c => c.Name))}");
Logger.Instance.Warning($"used tunnel transport:{string.Join(",", transportItems.Where(c => c.Disabled == false).Select(c => c.Name))}");
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))}");
}
@@ -116,18 +114,18 @@ namespace linker.tunnel
TunnelTransportWanPortInfo localInfo = await GetLocalInfo();
if (localInfo == null)
{
Logger.Instance.Error($"tunnel {transport.Name} get local external ip fail ");
LoggerHelper.Instance.Error($"tunnel {transport.Name} get local external ip fail ");
break;
}
Logger.Instance.Info($"tunnel {transport.Name} got local external ip {localInfo.ToJson()}");
LoggerHelper.Instance.Info($"tunnel {transport.Name} got local external ip {localInfo.ToJson()}");
//获取对方的外网ip
TunnelTransportWanPortInfo remoteInfo = await tunnelAdapter.GetRemoteWanPort(remoteMachineId);
if (remoteInfo == null)
{
Logger.Instance.Error($"tunnel {transport.Name} get remote {remoteMachineId} external ip fail ");
LoggerHelper.Instance.Error($"tunnel {transport.Name} get remote {remoteMachineId} external ip fail ");
break;
}
Logger.Instance.Info($"tunnel {transport.Name} got remote external ip {remoteInfo.ToJson()}");
LoggerHelper.Instance.Info($"tunnel {transport.Name} got remote external ip {remoteInfo.ToJson()}");
tunnelTransportInfo = new TunnelTransportInfo
{
@@ -150,9 +148,9 @@ namespace linker.tunnel
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -164,9 +162,9 @@ namespace linker.tunnel
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -206,9 +204,9 @@ namespace linker.tunnel
catch (Exception ex)
{
connectingDic.TryRemove(tunnelTransportInfo.Remote.MachineId, out _);
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -269,13 +267,13 @@ namespace linker.tunnel
private void OnConnecting(TunnelTransportInfo tunnelTransportInfo)
{
//if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Info($"tunnel connecting {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName},{tunnelTransportInfo.ToJson()}");
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Info($"tunnel connecting {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName},{tunnelTransportInfo.ToJson()}");
}
private void OnConnectBegin(TunnelTransportInfo tunnelTransportInfo)
{
//if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Info($"tunnel connecting from {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName},{tunnelTransportInfo.ToJson()}");
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Info($"tunnel connecting from {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName},{tunnelTransportInfo.ToJson()}");
}
/// <summary>
@@ -284,8 +282,8 @@ namespace linker.tunnel
/// <param name="connection"></param>
private void _OnConnected(ITunnelConnection connection)
{
//if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Debug($"tunnel connect {connection.RemoteMachineId}->{connection.RemoteMachineName} success->{connection.IPEndPoint},{connection.ToJsonFormat()}");
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Debug($"tunnel connect {connection.RemoteMachineId}->{connection.RemoteMachineName} success->{connection.IPEndPoint},{connection.ToJsonFormat()}");
//调用以下别人注册的回调
if (OnConnected.TryGetValue(Helper.GlobalString, out List<Action<ITunnelConnection>> callbacks))
@@ -305,7 +303,7 @@ namespace linker.tunnel
}
private void OnConnectFail(TunnelTransportInfo tunnelTransportInfo)
{
Logger.Instance.Error($"tunnel connect {tunnelTransportInfo.Remote.MachineId} fail->{tunnelTransportInfo.ToJsonFormat()}");
LoggerHelper.Instance.Error($"tunnel connect {tunnelTransportInfo.Remote.MachineId} fail->{tunnelTransportInfo.ToJsonFormat()}");
}
private void ParseRemoteEndPoint(TunnelTransportInfo tunnelTransportInfo)

View File

@@ -1,9 +1,9 @@
using linker.tunnel.wanport;
using linker.tunnel.transport;
using Linker.Tunnel.WanPort;
using Linker.Tunnel.Transport;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace linker.tunnel.adapter
namespace Linker.Tunnel.Adapter
{
public interface ITunnelAdapter
{
@@ -45,7 +45,7 @@ namespace linker.tunnel.adapter
/// <returns></returns>
public NetworkInfo GetLocalConfig();
/// <summary>
/// 获取远端的外网信息,可以在远端调用 TunnelTransfer.GetWanPort() 发送回来
/// 获取远端的外网信息,比如你是A你要获取B的信息可以在B调用 TunnelTransfer.GetWanPort() 发送回来
/// </summary>
/// <param name="remoteMachineId"></param>
/// <returns></returns>

View File

@@ -1,6 +1,6 @@
using System.Net;
namespace linker.tunnel.connection
namespace Linker.Tunnel.Connection
{
/// <summary>
/// 隧道协议

View File

@@ -1,5 +1,5 @@
using linker.libs.extends;
using linker.libs;
using Linker.Libs.Extends;
using Linker.Libs;
using System.Buffers;
using System.Net.Quic;
using System.Net;
@@ -7,7 +7,7 @@ using System.Text;
using System.Text.Json.Serialization;
using System.Net.Sockets;
namespace linker.tunnel.connection
namespace Linker.Tunnel.Connection
{
/// <summary>
/// msquic
@@ -98,9 +98,9 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -235,9 +235,9 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
Dispose();
}
@@ -250,7 +250,7 @@ namespace linker.tunnel.connection
public void Dispose()
{
Logger.Instance.Error($"tunnel connection writer offline {ToString()}");
LoggerHelper.Instance.Error($"tunnel connection writer offline {ToString()}");
callback?.Closed(this, userToken);
callback = null;

View File

@@ -1,5 +1,5 @@
using linker.libs;
using linker.libs.extends;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Buffers;
using System.Net.Security;
using System.Net;
@@ -7,7 +7,7 @@ using System.Text.Json.Serialization;
using System.Text;
using System.Net.Sockets;
namespace linker.tunnel.connection
namespace Linker.Tunnel.Connection
{
public sealed class TunnelConnectionTcp : ITunnelConnection
{
@@ -109,9 +109,9 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -264,9 +264,9 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
Dispose();
}
@@ -280,7 +280,7 @@ namespace linker.tunnel.connection
public void Dispose()
{
Logger.Instance.Error($"tunnel connection {this.GetHashCode()} writer offline {ToString()}");
LoggerHelper.Instance.Error($"tunnel connection {this.GetHashCode()} writer offline {ToString()}");
callback?.Closed(this, userToken);
callback = null;

View File

@@ -1,12 +1,12 @@
using linker.libs.extends;
using linker.libs;
using Linker.Libs.Extends;
using Linker.Libs;
using System.Buffers;
using System.Net;
using System.Text;
using System.Text.Json.Serialization;
using System.Net.Sockets;
namespace linker.tunnel.connection
namespace Linker.Tunnel.Connection
{
public sealed class TunnelConnectionUdp : ITunnelConnection
{
@@ -83,16 +83,16 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
{
ArrayPool<byte>.Shared.Return(buffer);
Dispose();
Logger.Instance.Error($"tunnel connection writer offline {ToString()}");
LoggerHelper.Instance.Error($"tunnel connection writer offline {ToString()}");
}
}
private async Task CallbackPacket(Memory<byte> packet)
@@ -181,9 +181,9 @@ namespace linker.tunnel.connection
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally

View File

@@ -8,21 +8,21 @@
<PublishAot>false</PublishAot>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<Title>linker tunnel</Title>
<Title>Linker tunnel</Title>
<Version>1.1.0</Version>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker tunnel</Description>
<Description>Linker tunnel</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/snltty/Linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/Linker</RepositoryUrl>
<PackageReleaseNotes>Linker tunnel</PackageReleaseNotes>
<AssemblyVersion>1.1.0.1</AssemblyVersion>
<FileVersion>1.1.0.1</FileVersion>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
<ProjectReference Include="..\Linker.Libs\Linker.Libs.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,11 +1,11 @@
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Buffers;
using System.Net;
using System.Net.Sockets;
namespace linker.tunnel.proxy
namespace Linker.Tunnel.Proxy
{
public partial class TunnelProxy : ITunnelConnectionReceiveCallback
{
@@ -67,8 +67,8 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
await Task.CompletedTask;
}

View File

@@ -1,12 +1,12 @@
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Buffers;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
namespace linker.tunnel.proxy
namespace Linker.Tunnel.Proxy
{
public partial class TunnelProxy
{
@@ -49,7 +49,7 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
/// <summary>
@@ -69,7 +69,7 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
token.Clear();
}
}
@@ -113,7 +113,7 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
/// <summary>
@@ -141,8 +141,8 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
}
/// <summary>
@@ -205,8 +205,8 @@ namespace linker.tunnel.proxy
}
else
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(e.SocketError.ToString());
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(e.SocketError.ToString());
await SendToConnectionClose(token).ConfigureAwait(false);
CloseClientSocket(token);
@@ -214,8 +214,8 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
await SendToConnectionClose(token).ConfigureAwait(false);
CloseClientSocket(token);
}
@@ -285,8 +285,8 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
CloseClientSocket(token);
}
finally
@@ -363,7 +363,7 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
Logger.Instance.Error($"connect {state.IPEndPoint} error -> {ex}");
LoggerHelper.Instance.Error($"connect {state.IPEndPoint} error -> {ex}");
await SendToConnectionClose(token).ConfigureAwait(false);
CloseClientSocket(token);
}
@@ -456,9 +456,9 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
await SendToConnectionClose(token1).ConfigureAwait(false);

View File

@@ -1,11 +1,11 @@
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
namespace linker.tunnel.proxy
namespace Linker.Tunnel.Proxy
{
public partial class TunnelProxy
{
@@ -37,7 +37,7 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
private async Task ReceiveUdp(AsyncUserUdpToken token)
@@ -68,9 +68,9 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
break;
}
@@ -172,9 +172,9 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
if (udpConnections.TryRemove(connectId, out AsyncUserUdpTokenTarget token))
{
@@ -195,9 +195,9 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -243,9 +243,9 @@ namespace linker.tunnel.proxy
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex.Message);
LoggerHelper.Instance.Error(ex.Message);
}
}
finally

View File

@@ -1,8 +1,7 @@
using linker.tunnel.connection;
using Linker.Tunnel.Connection;
using System.Net;
using System.Text.Json.Serialization;
namespace linker.tunnel.transport
namespace Linker.Tunnel.Transport
{
public interface ITunnelTransport
{

View File

@@ -1,7 +1,7 @@
using linker.tunnel.adapter;
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Adapter;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Buffers;
using System.Collections.Concurrent;
using System.Net;
@@ -11,7 +11,7 @@ using System.Net.Sockets;
using System.Security.Authentication;
using System.Text;
namespace linker.tunnel.transport
namespace Linker.Tunnel.Transport
{
public sealed class TransportMsQuic : ITunnelTransport
{
@@ -66,13 +66,13 @@ namespace linker.tunnel.transport
{
if (QuicListener.IsSupported == false)
{
Logger.Instance.Error($"msquic not supported, need win11+,or linux");
LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux");
await OnSendConnectFail(tunnelTransportInfo);
return null;
}
if (tunnelAdapter.Certificate == null)
{
Logger.Instance.Error($"msquic need ssl");
LoggerHelper.Instance.Error($"msquic need ssl");
await OnSendConnectFail(tunnelTransportInfo);
return null;
}
@@ -126,13 +126,13 @@ namespace linker.tunnel.transport
{
if (QuicListener.IsSupported == false)
{
Logger.Instance.Error($"msquic not supported, need win11+,or linux");
LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux");
await OnSendConnectFail(tunnelTransportInfo);
return;
}
if (tunnelAdapter.Certificate == null)
{
Logger.Instance.Error($"msquic need ssl");
LoggerHelper.Instance.Error($"msquic need ssl");
await OnSendConnectFail(tunnelTransportInfo);
return;
}
@@ -165,9 +165,9 @@ namespace linker.tunnel.transport
/// <returns></returns>
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
}
IPEndPoint local = new IPEndPoint(tunnelTransportInfo.Local.Local.Address, tunnelTransportInfo.Local.Local.Port);
@@ -180,9 +180,9 @@ namespace linker.tunnel.transport
{
try
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
}
if (ep.AddressFamily == AddressFamily.InterNetwork)
{
@@ -192,9 +192,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex.Message);
LoggerHelper.Instance.Error(ex.Message);
}
}
}
@@ -242,9 +242,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
try
@@ -268,9 +268,9 @@ namespace linker.tunnel.transport
{
try
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} ttl to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ip}");
LoggerHelper.Instance.Warning($"{Name} ttl to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ip}");
}
if (ip.AddressFamily == AddressFamily.InterNetwork)
@@ -294,9 +294,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex.Message);
LoggerHelper.Instance.Error(ex.Message);
}
}
finally
@@ -360,9 +360,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -411,9 +411,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
localUdp.SafeClose();
remoteUdp.SafeClose();
@@ -453,9 +453,9 @@ namespace linker.tunnel.transport
catch (Exception ex)
{
token.Clear();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -495,9 +495,9 @@ namespace linker.tunnel.transport
catch (Exception ex)
{
token.Clear();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -531,9 +531,9 @@ namespace linker.tunnel.transport
catch (Exception ex)
{
token.Clear();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -564,9 +564,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
local.SafeClose();
remote.SafeClose();
@@ -633,9 +633,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -652,12 +652,12 @@ namespace linker.tunnel.transport
{
if (QuicListener.IsSupported == false)
{
Logger.Instance.Error($"msquic not supported, need win11+,or linux");
LoggerHelper.Instance.Error($"msquic not supported, need win11+,or linux");
return;
}
if (tunnelAdapter.Certificate == null)
{
Logger.Instance.Error($"msquic need ssl");
LoggerHelper.Instance.Error($"msquic need ssl");
return;
}
@@ -706,9 +706,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}

View File

@@ -1,7 +1,7 @@
using linker.tunnel.adapter;
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Adapter;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Security;
@@ -9,7 +9,7 @@ using System.Net.Sockets;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
namespace linker.tunnel.transport
namespace Linker.Tunnel.Transport
{
public sealed class TunnelTransportTcpNutssb : ITunnelTransport
{
@@ -93,7 +93,7 @@ namespace linker.tunnel.transport
{
if (tunnelTransportInfo.SSL && tunnelAdapter.Certificate == null)
{
Logger.Instance.Error($"{Name}->ssl Certificate not found");
LoggerHelper.Instance.Error($"{Name}->ssl Certificate not found");
await OnSendConnectSuccess(tunnelTransportInfo);
return;
}
@@ -140,9 +140,9 @@ namespace linker.tunnel.transport
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
}
foreach (IPEndPoint ep in tunnelTransportInfo.RemoteEndPoints)
@@ -155,9 +155,9 @@ namespace linker.tunnel.transport
targetSocket.KeepAlive();
targetSocket.ReuseBind(new IPEndPoint(ep.AddressFamily == AddressFamily.InterNetwork ? IPAddress.Any : IPAddress.IPv6Any, tunnelTransportInfo.Local.Local.Port));
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
}
await targetSocket.ConnectAsync(ep).WaitAsync(TimeSpan.FromMilliseconds(ep.Address.Equals(tunnelTransportInfo.Remote.Remote.Address) ? 500 : 100));
@@ -254,7 +254,7 @@ namespace linker.tunnel.transport
{
if (tunnelAdapter.Certificate == null)
{
Logger.Instance.Error($"{Name}-> ssl Certificate not found");
LoggerHelper.Instance.Error($"{Name}-> ssl Certificate not found");
socket.SafeClose();
return;
}
@@ -289,9 +289,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}

View File

@@ -1,12 +1,12 @@
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace linker.tunnel.transport
namespace Linker.Tunnel.Transport
{
public sealed class TransportUdp : ITunnelTransport
{
@@ -96,9 +96,9 @@ namespace linker.tunnel.transport
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {string.Join("\r\n", tunnelTransportInfo.RemoteEndPoints.Select(c => c.ToString()))}");
}
IPEndPoint local = new IPEndPoint(tunnelTransportInfo.Local.Local.Address, tunnelTransportInfo.Local.Local.Port);
@@ -110,9 +110,9 @@ namespace linker.tunnel.transport
{
try
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
LoggerHelper.Instance.Warning($"{Name} connect to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ep}");
}
if (ep.AddressFamily == AddressFamily.InterNetwork)
{
@@ -126,9 +126,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex.Message);
LoggerHelper.Instance.Error(ex.Message);
}
}
}
@@ -166,9 +166,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
try
@@ -267,9 +267,9 @@ namespace linker.tunnel.transport
{
udpClient.Close();
udpClient6.Close();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -299,9 +299,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally
@@ -315,9 +315,9 @@ namespace linker.tunnel.transport
{
try
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Warning($"{Name} ttl to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ip}");
LoggerHelper.Instance.Warning($"{Name} ttl to {tunnelTransportInfo.Remote.MachineId}->{tunnelTransportInfo.Remote.MachineName} {ip}");
}
if (ip.AddressFamily == AddressFamily.InterNetwork)
@@ -341,9 +341,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex.Message);
LoggerHelper.Instance.Error(ex.Message);
}
}
finally
@@ -417,9 +417,9 @@ namespace linker.tunnel.transport
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}

View File

@@ -1,6 +1,6 @@
using System.Net;
namespace linker.tunnel.wanport
namespace Linker.Tunnel.WanPort
{
/// <summary>
/// 外网端口协议

View File

@@ -1,8 +1,8 @@
using linker.libs.extends;
using Linker.Libs.Extends;
using System.Net;
using System.Net.Sockets;
namespace linker.tunnel.wanport
namespace Linker.Tunnel.WanPort
{
public sealed class TunnelWanPortLinker : ITunnelWanPort
{

View File

@@ -1,9 +1,9 @@
using linker.libs.extends;
using Linker.Libs.Extends;
using System.Buffers.Binary;
using System.Net;
using System.Net.Sockets;
namespace linker.tunnel.wanport
namespace Linker.Tunnel.WanPort
{
public sealed class TunnelWanPortStun : ITunnelWanPort
{

View File

@@ -1,9 +1,9 @@
using linker.tunnel.adapter;
using linker.libs;
using Linker.Tunnel.Adapter;
using Linker.Libs;
using System.Diagnostics;
using System.Net;
namespace linker.tunnel.wanport
namespace Linker.Tunnel.WanPort
{
/// <summary>
/// 外网端口协议
@@ -26,7 +26,7 @@ namespace linker.tunnel.wanport
this.tunnelAdapter = tunnelAdapter;
this.tunnelWanPorts = tunnelWanPorts;
Logger.Instance.Warning($"load tunnel wanport compacts:{string.Join(",", tunnelWanPorts.Select(c => c.Name))}");
LoggerHelper.Instance.Warning($"load tunnel wanport compacts:{string.Join(",", tunnelWanPorts.Select(c => c.Name))}");
}
public List<TunnelWanPortTypeInfo> GetTypes()
@@ -56,7 +56,7 @@ namespace linker.tunnel.wanport
sw.Stop();
if (sw.ElapsedMilliseconds > 1000)
{
Logger.Instance.Warning($"get domain ip time:{sw.ElapsedMilliseconds}ms");
LoggerHelper.Instance.Warning($"get domain ip time:{sw.ElapsedMilliseconds}ms");
}
TunnelWanPortEndPoint WanPort = await tunnelWanPort.GetAsync(server);
if (WanPort != null)
@@ -67,7 +67,7 @@ namespace linker.tunnel.wanport
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
return null;

View File

@@ -16,4 +16,4 @@ COPY . .
ENTRYPOINT ["./linker.run"]
ENTRYPOINT ["./Linker.run"]

View File

@@ -1,10 +1,10 @@
using linker.libs;
using Linker.Libs;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
using linker.startup;
using linker.config;
using Linker.Startup;
using Linker.Config;
namespace linker
namespace Linker
{
internal class Program
{
@@ -19,9 +19,9 @@ namespace linker
Init();
//初始化配置文件
Config config = new Config();
ConfigWrap config = new ConfigWrap();
Logger.Instance.Warning($"current version : {config.Data.Version}");
LoggerHelper.Instance.Warning($"current version : {config.Data.Version}");
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
@@ -47,7 +47,7 @@ namespace linker
//全局异常
AppDomain.CurrentDomain.UnhandledException += (a, b) =>
{
Logger.Instance.Error(b.ExceptionObject + "");
LoggerHelper.Instance.Error(b.ExceptionObject + "");
};
//线程数
ThreadPool.SetMinThreads(1024, 1024);
@@ -63,7 +63,7 @@ namespace linker
{
Directory.CreateDirectory("logs");
}
Logger.Instance.OnLogger += (model) =>
LoggerHelper.Instance.OnLogger += (model) =>
{
ConsoleColor currentForeColor = Console.ForegroundColor;
switch (model.Type)

View File

@@ -1,6 +1,6 @@
{
"profiles": {
"linker": {
"Linker": {
"commandName": "Project"
},
"Docker": {

View File

@@ -1,7 +1,7 @@
using linker.server;
using Linker.Server;
using System.Text.Json.Serialization;
namespace linker.client
namespace Linker.Client
{
/// <summary>
/// 登入对象

View File

@@ -1,15 +1,15 @@
using linker.client.args;
using linker.client.config;
using linker.config;
using linker.plugins.signin.messenger;
using linker.server;
using linker.libs;
using linker.libs.extends;
using Linker.Client.Args;
using Linker.Client.Config;
using Linker.Config;
using Linker.Plugins.Signin.Messenger;
using Linker.Server;
using Linker.Libs;
using Linker.Libs.Extends;
using MemoryPack;
using System.Net;
using System.Net.Sockets;
namespace linker.client
namespace Linker.Client
{
/// <summary>
/// 登入
@@ -18,12 +18,12 @@ namespace linker.client
{
private readonly ClientSignInState clientSignInState;
private readonly RunningConfig runningConfig;
private readonly Config config;
private readonly ConfigWrap config;
private readonly TcpServer tcpServer;
private readonly MessengerSender messengerSender;
private readonly SignInArgsTransfer signInArgsTransfer;
public ClientSignInTransfer(ClientSignInState clientSignInState, RunningConfig runningConfig, Config config, TcpServer tcpServer, MessengerSender messengerSender, SignInArgsTransfer signInArgsTransfer)
public ClientSignInTransfer(ClientSignInState clientSignInState, RunningConfig runningConfig, ConfigWrap config, TcpServer tcpServer, MessengerSender messengerSender, SignInArgsTransfer signInArgsTransfer)
{
this.clientSignInState = clientSignInState;
this.runningConfig = runningConfig;
@@ -54,8 +54,8 @@ namespace linker.client
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
}
await Task.Delay(10000);
@@ -80,8 +80,8 @@ namespace linker.client
try
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Info($"connect to signin server :{config.Data.Client.Server}");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Info($"connect to signin server :{config.Data.Client.Server}");
IPEndPoint ip = NetworkHelper.GetEndPoint(config.Data.Client.Server, 1802);
@@ -102,8 +102,8 @@ namespace linker.client
}
catch (Exception ex)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Error(ex);
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex);
}
finally
{

View File

@@ -1,13 +1,12 @@
using linker.config;
using linker.libs;
using linker.startup;
using linker.libs;
using Linker.Libs;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
using linker.client.args;
using linker.client.config;
using Linker.Client.Args;
using Linker.Client.Config;
using Linker.Config;
namespace linker.client
namespace Linker.Client
{
/// <summary>
/// 客户端插件
@@ -20,7 +19,7 @@ namespace linker.client
public string[] Dependent => new string[] { "firewall", "signin", "serialize" };
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<RunningConfig>();
@@ -31,21 +30,21 @@ namespace linker.client
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
Logger.Instance.Info($"start client");
LoggerHelper.Instance.Info($"start client");
Logger.Instance.Info($"start client signin transfer");
LoggerHelper.Instance.Info($"start client signin transfer");
ClientSignInTransfer clientTransfer = serviceProvider.GetService<ClientSignInTransfer>();
clientTransfer.SignInTask();
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,4 +1,4 @@
namespace linker.client.args
namespace Linker.Client.Args
{
public interface ISignInArgs
{

View File

@@ -1,15 +1,15 @@
using linker.config;
using linker.libs;
using Linker.Config;
using Linker.Libs;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace linker.client.args
namespace Linker.Client.Args
{
public sealed class SignInArgsTransfer
{
private List<ISignInArgs> startups;
public SignInArgsTransfer(ServiceProvider serviceProvider, Config config)
public SignInArgsTransfer(ServiceProvider serviceProvider, ConfigWrap config)
{
var types = ReflectionHelper.GetInterfaceSchieves(typeof(ISignInArgs));
startups = types.Select(c => serviceProvider.GetService(c) as ISignInArgs).Where(c=>c != null).ToList();

View File

@@ -1,7 +1,7 @@
using linker.libs.api;
using Linker.Libs.Api;
using System.Reflection;
namespace linker.client.capi
namespace Linker.Client.Capi
{
public interface IApiClientController : IApiController
{

View File

@@ -1,10 +1,10 @@
using linker.config;
using linker.libs.extends;
using Linker.Config;
using Linker.Libs.Extends;
using LiteDB;
using MemoryPack;
using System.Net;
namespace linker.client.config
namespace Linker.Client.Config
{
public sealed partial class RunningConfigInfo
{
@@ -32,7 +32,7 @@ namespace linker.client.config
}
}
namespace linker.config
namespace Linker.Config
{
public sealed partial class ConfigInfo
{

View File

@@ -1,9 +1,9 @@
using linker.database;
using linker.libs;
using Linker.Store;
using Linker.Libs;
using LiteDB;
using System.Text.Json.Serialization;
namespace linker.client.config
namespace Linker.Client.Config
{
public sealed class RunningConfig
{
@@ -33,7 +33,7 @@ namespace linker.client.config
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
finally
{
@@ -78,7 +78,7 @@ namespace linker.client.config
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
finally
{

View File

@@ -1,11 +1,11 @@
using linker.libs;
using linker.libs.extends;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Reflection;
using System.Text.Json.Serialization;
namespace linker.config
namespace Linker.Config
{
public sealed class Config
public sealed class ConfigWrap
{
private SemaphoreSlim slim = new SemaphoreSlim(1);
private string configPath = "./configs/";
@@ -14,7 +14,7 @@ namespace linker.config
public ConfigInfo Data { get; private set; } = new ConfigInfo();
public Config()
public ConfigWrap()
{
Init();
Load();
@@ -70,7 +70,7 @@ namespace linker.config
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
finally
{
@@ -98,7 +98,7 @@ namespace linker.config
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
finally
{
@@ -149,7 +149,7 @@ namespace linker.config
get => loggerType; set
{
loggerType = value;
Logger.Instance.LoggerLevel = value;
LoggerHelper.Instance.LoggerLevel = value;
}
}
public int LoggerSize { get; set; } = 100;

View File

@@ -16,15 +16,15 @@
<SignAssembly>true</SignAssembly>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<ServerGarbageCollection>false</ServerGarbageCollection>
<Title>linker</Title>
<Title>Linker</Title>
<Version>1.1.0</Version>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker</Description>
<Description>Linker</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/snltty/Linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/Linker</RepositoryUrl>
<PackageReleaseNotes>Linker</PackageReleaseNotes>
<AssemblyVersion>1.1.0.1</AssemblyVersion>
<FileVersion>1.1.0.1</FileVersion>
</PropertyGroup>
@@ -60,8 +60,8 @@
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\linker.tunnel\linker.tunnel.csproj" />
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
<ProjectReference Include="..\Linker.tunnel\Linker.Tunnel.csproj" />
<ProjectReference Include="..\Linker.Libs\Linker.Libs.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="LiteDB" Version="5.0.17" />

View File

@@ -1,11 +1,11 @@
using linker.client.capi;
using linker.config;
using linker.libs;
using linker.libs.api;
using Linker.Client.Capi;
using Linker.Config;
using Linker.Libs;
using Linker.Libs.Api;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.capi
namespace Linker.Plugins.Capi
{
/// <summary>
/// 前段接口服务
@@ -13,9 +13,9 @@ namespace linker.plugins.capi
public sealed class ApiClientServer : ApiServer, IApiClientServer
{
private readonly ServiceProvider serviceProvider;
private readonly Config config;
private readonly ConfigWrap config;
public ApiClientServer(ServiceProvider serviceProvider, Config config)
public ApiClientServer(ServiceProvider serviceProvider, ConfigWrap config)
{
this.serviceProvider = serviceProvider;
this.config = config;
@@ -38,7 +38,7 @@ namespace linker.plugins.capi
{
continue;
}
Logger.Instance.Warning($"load client api:{item.Name}");
LoggerHelper.Instance.Warning($"load client api:{item.Name}");
string path = item.Name.Replace("ApiController", "").Replace("ApiController", "");
foreach (MethodInfo method in item.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly))

View File

@@ -1,11 +1,11 @@
using linker.client.capi;
using linker.config;
using linker.startup;
using linker.libs;
using Linker.Client.Capi;
using Linker.Config;
using Linker.Startup;
using Linker.Libs;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.capi
namespace Linker.Plugins.Capi
{
public sealed class CApiStartup : IStartup
{
@@ -15,38 +15,38 @@ namespace linker.plugins.capi
public string[] Dependent => new string[] {};
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<IApiClientServer, ApiClientServer>();
serviceCollection.AddSingleton<IWebClientServer, WebClientServer>();
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
if (config.Data.Client.CApi.ApiPort > 0)
{
Logger.Instance.Info($"start client api server");
LoggerHelper.Instance.Info($"start client api server");
IApiClientServer clientServer = serviceProvider.GetService<IApiClientServer>();
clientServer.LoadPlugins(assemblies);
clientServer.Websocket(config.Data.Client.CApi.ApiPort, config.Data.Client.CApi.ApiPassword);
Logger.Instance.Warning($"client api listen:{config.Data.Client.CApi.ApiPort}");
Logger.Instance.Warning($"client api password:{config.Data.Client.CApi.ApiPassword}");
LoggerHelper.Instance.Warning($"client api listen:{config.Data.Client.CApi.ApiPort}");
LoggerHelper.Instance.Warning($"client api password:{config.Data.Client.CApi.ApiPassword}");
}
if (config.Data.Client.CApi.WebPort > 0)
{
IWebClientServer webServer = serviceProvider.GetService<IWebClientServer>();
webServer.Start(config.Data.Client.CApi.WebPort, config.Data.Client.CApi.WebRoot);
Logger.Instance.Warning($"client web listen:{config.Data.Client.CApi.WebPort}");
LoggerHelper.Instance.Warning($"client web listen:{config.Data.Client.CApi.WebPort}");
}
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,6 +1,6 @@
using linker.libs.web;
using Linker.Libs.Web;
namespace linker.plugins.capi
namespace Linker.Plugins.Capi
{
public interface IWebClientServer : IWebServer
{

View File

@@ -1,6 +1,6 @@
using linker.libs;
using Linker.Libs;
namespace linker.config
namespace Linker.Config
{
public partial class ConfigClientInfo
{

View File

@@ -1,13 +1,13 @@
using linker.client.capi;
using linker.plugins.relay;
using linker.tunnel;
using linker.tunnel.connection;
using linker.libs;
using linker.libs.api;
using linker.libs.extends;
using Linker.Client.Capi;
using Linker.Plugins.Relay;
using Linker.Tunnel;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Api;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
namespace linker.plugins.connections
namespace Linker.Plugins.Connections
{
public sealed class ConnectionsApiController : IApiClientController
{

View File

@@ -1,9 +1,9 @@
using linker.config;
using linker.startup;
using Linker.Config;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.connections
namespace Linker.Plugins.Connections
{
public sealed class ConnectionsStartup : IStartup
{
@@ -17,21 +17,21 @@ namespace linker.plugins.connections
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<ConnectionsApiController>();
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,9 +1,9 @@
using linker.config;
using linker.startup;
using Linker.Config;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.firewall
namespace Linker.Plugins.Firewall
{
public sealed class FireWallStartup : IStartup
{
@@ -13,23 +13,23 @@ namespace linker.plugins.firewall
public string[] Dependent => new string[] { };
public StartupLoadType LoadType => StartupLoadType.Dependent;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
#if DEBUG
#else
linker.libs.FireWallHelper.Write(Path.GetFileNameWithoutExtension(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName), "./plugins/firewall");
Linker.Libs.FireWallHelper.Write(Path.GetFileNameWithoutExtension(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName), "./plugins/firewall");
#endif
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,11 +1,11 @@
using linker.libs.api;
using linker.libs.extends;
using linker.client.capi;
using linker.client.config;
using Linker.Libs.Api;
using Linker.Libs.Extends;
using Linker.Client.Capi;
using Linker.Client.Config;
using System.Net;
using linker.libs;
using Linker.Libs;
namespace linker.plugins.forward
namespace Linker.Plugins.Forward
{
public sealed class ForwardClientApiController : IApiClientController
{

View File

@@ -1,10 +1,10 @@
using linker.config;
using linker.plugins.forward.proxy;
using linker.startup;
using Linker.Config;
using Linker.Plugins.Forward.Proxy;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.forward
namespace Linker.Plugins.Forward
{
public sealed class ForwardStartup : IStartup
{
@@ -16,7 +16,7 @@ namespace linker.plugins.forward
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<ForwardClientApiController>();
serviceCollection.AddSingleton<ForwardTransfer>();
@@ -24,16 +24,16 @@ namespace linker.plugins.forward
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
ForwardTransfer forwardTransfer = serviceProvider.GetService<ForwardTransfer>();
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,9 +1,9 @@
using linker.client;
using linker.client.config;
using linker.plugins.forward.proxy;
using linker.libs;
using Linker.Client;
using Linker.Client.Config;
using Linker.Libs;
using Linker.Plugins.Forward.Proxy;
namespace linker.plugins.forward
namespace Linker.Plugins.Forward
{
public sealed class ForwardTransfer
{
@@ -50,12 +50,12 @@ namespace linker.plugins.forward
{
forwardInfo.Proxy = true;
forwardInfo.Msg = string.Empty;
Logger.Instance.Debug($"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
LoggerHelper.Instance.Debug($"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
}
else
{
forwardInfo.Msg = $"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail";
Logger.Instance.Error(forwardInfo.Msg);
LoggerHelper.Instance.Error(forwardInfo.Msg);
}
}
@@ -63,7 +63,7 @@ namespace linker.plugins.forward
{
forwardInfo.Started = false;
forwardInfo.Msg = ex.Message;
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
}
@@ -73,14 +73,14 @@ namespace linker.plugins.forward
{
if (forwardInfo.Proxy)
{
Logger.Instance.Debug($"stop forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
LoggerHelper.Instance.Debug($"stop forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP}");
forwardProxy.Stop(forwardInfo.Port);
forwardInfo.Proxy = false;
}
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}

View File

@@ -2,7 +2,7 @@
using System.Net;
using System.Text.Json.Serialization;
namespace linker.client.config
namespace Linker.Client.Config
{
public sealed partial class RunningConfigInfo
{

View File

@@ -1,18 +1,18 @@
using linker.config;
using linker.plugins.relay;
using linker.tunnel;
using linker.tunnel.connection;
using linker.tunnel.proxy;
using linker.libs;
using linker.libs.extends;
using Linker.Config;
using Linker.Plugins.Relay;
using Linker.Tunnel;
using Linker.Tunnel.Connection;
using Linker.Tunnel.Proxy;
using Linker.Libs;
using Linker.Libs.Extends;
using System.Collections.Concurrent;
using System.Net;
namespace linker.plugins.forward.proxy
namespace Linker.Plugins.Forward.Proxy
{
public sealed class ForwardProxy : TunnelProxy
{
private readonly Config config;
private readonly ConfigWrap config;
private readonly TunnelTransfer tunnelTransfer;
private readonly RelayTransfer relayTransfer;
@@ -20,7 +20,7 @@ namespace linker.plugins.forward.proxy
private readonly ConcurrentDictionary<string, ITunnelConnection> connections = new ConcurrentDictionary<string, ITunnelConnection>();
private readonly ConcurrentDictionary<string, SemaphoreSlim> locks = new ConcurrentDictionary<string, SemaphoreSlim>();
public ForwardProxy(Config config,TunnelTransfer tunnelTransfer, RelayTransfer relayTransfer)
public ForwardProxy(ConfigWrap config,TunnelTransfer tunnelTransfer, RelayTransfer relayTransfer)
{
this.config = config;
this.tunnelTransfer = tunnelTransfer;
@@ -33,8 +33,8 @@ namespace linker.plugins.forward.proxy
}
private void OnConnected(ITunnelConnection connection)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
Logger.Instance.Warning($"TryAdd {connection.GetHashCode()} {connection.TransactionId} {connection.ToJson()}");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Warning($"TryAdd {connection.GetHashCode()} {connection.TransactionId} {connection.ToJson()}");
//把隧道对象添加到缓存,方便下次直接获取
connections.AddOrUpdate(connection.RemoteMachineId, connection, (a, b) => connection);
@@ -104,22 +104,22 @@ namespace linker.plugins.forward.proxy
return connection;
}
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) Logger.Instance.Debug($"forward tunnel to {machineId}");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward tunnel to {machineId}");
//打洞
connection = await tunnelTransfer.ConnectAsync(machineId, "forward");
if (connection != null)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) Logger.Instance.Debug($"forward tunnel to {machineId} success");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward tunnel to {machineId} success");
}
//打洞失败
if (connection == null)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) Logger.Instance.Debug($"forward relay to {machineId}");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward relay to {machineId}");
//尝试中继
connection = await relayTransfer.ConnectAsync(config.Data.Client.Id,machineId, "forward");
if (connection != null)
{
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) Logger.Instance.Debug($"forward relay to {machineId} success");
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"forward relay to {machineId} success");
}
}
if (connection != null)

View File

@@ -1,20 +1,20 @@
using linker.libs.extends;
using linker.libs.api;
using linker.libs;
using linker.config;
using linker.client.capi;
using Linker.Libs.Extends;
using Linker.Libs.Api;
using Linker.Libs;
using Linker.Config;
using Linker.Client.Capi;
namespace linker.plugins.logger
namespace Linker.Plugins.Logger
{
public sealed class LoggerClientApiController : IApiClientController
{
private readonly List<LoggerModel> loggers = new List<LoggerModel>();
private readonly Config config;
public LoggerClientApiController(Config config)
private readonly ConfigWrap config;
public LoggerClientApiController(ConfigWrap config)
{
this.config = config;
Logger.Instance.OnLogger += (LoggerModel logger) =>
LoggerHelper.Instance.OnLogger += (LoggerModel logger) =>
{
loggers.Add(logger);
if (loggers.Count > config.Data.Common.LoggerSize)

View File

@@ -1,9 +1,9 @@
using linker.config;
using linker.startup;
using Linker.Config;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.logger
namespace Linker.Plugins.Logger
{
public sealed class LoggerStartup : IStartup
{
@@ -17,22 +17,22 @@ namespace linker.plugins.logger
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<LoggerClientApiController>();
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
LoggerClientApiController logger = serviceProvider.GetService<LoggerClientApiController>();
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,25 +1,25 @@
using linker.client;
using linker.client.capi;
using linker.config;
using linker.plugins.relay.messenger;
using linker.server;
using linker.libs.api;
using linker.libs.extends;
using Linker.Client;
using Linker.Client.Capi;
using Linker.Config;
using Linker.Plugins.Relay.Messenger;
using Linker.Server;
using Linker.Libs.Api;
using Linker.Libs.Extends;
using MemoryPack;
namespace linker.plugins.relay
namespace Linker.Plugins.Relay
{
/// <summary>
/// 中继管理接口
/// </summary>
public sealed class RelayApiController : IApiClientController
{
private readonly Config config;
private readonly ConfigWrap config;
private readonly RelayTransfer relayTransfer;
private readonly ClientSignInState clientSignInState;
private readonly MessengerSender messengerSender;
public RelayApiController(Config config, RelayTransfer relayTransfer, ClientSignInState clientSignInState, MessengerSender messengerSender)
public RelayApiController(ConfigWrap config, RelayTransfer relayTransfer, ClientSignInState clientSignInState, MessengerSender messengerSender)
{
this.config = config;
this.relayTransfer = relayTransfer;

View File

@@ -1,11 +1,11 @@
using linker.config;
using linker.plugins.relay.messenger;
using linker.plugins.relay.transport;
using linker.startup;
using Linker.Config;
using Linker.Plugins.Relay.Messenger;
using Linker.Plugins.Relay.Transport;
using Linker.Startup;
using Microsoft.Extensions.DependencyInjection;
using System.Reflection;
namespace linker.plugins.relay
namespace Linker.Plugins.Relay
{
/// <summary>
/// 中继插件
@@ -21,7 +21,7 @@ namespace linker.plugins.relay
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddClient(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<RelayApiController>();
serviceCollection.AddSingleton<RelayClientMessenger>();
@@ -30,18 +30,18 @@ namespace linker.plugins.relay
}
public void AddServer(ServiceCollection serviceCollection, Config config, Assembly[] assemblies)
public void AddServer(ServiceCollection serviceCollection, ConfigWrap config, Assembly[] assemblies)
{
serviceCollection.AddSingleton<RelayServerMessenger>();
}
public void UseClient(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseClient(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
RelayTransfer relayTransfer = serviceProvider.GetService<RelayTransfer>();
relayTransfer.Load(assemblies);
}
public void UseServer(ServiceProvider serviceProvider, Config config, Assembly[] assemblies)
public void UseServer(ServiceProvider serviceProvider, ConfigWrap config, Assembly[] assemblies)
{
}
}

View File

@@ -1,15 +1,15 @@
using linker.client.config;
using linker.config;
using linker.plugins.relay.transport;
using linker.tunnel.connection;
using linker.libs;
using linker.libs.extends;
using Linker.Client.Config;
using Linker.Config;
using Linker.Plugins.Relay.Transport;
using Linker.Tunnel.Connection;
using Linker.Libs;
using Linker.Libs.Extends;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Concurrent;
using System.Net;
using System.Reflection;
namespace linker.plugins.relay
namespace Linker.Plugins.Relay
{
/// <summary>
/// 中继
@@ -24,7 +24,7 @@ namespace linker.plugins.relay
private ConcurrentDictionary<string, bool> connectingDic = new ConcurrentDictionary<string, bool>();
private Dictionary<string, List<Action<ITunnelConnection>>> OnConnected { get; } = new Dictionary<string, List<Action<ITunnelConnection>>>();
public RelayTransfer(RunningConfig running, ServiceProvider serviceProvider, Config config)
public RelayTransfer(RunningConfig running, ServiceProvider serviceProvider, ConfigWrap config)
{
this.running = running;
this.serviceProvider = serviceProvider;
@@ -52,7 +52,7 @@ namespace linker.plugins.relay
IEnumerable<Type> types = ReflectionHelper.GetInterfaceSchieves(assembs, typeof(ITransport));
transports = types.Select(c => (ITransport)serviceProvider.GetService(c)).Where(c => c != null).Where(c => string.IsNullOrWhiteSpace(c.Name) == false).ToList();
Logger.Instance.Warning($"load relay transport:{string.Join(",", transports.Select(c => c.Name))}");
LoggerHelper.Instance.Warning($"load relay transport:{string.Join(",", transports.Select(c => c.Name))}");
}
/// <summary>
/// 获取所有中继协议
@@ -136,23 +136,23 @@ namespace linker.plugins.relay
SSL = item.SSL
};
Logger.Instance.Info($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} {relayInfo.ToJson()}");
LoggerHelper.Instance.Info($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} {relayInfo.ToJson()}");
ITunnelConnection connection = await transport.RelayAsync(relayInfo);
if (connection != null)
{
Logger.Instance.Debug($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}");
LoggerHelper.Instance.Debug($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}");
ConnectedCallback(relayInfo, connection);
return connection;
}
else
{
Logger.Instance.Error($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} fail,{relayInfo.ToJson()}");
LoggerHelper.Instance.Error($"relay to {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} fail,{relayInfo.ToJson()}");
}
}
}
catch (Exception ex)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
finally
{
@@ -181,7 +181,7 @@ namespace linker.plugins.relay
ITunnelConnection connection = await _transports.OnBeginAsync(relayInfo);
if (connection != null)
{
Logger.Instance.Debug($"relay from {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}");
LoggerHelper.Instance.Debug($"relay from {relayInfo.RemoteMachineId}->{relayInfo.RemoteMachineName} success,{relayInfo.ToJson()}");
ConnectedCallback(relayInfo, connection);
return true;
}
@@ -190,9 +190,9 @@ namespace linker.plugins.relay
}
catch (Exception ex)
{
if(Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG)
if(LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
Logger.Instance.Error(ex);
LoggerHelper.Instance.Error(ex);
}
}
finally

View File

@@ -1,10 +1,10 @@
using linker.config;
using Linker.Config;
using LiteDB;
using MemoryPack;
using System.Diagnostics.CodeAnalysis;
namespace linker.client.config
namespace Linker.Client.Config
{
public sealed partial class RunningConfigInfo
{
@@ -19,7 +19,7 @@ namespace linker.client.config
}
namespace linker.config
namespace Linker.Config
{
public partial class ConfigServerInfo
{

Some files were not shown because too many files have changed in this diff Show More