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) [![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) [![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> </div>
## 简单说明 ## 简单说明
@@ -31,7 +33,7 @@
- [x] 打洞连接客户端之间打洞连接TCP打洞、MsQuic打洞 **tunnel** - [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 2. linux 请按官方说明安装msquic
- [x] 中继连接,客户端之间通过服务器转发连接 **relay** - [x] 中继连接,客户端之间通过服务器转发连接 **relay**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
namespace linker.libs.extends namespace Linker.Libs.Extends
{ {
public static class NumberExtends 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.Json;
using System.Text.Unicode; using System.Text.Unicode;
namespace linker.libs.extends namespace Linker.Libs.Extends
{ {
public static class SerialzeExtends public static class SerialzeExtends
{ {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
using System.Runtime.InteropServices; 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 // https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-isos
public class Shlwapi public class Shlwapi

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,15 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.4.33110.190 VisualStudioVersion = 17.4.33110.190
MinimumVisualStudioVersion = 10.0.40219.1 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 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 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 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 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 EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
using linker.tunnel.adapter; using Linker.Tunnel.Adapter;
using linker.tunnel.connection; using Linker.Tunnel.Connection;
using linker.libs; using Linker.Libs;
using linker.libs.extends; using Linker.Libs.Extends;
using System.Buffers; using System.Buffers;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
@@ -11,7 +11,7 @@ using System.Net.Sockets;
using System.Security.Authentication; using System.Security.Authentication;
using System.Text; using System.Text;
namespace linker.tunnel.transport namespace Linker.Tunnel.Transport
{ {
public sealed class TransportMsQuic : ITunnelTransport public sealed class TransportMsQuic : ITunnelTransport
{ {
@@ -66,13 +66,13 @@ namespace linker.tunnel.transport
{ {
if (QuicListener.IsSupported == false) 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); await OnSendConnectFail(tunnelTransportInfo);
return null; return null;
} }
if (tunnelAdapter.Certificate == null) if (tunnelAdapter.Certificate == null)
{ {
Logger.Instance.Error($"msquic need ssl"); LoggerHelper.Instance.Error($"msquic need ssl");
await OnSendConnectFail(tunnelTransportInfo); await OnSendConnectFail(tunnelTransportInfo);
return null; return null;
} }
@@ -126,13 +126,13 @@ namespace linker.tunnel.transport
{ {
if (QuicListener.IsSupported == false) 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); await OnSendConnectFail(tunnelTransportInfo);
return; return;
} }
if (tunnelAdapter.Certificate == null) if (tunnelAdapter.Certificate == null)
{ {
Logger.Instance.Error($"msquic need ssl"); LoggerHelper.Instance.Error($"msquic need ssl");
await OnSendConnectFail(tunnelTransportInfo); await OnSendConnectFail(tunnelTransportInfo);
return; return;
} }
@@ -165,9 +165,9 @@ namespace linker.tunnel.transport
/// <returns></returns> /// <returns></returns>
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo) 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); IPEndPoint local = new IPEndPoint(tunnelTransportInfo.Local.Local.Address, tunnelTransportInfo.Local.Local.Port);
@@ -180,9 +180,9 @@ namespace linker.tunnel.transport
{ {
try 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) if (ep.AddressFamily == AddressFamily.InterNetwork)
{ {
@@ -192,9 +192,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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) catch (Exception ex)
{ {
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
try try
@@ -268,9 +268,9 @@ namespace linker.tunnel.transport
{ {
try 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) if (ip.AddressFamily == AddressFamily.InterNetwork)
@@ -294,9 +294,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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 finally
@@ -360,9 +360,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) catch (Exception ex)
{ {
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
finally finally
@@ -411,9 +411,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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(); localUdp.SafeClose();
remoteUdp.SafeClose(); remoteUdp.SafeClose();
@@ -453,9 +453,9 @@ namespace linker.tunnel.transport
catch (Exception ex) catch (Exception ex)
{ {
token.Clear(); 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) catch (Exception ex)
{ {
token.Clear(); token.Clear();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
finally finally
@@ -531,9 +531,9 @@ namespace linker.tunnel.transport
catch (Exception ex) catch (Exception ex)
{ {
token.Clear(); token.Clear();
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
finally finally
@@ -564,9 +564,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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(); local.SafeClose();
remote.SafeClose(); remote.SafeClose();
@@ -633,9 +633,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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) 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; return;
} }
if (tunnelAdapter.Certificate == null) if (tunnelAdapter.Certificate == null)
{ {
Logger.Instance.Error($"msquic need ssl"); LoggerHelper.Instance.Error($"msquic need ssl");
return; return;
} }
@@ -706,9 +706,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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.Adapter;
using linker.tunnel.connection; using Linker.Tunnel.Connection;
using linker.libs; using Linker.Libs;
using linker.libs.extends; using Linker.Libs.Extends;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
using System.Net.Security; using System.Net.Security;
@@ -9,7 +9,7 @@ using System.Net.Sockets;
using System.Security.Authentication; using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
namespace linker.tunnel.transport namespace Linker.Tunnel.Transport
{ {
public sealed class TunnelTransportTcpNutssb : ITunnelTransport public sealed class TunnelTransportTcpNutssb : ITunnelTransport
{ {
@@ -93,7 +93,7 @@ namespace linker.tunnel.transport
{ {
if (tunnelTransportInfo.SSL && tunnelAdapter.Certificate == null) 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); await OnSendConnectSuccess(tunnelTransportInfo);
return; return;
} }
@@ -140,9 +140,9 @@ namespace linker.tunnel.transport
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo) 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) foreach (IPEndPoint ep in tunnelTransportInfo.RemoteEndPoints)
@@ -155,9 +155,9 @@ namespace linker.tunnel.transport
targetSocket.KeepAlive(); targetSocket.KeepAlive();
targetSocket.ReuseBind(new IPEndPoint(ep.AddressFamily == AddressFamily.InterNetwork ? IPAddress.Any : IPAddress.IPv6Any, tunnelTransportInfo.Local.Local.Port)); 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)); 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) if (tunnelAdapter.Certificate == null)
{ {
Logger.Instance.Error($"{Name}-> ssl Certificate not found"); LoggerHelper.Instance.Error($"{Name}-> ssl Certificate not found");
socket.SafeClose(); socket.SafeClose();
return; return;
} }
@@ -289,9 +289,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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.Tunnel.Connection;
using linker.libs; using Linker.Libs;
using linker.libs.extends; using Linker.Libs.Extends;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
namespace linker.tunnel.transport namespace Linker.Tunnel.Transport
{ {
public sealed class TransportUdp : ITunnelTransport public sealed class TransportUdp : ITunnelTransport
{ {
@@ -96,9 +96,9 @@ namespace linker.tunnel.transport
private async Task<ITunnelConnection> ConnectForward(TunnelTransportInfo tunnelTransportInfo) 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); IPEndPoint local = new IPEndPoint(tunnelTransportInfo.Local.Local.Address, tunnelTransportInfo.Local.Local.Port);
@@ -110,9 +110,9 @@ namespace linker.tunnel.transport
{ {
try 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) if (ep.AddressFamily == AddressFamily.InterNetwork)
{ {
@@ -126,9 +126,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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) catch (Exception ex)
{ {
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
try try
@@ -267,9 +267,9 @@ namespace linker.tunnel.transport
{ {
udpClient.Close(); udpClient.Close();
udpClient6.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) catch (Exception ex)
{ {
if (Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
finally finally
@@ -315,9 +315,9 @@ namespace linker.tunnel.transport
{ {
try 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) if (ip.AddressFamily == AddressFamily.InterNetwork)
@@ -341,9 +341,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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 finally
@@ -417,9 +417,9 @@ namespace linker.tunnel.transport
} }
catch (Exception ex) 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; using System.Net;
namespace linker.tunnel.wanport namespace Linker.Tunnel.WanPort
{ {
/// <summary> /// <summary>
/// 外网端口协议 /// 外网端口协议

View File

@@ -1,8 +1,8 @@
using linker.libs.extends; using Linker.Libs.Extends;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
namespace linker.tunnel.wanport namespace Linker.Tunnel.WanPort
{ {
public sealed class TunnelWanPortLinker : ITunnelWanPort 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.Buffers.Binary;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
namespace linker.tunnel.wanport namespace Linker.Tunnel.WanPort
{ {
public sealed class TunnelWanPortStun : ITunnelWanPort public sealed class TunnelWanPortStun : ITunnelWanPort
{ {

View File

@@ -1,9 +1,9 @@
using linker.tunnel.adapter; using Linker.Tunnel.Adapter;
using linker.libs; using Linker.Libs;
using System.Diagnostics; using System.Diagnostics;
using System.Net; using System.Net;
namespace linker.tunnel.wanport namespace Linker.Tunnel.WanPort
{ {
/// <summary> /// <summary>
/// 外网端口协议 /// 外网端口协议
@@ -26,7 +26,7 @@ namespace linker.tunnel.wanport
this.tunnelAdapter = tunnelAdapter; this.tunnelAdapter = tunnelAdapter;
this.tunnelWanPorts = tunnelWanPorts; 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() public List<TunnelWanPortTypeInfo> GetTypes()
@@ -56,7 +56,7 @@ namespace linker.tunnel.wanport
sw.Stop(); sw.Stop();
if (sw.ElapsedMilliseconds > 1000) 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); TunnelWanPortEndPoint WanPort = await tunnelWanPort.GetAsync(server);
if (WanPort != null) if (WanPort != null)
@@ -67,7 +67,7 @@ namespace linker.tunnel.wanport
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
return null; 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 Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
using linker.startup; using Linker.Startup;
using linker.config; using Linker.Config;
namespace linker namespace Linker
{ {
internal class Program internal class Program
{ {
@@ -19,9 +19,9 @@ namespace linker
Init(); 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(); Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
@@ -47,7 +47,7 @@ namespace linker
//全局异常 //全局异常
AppDomain.CurrentDomain.UnhandledException += (a, b) => AppDomain.CurrentDomain.UnhandledException += (a, b) =>
{ {
Logger.Instance.Error(b.ExceptionObject + ""); LoggerHelper.Instance.Error(b.ExceptionObject + "");
}; };
//线程数 //线程数
ThreadPool.SetMinThreads(1024, 1024); ThreadPool.SetMinThreads(1024, 1024);
@@ -63,7 +63,7 @@ namespace linker
{ {
Directory.CreateDirectory("logs"); Directory.CreateDirectory("logs");
} }
Logger.Instance.OnLogger += (model) => LoggerHelper.Instance.OnLogger += (model) =>
{ {
ConsoleColor currentForeColor = Console.ForegroundColor; ConsoleColor currentForeColor = Console.ForegroundColor;
switch (model.Type) switch (model.Type)

View File

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

View File

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

View File

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

View File

@@ -1,13 +1,12 @@
using linker.config; using Linker.Libs;
using linker.libs; using Linker.Startup;
using linker.startup;
using linker.libs;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
using linker.client.args; using Linker.Client.Args;
using linker.client.config; using Linker.Client.Config;
using Linker.Config;
namespace linker.client namespace Linker.Client
{ {
/// <summary> /// <summary>
/// 客户端插件 /// 客户端插件
@@ -20,7 +19,7 @@ namespace linker.client
public string[] Dependent => new string[] { "firewall", "signin", "serialize" }; public string[] Dependent => new string[] { "firewall", "signin", "serialize" };
public StartupLoadType LoadType => StartupLoadType.Normal; 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>(); 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>(); ClientSignInTransfer clientTransfer = serviceProvider.GetService<ClientSignInTransfer>();
clientTransfer.SignInTask(); 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 public interface ISignInArgs
{ {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,9 @@
using linker.config; using Linker.Config;
using linker.startup; using Linker.Startup;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
namespace linker.plugins.connections namespace Linker.Plugins.Connections
{ {
public sealed class ConnectionsStartup : IStartup public sealed class ConnectionsStartup : IStartup
{ {
@@ -17,21 +17,21 @@ namespace linker.plugins.connections
public StartupLoadType LoadType => StartupLoadType.Normal; 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>(); 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.Config;
using linker.startup; using Linker.Startup;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
namespace linker.plugins.firewall namespace Linker.Plugins.Firewall
{ {
public sealed class FireWallStartup : IStartup public sealed class FireWallStartup : IStartup
{ {
@@ -13,23 +13,23 @@ namespace linker.plugins.firewall
public string[] Dependent => new string[] { }; public string[] Dependent => new string[] { };
public StartupLoadType LoadType => StartupLoadType.Dependent; 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 #if DEBUG
#else #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 #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.Api;
using linker.libs.extends; using Linker.Libs.Extends;
using linker.client.capi; using Linker.Client.Capi;
using linker.client.config; using Linker.Client.Config;
using System.Net; using System.Net;
using linker.libs; using Linker.Libs;
namespace linker.plugins.forward namespace Linker.Plugins.Forward
{ {
public sealed class ForwardClientApiController : IApiClientController public sealed class ForwardClientApiController : IApiClientController
{ {

View File

@@ -1,10 +1,10 @@
using linker.config; using Linker.Config;
using linker.plugins.forward.proxy; using Linker.Plugins.Forward.Proxy;
using linker.startup; using Linker.Startup;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
namespace linker.plugins.forward namespace Linker.Plugins.Forward
{ {
public sealed class ForwardStartup : IStartup public sealed class ForwardStartup : IStartup
{ {
@@ -16,7 +16,7 @@ namespace linker.plugins.forward
public StartupLoadType LoadType => StartupLoadType.Normal; 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<ForwardClientApiController>();
serviceCollection.AddSingleton<ForwardTransfer>(); 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>(); 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;
using linker.client.config; using Linker.Client.Config;
using linker.plugins.forward.proxy; using Linker.Libs;
using linker.libs; using Linker.Plugins.Forward.Proxy;
namespace linker.plugins.forward namespace Linker.Plugins.Forward
{ {
public sealed class ForwardTransfer public sealed class ForwardTransfer
{ {
@@ -50,12 +50,12 @@ namespace linker.plugins.forward
{ {
forwardInfo.Proxy = true; forwardInfo.Proxy = true;
forwardInfo.Msg = string.Empty; 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 else
{ {
forwardInfo.Msg = $"start forward {forwardInfo.Port}->{forwardInfo.MachineId}->{forwardInfo.TargetEP} fail"; 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.Started = false;
forwardInfo.Msg = ex.Message; forwardInfo.Msg = ex.Message;
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
} }
@@ -73,14 +73,14 @@ namespace linker.plugins.forward
{ {
if (forwardInfo.Proxy) 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); forwardProxy.Stop(forwardInfo.Port);
forwardInfo.Proxy = false; forwardInfo.Proxy = false;
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,9 @@
using linker.config; using Linker.Config;
using linker.startup; using Linker.Startup;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
namespace linker.plugins.logger namespace Linker.Plugins.Logger
{ {
public sealed class LoggerStartup : IStartup public sealed class LoggerStartup : IStartup
{ {
@@ -17,22 +17,22 @@ namespace linker.plugins.logger
public StartupLoadType LoadType => StartupLoadType.Normal; 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>(); 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>(); 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;
using linker.client.capi; using Linker.Client.Capi;
using linker.config; using Linker.Config;
using linker.plugins.relay.messenger; using Linker.Plugins.Relay.Messenger;
using linker.server; using Linker.Server;
using linker.libs.api; using Linker.Libs.Api;
using linker.libs.extends; using Linker.Libs.Extends;
using MemoryPack; using MemoryPack;
namespace linker.plugins.relay namespace Linker.Plugins.Relay
{ {
/// <summary> /// <summary>
/// 中继管理接口 /// 中继管理接口
/// </summary> /// </summary>
public sealed class RelayApiController : IApiClientController public sealed class RelayApiController : IApiClientController
{ {
private readonly Config config; private readonly ConfigWrap config;
private readonly RelayTransfer relayTransfer; private readonly RelayTransfer relayTransfer;
private readonly ClientSignInState clientSignInState; private readonly ClientSignInState clientSignInState;
private readonly MessengerSender messengerSender; 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.config = config;
this.relayTransfer = relayTransfer; this.relayTransfer = relayTransfer;

View File

@@ -1,11 +1,11 @@
using linker.config; using Linker.Config;
using linker.plugins.relay.messenger; using Linker.Plugins.Relay.Messenger;
using linker.plugins.relay.transport; using Linker.Plugins.Relay.Transport;
using linker.startup; using Linker.Startup;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Reflection; using System.Reflection;
namespace linker.plugins.relay namespace Linker.Plugins.Relay
{ {
/// <summary> /// <summary>
/// 中继插件 /// 中继插件
@@ -21,7 +21,7 @@ namespace linker.plugins.relay
public StartupLoadType LoadType => StartupLoadType.Normal; 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<RelayApiController>();
serviceCollection.AddSingleton<RelayClientMessenger>(); 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>(); 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 relayTransfer = serviceProvider.GetService<RelayTransfer>();
relayTransfer.Load(assemblies); 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.Client.Config;
using linker.config; using Linker.Config;
using linker.plugins.relay.transport; using Linker.Plugins.Relay.Transport;
using linker.tunnel.connection; using Linker.Tunnel.Connection;
using linker.libs; using Linker.Libs;
using linker.libs.extends; using Linker.Libs.Extends;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
using System.Reflection; using System.Reflection;
namespace linker.plugins.relay namespace Linker.Plugins.Relay
{ {
/// <summary> /// <summary>
/// 中继 /// 中继
@@ -24,7 +24,7 @@ namespace linker.plugins.relay
private ConcurrentDictionary<string, bool> connectingDic = new ConcurrentDictionary<string, bool>(); private ConcurrentDictionary<string, bool> connectingDic = new ConcurrentDictionary<string, bool>();
private Dictionary<string, List<Action<ITunnelConnection>>> OnConnected { get; } = new Dictionary<string, List<Action<ITunnelConnection>>>(); 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.running = running;
this.serviceProvider = serviceProvider; this.serviceProvider = serviceProvider;
@@ -52,7 +52,7 @@ namespace linker.plugins.relay
IEnumerable<Type> types = ReflectionHelper.GetInterfaceSchieves(assembs, typeof(ITransport)); 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(); 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> /// <summary>
/// 获取所有中继协议 /// 获取所有中继协议
@@ -136,23 +136,23 @@ namespace linker.plugins.relay
SSL = item.SSL 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); ITunnelConnection connection = await transport.RelayAsync(relayInfo);
if (connection != null) 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); ConnectedCallback(relayInfo, connection);
return connection; return connection;
} }
else 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) catch (Exception ex)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
finally finally
{ {
@@ -181,7 +181,7 @@ namespace linker.plugins.relay
ITunnelConnection connection = await _transports.OnBeginAsync(relayInfo); ITunnelConnection connection = await _transports.OnBeginAsync(relayInfo);
if (connection != null) 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); ConnectedCallback(relayInfo, connection);
return true; return true;
} }
@@ -190,9 +190,9 @@ namespace linker.plugins.relay
} }
catch (Exception ex) catch (Exception ex)
{ {
if(Logger.Instance.LoggerLevel <= LoggerTypes.DEBUG) if(LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{ {
Logger.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
} }
} }
finally finally

View File

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

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