mirror of
https://github.com/snltty/linker.git
synced 2025-10-16 22:21:16 +08:00
sync
This commit is contained in:
@@ -18,6 +18,8 @@
|
|||||||
[](https://gitee.com/snltty/linker/stargazers)
|
[](https://gitee.com/snltty/linker/stargazers)
|
||||||
[](https://gitee.com/snltty/linker/members)
|
[](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**
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
namespace linker.libs
|
namespace Linker.Libs
|
||||||
{
|
{
|
||||||
public static class BooleanHelper
|
public static class BooleanHelper
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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 () =>
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace linker.libs
|
namespace Linker.Libs
|
||||||
{
|
{
|
||||||
public sealed class NumberSpace
|
public sealed class NumberSpace
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace linker.libs
|
namespace Linker.Libs
|
||||||
{
|
{
|
||||||
public sealed class ReceiveDataBuffer
|
public sealed class ReceiveDataBuffer
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
/// 前段接口
|
/// 前段接口
|
||||||
|
@@ -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>
|
||||||
/// 前端接口服务
|
/// 前端接口服务
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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 |
|
||||||
|
@@ -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>
|
||||||
{
|
{
|
||||||
|
@@ -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>
|
||||||
{
|
{
|
||||||
|
@@ -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>
|
||||||
{
|
{
|
||||||
|
@@ -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>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace linker.libs.socks5
|
namespace Linker.Libs.Socks5
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数据验证结果
|
/// 数据验证结果
|
||||||
|
@@ -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 数据包解析和组装
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
namespace linker.libs.web
|
namespace Linker.Libs.Web
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// web服务
|
/// web服务
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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解析器
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
namespace linker.service
|
namespace Linker.Service
|
||||||
{
|
{
|
||||||
partial class LinkService
|
partial class LinkerService
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 必需的设计器变量。
|
/// 必需的设计器变量。
|
@@ -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)
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
||||||
|
10
linker.sln
10
linker.sln
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
61
linker.tunnel/README.md
Normal 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();
|
||||||
|
|
||||||
|
```
|
@@ -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)
|
||||||
|
@@ -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>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
namespace linker.tunnel.connection
|
namespace Linker.Tunnel.Connection
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 隧道协议
|
/// 隧道协议
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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>
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
namespace linker.tunnel.wanport
|
namespace Linker.Tunnel.WanPort
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 外网端口协议
|
/// 外网端口协议
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
|
@@ -16,4 +16,4 @@ COPY . .
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
ENTRYPOINT ["./linker.run"]
|
ENTRYPOINT ["./Linker.run"]
|
@@ -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)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"linker": {
|
"Linker": {
|
||||||
"commandName": "Project"
|
"commandName": "Project"
|
||||||
},
|
},
|
||||||
"Docker": {
|
"Docker": {
|
||||||
|
@@ -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>
|
||||||
/// 登入对象
|
/// 登入对象
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
namespace linker.client.args
|
namespace Linker.Client.Args
|
||||||
{
|
{
|
||||||
public interface ISignInArgs
|
public interface ISignInArgs
|
||||||
{
|
{
|
||||||
|
@@ -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();
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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;
|
||||||
|
@@ -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" />
|
||||||
|
@@ -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))
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
using linker.libs;
|
using Linker.Libs;
|
||||||
|
|
||||||
namespace linker.config
|
namespace Linker.Config
|
||||||
{
|
{
|
||||||
public partial class ConfigClientInfo
|
public partial class ConfigClientInfo
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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
Reference in New Issue
Block a user