This commit is contained in:
snltty
2024-08-15 16:29:16 +08:00
parent 866d8df543
commit 8e5f6f184e
8 changed files with 15 additions and 181 deletions

View File

@@ -11,7 +11,7 @@ namespace linker.tun.test
static void Main(string[] args)
{
linkerTunDeviceAdapter = new LinkerTunDeviceAdapter();
linkerTunDeviceAdapter.Initialize("linker0", new LinkerTunDeviceCallbackTCPUDP());
linkerTunDeviceAdapter.Initialize("linker0", new LinkerTunDeviceCallbackICMP());
linkerTunDeviceAdapter.Setup(IPAddress.Parse("192.168.55.2"), 24, 1416);
if (string.IsNullOrWhiteSpace(linkerTunDeviceAdapter.Error))

View File

@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<History>True|2024-08-02T15:25:37.2353291Z||;</History>
<History>True|2024-08-15T07:24:49.6191991Z||;True|2024-08-02T23:25:37.2353291+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@@ -23,7 +23,12 @@
<strong v-if="scope.row.isSelf"> - (<el-icon><StarFilled /></el-icon> 本机) </strong>
</p>
<p class="flex">
<span>{{ scope.row.IP }}</span>
<template v-if="scope.row.showip">
<span class="ipaddress"><span>{{ scope.row.IP }}</span> <el-icon @click="scope.row.showip=flase"><View /></el-icon></span>
</template>
<template v-else>
<span class="ipaddress"><span>{{ scope.row.IP.replace(/(\d+\.\d+\.\d+\.\d+)/,'***.***.***.***') }}</span> <el-icon @click="scope.row.showip=true"><Hide /></el-icon></span>
</template>
<span class="flex-1"></span>
<a href="javascript:;" class="download" @click="handleUpdate(scope.row)" :title="updateText(scope.row)" :class="updateColor(scope.row)">
<span>
@@ -57,7 +62,7 @@
<script>
import { injectGlobalData } from '@/provide';
import { computed, ref,h } from 'vue';
import {StarFilled,Search,Download,Loading,CircleCheck} from '@element-plus/icons-vue'
import {StarFilled,Search,Download,Loading,CircleCheck,View,Hide} from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox,ElSelect,ElOption } from 'element-plus';
import { confirm, exit } from '@/apis/updater';
import { useUpdater } from './updater';
@@ -65,7 +70,7 @@ import { useTuntap } from './tuntap';
export default {
emits:['edit','refresh'],
components:{StarFilled,Search,Download,Loading,CircleCheck},
components:{StarFilled,Search,Download,Loading,CircleCheck,View,Hide},
setup(props,{emit}) {
const name = ref(sessionStorage.getItem('search-name') || '');
@@ -199,6 +204,10 @@ img.system{
margin-right:.4rem
}
.ipaddress{
span,.el-icon{vertical-align:middle}
}
a.download{
margin-left:.6rem

View File

@@ -29,6 +29,7 @@ export const provideDevices = () => {
res.List[j].showDel = machineId.value != res.List[j].MachineId && res.List[j].Connected == false;
res.List[j].showReboot = res.List[j].Connected;
res.List[j].isSelf = machineId.value == res.List[j].MachineId;
res.List[j].showip = false;
}
devices.page.List = res.List;
for (let i = 0; i < devices.page.List.length; i++) {

View File

@@ -1,41 +0,0 @@
using linker.config;
using linker.startup;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace linker.plugins.turn
{
public sealed class TurnStartup : IStartup
{
public string Name => "turn";
public bool Required => false;
public StartupLevel Level => StartupLevel.Normal;
public string[] Dependent => ["messenger", "tunnel", "signin", "serialize", "config"];
public StartupLoadType LoadType => StartupLoadType.Normal;
public void AddClient(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies)
{
}
public void AddServer(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies)
{
}
public void UseClient(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)
{
}
public void UseServer(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)
{
}
}
}

View File

@@ -1,22 +0,0 @@
using MemoryPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace linker.plugins.turn.config
{
[MemoryPackable]
public sealed partial class TunnelsInfo
{
/// <summary>
/// 谁
/// </summary>
public string MachineId { get; set; }
/// <summary>
/// 跟谁打洞成功过
/// </summary>
public List<string> MachineIds { get; set; }
}
}

View File

@@ -1,98 +0,0 @@
using linker.config;
using linker.plugins.signin.messenger;
using linker.libs;
using MemoryPack;
using linker.plugins.messenger;
using linker.plugins.turn.config;
namespace linker.plugins.turn.messenger
{
public sealed class TurnClientMessenger : IMessenger
{
private readonly MessengerSender messengerSender;
public TurnClientMessenger(MessengerSender messengerSender)
{
this.messengerSender = messengerSender;
}
}
public sealed class TurnServerMessenger : IMessenger
{
private readonly MessengerSender messengerSender;
private readonly SignCaching signCaching;
public TurnServerMessenger(MessengerSender messengerSender, SignCaching signCaching)
{
this.messengerSender = messengerSender;
this.signCaching = signCaching;
}
[MessengerId((ushort)TurnMessengerIds.TunnelsForward)]
public void TunnelsForward(IConnection connection)
{
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
IEnumerable<Task<MessageResponeInfo>> tasks = signCaching.Get(cache.GroupId)
.Where(c => c.MachineId != connection.Id && c.Connected)
.Select(c => messengerSender.SendReply(new MessageRequestWrap
{
Connection = c.Connection,
MessengerId = (ushort)TurnMessengerIds.Tunnels,
Timeout = 3000
}));
Task.WhenAll(tasks).ContinueWith(async (result) =>
{
List<TunnelsInfo> results = tasks.Where(c => c.Result.Code == MessageResponeCodes.OK)
.Select(c => new TunnelsInfo { MachineId = c.Result.Connection.Id, MachineIds = MemoryPackSerializer.Deserialize<List<string>>(c.Result.Data.Span) })
.ToList();
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Payload = MemoryPackSerializer.Serialize(results),
RequestId = requestid,
}).ConfigureAwait(false);
});
}
}
[MessengerId((ushort)TurnMessengerIds.PortMapsForward)]
public void PortMapsForward(IConnection connection)
{
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
IEnumerable<Task<MessageResponeInfo>> tasks = signCaching.Get(cache.GroupId)
.Where(c => c.MachineId != connection.Id && c.Connected)
.Select(c => messengerSender.SendReply(new MessageRequestWrap
{
Connection = c.Connection,
MessengerId = (ushort)TurnMessengerIds.PortMaps,
Timeout = 3000
}));
Task.WhenAll(tasks).ContinueWith(async (result) =>
{
List<string> results = tasks.Where(c => c.Result.Code == MessageResponeCodes.OK && c.Result.Data.Span.SequenceEqual(Helper.TrueArray))
.Select(c => c.Result.Connection.Id)
.ToList();
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Payload = MemoryPackSerializer.Serialize(results),
RequestId = requestid,
}).ConfigureAwait(false);
});
}
}
}
}

View File

@@ -1,15 +0,0 @@
namespace linker.plugins.turn.messenger
{
public enum TurnMessengerIds : ushort
{
_ = 2700,
TunnelsForward = 2701,
Tunnels = 2702,
PortMapsForward = 2703,
PortMaps = 2704,
None = 2799
}
}