整理代码

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 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: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:v1.6.3 && \
docker manifest push snltty/linker-musl:v1.6.4 && \
docker pull --platform linux/arm/v7 snltty/linker-debian-arm:latest && \
docker tag snltty/linker-debian-arm:latest 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 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: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:v1.6.3
docker manifest push snltty/linker-debian:v1.6.4

View File

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

View File

@@ -24,12 +24,14 @@ jobs:
dotnet build ./linker.libs -c release
dotnet build ./linker.tunnel -c release
dotnet build ./linker.tun -c release
dotnet build ./linker.messenger -c release
- name: Pack
run: |
dotnet pack ./linker.libs -c release
dotnet pack ./linker.tunnel -c release
dotnet pack ./linker.tun -c release
dotnet pack ./linker.messenger -c release
- name: Install Nuget
uses: nuget/setup-nuget@v1
@@ -38,6 +40,7 @@ jobs:
- name: Push
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.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.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.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.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.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
{
private List<GeneratorInfo> generators = new List<GeneratorInfo> {
new GeneratorInfo{ ClassName="FlowTypesLoader", ClassNameSpace="linker.plugins.flow", InterfaceName="linker.plugins.flow.IFlow" },
new GeneratorInfo{ ClassName="RelayTypesLoader", ClassNameSpace="linker.plugins.relay.client", 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="SignInArgsTypesLoader", ClassNameSpace="linker.plugins.signIn.args", InterfaceName="linker.plugins.signIn.args.ISignInArgs" },
new GeneratorInfo{ ClassName="ResolverTypesLoader", ClassNameSpace="linker.plugins.resolver", InterfaceName="linker.plugins.resolver.IResolver" },
new GeneratorInfo{ ClassName="TunnelExcludeIPTypesLoader", ClassNameSpace="linker.plugins.tunnel.excludeip", InterfaceName="linker.plugins.tunnel.excludeip.ITunnelExcludeIP" },
new GeneratorInfo{ ClassName="StartupTransfer", ClassNameSpace="linker.startup", InterfaceName="linker.startup.IStartup", Instance=true },
new GeneratorInfo{ ClassName="MessengerResolverTypesLoader", ClassNameSpace="linker.plugins.messenger", InterfaceName="linker.plugins.messenger.IMessenger"},
new GeneratorInfo{ ClassName="ApiClientTypesLoader", ClassNameSpace="linker.plugins.capi", InterfaceName="linker.plugins.capi.IApiClientController"},
new GeneratorInfo{ ClassName="ConfigSyncTypesLoader", ClassNameSpace="linker.plugins.config", InterfaceName="linker.plugins.config.IConfigSync"},
new GeneratorInfo{ ClassName="DecenterTypesLoader", ClassNameSpace="linker.plugins.decenter", InterfaceName="linker.plugins.decenter.IDecenter"},
new GeneratorInfo{ ClassName="RouteExcludeIPTypesLoader", ClassNameSpace="linker.plugins.route", InterfaceName="linker.plugins.route.IRouteExcludeIP" },
new GeneratorInfo{ ClassName="linker.plugins.flow.FlowTypesLoader", InterfaceName="linker.plugins.flow.IFlow" },
new GeneratorInfo{ ClassName="linker.plugins.relay.client.RelayTypesLoader", InterfaceName="linker.plugins.relay.client.transport.ITransport" },
new GeneratorInfo{ ClassName="linker.plugins.relay.server.validator.RelayValidatorTypeLoader", InterfaceName="linker.plugins.relay.server.validator.IRelayValidator" },
new GeneratorInfo{ ClassName="linker.plugins.signIn.args.SignInArgsTypesLoader", InterfaceName="linker.plugins.signIn.args.ISignInArgs" },
new GeneratorInfo{ ClassName="linker.plugins.resolver.ResolverTypesLoader", InterfaceName="linker.plugins.resolver.IResolver" },
new GeneratorInfo{ ClassName="linker.plugins.tunnel.excludeip.TunnelExcludeIPTypesLoader", InterfaceName="linker.plugins.tunnel.excludeip.ITunnelExcludeIP" },
new GeneratorInfo{ ClassName="linker.startup.StartupTransfer", InterfaceName="linker.startup.IStartup", Instance=true },
new GeneratorInfo{ ClassName="linker.plugins.messenger.MessengerResolverTypesLoader", InterfaceName="linker.messenger.IMessenger"},
new GeneratorInfo{ ClassName="linker.plugins.capi.ApiClientTypesLoader",InterfaceName="linker.plugins.capi.IApiClientController"},
new GeneratorInfo{ ClassName="linker.plugins.config.ConfigSyncTypesLoader", InterfaceName="linker.plugins.config.IConfigSync"},
new GeneratorInfo{ ClassName="linker.plugins.decenter.DecenterTypesLoader", InterfaceName="linker.plugins.decenter.IDecenter"},
new GeneratorInfo{ ClassName="linker.plugins.route.RouteExcludeIPTypesLoader", InterfaceName="linker.plugins.route.IRouteExcludeIP" },
};
public void Initialize(IncrementalGeneratorInitializationContext context)
@@ -74,14 +74,16 @@ namespace linker.gen
}
}
var spaces = info.ClassName.Split('.');
var source = $@"
using System;
using System.Collections.Generic;
{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()
{{
@@ -110,7 +112,6 @@ namespace linker.gen
public sealed class GeneratorInfo
{
public string ClassName { get; set; }
public string ClassNameSpace { get; set; }
public string InterfaceName { get; set; }
public bool Instance { get; set; }
}

View File

@@ -14,9 +14,9 @@
<Copyright>snltty</Copyright>
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<Version>1.6.3</Version>
<AssemblyVersion>1.6.3</AssemblyVersion>
<FileVersion>1.6.3</FileVersion>
<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>

View File

@@ -6,7 +6,7 @@ using System.Net.Security;
using System.Net.Sockets;
using System.Text;
namespace linker.plugins.messenger
namespace linker.messenger
{
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.Cryptography.X509Certificates;
using linker.libs.extends;
using linker.plugins.resolver;
namespace linker.plugins.messenger
namespace linker.messenger
{
public interface IMessengerResolver
{
public void Initialize(string certificate, string password);
public Task<IConnection> BeginReceiveClient(Socket socket);
public Task<IConnection> BeginReceiveClient(Socket socket, bool sendFlag, byte flag);
public void LoadMessenger(List<IMessenger> list);
public Task Resolve(Socket socket, 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>
/// 消息处理总线
@@ -70,11 +53,9 @@ namespace linker.plugins.messenger
}
}
public virtual void AddReceive(ushort id, ulong bytes) { }
public virtual void AddSendt(ushort id, ulong bytes) { }
public async Task Resolve(Socket socket, Memory<byte> memory)
{
try
@@ -98,6 +79,10 @@ namespace linker.plugins.messenger
}
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
{
@@ -106,7 +91,10 @@ namespace linker.plugins.messenger
return null;
}
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);
SslStream sslStream = new SslStream(networkStream, true, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
await sslStream.AuthenticateAsClientAsync(new SslClientAuthenticationOptions

View File

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

View File

@@ -2,7 +2,7 @@
using System.Buffers;
using System.ComponentModel;
namespace linker.plugins.messenger
namespace linker.messenger
{
/// <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
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.gen", "linker.gen\linker.gen.csproj", "{031C3589-72BB-4A3F-B1A5-BC0665FDF01B}"
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
GlobalSection(SolutionConfigurationPlatforms) = preSolution
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|x86.ActiveCfg = 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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -1,5 +1,5 @@
<?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"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<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>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tun</PackageReleaseNotes>
<Version>1.6.3</Version>
<AssemblyVersion>1.6.3</AssemblyVersion>
<FileVersion>1.6.3</FileVersion>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.4</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -16,9 +16,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker tunnel</PackageReleaseNotes>
<Version>1.6.3</Version>
<AssemblyVersion>1.6.3</AssemblyVersion>
<FileVersion>1.6.3</FileVersion>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.4</FileVersion>
</PropertyGroup>
<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 {
display: flex;

View File

@@ -22,7 +22,7 @@ export default {
setup(props) {
const globalData = injectGlobalData();
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 = ()=>{
try{
@@ -35,7 +35,7 @@ export default {
return;
}
const json = {};
json[globalData.value.config.Client.ServerInfo.Host] = state.list;
json[globalData.value.config.Client.Server.Host] = state.list;
setArgs(json).then(()=>{
ElMessage.success('已操作');
}).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.isSelf && (hasForwardShowSelf || hasForwardSelf)">
<div>
<template v-if="connections.list[scope.row.MachineId] && connections.list[scope.row.MachineId].Connected">
<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>
<ConnectionShow :data="connections.list[scope.row.MachineId]"></ConnectionShow>
<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>
</a>
@@ -30,20 +17,7 @@
</template>
<template v-else-if="hasForwardShowOther || hasForwardOther">
<div>
<template v-if="connections.list[scope.row.MachineId] && connections.list[scope.row.MachineId].Connected">
<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>
<ConnectionShow :data="connections.list[scope.row.MachineId]"></ConnectionShow>
<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>
</a>
@@ -64,9 +38,11 @@ import { useForward } from './forward';
import { useSforward } from './sforward';
import { computed } from 'vue';
import { useForwardConnections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default {
emits: ['edit','sedit'],
components:{ConnectionShow},
setup(props, { emit }) {
const forward = useForward()

View File

@@ -2,20 +2,7 @@
<div>
<div class="flex">
<div class="flex-1">
<template v-if="connections.list[item.MachineId]&& connections.list[item.MachineId].Connected">
<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>
<ConnectionShow :data="connections.list[item.MachineId]"></ConnectionShow>
<a href="javascript:;" class="a-line" @click="handleSocks5Port(socks5.list[item.MachineId])" title="此设备的socks5代理">
<template v-if="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 { computed } from 'vue';
import { useSocks5Connections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default {
props:['item','config'],
emits: ['edit','refresh'],
components:{Loading},
components:{Loading,ConnectionShow},
setup (props,{emit}) {
const socks5 = useSocks5();

View File

@@ -2,20 +2,7 @@
<div>
<div class="flex">
<div class="flex-1">
<template v-if="connections.list[item.MachineId] && connections.list[item.MachineId].Connected">
<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>
<ConnectionShow :data="connections.list[item.MachineId]"></ConnectionShow>
<a href="javascript:;" class="a-line" @click="handleTuntapIP(tuntap.list[item.MachineId])" title="此设备的虚拟网卡IP">
<template v-if="tuntap.list[item.MachineId].SetupError">
<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 { computed } from 'vue';
import { useTuntapConnections } from './connections';
import ConnectionShow from './ConnectionShow.vue';
export default {
props:['item','config'],
emits: ['edit','refresh'],
components:{Loading},
components:{Loading,ConnectionShow},
setup (props,{emit}) {
const tuntap = useTuntap();

View File

@@ -123,7 +123,7 @@ export default {
password:step.value.form.client.password || globalData.value.config.Client.CApi.ApiPassword,
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,
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,

View File

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

View File

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

View File

@@ -30,7 +30,7 @@ export default {
});
watch(()=>globalData.value.config.Client.Servers,()=>{
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 = ()=>{
window.location.reload();

View File

@@ -30,9 +30,9 @@
<PackageProjectUrl>https://github.com/snltty/linker</PackageProjectUrl>
<RepositoryUrl>https://github.com/snltty/linker</RepositoryUrl>
<PackageReleaseNotes>linker</PackageReleaseNotes>
<Version>1.6.3</Version>
<AssemblyVersion>1.6.3</AssemblyVersion>
<FileVersion>1.6.3</FileVersion>
<Version>1.6.4</Version>
<AssemblyVersion>1.6.4</AssemblyVersion>
<FileVersion>1.6.4</FileVersion>
</PropertyGroup>
@@ -66,6 +66,7 @@
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<IsTrimmable>false</IsTrimmable>
</ProjectReference>
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
<ProjectReference Include="..\linker.tunnel\linker.tunnel.csproj" />
<ProjectReference Include="..\linker.libs\linker.libs.csproj" />
<ProjectReference Include="..\linker.tun\linker.tun.csproj" />

View File

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

View File

@@ -1,5 +1,6 @@
using linker.config;
using linker.libs;
using linker.messenger;
using linker.plugins.client;
using linker.plugins.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;
namespace linker.plugins.client

View File

@@ -8,6 +8,8 @@ using System.Net;
using System.Net.Sockets;
using linker.plugins.messenger;
using linker.plugins.signIn.args;
using linker.messenger;
using linker.plugins.resolver;
namespace linker.plugins.client
{
@@ -124,7 +126,7 @@ namespace linker.plugins.client
Socket socket = new Socket(remote.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.KeepAlive();
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;
}

View File

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

View File

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

View File

@@ -1,4 +1,5 @@
using linker.libs;
using linker.messenger;
using linker.plugins.client;
using linker.plugins.config.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 MemoryPack;

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
using linker.config;
using linker.messenger;
using linker.plugins.flow.messenger;
using linker.plugins.messenger;
using linker.plugins.relay;
using linker.plugins.relay.server;
using linker.plugins.sforward.proxy;
using linker.plugins.tunnel;
@@ -28,12 +28,6 @@ namespace linker.plugins.flow
serviceCollection.AddSingleton<IMessengerResolver, MessengerResolverFlow>();
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)
@@ -49,15 +43,14 @@ namespace linker.plugins.flow
serviceCollection.AddSingleton<RelayFlow>();
serviceCollection.AddSingleton<RelayResolver, RelayResolverFlow>();
serviceCollection.AddSingleton<RelayReportFlow>();
serviceCollection.AddSingleton<RelayReportResolver, RelayReportResolverFlow>();
serviceCollection.AddSingleton<ExternalFlow>();
serviceCollection.AddSingleton<ExternalResolver, ExternalResolverFlow>();
serviceCollection.AddSingleton<SForwardFlow>();
serviceCollection.AddSingleton<SForwardProxy, SForwardProxyFlow>();
serviceCollection.AddSingleton<RelayReportFlow>();
serviceCollection.AddSingleton<RelayReportResolver, RelayReportResolverFlow>();
}
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
{

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,5 @@
using linker.client.config;
using linker.messenger;
using linker.plugins.messenger;
using linker.plugins.signin.messenger;
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.messenger;
using Microsoft.Extensions.DependencyInjection;
namespace linker.plugins.messenger

View File

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

View File

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

View File

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

View File

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

View File

@@ -33,6 +33,7 @@ namespace linker.config
/// 中继服务器列表
/// </summary>
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 linker.plugins.decenter.messenger;
using System.Reflection;
using linker.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);
ResolverType type = (ResolverType)buffer[0];
//LoggerHelper.Instance.Info($"tcp connect from {socket.RemoteEndPoint}->{(ResolverType)buffer[0]}");
if (resolvers.TryGetValue(type, out IResolver resolver))
{
await resolver.Resolve(socket, buffer.AsMemory(1, length));

View File

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

View File

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

View File

@@ -9,6 +9,7 @@ using LiteDB;
using System.Net;
using linker.plugins.messenger;
using linker.libs;
using linker.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<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<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);
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);
@@ -160,8 +159,12 @@ namespace linker.plugins.sforward.proxy
CloseClientSocket(token);
}
catch (Exception)
catch (Exception ex)
{
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
{
LoggerHelper.Instance.Error(ex);
}
CloseClientSocket(token);
}
finally
@@ -195,11 +198,6 @@ namespace linker.plugins.sforward.proxy
private readonly byte[] hostBytes = Encoding.UTF8.GetBytes("Host: ");
private readonly byte[] wrapBytes = Encoding.UTF8.GetBytes("\r\n");
private readonly byte[] colonBytes = Encoding.UTF8.GetBytes(":");
/// <summary>
/// 截取http请求头的host内容
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
private string GetHost(Memory<byte> buffer)
{
int start = buffer.Span.IndexOf(hostBytes);
@@ -217,7 +215,6 @@ namespace linker.plugins.sforward.proxy
#endregion
/// <summary>
/// 客户端,收到服务端的连接请求
/// </summary>
@@ -263,7 +260,6 @@ namespace linker.plugins.sforward.proxy
}
}
/// <summary>
/// 读取数据,然后发送给对方,用户两端交换数据
/// </summary>
@@ -310,7 +306,6 @@ namespace linker.plugins.sforward.proxy
}
}
}
public sealed class AsyncUserToken

View File

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

View File

@@ -5,8 +5,8 @@ using MemoryPack;
using System.Collections.Concurrent;
using System.Net;
using System.Text.Json.Serialization;
using linker.plugins.messenger;
using linker.plugins.signIn.args;
using linker.messenger;
namespace linker.plugins.signin.messenger
{
@@ -99,7 +99,6 @@ namespace linker.plugins.signin.messenger
{
return Clients.TryGetValue(machineId, out SignCacheInfo cache) && cache.Connected;
}
public void GetOnline(out int all, out int online)
{
all = Clients.Count;
@@ -116,7 +115,6 @@ namespace linker.plugins.signin.messenger
return true;
}
private void ClearTask()
{
TimerHelper.SetInterval(() =>
@@ -216,7 +214,6 @@ namespace linker.plugins.signin.messenger
[MemoryPackable]
public sealed partial class SignInfo
{
public string MachineId { get; set; } = string.Empty;
public string MachineName { 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.messenger;
using linker.libs;
using LiteDB;
using linker.libs.extends;
using linker.messenger;
namespace linker.plugins.signin.messenger
{
@@ -31,13 +30,11 @@ namespace linker.plugins.signin.messenger
public sealed class SignInServerMessenger : IMessenger
{
private readonly SignCaching signCaching;
private readonly FileConfig config;
private readonly IMessengerSender messengerSender;
public SignInServerMessenger(SignCaching signCaching, FileConfig config, IMessengerSender messengerSender)
public SignInServerMessenger(SignCaching signCaching, IMessengerSender messengerSender)
{
this.signCaching = signCaching;
this.config = config;
this.messengerSender = messengerSender;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -33,16 +33,16 @@ do
fi
done
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 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 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 ../../../../../
done
done

View File

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

View File

@@ -24,12 +24,14 @@ jobs:
dotnet build ./linker.libs -c release
dotnet build ./linker.tunnel -c release
dotnet build ./linker.tun -c release
dotnet build ./linker.messenger -c release
- name: Pack
run: |
dotnet pack ./linker.libs -c release
dotnet pack ./linker.tunnel -c release
dotnet pack ./linker.tun -c release
dotnet pack ./linker.messenger -c release
- name: Install Nuget
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.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.messenger/bin/release/linker.messenger.{{version}}.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NUGET_KEY }} -NoSymbol