整理代码

This commit is contained in:
snltty
2024-12-15 19:17:19 +08:00
parent f56f9f68b0
commit c6b27fd017
79 changed files with 370 additions and 253 deletions

View File

@@ -57,9 +57,9 @@ jobs:
docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \ docker tag snltty/linker-musl-x64:latest snltty/linker-musl:amd64 && \
docker push snltty/linker-musl:amd64 && \ docker push snltty/linker-musl:amd64 && \
docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \ docker manifest create snltty/linker-musl:latest snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest create snltty/linker-musl:v1.6.3 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \ docker manifest create snltty/linker-musl:v1.6.4 snltty/linker-musl:amd64 snltty/linker-musl:arm64 snltty/linker-musl:arm && \
docker manifest push snltty/linker-musl:latest && \ docker manifest push snltty/linker-musl:latest && \
docker manifest push snltty/linker-musl:v1.6.3 && \ docker manifest push snltty/linker-musl:v1.6.4 && \
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \ docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \ docker tag snltty/linker-debian-arm:latest snltty/linker-debian:arm && \
docker push snltty/linker-debian:arm && \ docker push snltty/linker-debian:arm && \
@@ -70,6 +70,6 @@ jobs:
docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \ docker tag snltty/linker-debian-x64:latest snltty/linker-debian:amd64 && \
docker push snltty/linker-debian:amd64 && \ docker push snltty/linker-debian:amd64 && \
docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \ docker manifest create snltty/linker-debian:latest snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest create snltty/linker-debian:v1.6.3 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \ docker manifest create snltty/linker-debian:v1.6.4 snltty/linker-debian:amd64 snltty/linker-debian:arm64 snltty/linker-debian:arm && \
docker manifest push snltty/linker-debian:latest && \ docker manifest push snltty/linker-debian:latest && \
docker manifest push snltty/linker-debian:v1.6.3 docker manifest push snltty/linker-debian:v1.6.4

View File

@@ -33,8 +33,8 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }} GITHUB_TOKEN: ${{ secrets.ACTIONS_TOKEN }}
with: with:
tag_name: v1.6.3 tag_name: v1.6.4
release_name: v1.6.3.${{ steps.date.outputs.today }} release_name: v1.6.4.${{ steps.date.outputs.today }}
draft: false draft: false
prerelease: false prerelease: false
body: "1. 优化UI显示网络计算IP数\r\n2. 修复内网穿透不停止直接删除导致的无法再次添加的问题\r\n3. 优化网卡的端口转发\r\n4. 修复网络掩码计算错误\r\n5. 测试中,不要更,不要更,不要更" body: "1. 优化UI显示网络计算IP数\r\n2. 修复内网穿透不停止直接删除导致的无法再次添加的问题\r\n3. 优化网卡的端口转发\r\n4. 修复网络掩码计算错误\r\n5. 测试中,不要更,不要更,不要更"
@@ -47,7 +47,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x86.zip asset-path: ./public/publish-zip/linker-win-x86.zip
target-path: /downloads/linker/v1.6.3/linker-win-x86.zip target-path: /downloads/linker/v1.6.4/linker-win-x86.zip
- name: upload-win-x86 - name: upload-win-x86
id: upload-win-x86 id: upload-win-x86
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -67,7 +67,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-x64.zip asset-path: ./public/publish-zip/linker-win-x64.zip
target-path: /downloads/linker/v1.6.3/linker-win-x64.zip target-path: /downloads/linker/v1.6.4/linker-win-x64.zip
- name: upload-win-x64 - name: upload-win-x64
id: upload-win-x64 id: upload-win-x64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -87,7 +87,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-win-arm64.zip asset-path: ./public/publish-zip/linker-win-arm64.zip
target-path: /downloads/linker/v1.6.3/linker-win-arm64.zip target-path: /downloads/linker/v1.6.4/linker-win-arm64.zip
- name: upload-win-arm64 - name: upload-win-arm64
id: upload-win-arm64 id: upload-win-arm64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -107,7 +107,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-x64.zip asset-path: ./public/publish-zip/linker-linux-x64.zip
target-path: /downloads/linker/v1.6.3/linker-linux-x64.zip target-path: /downloads/linker/v1.6.4/linker-linux-x64.zip
- name: upload-linux-x64 - name: upload-linux-x64
id: upload-linux-x64 id: upload-linux-x64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -127,7 +127,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm.zip asset-path: ./public/publish-zip/linker-linux-arm.zip
target-path: /downloads/linker/v1.6.3/linker-linux-arm.zip target-path: /downloads/linker/v1.6.4/linker-linux-arm.zip
- name: upload-linux-arm - name: upload-linux-arm
id: upload-linux-arm id: upload-linux-arm
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -147,7 +147,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-arm64.zip asset-path: ./public/publish-zip/linker-linux-arm64.zip
target-path: /downloads/linker/v1.6.3/linker-linux-arm64.zip target-path: /downloads/linker/v1.6.4/linker-linux-arm64.zip
- name: upload-linux-arm64 - name: upload-linux-arm64
id: upload-linux-arm64 id: upload-linux-arm64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -167,7 +167,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-x64.zip asset-path: ./public/publish-zip/linker-linux-musl-x64.zip
target-path: /downloads/linker/v1.6.3/linker-linux-musl-x64.zip target-path: /downloads/linker/v1.6.4/linker-linux-musl-x64.zip
- name: upload-linux-musl-x64 - name: upload-linux-musl-x64
id: upload-linux-musl-x64 id: upload-linux-musl-x64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -187,7 +187,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm.zip asset-path: ./public/publish-zip/linker-linux-musl-arm.zip
target-path: /downloads/linker/v1.6.3/linker-linux-musl-arm.zip target-path: /downloads/linker/v1.6.4/linker-linux-musl-arm.zip
- name: upload-linux-musl-arm - name: upload-linux-musl-arm
id: upload-linux-musl-arm id: upload-linux-musl-arm
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -207,7 +207,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip asset-path: ./public/publish-zip/linker-linux-musl-arm64.zip
target-path: /downloads/linker/v1.6.3/linker-linux-musl-arm64.zip target-path: /downloads/linker/v1.6.4/linker-linux-musl-arm64.zip
- name: upload-linux-musl-arm64 - name: upload-linux-musl-arm64
id: upload-linux-musl-arm64 id: upload-linux-musl-arm64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -227,7 +227,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-osx-x64.zip asset-path: ./public/publish-zip/linker-osx-x64.zip
target-path: /downloads/linker/v1.6.3/linker-osx-x64.zip target-path: /downloads/linker/v1.6.4/linker-osx-x64.zip
- name: upload-osx-x64 - name: upload-osx-x64
id: upload-osx-x64 id: upload-osx-x64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -247,7 +247,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-osx-arm64.zip asset-path: ./public/publish-zip/linker-osx-arm64.zip
target-path: /downloads/linker/v1.6.3/linker-osx-arm64.zip target-path: /downloads/linker/v1.6.4/linker-osx-arm64.zip
- name: upload-osx-arm64 - name: upload-osx-arm64
id: upload-osx-arm64 id: upload-osx-arm64
uses: actions/upload-release-asset@master uses: actions/upload-release-asset@master
@@ -277,7 +277,7 @@ jobs:
key-secret: ${{ secrets.ALIYUN_OSS_SECRET }} key-secret: ${{ secrets.ALIYUN_OSS_SECRET }}
bucket: ide-qbcode bucket: ide-qbcode
asset-path: ./public/publish-zip/linker-windows-route.zip asset-path: ./public/publish-zip/linker-windows-route.zip
target-path: /downloads/linker/v1.6.3/linker-windows-route.zip target-path: /downloads/linker/v1.6.4/linker-windows-route.zip
- name: upload-version-oss - name: upload-version-oss
id: upload-version-oss id: upload-version-oss
uses: tvrcgo/oss-action@v0.1.1 uses: tvrcgo/oss-action@v0.1.1

View File

@@ -24,12 +24,14 @@ jobs:
dotnet build ./linker.libs -c release dotnet build ./linker.libs -c release
dotnet build ./linker.tunnel -c release dotnet build ./linker.tunnel -c release
dotnet build ./linker.tun -c release dotnet build ./linker.tun -c release
dotnet build ./linker.messenger -c release
- name: Pack - name: Pack
run: | run: |
dotnet pack ./linker.libs -c release dotnet pack ./linker.libs -c release
dotnet pack ./linker.tunnel -c release dotnet pack ./linker.tunnel -c release
dotnet pack ./linker.tun -c release dotnet pack ./linker.tun -c release
dotnet pack ./linker.messenger -c release
- name: Install Nuget - name: Install Nuget
uses: nuget/setup-nuget@v1 uses: nuget/setup-nuget@v1
@@ -38,6 +40,7 @@ jobs:
- name: Push - name: Push
run: | run: |
nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.tunnel/bin/release/linker.tunnel.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.libs/bin/release/linker.libs.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.tun/bin/release/linker.tun.1.6.3.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.tun/bin/release/linker.tun.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.messenger/bin/release/linker.messenger.1.6.4.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol

View File

@@ -12,18 +12,18 @@ namespace linker.gen
public class InterfaceSourceGenerator : IIncrementalGenerator public class InterfaceSourceGenerator : IIncrementalGenerator
{ {
private List<GeneratorInfo> generators = new List<GeneratorInfo> { private List<GeneratorInfo> generators = new List<GeneratorInfo> {
new GeneratorInfo{ ClassName="FlowTypesLoader", ClassNameSpace="linker.plugins.flow", InterfaceName="linker.plugins.flow.IFlow" }, new GeneratorInfo{ ClassName="linker.plugins.flow.FlowTypesLoader", InterfaceName="linker.plugins.flow.IFlow" },
new GeneratorInfo{ ClassName="RelayTypesLoader", ClassNameSpace="linker.plugins.relay.client", InterfaceName="linker.plugins.relay.client.transport.ITransport" }, new GeneratorInfo{ ClassName="linker.plugins.relay.client.RelayTypesLoader", InterfaceName="linker.plugins.relay.client.transport.ITransport" },
new GeneratorInfo{ ClassName="RelayValidatorTypeLoader", ClassNameSpace="linker.plugins.relay.server.validator", InterfaceName="linker.plugins.relay.server.validator.IRelayValidator" }, new GeneratorInfo{ ClassName="linker.plugins.relay.server.validator.RelayValidatorTypeLoader", InterfaceName="linker.plugins.relay.server.validator.IRelayValidator" },
new GeneratorInfo{ ClassName="SignInArgsTypesLoader", ClassNameSpace="linker.plugins.signIn.args", InterfaceName="linker.plugins.signIn.args.ISignInArgs" }, new GeneratorInfo{ ClassName="linker.plugins.signIn.args.SignInArgsTypesLoader", InterfaceName="linker.plugins.signIn.args.ISignInArgs" },
new GeneratorInfo{ ClassName="ResolverTypesLoader", ClassNameSpace="linker.plugins.resolver", InterfaceName="linker.plugins.resolver.IResolver" }, new GeneratorInfo{ ClassName="linker.plugins.resolver.ResolverTypesLoader", InterfaceName="linker.plugins.resolver.IResolver" },
new GeneratorInfo{ ClassName="TunnelExcludeIPTypesLoader", ClassNameSpace="linker.plugins.tunnel.excludeip", InterfaceName="linker.plugins.tunnel.excludeip.ITunnelExcludeIP" }, new GeneratorInfo{ ClassName="linker.plugins.tunnel.excludeip.TunnelExcludeIPTypesLoader", InterfaceName="linker.plugins.tunnel.excludeip.ITunnelExcludeIP" },
new GeneratorInfo{ ClassName="StartupTransfer", ClassNameSpace="linker.startup", InterfaceName="linker.startup.IStartup", Instance=true }, new GeneratorInfo{ ClassName="linker.startup.StartupTransfer", InterfaceName="linker.startup.IStartup", Instance=true },
new GeneratorInfo{ ClassName="MessengerResolverTypesLoader", ClassNameSpace="linker.plugins.messenger", InterfaceName="linker.plugins.messenger.IMessenger"}, new GeneratorInfo{ ClassName="linker.plugins.messenger.MessengerResolverTypesLoader", InterfaceName="linker.messenger.IMessenger"},
new GeneratorInfo{ ClassName="ApiClientTypesLoader", ClassNameSpace="linker.plugins.capi", InterfaceName="linker.plugins.capi.IApiClientController"}, new GeneratorInfo{ ClassName="linker.plugins.capi.ApiClientTypesLoader",InterfaceName="linker.plugins.capi.IApiClientController"},
new GeneratorInfo{ ClassName="ConfigSyncTypesLoader", ClassNameSpace="linker.plugins.config", InterfaceName="linker.plugins.config.IConfigSync"}, new GeneratorInfo{ ClassName="linker.plugins.config.ConfigSyncTypesLoader", InterfaceName="linker.plugins.config.IConfigSync"},
new GeneratorInfo{ ClassName="DecenterTypesLoader", ClassNameSpace="linker.plugins.decenter", InterfaceName="linker.plugins.decenter.IDecenter"}, new GeneratorInfo{ ClassName="linker.plugins.decenter.DecenterTypesLoader", InterfaceName="linker.plugins.decenter.IDecenter"},
new GeneratorInfo{ ClassName="RouteExcludeIPTypesLoader", ClassNameSpace="linker.plugins.route", InterfaceName="linker.plugins.route.IRouteExcludeIP" }, new GeneratorInfo{ ClassName="linker.plugins.route.RouteExcludeIPTypesLoader", InterfaceName="linker.plugins.route.IRouteExcludeIP" },
}; };
public void Initialize(IncrementalGeneratorInitializationContext context) public void Initialize(IncrementalGeneratorInitializationContext context)
@@ -74,14 +74,16 @@ namespace linker.gen
} }
} }
var spaces = info.ClassName.Split('.');
var source = $@" var source = $@"
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
{string.Join("\r\n", namespaces)} {string.Join("\r\n", namespaces)}
namespace {info.ClassNameSpace} namespace {string.Join(".", spaces.Take(spaces.Count() - 1))}
{{ {{
public partial class {info.ClassName} public partial class {spaces.LastOrDefault()}
{{ {{
public static List<Type> GetSourceGeneratorTypes() public static List<Type> GetSourceGeneratorTypes()
{{ {{
@@ -110,7 +112,6 @@ namespace linker.gen
public sealed class GeneratorInfo public sealed class GeneratorInfo
{ {
public string ClassName { get; set; } public string ClassName { get; set; }
public string ClassNameSpace { get; set; }
public string InterfaceName { get; set; } public string InterfaceName { get; set; }
public bool Instance { get; set; } public bool Instance { get; set; }
} }

View File

@@ -14,9 +14,9 @@
<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.6.3</Version> <Version>1.6.4</Version>
<AssemblyVersion>1.6.3</AssemblyVersion> <AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.3</FileVersion> <FileVersion>1.6.4</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType> <DebugType>full</DebugType>

View File

@@ -6,7 +6,7 @@ using System.Net.Security;
using System.Net.Sockets; using System.Net.Sockets;
using System.Text; using System.Text;
namespace linker.plugins.messenger namespace linker.messenger
{ {
public interface IConnectionReceiveCallback public interface IConnectionReceiveCallback
{ {

View File

@@ -0,0 +1,17 @@
namespace linker.messenger
{
public interface IMessenger
{
}
[AttributeUsage(AttributeTargets.Method)]
public sealed class MessengerIdAttribute : Attribute
{
public ushort Id { get; set; }
public MessengerIdAttribute(ushort id)
{
Id = id;
}
}
}

View File

@@ -6,37 +6,20 @@ using System.Reflection;
using System.Security.Authentication; using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using linker.libs.extends; using linker.libs.extends;
using linker.plugins.resolver;
namespace linker.plugins.messenger namespace linker.messenger
{ {
public interface IMessengerResolver public interface IMessengerResolver
{ {
public void Initialize(string certificate, string password); public void Initialize(string certificate, string password);
public Task<IConnection> BeginReceiveClient(Socket socket); public Task<IConnection> BeginReceiveClient(Socket socket);
public Task<IConnection> BeginReceiveClient(Socket socket, bool sendFlag, byte flag);
public void LoadMessenger(List<IMessenger> list); public void LoadMessenger(List<IMessenger> list);
public Task Resolve(Socket socket, Memory<byte> memory); public Task Resolve(Socket socket, Memory<byte> memory);
public Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory); public Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory);
} }
public sealed class MessengerResolverResolver : IResolver
{
public ResolverType Type => ResolverType.Messenger;
private readonly IMessengerResolver messengerResolver;
public MessengerResolverResolver(IMessengerResolver messengerResolver)
{
this.messengerResolver = messengerResolver;
}
public async Task Resolve(Socket socket, Memory<byte> memory)
{
await messengerResolver.Resolve(socket, memory);
}
public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory)
{
await messengerResolver.Resolve(socket, ep, memory);
}
}
/// <summary> /// <summary>
/// 消息处理总线 /// 消息处理总线
@@ -70,11 +53,9 @@ namespace linker.plugins.messenger
} }
} }
public virtual void AddReceive(ushort id, ulong bytes) { } public virtual void AddReceive(ushort id, ulong bytes) { }
public virtual void AddSendt(ushort id, ulong bytes) { } public virtual void AddSendt(ushort id, ulong bytes) { }
public async Task Resolve(Socket socket, Memory<byte> memory) public async Task Resolve(Socket socket, Memory<byte> memory)
{ {
try try
@@ -98,6 +79,10 @@ namespace linker.plugins.messenger
} }
public async Task<IConnection> BeginReceiveClient(Socket socket) public async Task<IConnection> BeginReceiveClient(Socket socket)
{
return await BeginReceiveClient(socket,false,0);
}
public async Task<IConnection> BeginReceiveClient(Socket socket,bool sendFlag,byte flag)
{ {
try try
{ {
@@ -106,7 +91,10 @@ namespace linker.plugins.messenger
return null; return null;
} }
socket.KeepAlive(); socket.KeepAlive();
await socket.SendAsync(new byte[] { (byte)ResolverType.Messenger }).ConfigureAwait(false); if (sendFlag)
{
await socket.SendAsync(new byte[] { flag }).ConfigureAwait(false);
}
NetworkStream networkStream = new NetworkStream(socket, false); NetworkStream networkStream = new NetworkStream(socket, false);
SslStream sslStream = new SslStream(networkStream, true, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); SslStream sslStream = new SslStream(networkStream, true, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions

View File

@@ -1,7 +1,7 @@
using linker.libs; using linker.libs;
using System.Collections.Concurrent; using System.Collections.Concurrent;
namespace linker.plugins.messenger namespace linker.messenger
{ {
public interface IMessengerSender public interface IMessengerSender
{ {

View File

@@ -2,7 +2,7 @@
using System.Buffers; using System.Buffers;
using System.ComponentModel; using System.ComponentModel;
namespace linker.plugins.messenger namespace linker.messenger
{ {
/// <summary> /// <summary>
/// 请求数据包 /// 请求数据包

View File

@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PublishAot>false</PublishAot>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<Title>linker messenger</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker messenger</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker messenger</PackageReleaseNotes>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,42 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PublishAot>false</PublishAot>
<JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
<EnablePreviewFeatures>True</EnablePreviewFeatures>
<Title>linker signin</Title>
<Authors>snltty</Authors>
<Company>snltty</Company>
<Description>linker signin</Description>
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker signin</PackageReleaseNotes>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<DebugSymbols>false</DebugSymbols>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MemoryPack" Version="1.21.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
</ItemGroup>
</Project>

View File

@@ -17,6 +17,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.tun.test", "linker.t
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.gen", "linker.gen\linker.gen.csproj", "{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.gen", "linker.gen\linker.gen.csproj", "{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger", "linker.messenger\linker.messenger.csproj", "{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.signin", "linker.signin\linker.signin.csproj", "{5B1F4754-D1B6-426B-B310-8C21F26879D2}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -111,6 +115,30 @@ Global
{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x64.Build.0 = Release|Any CPU {031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x64.Build.0 = Release|Any CPU
{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x86.ActiveCfg = Release|Any CPU {031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x86.ActiveCfg = Release|Any CPU
{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x86.Build.0 = Release|Any CPU {031C3589-72BB-4A3F-B1A5-BC0665FDF01B}.Release|x86.Build.0 = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|x64.Build.0 = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Debug|x86.Build.0 = Debug|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|Any CPU.Build.0 = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|x64.ActiveCfg = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|x64.Build.0 = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|x86.ActiveCfg = Release|Any CPU
{2B0BFDBB-8C5F-4E47-8309-2A764C2567C2}.Release|x86.Build.0 = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|x64.ActiveCfg = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|x64.Build.0 = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|x86.ActiveCfg = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Debug|x86.Build.0 = Debug|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|Any CPU.Build.0 = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|x64.ActiveCfg = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|x64.Build.0 = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|x86.ActiveCfg = Release|Any CPU
{5B1F4754-D1B6-426B-B310-8C21F26879D2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.185" ProductVersion="0.0.0.185" publishDir="/dist/" dstrip="false" local="false" ignored="false"> <project ver="10" name="linker.tray.win" libEmbed="true" icon="..\linker\favicon.ico" ui="win" output="linker.tray.win.exe" CompanyName="snltty" FileDescription="linker.tray.win" LegalCopyright="Copyright (C) snltty 2024" ProductName="linker.tray.win" InternalName="linker.install.win" FileVersion="0.0.0.186" ProductVersion="0.0.0.186" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/> <file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"> <folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/> <file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>

Binary file not shown.

View File

@@ -16,9 +16,9 @@
<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 tun</PackageReleaseNotes> <PackageReleaseNotes>linker tun</PackageReleaseNotes>
<Version>1.6.3</Version> <Version>1.6.4</Version>
<AssemblyVersion>1.6.3</AssemblyVersion> <AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.3</FileVersion> <FileVersion>1.6.4</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<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>
<Version>1.6.3</Version> <Version>1.6.4</Version>
<AssemblyVersion>1.6.3</AssemblyVersion> <AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.3</FileVersion> <FileVersion>1.6.4</FileVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -32,32 +32,6 @@ a.a-line {
; ;
} }
span.point {
width: .8rem;
height: .8rem;
border-radius: 50%;
display: inline-block;
vertical-align: middle;
margin: -.2rem .3rem 0 -1.3rem;
background-color: #eee;
border: 1px solid #ddd;
}
span.point.p2p {
background-color: #01c901;
border: 1px solid #049538;
}
span.point.relay {
background-color: #e3e811;
border: 1px solid #b3c410;
}
span.point.node {
background-color: #09dda9;
border: 1px solid #0cac90;
}
.flex { .flex {
display: flex; display: flex;

View File

@@ -22,7 +22,7 @@ export default {
setup(props) { setup(props) {
const globalData = injectGlobalData(); const globalData = injectGlobalData();
const state = reactive({ const state = reactive({
list:globalData.value.config.Client.Action.Args[globalData.value.config.Client.ServerInfo.Host] || '' list:globalData.value.config.Client.Action.Args[globalData.value.config.Client.Server.Host] || ''
}); });
const handleSave = ()=>{ const handleSave = ()=>{
try{ try{
@@ -35,7 +35,7 @@ export default {
return; return;
} }
const json = {}; const json = {};
json[globalData.value.config.Client.ServerInfo.Host] = state.list; json[globalData.value.config.Client.Server.Host] = state.list;
setArgs(json).then(()=>{ setArgs(json).then(()=>{
ElMessage.success('已操作'); ElMessage.success('已操作');
}).catch((err)=>{ }).catch((err)=>{

View File

@@ -0,0 +1,64 @@
<template>
<template v-if="state.connection && state.connection.Connected">
<template v-if="state.connection.Type == 0">
<span class="point p2p" title="打洞直连"></span>
</template>
<template v-else-if="state.connection.Type == 1">
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="state.connection.Type == 2">
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
<span class="point" title="未连接"></span>
</template>
</template>
<script>
import { reactive, watch } from 'vue';
export default {
props: ['data'],
setup (props) {
const state = reactive({
connection:props.data
});
watch(()=>props.data,()=>{
state.connection = props.data
})
return {state}
}
}
</script>
<style lang="stylus" scoped>
span.point {
width: .8rem;
height: .8rem;
border-radius: 50%;
display: inline-block;
vertical-align: middle;
margin: -.2rem .3rem 0 -1.3rem;
background-color: #eee;
border: 1px solid #ddd;
}
span.point.p2p {
background-color: #01c901;
border: 1px solid #049538;
}
span.point.relay {
background-color: #e3e811;
border: 1px solid #b3c410;
}
span.point.node {
background-color: #09dda9;
border: 1px solid #0cac90;
}
</style>

View File

@@ -4,20 +4,7 @@
<template v-if="scope.row.Connected"> <template v-if="scope.row.Connected">
<template v-if="scope.row.isSelf && (hasForwardShowSelf || hasForwardSelf)"> <template v-if="scope.row.isSelf && (hasForwardShowSelf || hasForwardSelf)">
<div> <div>
<template v-if="connections.list[scope.row.MachineId] && connections.list[scope.row.MachineId].Connected"> <ConnectionShow :data="connections.list[scope.row.MachineId]"></ConnectionShow>
<template v-if="connections.list[scope.row.MachineId].Type == 0">
<span class="point p2p" title="打洞直连"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 1">
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 2">
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
<span class="point" title="未连接"></span>
</template>
<a href="javascript:;" title="管理自己的端口转发" :class="{green:forward.list[scope.row.MachineId]>0 }" @click="handleEdit(scope.row.MachineId,scope.row.MachineName)"> <a href="javascript:;" title="管理自己的端口转发" :class="{green:forward.list[scope.row.MachineId]>0 }" @click="handleEdit(scope.row.MachineId,scope.row.MachineName)">
<span :class="{gateway:forward.list[scope.row.MachineId]>0}">端口转发({{forward.list[scope.row.MachineId]>99 ? '99+' : forward.list[scope.row.MachineId]}})</span> <span :class="{gateway:forward.list[scope.row.MachineId]>0}">端口转发({{forward.list[scope.row.MachineId]>99 ? '99+' : forward.list[scope.row.MachineId]}})</span>
</a> </a>
@@ -30,20 +17,7 @@
</template> </template>
<template v-else-if="hasForwardShowOther || hasForwardOther"> <template v-else-if="hasForwardShowOther || hasForwardOther">
<div> <div>
<template v-if="connections.list[scope.row.MachineId] && connections.list[scope.row.MachineId].Connected"> <ConnectionShow :data="connections.list[scope.row.MachineId]"></ConnectionShow>
<template v-if="connections.list[scope.row.MachineId].Type == 0">
<span class="point p2p" title="打洞直连"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 1">
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[scope.row.MachineId].Type == 2">
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
<span class="point" title="未连接"></span>
</template>
<a href="javascript:;" title="管理自己的端口转发" :class="{green:forward.list[scope.row.MachineId]>0}" @click="handleEdit(scope.row.MachineId,scope.row.MachineName)"> <a href="javascript:;" title="管理自己的端口转发" :class="{green:forward.list[scope.row.MachineId]>0}" @click="handleEdit(scope.row.MachineId,scope.row.MachineName)">
<span :class="{gateway:forward.list[scope.row.MachineId]>0}">端口转发({{forward.list[scope.row.MachineId]>99 ? '99+' : forward.list[scope.row.MachineId]}})</span> <span :class="{gateway:forward.list[scope.row.MachineId]>0}">端口转发({{forward.list[scope.row.MachineId]>99 ? '99+' : forward.list[scope.row.MachineId]}})</span>
</a> </a>
@@ -64,9 +38,11 @@ import { useForward } from './forward';
import { useSforward } from './sforward'; import { useSforward } from './sforward';
import { computed } from 'vue'; import { computed } from 'vue';
import { useForwardConnections } from './connections'; import { useForwardConnections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default { export default {
emits: ['edit','sedit'], emits: ['edit','sedit'],
components:{ConnectionShow},
setup(props, { emit }) { setup(props, { emit }) {
const forward = useForward() const forward = useForward()

View File

@@ -2,20 +2,7 @@
<div> <div>
<div class="flex"> <div class="flex">
<div class="flex-1"> <div class="flex-1">
<template v-if="connections.list[item.MachineId]&& connections.list[item.MachineId].Connected"> <ConnectionShow :data="connections.list[item.MachineId]"></ConnectionShow>
<template v-if="connections.list[item.MachineId].Type == 0">
<span class="point p2p" title="打洞直连"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 1">
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 2">
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
<span class="point" title="未连接"></span>
</template>
<a href="javascript:;" class="a-line" @click="handleSocks5Port(socks5.list[item.MachineId])" title="此设备的socks5代理"> <a href="javascript:;" class="a-line" @click="handleSocks5Port(socks5.list[item.MachineId])" title="此设备的socks5代理">
<template v-if="socks5.list[item.MachineId].SetupError"> <template v-if="socks5.list[item.MachineId].SetupError">
<strong class="red" :title="socks5.list[item.MachineId].SetupError"> <strong class="red" :title="socks5.list[item.MachineId].SetupError">
@@ -68,10 +55,11 @@ import {Loading} from '@element-plus/icons-vue'
import { injectGlobalData } from '@/provide'; import { injectGlobalData } from '@/provide';
import { computed } from 'vue'; import { computed } from 'vue';
import { useSocks5Connections } from './connections'; import { useSocks5Connections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default { export default {
props:['item','config'], props:['item','config'],
emits: ['edit','refresh'], emits: ['edit','refresh'],
components:{Loading}, components:{Loading,ConnectionShow},
setup (props,{emit}) { setup (props,{emit}) {
const socks5 = useSocks5(); const socks5 = useSocks5();

View File

@@ -2,20 +2,7 @@
<div> <div>
<div class="flex"> <div class="flex">
<div class="flex-1"> <div class="flex-1">
<template v-if="connections.list[item.MachineId] && connections.list[item.MachineId].Connected"> <ConnectionShow :data="connections.list[item.MachineId]"></ConnectionShow>
<template v-if="connections.list[item.MachineId].Type == 0">
<span class="point p2p" title="打洞直连"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 1">
<span class="point relay" title="中继连接"></span>
</template>
<template v-else-if="connections.list[item.MachineId].Type == 2">
<span class="point node" title="节点连接"></span>
</template>
</template>
<template v-else>
<span class="point" title="未连接"></span>
</template>
<a href="javascript:;" class="a-line" @click="handleTuntapIP(tuntap.list[item.MachineId])" title="此设备的虚拟网卡IP"> <a href="javascript:;" class="a-line" @click="handleTuntapIP(tuntap.list[item.MachineId])" title="此设备的虚拟网卡IP">
<template v-if="tuntap.list[item.MachineId].SetupError"> <template v-if="tuntap.list[item.MachineId].SetupError">
<strong class="red" :title="tuntap.list[item.MachineId].SetupError">{{ tuntap.list[item.MachineId].IP }}</strong> <strong class="red" :title="tuntap.list[item.MachineId].SetupError">{{ tuntap.list[item.MachineId].IP }}</strong>
@@ -77,10 +64,11 @@ import {Loading} from '@element-plus/icons-vue'
import { injectGlobalData } from '@/provide'; import { injectGlobalData } from '@/provide';
import { computed } from 'vue'; import { computed } from 'vue';
import { useTuntapConnections } from './connections'; import { useTuntapConnections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default { export default {
props:['item','config'], props:['item','config'],
emits: ['edit','refresh'], emits: ['edit','refresh'],
components:{Loading}, components:{Loading,ConnectionShow},
setup (props,{emit}) { setup (props,{emit}) {
const tuntap = useTuntap(); const tuntap = useTuntap();

View File

@@ -123,7 +123,7 @@ export default {
password:step.value.form.client.password || globalData.value.config.Client.CApi.ApiPassword, password:step.value.form.client.password || globalData.value.config.Client.CApi.ApiPassword,
hasServer:step.value.form.client.hasServer ||false, hasServer:step.value.form.client.hasServer ||false,
server:step.value.form.client.server ||globalData.value.config.Client.ServerInfo.Host, server:step.value.form.client.server ||globalData.value.config.Client.Server.Host,
serverSecretKey:step.value.form.client.serverSecretKey ||globalData.value.config.Client.ServerSecretKey, serverSecretKey:step.value.form.client.serverSecretKey ||globalData.value.config.Client.ServerSecretKey,
sForwardSecretKey:step.value.form.client.sForwardSecretKey ||globalData.value.config.Client.SForward.SecretKey, sForwardSecretKey:step.value.form.client.sForwardSecretKey ||globalData.value.config.Client.SForward.SecretKey,
relaySecretKey:step.value.form.client.relaySecretKey ||(globalData.value.config.Client.Relay.Servers[0] || {SecretKey:'snltty'}).SecretKey, relaySecretKey:step.value.form.client.relaySecretKey ||(globalData.value.config.Client.Relay.Servers[0] || {SecretKey:'snltty'}).SecretKey,

View File

@@ -41,8 +41,9 @@ export default {
components:{SForward,Updater,RelayServers}, components:{SForward,Updater,RelayServers},
setup(props) { setup(props) {
const globalData = injectGlobalData(); const globalData = injectGlobalData();
console.log(globalData.value.config.Client.Server);
const state = reactive({ const state = reactive({
list:globalData.value.config.Client.ServerInfo, list:globalData.value.config.Client.Server,
height: computed(()=>globalData.value.height-90), height: computed(()=>globalData.value.height-90),
}); });

View File

@@ -3,7 +3,7 @@
<div class="copy"> <div class="copy">
<a href="javascript:;" class="memory" title="赞助一笔,让作者饱餐一顿" @click="state.showPay = true"> <a href="javascript:;" class="memory" title="赞助一笔,让作者饱餐一顿" @click="state.showPay = true">
<img src="@/assets/coin.svg" alt="memory" /> <img src="@/assets/coin.svg" alt="memory" />
<span>各位老板行行好</span> <span>赞助</span>
</a> </a>
<a href="https://github.com/snltty/linker" target="_blank">©linker {{ self.Version }}</a> <a href="https://github.com/snltty/linker" target="_blank">©linker {{ self.Version }}</a>
</div> </div>

View File

@@ -30,7 +30,7 @@ export default {
}); });
watch(()=>globalData.value.config.Client.Servers,()=>{ watch(()=>globalData.value.config.Client.Servers,()=>{
state.servers = (globalData.value.config.Client.Servers || []).slice(0,1); state.servers = (globalData.value.config.Client.Servers || []).slice(0,1);
state.server = globalData.value.config.Client.ServerInfo.Host; state.server = globalData.value.config.Client.Server.Host;
}); });
const handleRefresh = ()=>{ const handleRefresh = ()=>{
window.location.reload(); window.location.reload();

View File

@@ -30,9 +30,9 @@
<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>
<Version>1.6.3</Version> <Version>1.6.4</Version>
<AssemblyVersion>1.6.3</AssemblyVersion> <AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.3</FileVersion> <FileVersion>1.6.4</FileVersion>
</PropertyGroup> </PropertyGroup>
@@ -66,6 +66,7 @@
<ReferenceOutputAssembly>false</ReferenceOutputAssembly> <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<IsTrimmable>false</IsTrimmable> <IsTrimmable>false</IsTrimmable>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
<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" />
<ProjectReference Include="..\linker.tun\linker.tun.csproj" /> <ProjectReference Include="..\linker.tun\linker.tun.csproj" />

View File

@@ -7,6 +7,7 @@ using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using MemoryPack; using MemoryPack;
using linker.plugins.access.messenger; using linker.plugins.access.messenger;
using linker.messenger;
namespace linker.plugins.access namespace linker.plugins.access
{ {

View File

@@ -1,5 +1,6 @@
using linker.config; using linker.config;
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;

View File

@@ -1,4 +1,5 @@
using linker.plugins.messenger; using linker.messenger;
using linker.plugins.messenger;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
namespace linker.plugins.client namespace linker.plugins.client

View File

@@ -8,6 +8,8 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signIn.args; using linker.plugins.signIn.args;
using linker.messenger;
using linker.plugins.resolver;
namespace linker.plugins.client namespace linker.plugins.client
{ {
@@ -124,7 +126,7 @@ namespace linker.plugins.client
Socket socket = new Socket(remote.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Socket socket = new Socket(remote.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.KeepAlive(); socket.KeepAlive();
await socket.ConnectAsync(remote).WaitAsync(TimeSpan.FromMilliseconds(5000)).ConfigureAwait(false); await socket.ConnectAsync(remote).WaitAsync(TimeSpan.FromMilliseconds(5000)).ConfigureAwait(false);
clientSignInState.Connection = await messengerResolver.BeginReceiveClient(socket).ConfigureAwait(false); clientSignInState.Connection = await messengerResolver.BeginReceiveClient(socket, true, (byte)ResolverType.Messenger).ConfigureAwait(false);
return true; return true;
} }

View File

@@ -30,6 +30,7 @@ namespace linker.config
new ClientServerInfo{ Name="Linker", Host="linker.snltty.com:1802" } new ClientServerInfo{ Name="Linker", Host="linker.snltty.com:1802" }
#endif #endif
}; };
public ClientServerInfo Server => Servers[0];
public ClientServerInfo[] Servers public ClientServerInfo[] Servers
{ {
get => servers; set { servers = value; } get => servers; set { servers = value; }
@@ -54,6 +55,7 @@ namespace linker.config
} }
private ClientGroupInfo[] groups = new[] { new ClientGroupInfo { } }; private ClientGroupInfo[] groups = new[] { new ClientGroupInfo { } };
public ClientGroupInfo Group => Groups[0];
public ClientGroupInfo[] Groups public ClientGroupInfo[] Groups
{ {
get => groups; set get => groups; set

View File

@@ -8,6 +8,7 @@ using linker.libs;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.config namespace linker.plugins.config
{ {
public sealed class ConfigClientApiController : IApiClientController public sealed class ConfigClientApiController : IApiClientController

View File

@@ -1,4 +1,5 @@
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.config.messenger; using linker.plugins.config.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;

View File

@@ -1,4 +1,5 @@
using linker.plugins.messenger; using linker.messenger;
using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using MemoryPack; using MemoryPack;

View File

@@ -3,6 +3,7 @@ using linker.plugins.messenger;
using MemoryPack; using MemoryPack;
using linker.libs; using linker.libs;
using linker.plugins.decenter.messenger; using linker.plugins.decenter.messenger;
using linker.messenger;
namespace linker.plugins.decenter namespace linker.plugins.decenter
{ {

View File

@@ -1,4 +1,5 @@
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using MemoryPack; using MemoryPack;

View File

@@ -7,10 +7,9 @@ using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.flow.messenger; using linker.plugins.flow.messenger;
using linker.libs.extends; using linker.libs.extends;
using linker.plugins.sforward.proxy;
using linker.plugins.relay;
using linker.plugins.relay.client; using linker.plugins.relay.client;
using linker.plugins.sforward; using linker.plugins.sforward;
using linker.messenger;
namespace linker.plugins.flow namespace linker.plugins.flow
{ {

View File

@@ -1,7 +1,7 @@
using linker.config; using linker.config;
using linker.messenger;
using linker.plugins.flow.messenger; using linker.plugins.flow.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.relay;
using linker.plugins.relay.server; using linker.plugins.relay.server;
using linker.plugins.sforward.proxy; using linker.plugins.sforward.proxy;
using linker.plugins.tunnel; using linker.plugins.tunnel;
@@ -28,12 +28,6 @@ namespace linker.plugins.flow
serviceCollection.AddSingleton<IMessengerResolver, MessengerResolverFlow>(); serviceCollection.AddSingleton<IMessengerResolver, MessengerResolverFlow>();
serviceCollection.AddSingleton<IMessengerSender, MessengerSenderFlow>(); serviceCollection.AddSingleton<IMessengerSender, MessengerSenderFlow>();
serviceCollection.AddSingleton<RelayFlow>();
serviceCollection.AddSingleton<RelayResolver, RelayResolverFlow>();
serviceCollection.AddSingleton<RelayReportFlow>();
serviceCollection.AddSingleton<RelayReportResolver, RelayReportResolverFlow>();
} }
public void AddServer(ServiceCollection serviceCollection, FileConfig config) public void AddServer(ServiceCollection serviceCollection, FileConfig config)
@@ -49,15 +43,14 @@ namespace linker.plugins.flow
serviceCollection.AddSingleton<RelayFlow>(); serviceCollection.AddSingleton<RelayFlow>();
serviceCollection.AddSingleton<RelayResolver, RelayResolverFlow>(); serviceCollection.AddSingleton<RelayResolver, RelayResolverFlow>();
serviceCollection.AddSingleton<RelayReportFlow>();
serviceCollection.AddSingleton<RelayReportResolver, RelayReportResolverFlow>();
serviceCollection.AddSingleton<ExternalFlow>(); serviceCollection.AddSingleton<ExternalFlow>();
serviceCollection.AddSingleton<ExternalResolver, ExternalResolverFlow>(); serviceCollection.AddSingleton<ExternalResolver, ExternalResolverFlow>();
serviceCollection.AddSingleton<SForwardFlow>(); serviceCollection.AddSingleton<SForwardFlow>();
serviceCollection.AddSingleton<SForwardProxy, SForwardProxyFlow>(); serviceCollection.AddSingleton<SForwardProxy, SForwardProxyFlow>();
serviceCollection.AddSingleton<RelayReportFlow>();
serviceCollection.AddSingleton<RelayReportResolver, RelayReportResolverFlow>();
} }
public void UseClient(ServiceProvider serviceProvider, FileConfig config) public void UseClient(ServiceProvider serviceProvider, FileConfig config)

View File

@@ -1,4 +1,5 @@
using linker.plugins.messenger; using linker.messenger;
using linker.plugins.messenger;
namespace linker.plugins.flow namespace linker.plugins.flow
{ {

View File

@@ -1,4 +1,5 @@
using linker.config; using linker.config;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.relay.server; using linker.plugins.relay.server;
using linker.plugins.sforward; using linker.plugins.sforward;

View File

@@ -13,6 +13,7 @@ using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.config; using linker.config;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.forward namespace linker.plugins.forward
{ {

View File

@@ -1,5 +1,6 @@
using linker.client.config; using linker.client.config;
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.forward.proxy; using linker.plugins.forward.proxy;
using linker.plugins.messenger; using linker.plugins.messenger;

View File

@@ -1,4 +1,5 @@
using linker.client.config; using linker.client.config;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using MemoryPack; using MemoryPack;

View File

@@ -1,30 +0,0 @@
namespace linker.plugins.messenger
{
/// <summary>
/// 消息接口
/// </summary>
public interface IMessenger
{
}
/// <summary>
/// 消息id
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public sealed class MessengerIdAttribute : Attribute
{
/// <summary>
/// id
/// </summary>
public ushort Id { get; set; }
/// <summary>
///
/// </summary>
/// <param name="id"></param>
public MessengerIdAttribute(ushort id)
{
Id = id;
}
}
}

View File

@@ -0,0 +1,26 @@
using linker.plugins.resolver;
using System.Net.Sockets;
using System.Net;
using linker.messenger;
namespace linker.plugins.messenger
{
public sealed class MessengerResolverResolver : IResolver
{
public ResolverType Type => ResolverType.Messenger;
private readonly IMessengerResolver messengerResolver;
public MessengerResolverResolver(IMessengerResolver messengerResolver)
{
this.messengerResolver = messengerResolver;
}
public async Task Resolve(Socket socket, Memory<byte> memory)
{
await messengerResolver.Resolve(socket, memory);
}
public async Task Resolve(Socket socket, IPEndPoint ep, Memory<byte> memory)
{
await messengerResolver.Resolve(socket, ep, memory);
}
}
}

View File

@@ -1,4 +1,5 @@
using linker.libs; using linker.libs;
using linker.messenger;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
namespace linker.plugins.messenger namespace linker.plugins.messenger

View File

@@ -1,4 +1,5 @@
using linker.config; using linker.config;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.server; using linker.plugins.server;
using linker.startup; using linker.startup;

View File

@@ -4,6 +4,7 @@ using linker.tunnel.transport;
using linker.libs; using linker.libs;
using MemoryPack; using MemoryPack;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.messenger;
namespace linker.plugins.pcp.messenger namespace linker.plugins.pcp.messenger
{ {

View File

@@ -37,12 +37,7 @@ namespace linker.plugins.relay
serviceCollection.AddSingleton<RelayTypesLoader>(); serviceCollection.AddSingleton<RelayTypesLoader>();
serviceCollection.AddSingleton<RelayServerMasterTransfer>();
serviceCollection.AddSingleton<RelayServerNodeTransfer>();
serviceCollection.AddSingleton<IRelayCaching, RelayCachingMemory>();
serviceCollection.AddSingleton<RelayClientConfigTransfer>(); serviceCollection.AddSingleton<RelayClientConfigTransfer>();
} }
public void AddServer(ServiceCollection serviceCollection, FileConfig config) public void AddServer(ServiceCollection serviceCollection, FileConfig config)
@@ -67,11 +62,6 @@ namespace linker.plugins.relay
{ {
RelayTransfer relayTransfer = serviceProvider.GetService<RelayTransfer>(); RelayTransfer relayTransfer = serviceProvider.GetService<RelayTransfer>();
RelayTypesLoader relayTypesLoader = serviceProvider.GetService<RelayTypesLoader>(); RelayTypesLoader relayTypesLoader = serviceProvider.GetService<RelayTypesLoader>();
IRelayCaching relayCaching = serviceProvider.GetService<IRelayCaching>();
RelayServerMasterTransfer relayServerMasterTransfer = serviceProvider.GetService<RelayServerMasterTransfer>();
RelayServerNodeTransfer relayServerNodeTransfer = serviceProvider.GetService<RelayServerNodeTransfer>();
} }
public void UseServer(ServiceProvider serviceProvider, FileConfig config) public void UseServer(ServiceProvider serviceProvider, FileConfig config)

View File

@@ -15,6 +15,7 @@ using System.Buffers;
using linker.plugins.relay.server; using linker.plugins.relay.server;
using linker.plugins.resolver; using linker.plugins.resolver;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using linker.messenger;
namespace linker.plugins.relay.client.transport namespace linker.plugins.relay.client.transport
{ {

View File

@@ -33,6 +33,7 @@ namespace linker.config
/// 中继服务器列表 /// 中继服务器列表
/// </summary> /// </summary>
public RelayServerInfo[] Servers { get; set; } = new RelayServerInfo[] { new RelayServerInfo { } }; public RelayServerInfo[] Servers { get; set; } = new RelayServerInfo[] { new RelayServerInfo { } };
public RelayServerInfo Server => Servers[0];
} }

View File

@@ -10,6 +10,7 @@ using linker.plugins.relay.server;
using System.Net.NetworkInformation; using System.Net.NetworkInformation;
using linker.plugins.decenter.messenger; using linker.plugins.decenter.messenger;
using System.Reflection; using System.Reflection;
using linker.messenger;
namespace linker.plugins.relay.messenger namespace linker.plugins.relay.messenger
{ {

View File

@@ -36,7 +36,6 @@ namespace linker.plugins.resolver
int length = await socket.ReceiveAsync(buffer.AsMemory(0, 1), SocketFlags.None).ConfigureAwait(false); int length = await socket.ReceiveAsync(buffer.AsMemory(0, 1), SocketFlags.None).ConfigureAwait(false);
ResolverType type = (ResolverType)buffer[0]; ResolverType type = (ResolverType)buffer[0];
//LoggerHelper.Instance.Info($"tcp connect from {socket.RemoteEndPoint}->{(ResolverType)buffer[0]}");
if (resolvers.TryGetValue(type, out IResolver resolver)) if (resolvers.TryGetValue(type, out IResolver resolver))
{ {
await resolver.Resolve(socket, buffer.AsMemory(1, length)); await resolver.Resolve(socket, buffer.AsMemory(1, length));

View File

@@ -9,6 +9,7 @@ using linker.plugins.messenger;
using linker.config; using linker.config;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.sforward namespace linker.plugins.sforward
{ {

View File

@@ -9,6 +9,7 @@ using linker.libs.extends;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.config; using linker.config;
using linker.messenger;
namespace linker.plugins.sforward namespace linker.plugins.sforward
{ {

View File

@@ -9,6 +9,7 @@ using LiteDB;
using System.Net; using System.Net;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.libs; using linker.libs;
using linker.messenger;
namespace linker.plugins.sforward.messenger namespace linker.plugins.sforward.messenger
{ {

View File

@@ -12,7 +12,6 @@ namespace linker.plugins.sforward.proxy
private ConcurrentDictionary<int, AsyncUserToken> tcpListens = new ConcurrentDictionary<int, AsyncUserToken>(); private ConcurrentDictionary<int, AsyncUserToken> tcpListens = new ConcurrentDictionary<int, AsyncUserToken>();
private ConcurrentDictionary<ulong, TaskCompletionSource<Socket>> tcpConnections = new ConcurrentDictionary<ulong, TaskCompletionSource<Socket>>(); private ConcurrentDictionary<ulong, TaskCompletionSource<Socket>> tcpConnections = new ConcurrentDictionary<ulong, TaskCompletionSource<Socket>>();
public Func<int, ulong, Task<bool>> TunnelConnect { get; set; } = async (port, id) => { return await Task.FromResult(false); }; public Func<int, ulong, Task<bool>> TunnelConnect { get; set; } = async (port, id) => { return await Task.FromResult(false); };
public Func<string, int, ulong, Task<bool>> WebConnect { get; set; } = async (host, port, id) => { return await Task.FromResult(false); }; public Func<string, int, ulong, Task<bool>> WebConnect { get; set; } = async (host, port, id) => { return await Task.FromResult(false); };
@@ -150,7 +149,7 @@ namespace linker.plugins.sforward.proxy
//等待回复 //等待回复
TaskCompletionSource<Socket> tcs = new TaskCompletionSource<Socket>(TaskCreationOptions.RunContinuationsAsynchronously); TaskCompletionSource<Socket> tcs = new TaskCompletionSource<Socket>(TaskCreationOptions.RunContinuationsAsynchronously);
tcpConnections.TryAdd(id, tcs); tcpConnections.TryAdd(id, tcs);
token.TargetSocket = await tcs.Task.WaitAsync(TimeSpan.FromMilliseconds(2000)).ConfigureAwait(false); token.TargetSocket = await tcs.Task.WaitAsync(TimeSpan.FromMilliseconds(5000)).ConfigureAwait(false);
//数据 //数据
await token.TargetSocket.SendAsync(buffer1.AsMemory(0, length)).ConfigureAwait(false); await token.TargetSocket.SendAsync(buffer1.AsMemory(0, length)).ConfigureAwait(false);
@@ -160,8 +159,12 @@ namespace linker.plugins.sforward.proxy
CloseClientSocket(token); CloseClientSocket(token);
} }
catch (Exception) catch (Exception ex)
{ {
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Error(ex);
}
CloseClientSocket(token); CloseClientSocket(token);
} }
finally finally
@@ -195,11 +198,6 @@ namespace linker.plugins.sforward.proxy
private readonly byte[] hostBytes = Encoding.UTF8.GetBytes("Host: "); private readonly byte[] hostBytes = Encoding.UTF8.GetBytes("Host: ");
private readonly byte[] wrapBytes = Encoding.UTF8.GetBytes("\r\n"); private readonly byte[] wrapBytes = Encoding.UTF8.GetBytes("\r\n");
private readonly byte[] colonBytes = Encoding.UTF8.GetBytes(":"); private readonly byte[] colonBytes = Encoding.UTF8.GetBytes(":");
/// <summary>
/// 截取http请求头的host内容
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
private string GetHost(Memory<byte> buffer) private string GetHost(Memory<byte> buffer)
{ {
int start = buffer.Span.IndexOf(hostBytes); int start = buffer.Span.IndexOf(hostBytes);
@@ -217,7 +215,6 @@ namespace linker.plugins.sforward.proxy
#endregion #endregion
/// <summary> /// <summary>
/// 客户端,收到服务端的连接请求 /// 客户端,收到服务端的连接请求
/// </summary> /// </summary>
@@ -263,7 +260,6 @@ namespace linker.plugins.sforward.proxy
} }
} }
/// <summary> /// <summary>
/// 读取数据,然后发送给对方,用户两端交换数据 /// 读取数据,然后发送给对方,用户两端交换数据
/// </summary> /// </summary>
@@ -310,7 +306,6 @@ namespace linker.plugins.sforward.proxy
} }
} }
} }
public sealed class AsyncUserToken public sealed class AsyncUserToken

View File

@@ -7,6 +7,7 @@ using linker.plugins.client;
using linker.plugins.capi; using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.signin namespace linker.plugins.signin
{ {

View File

@@ -5,8 +5,8 @@ using MemoryPack;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Net; using System.Net;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using linker.plugins.messenger;
using linker.plugins.signIn.args; using linker.plugins.signIn.args;
using linker.messenger;
namespace linker.plugins.signin.messenger namespace linker.plugins.signin.messenger
{ {
@@ -99,7 +99,6 @@ namespace linker.plugins.signin.messenger
{ {
return Clients.TryGetValue(machineId, out SignCacheInfo cache) && cache.Connected; return Clients.TryGetValue(machineId, out SignCacheInfo cache) && cache.Connected;
} }
public void GetOnline(out int all, out int online) public void GetOnline(out int all, out int online)
{ {
all = Clients.Count; all = Clients.Count;
@@ -116,7 +115,6 @@ namespace linker.plugins.signin.messenger
return true; return true;
} }
private void ClearTask() private void ClearTask()
{ {
TimerHelper.SetInterval(() => TimerHelper.SetInterval(() =>
@@ -216,7 +214,6 @@ namespace linker.plugins.signin.messenger
[MemoryPackable] [MemoryPackable]
public sealed partial class SignInfo public sealed partial class SignInfo
{ {
public string MachineId { get; set; } = string.Empty; public string MachineId { get; set; } = string.Empty;
public string MachineName { get; set; } = string.Empty; public string MachineName { get; set; } = string.Empty;
public string GroupId { get; set; } = string.Empty; public string GroupId { get; set; } = string.Empty;

View File

@@ -1,10 +1,9 @@
using linker.config; using MemoryPack;
using MemoryPack;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger;
using linker.libs; using linker.libs;
using LiteDB; using LiteDB;
using linker.libs.extends; using linker.libs.extends;
using linker.messenger;
namespace linker.plugins.signin.messenger namespace linker.plugins.signin.messenger
{ {
@@ -31,13 +30,11 @@ namespace linker.plugins.signin.messenger
public sealed class SignInServerMessenger : IMessenger public sealed class SignInServerMessenger : IMessenger
{ {
private readonly SignCaching signCaching; private readonly SignCaching signCaching;
private readonly FileConfig config;
private readonly IMessengerSender messengerSender; private readonly IMessengerSender messengerSender;
public SignInServerMessenger(SignCaching signCaching, FileConfig config, IMessengerSender messengerSender) public SignInServerMessenger(SignCaching signCaching, IMessengerSender messengerSender)
{ {
this.signCaching = signCaching; this.signCaching = signCaching;
this.config = config;
this.messengerSender = messengerSender; this.messengerSender = messengerSender;
} }

View File

@@ -11,6 +11,7 @@ using linker.client.config;
using linker.plugins.socks5.config; using linker.plugins.socks5.config;
using linker.plugins.socks5.messenger; using linker.plugins.socks5.messenger;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.socks5 namespace linker.plugins.socks5
{ {

View File

@@ -148,7 +148,7 @@ namespace linker.plugins.socks5
return infos return infos
.Where(c => c.MachineId != clientConfigTransfer.Id) .Where(c => c.MachineId != clientConfigTransfer.Id)
.OrderByDescending(c => c.Status) .OrderByDescending(c => c.Status)
.OrderByDescending(c => c.LastTicks.Value) .OrderByDescending(c => c.MachineId)
.Select(c => .Select(c =>
{ {

View File

@@ -1,4 +1,5 @@
using linker.config; using linker.config;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using linker.plugins.socks5.config; using linker.plugins.socks5.config;

View File

@@ -8,6 +8,7 @@ using linker.plugins.messenger;
using linker.plugins.tunnel.excludeip; using linker.plugins.tunnel.excludeip;
using linker.tunnel.wanport; using linker.tunnel.wanport;
using linker.tunnel; using linker.tunnel;
using linker.messenger;
namespace linker.plugins.tunnel namespace linker.plugins.tunnel
{ {
@@ -42,6 +43,7 @@ namespace linker.plugins.tunnel
this.tunnelUpnpTransfer = tunnelUpnpTransfer; this.tunnelUpnpTransfer = tunnelUpnpTransfer;
this.tunnelTransfer = tunnelTransfer; this.tunnelTransfer = tunnelTransfer;
//加载外网端口
tunnelWanPortTransfer.LoadTransports(new List<ITunnelWanPortProtocol> tunnelWanPortTransfer.LoadTransports(new List<ITunnelWanPortProtocol>
{ {
new TunnelWanPortProtocolLinkerUdp(), new TunnelWanPortProtocolLinkerUdp(),
@@ -58,6 +60,7 @@ namespace linker.plugins.tunnel
tunnelTransfer.SendConnectBegin = SendConnectBegin; tunnelTransfer.SendConnectBegin = SendConnectBegin;
tunnelTransfer.SendConnectFail = SendConnectFail; tunnelTransfer.SendConnectFail = SendConnectFail;
tunnelTransfer.SendConnectSuccess = SendConnectSuccess; tunnelTransfer.SendConnectSuccess = SendConnectSuccess;
//加载打洞协议
transportTcpPortMap = new TransportTcpPortMap(); transportTcpPortMap = new TransportTcpPortMap();
transportUdpPortMap = new TransportUdpPortMap(); transportUdpPortMap = new TransportUdpPortMap();
tunnelTransfer.LoadTransports(tunnelWanPortTransfer, tunnelUpnpTransfer, new List<ITunnelTransport> { tunnelTransfer.LoadTransports(tunnelWanPortTransfer, tunnelUpnpTransfer, new List<ITunnelTransport> {

View File

@@ -11,6 +11,7 @@ using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.tunnel.excludeip; using linker.plugins.tunnel.excludeip;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.tunnel namespace linker.plugins.tunnel
{ {

View File

@@ -1,6 +1,7 @@
using linker.client.config; using linker.client.config;
using linker.config; using linker.config;
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.tunnel; using linker.tunnel;

View File

@@ -4,7 +4,7 @@ using linker.tunnel;
using linker.tunnel.transport; using linker.tunnel.transport;
using linker.libs; using linker.libs;
using MemoryPack; using MemoryPack;
using linker.plugins.messenger; using linker.messenger;
namespace linker.plugins.tunnel.messenger namespace linker.plugins.tunnel.messenger
{ {

View File

@@ -173,7 +173,7 @@ namespace linker.plugins.tuntap
return infos return infos
.Where(c => c.MachineId != clientConfigTransfer.Id) .Where(c => c.MachineId != clientConfigTransfer.Id)
.OrderByDescending(c => c.Status) .OrderByDescending(c => c.Status)
.OrderByDescending(c => c.LastTicks.Value) .OrderByDescending(c => c.IP)
.Select(c => .Select(c =>
{ {

View File

@@ -14,6 +14,7 @@ using linker.plugins.tuntap.lease;
using System.Net; using System.Net;
using linker.libs; using linker.libs;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.tuntap namespace linker.plugins.tuntap
{ {

View File

@@ -4,6 +4,7 @@ using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.tuntap.messenger; using linker.plugins.tuntap.messenger;
using linker.libs; using linker.libs;
using linker.messenger;
namespace linker.plugins.tuntap.lease namespace linker.plugins.tuntap.lease
{ {

View File

@@ -1,6 +1,7 @@
using linker.config; using linker.config;
using linker.libs; using linker.libs;
using linker.libs.extends; using linker.libs.extends;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using linker.plugins.tuntap.config; using linker.plugins.tuntap.config;

View File

@@ -11,6 +11,7 @@ using linker.plugins.capi;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.libs; using linker.libs;
using linker.plugins.access; using linker.plugins.access;
using linker.messenger;
namespace linker.plugins.updater namespace linker.plugins.updater
{ {

View File

@@ -1,6 +1,7 @@
using linker.client.config; using linker.client.config;
using linker.config; using linker.config;
using linker.libs; using linker.libs;
using linker.messenger;
using linker.plugins.client; using linker.plugins.client;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.updater.messenger; using linker.plugins.updater.messenger;

View File

@@ -1,6 +1,7 @@
using linker.config; using linker.config;
using linker.libs; using linker.libs;
using linker.libs.extends; using linker.libs.extends;
using linker.messenger;
using linker.plugins.messenger; using linker.plugins.messenger;
using linker.plugins.signin.messenger; using linker.plugins.signin.messenger;
using linker.plugins.updater.config; using linker.plugins.updater.config;

View File

@@ -33,16 +33,16 @@ do
fi fi
done done
cd public/publish/docker/linux-${p}-x64/${f} cd public/publish/docker/linux-${p}-x64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.6.3" . --push docker buildx build -f ${target}/public/publish/docker/linux-${p}-x64/${f}/Dockerfile-${p} --platform="linux/x86_64" --force-rm -t "${image}-${p}-x64:latest" -t "${image}-${p}-x64:v1.6.4" . --push
cd ../../../../../ cd ../../../../../
cd public/publish/docker/linux-${p}-arm64/${f} cd public/publish/docker/linux-${p}-arm64/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.6.3" . --push docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm64/${f}/Dockerfile-${p} --platform="linux/arm64" --force-rm -t "${image}-${p}-arm64:latest" -t "${image}-${p}-arm64:v1.6.4" . --push
cd ../../../../../ cd ../../../../../
cd public/publish/docker/linux-${p}-arm/${f} cd public/publish/docker/linux-${p}-arm/${f}
docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.6.3" . --push docker buildx build -f ${target}/public/publish/docker/linux-${p}-arm/${f}/Dockerfile-${p} --platform="linux/arm/v7" --force-rm -t "${image}-${p}-arm:latest" -t "${image}-${p}-arm:v1.6.4" . --push
cd ../../../../../ cd ../../../../../
done done
done done

View File

@@ -1,5 +1,5 @@
v1.6.3 v1.6.4
2024-12-13 17:19:41 2024-12-15 19:17:18
1. 优化UI显示网络计算IP数 1. 优化UI显示网络计算IP数
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题 2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
3. 优化网卡的端口转发 3. 优化网卡的端口转发

View File

@@ -24,12 +24,14 @@ jobs:
dotnet build ./linker.libs -c release dotnet build ./linker.libs -c release
dotnet build ./linker.tunnel -c release dotnet build ./linker.tunnel -c release
dotnet build ./linker.tun -c release dotnet build ./linker.tun -c release
dotnet build ./linker.messenger -c release
- name: Pack - name: Pack
run: | run: |
dotnet pack ./linker.libs -c release dotnet pack ./linker.libs -c release
dotnet pack ./linker.tunnel -c release dotnet pack ./linker.tunnel -c release
dotnet pack ./linker.tun -c release dotnet pack ./linker.tun -c release
dotnet pack ./linker.messenger -c release
- name: Install Nuget - name: Install Nuget
uses: nuget/setup-nuget@v1 uses: nuget/setup-nuget@v1
@@ -41,3 +43,4 @@ jobs:
nuget push ./linker.tunnel/bin/release/linker.tunnel.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.tunnel/bin/release/linker.tunnel.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.libs/bin/release/linker.libs.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.libs/bin/release/linker.libs.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.tun/bin/release/linker.tun.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol nuget push ./linker.tun/bin/release/linker.tun.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol
nuget push ./linker.messenger/bin/release/linker.messenger.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol