序列化库增强版本容错

This commit is contained in:
snltty
2025-11-20 15:58:21 +08:00
parent 935b3cb416
commit a60cdff41e
60 changed files with 1623 additions and 1460 deletions

View File

@@ -1,5 +1,5 @@
v1.9.6 v1.9.6
2025-11-19 11:49:54 2025-11-20 15:58:21
1. 一些累计更新一些BUG修复 1. 一些累计更新一些BUG修复
2. 优化客户端数据同步,减少服务器流量 2. 优化客户端数据同步,减少服务器流量
3. 去除cdkey改为发电解锁中继速度 3. 去除cdkey改为发电解锁中继速度

View File

@@ -197,7 +197,7 @@ namespace linker.messenger.action
this.actionServerStore = actionServerStore; this.actionServerStore = actionServerStore;
} }
public async Task<string> Validate(linker.messenger.relay.client.transport.RelayInfo170 relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine) public async Task<string> Validate(linker.messenger.relay.client.transport.RelayInfo relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine)
{ {
if (string.IsNullOrWhiteSpace(actionServerStore.RelayActionUrl) == false) if (string.IsNullOrWhiteSpace(actionServerStore.RelayActionUrl) == false)
{ {
@@ -236,7 +236,7 @@ namespace linker.messenger.action
} }
return string.Empty; return string.Empty;
} }
public async Task<List<RelayServerNodeReportInfo170>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo170> nodes) public async Task<List<RelayServerNodeReportInfo>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo> nodes)
{ {
if (string.IsNullOrWhiteSpace(actionServerStore.RelayNodeUrl) == false) if (string.IsNullOrWhiteSpace(actionServerStore.RelayNodeUrl) == false)
{ {
@@ -288,7 +288,7 @@ namespace linker.messenger.action
this.actionServerStore = actionServerStore; this.actionServerStore = actionServerStore;
} }
public async Task<string> Validate(SignCacheInfo cache, SForwardAddInfo191 sForwardAddInfo) public async Task<string> Validate(SignCacheInfo cache, SForwardAddInfo sForwardAddInfo)
{ {
if (string.IsNullOrWhiteSpace(actionServerStore.SForwardActionUrl) == false) if (string.IsNullOrWhiteSpace(actionServerStore.SForwardActionUrl) == false)
{ {

View File

@@ -47,7 +47,7 @@ namespace linker.messenger.relay.client
relayClientStore.SetServer(info); relayClientStore.SetServer(info);
return true; return true;
} }
public List<RelayServerNodeReportInfo188> Subscribe(ApiControllerParamsInfo param) public List<RelayServerNodeReportInfo> Subscribe(ApiControllerParamsInfo param)
{ {
relayTestTransfer.Subscribe(); relayTestTransfer.Subscribe();
return relayTestTransfer.Nodes; return relayTestTransfer.Nodes;
@@ -112,12 +112,12 @@ namespace linker.messenger.relay.client
/// <returns></returns> /// <returns></returns>
public async Task<bool> Edit(ApiControllerParamsInfo param) public async Task<bool> Edit(ApiControllerParamsInfo param)
{ {
RelayServerNodeUpdateInfo188 info = param.Content.DeJson<RelayServerNodeUpdateInfo188>(); RelayServerNodeUpdateInfo info = param.Content.DeJson<RelayServerNodeUpdateInfo>();
var resp = await messengerSender.SendReply(new MessageRequestWrap var resp = await messengerSender.SendReply(new MessageRequestWrap
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)RelayMessengerIds.EditForward188, MessengerId = (ushort)RelayMessengerIds.EditForward188,
Payload = serializer.Serialize(new RelayServerNodeUpdateWrapInfo188 Payload = serializer.Serialize(new RelayServerNodeUpdateWrapInfo
{ {
Info = info, Info = info,
}) })

View File

@@ -18,7 +18,7 @@ namespace linker.messenger.relay.client
private readonly ISignInClientStore signInClientStore; private readonly ISignInClientStore signInClientStore;
private readonly IRelayClientStore relayClientStore; private readonly IRelayClientStore relayClientStore;
public List<RelayServerNodeReportInfo188> Nodes { get; private set; } = new List<RelayServerNodeReportInfo188>(); public List<RelayServerNodeReportInfo> Nodes { get; private set; } = new List<RelayServerNodeReportInfo>();
public RelayClientTestTransfer(RelayClientTransfer relayTransfer, SignInClientState signInClientState, ISignInClientStore signInClientStore, IRelayClientStore relayClientStore) public RelayClientTestTransfer(RelayClientTransfer relayTransfer, SignInClientState signInClientState, ISignInClientStore signInClientStore, IRelayClientStore relayClientStore)
{ {

View File

@@ -103,7 +103,7 @@ namespace linker.messenger.relay.client
continue; continue;
} }
transport.RelayInfo170 relayInfo = new transport.RelayInfo170 RelayInfo relayInfo = new RelayInfo
{ {
FlowingId = 0, FlowingId = 0,
FromMachineId = fromMachineId, FromMachineId = fromMachineId,
@@ -115,7 +115,6 @@ namespace linker.messenger.relay.client
SSL = relayClientStore.Server.SSL, SSL = relayClientStore.Server.SSL,
NodeId = nodeId, NodeId = nodeId,
UserId = signInClientStore.Server.UserId, UserId = signInClientStore.Server.UserId,
UseCdkey = relayClientStore.Server.UseCdkey,
}; };
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
@@ -150,7 +149,7 @@ namespace linker.messenger.relay.client
/// </summary> /// </summary>
/// <param name="relayInfo"></param> /// <param name="relayInfo"></param>
/// <returns></returns> /// <returns></returns>
public async Task<bool> OnBeginAsync(transport.RelayInfo170 relayInfo) public async Task<bool> OnBeginAsync(transport.RelayInfo relayInfo)
{ {
if (operating.StartOperation(BuildKey(relayInfo.FromMachineId, relayInfo.TransactionId)) == false) if (operating.StartOperation(BuildKey(relayInfo.FromMachineId, relayInfo.TransactionId)) == false)
{ {
@@ -197,7 +196,7 @@ namespace linker.messenger.relay.client
/// </summary> /// </summary>
/// <param name="relayInfo"></param> /// <param name="relayInfo"></param>
/// <param name="connection"></param> /// <param name="connection"></param>
private void ConnectedCallback(transport.RelayInfo170 relayInfo, ITunnelConnection connection) private void ConnectedCallback(transport.RelayInfo relayInfo, ITunnelConnection connection)
{ {
if (OnConnected.TryGetValue(Helper.GlobalString, out List<Action<ITunnelConnection>> callbacks)) if (OnConnected.TryGetValue(Helper.GlobalString, out List<Action<ITunnelConnection>> callbacks))
{ {

View File

@@ -1,5 +1,4 @@
using linker.libs; using linker.messenger.relay.server;
using linker.messenger.relay.server;
using linker.tunnel.connection; using linker.tunnel.connection;
using System.Net; using System.Net;
@@ -34,20 +33,20 @@ namespace linker.messenger.relay.client.transport
/// </summary> /// </summary>
/// <param name="relayInfo"></param> /// <param name="relayInfo"></param>
/// <returns></returns> /// <returns></returns>
public Task<ITunnelConnection> RelayAsync(RelayInfo170 relayInfo); public Task<ITunnelConnection> RelayAsync(RelayInfo relayInfo);
/// <summary> /// <summary>
/// 收到别人的中继请求 /// 收到别人的中继请求
/// </summary> /// </summary>
/// <param name="relayInfo"></param> /// <param name="relayInfo"></param>
/// <returns></returns> /// <returns></returns>
public Task<bool> OnBeginAsync(RelayInfo170 relayInfo, Action<ITunnelConnection> callback); public Task<bool> OnBeginAsync(RelayInfo relayInfo, Action<ITunnelConnection> callback);
/// <summary> /// <summary>
/// 测试一下中继通不通 /// 测试一下中继通不通
/// </summary> /// </summary>
/// <param name="relayTestInfo"></param> /// <param name="relayTestInfo"></param>
/// <returns></returns> /// <returns></returns>
public Task<List<RelayServerNodeReportInfo188>> RelayTestAsync(); public Task<List<RelayServerNodeReportInfo>> RelayTestAsync();
} }
/// <summary> /// <summary>
@@ -57,27 +56,8 @@ namespace linker.messenger.relay.client.transport
{ {
public string MachineId { get; set; } public string MachineId { get; set; }
public IPEndPoint Server { get; set; } public IPEndPoint Server { get; set; }
}
public partial class RelayTestInfo170: RelayTestInfo
{
/// <summary>
/// UserId
/// </summary>
public string UserId { get; set; } public string UserId { get; set; }
} }
public class RelayTestInfo188 : RelayTestInfo170 { }
public partial class RelayInfo170 : RelayInfo
{
/// <summary>
/// UserId
/// </summary>
public string UserId { get; set; }
public bool UseCdkey { get; set; }
}
/// <summary> /// <summary>
/// 中继交换数据 /// 中继交换数据
/// </summary> /// </summary>
@@ -127,7 +107,9 @@ namespace linker.messenger.relay.client.transport
/// </summary> /// </summary>
public bool SSL { get; set; } = true; public bool SSL { get; set; } = true;
public string UserId { get; set; }
} }

View File

@@ -39,15 +39,15 @@ namespace linker.messenger.relay.client.transport
this.messengerStore = messengerStore; this.messengerStore = messengerStore;
} }
public async Task<ITunnelConnection> RelayAsync(RelayInfo170 relayInfo) public async Task<ITunnelConnection> RelayAsync(RelayInfo relayInfo)
{ {
byte[] buffer = ArrayPool<byte>.Shared.Rent(1024); byte[] buffer = ArrayPool<byte>.Shared.Rent(1024);
try try
{ {
//问一下能不能中继 //问一下能不能中继
RelayAskResultInfo170 relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false); RelayAskResultInfo relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false);
relayInfo.FlowingId = relayAskResultInfo.FlowingId; relayInfo.FlowingId = relayAskResultInfo.FlowingId;
List<RelayServerNodeReportInfo170> nodes = relayAskResultInfo.Nodes; List<RelayServerNodeReportInfo> nodes = relayAskResultInfo.Nodes;
if (relayAskResultInfo.FlowingId == 0 || relayAskResultInfo.Nodes.Count == 0) if (relayAskResultInfo.FlowingId == 0 || relayAskResultInfo.Nodes.Count == 0)
{ {
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
@@ -119,7 +119,7 @@ namespace linker.messenger.relay.client.transport
return null; return null;
} }
private async Task<RelayAskResultInfo170> RelayAsk(RelayInfo170 relayInfo) private async Task<RelayAskResultInfo> RelayAsk(RelayInfo relayInfo)
{ {
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
{ {
@@ -130,15 +130,15 @@ namespace linker.messenger.relay.client.transport
}).ConfigureAwait(false); }).ConfigureAwait(false);
if (resp.Code != MessageResponeCodes.OK) if (resp.Code != MessageResponeCodes.OK)
{ {
return new RelayAskResultInfo170(); return new RelayAskResultInfo();
} }
RelayAskResultInfo170 result = serializer.Deserialize<RelayAskResultInfo170>(resp.Data.Span); RelayAskResultInfo result = serializer.Deserialize<RelayAskResultInfo>(resp.Data.Span);
return result; return result;
} }
private async Task<Socket> ConnectNodeServer(RelayInfo170 relayInfo, List<RelayServerNodeReportInfo170> nodes) private async Task<Socket> ConnectNodeServer(RelayInfo relayInfo, List<RelayServerNodeReportInfo> nodes)
{ {
byte[] buffer = ArrayPool<byte>.Shared.Rent(1 * 1024); byte[] buffer = ArrayPool<byte>.Shared.Rent(1 * 1024);
@@ -214,7 +214,7 @@ namespace linker.messenger.relay.client.transport
} }
return null; return null;
} }
private async Task<bool> RelayConfirm(RelayInfo170 relayInfo) private async Task<bool> RelayConfirm(RelayInfo relayInfo)
{ {
//通知对方去确认中继 //通知对方去确认中继
var resp = await messengerSender.SendReply(new MessageRequestWrap var resp = await messengerSender.SendReply(new MessageRequestWrap
@@ -231,7 +231,7 @@ namespace linker.messenger.relay.client.transport
{ {
return true; return true;
} }
public async Task<bool> OnBeginAsync(RelayInfo170 relayInfo, Action<ITunnelConnection> callback) public async Task<bool> OnBeginAsync(RelayInfo relayInfo, Action<ITunnelConnection> callback)
{ {
using IMemoryOwner<byte> buffer = MemoryPool<byte>.Shared.Rent(16); using IMemoryOwner<byte> buffer = MemoryPool<byte>.Shared.Rent(16);
buffer.Memory.Span[0] = (byte)ResolverType.Relay; buffer.Memory.Span[0] = (byte)ResolverType.Relay;
@@ -284,7 +284,7 @@ namespace linker.messenger.relay.client.transport
return false; return false;
} }
private async Task<TunnelConnectionTcp> WaitSSL(Socket socket, RelayInfo170 relayInfo) private async Task<TunnelConnectionTcp> WaitSSL(Socket socket, RelayInfo relayInfo)
{ {
try try
{ {
@@ -325,7 +325,7 @@ namespace linker.messenger.relay.client.transport
return null; return null;
} }
public async Task<List<RelayServerNodeReportInfo188>> RelayTestAsync() public async Task<List<RelayServerNodeReportInfo>> RelayTestAsync()
{ {
try try
{ {
@@ -338,13 +338,13 @@ namespace linker.messenger.relay.client.transport
if (resp.Code == MessageResponeCodes.OK) if (resp.Code == MessageResponeCodes.OK)
{ {
return serializer.Deserialize<List<RelayServerNodeReportInfo188>>(resp.Data.Span); return serializer.Deserialize<List<RelayServerNodeReportInfo>>(resp.Data.Span);
} }
} }
catch (Exception) catch (Exception)
{ {
} }
return new List<RelayServerNodeReportInfo188>(); return new List<RelayServerNodeReportInfo>();
} }
} }
@@ -371,13 +371,13 @@ namespace linker.messenger.relay.client.transport
this.messengerStore = messengerStore; this.messengerStore = messengerStore;
} }
public async Task<ITunnelConnection> RelayAsync(RelayInfo170 relayInfo) public async Task<ITunnelConnection> RelayAsync(RelayInfo relayInfo)
{ {
byte[] buffer = ArrayPool<byte>.Shared.Rent(1024); byte[] buffer = ArrayPool<byte>.Shared.Rent(1024);
try try
{ {
//问一下能不能中继 //问一下能不能中继
RelayAskResultInfo170 relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false); RelayAskResultInfo relayAskResultInfo = await RelayAsk(relayInfo).ConfigureAwait(false);
relayInfo.FlowingId = relayAskResultInfo.FlowingId; relayInfo.FlowingId = relayAskResultInfo.FlowingId;
var nodes = relayAskResultInfo.Nodes; var nodes = relayAskResultInfo.Nodes;
if (relayInfo.FlowingId == 0 || nodes.Count == 0) if (relayInfo.FlowingId == 0 || nodes.Count == 0)
@@ -437,7 +437,7 @@ namespace linker.messenger.relay.client.transport
return null; return null;
} }
private async Task<RelayAskResultInfo170> RelayAsk(RelayInfo170 relayInfo) private async Task<RelayAskResultInfo> RelayAsk(RelayInfo relayInfo)
{ {
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap
{ {
@@ -448,15 +448,15 @@ namespace linker.messenger.relay.client.transport
}).ConfigureAwait(false); }).ConfigureAwait(false);
if (resp.Code != MessageResponeCodes.OK) if (resp.Code != MessageResponeCodes.OK)
{ {
return new RelayAskResultInfo170(); return new RelayAskResultInfo();
} }
RelayAskResultInfo170 result = serializer.Deserialize<RelayAskResultInfo170>(resp.Data.Span); RelayAskResultInfo result = serializer.Deserialize<RelayAskResultInfo>(resp.Data.Span);
return result; return result;
} }
private async Task<(Socket, IPEndPoint)> ConnectNodeServer(RelayInfo170 relayInfo, List<RelayServerNodeReportInfo170> nodes) private async Task<(Socket, IPEndPoint)> ConnectNodeServer(RelayInfo relayInfo, List<RelayServerNodeReportInfo> nodes)
{ {
byte[] buffer = ArrayPool<byte>.Shared.Rent(4 * 1024); byte[] buffer = ArrayPool<byte>.Shared.Rent(4 * 1024);
@@ -544,7 +544,7 @@ namespace linker.messenger.relay.client.transport
return buffer.AsMemory(0, index); return buffer.AsMemory(0, index);
} }
private async Task<bool> RelayConfirm(RelayInfo170 relayInfo) private async Task<bool> RelayConfirm(RelayInfo relayInfo)
{ {
//通知对方去确认中继 //通知对方去确认中继
var resp = await messengerSender.SendReply(new MessageRequestWrap var resp = await messengerSender.SendReply(new MessageRequestWrap
@@ -556,7 +556,7 @@ namespace linker.messenger.relay.client.transport
return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray); return resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray);
} }
public async Task<bool> OnBeginAsync(RelayInfo170 relayInfo, Action<ITunnelConnection> callback) public async Task<bool> OnBeginAsync(RelayInfo relayInfo, Action<ITunnelConnection> callback)
{ {
byte[] buffer = ArrayPool<byte>.Shared.Rent(4096); byte[] buffer = ArrayPool<byte>.Shared.Rent(4096);
try try
@@ -610,7 +610,7 @@ namespace linker.messenger.relay.client.transport
return false; return false;
} }
public async Task<List<RelayServerNodeReportInfo188>> RelayTestAsync() public async Task<List<RelayServerNodeReportInfo>> RelayTestAsync()
{ {
try try
{ {
@@ -623,13 +623,13 @@ namespace linker.messenger.relay.client.transport
if (resp.Code == MessageResponeCodes.OK) if (resp.Code == MessageResponeCodes.OK)
{ {
return serializer.Deserialize<List<RelayServerNodeReportInfo188>>(resp.Data.Span); return serializer.Deserialize<List<RelayServerNodeReportInfo>>(resp.Data.Span);
} }
} }
catch (Exception) catch (Exception)
{ {
} }
return new List<RelayServerNodeReportInfo188>(); return new List<RelayServerNodeReportInfo>();
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace linker.messenger.relay.messenger
[MessengerId((ushort)RelayMessengerIds.Relay)] [MessengerId((ushort)RelayMessengerIds.Relay)]
public async Task Relay(IConnection connection) public async Task Relay(IConnection connection)
{ {
client.transport.RelayInfo170 info = serializer.Deserialize<client.transport.RelayInfo170>(connection.ReceiveRequestWrap.Payload.Span); client.transport.RelayInfo info = serializer.Deserialize<client.transport.RelayInfo>(connection.ReceiveRequestWrap.Payload.Span);
bool res = await relayTransfer.OnBeginAsync(info).ConfigureAwait(false); bool res = await relayTransfer.OnBeginAsync(info).ConfigureAwait(false);
connection.Write(res ? Helper.TrueArray : Helper.FalseArray); connection.Write(res ? Helper.TrueArray : Helper.FalseArray);
} }
@@ -78,10 +78,10 @@ namespace linker.messenger.relay.messenger
{ {
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false) if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
{ {
connection.Write(serializer.Serialize(new List<RelayServerNodeReportInfo170> { })); connection.Write(serializer.Serialize(new List<RelayServerNodeReportInfo> { }));
return; return;
} }
List<RelayServerNodeReportInfo170> nodes = (await GetNodes(cache)).Select(c => (RelayServerNodeReportInfo170)c).ToList(); List<RelayServerNodeReportInfo> nodes = (await GetNodes(cache)).Select(c => (RelayServerNodeReportInfo)c).ToList();
connection.Write(serializer.Serialize(nodes)); connection.Write(serializer.Serialize(nodes));
} }
[MessengerId((ushort)RelayMessengerIds.Nodes188)] [MessengerId((ushort)RelayMessengerIds.Nodes188)]
@@ -89,10 +89,10 @@ namespace linker.messenger.relay.messenger
{ {
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false) if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) == false)
{ {
connection.Write(serializer.Serialize(new List<RelayServerNodeReportInfo188> { })); connection.Write(serializer.Serialize(new List<RelayServerNodeReportInfo> { }));
return; return;
} }
List<RelayServerNodeReportInfo188> nodes = await GetNodes(cache); List<RelayServerNodeReportInfo> nodes = await GetNodes(cache);
connection.Write(serializer.Serialize(nodes)); connection.Write(serializer.Serialize(nodes));
} }
@@ -108,17 +108,17 @@ namespace linker.messenger.relay.messenger
[MessengerId((ushort)RelayMessengerIds.RelayAsk170)] [MessengerId((ushort)RelayMessengerIds.RelayAsk170)]
public async Task RelayAsk170(IConnection connection) public async Task RelayAsk170(IConnection connection)
{ {
RelayInfo170 info = serializer.Deserialize<RelayInfo170>(connection.ReceiveRequestWrap.Payload.Span); RelayInfo info = serializer.Deserialize<RelayInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to) == false) if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to) == false)
{ {
connection.Write(serializer.Serialize(new RelayAskResultInfo170 { })); connection.Write(serializer.Serialize(new RelayAskResultInfo { }));
return; return;
} }
var nodes = (await GetNodes(from).ConfigureAwait(false)).Select(c => (RelayServerNodeReportInfo170)c).ToList(); var nodes = (await GetNodes(from).ConfigureAwait(false)).Select(c => c).ToList();
RelayAskResultInfo170 result = new() RelayAskResultInfo result = new()
{ {
Nodes = nodes Nodes = nodes
}; };
@@ -129,7 +129,7 @@ namespace linker.messenger.relay.messenger
connection.Write(serializer.Serialize(result)); connection.Write(serializer.Serialize(result));
} }
private async Task<List<RelayServerNodeReportInfo188>> GetNodes(SignCacheInfo from) private async Task<List<RelayServerNodeReportInfo>> GetNodes(SignCacheInfo from)
{ {
return await relayServerTransfer.GetNodes(from.Super, from.UserId, from.MachineId); return await relayServerTransfer.GetNodes(from.Super, from.UserId, from.MachineId);
} }
@@ -148,7 +148,7 @@ namespace linker.messenger.relay.messenger
[MessengerId((ushort)RelayMessengerIds.RelayForward170)] [MessengerId((ushort)RelayMessengerIds.RelayForward170)]
public async Task RelayForward170(IConnection connection) public async Task RelayForward170(IConnection connection)
{ {
RelayInfo170 info = serializer.Deserialize<RelayInfo170>(connection.ReceiveRequestWrap.Payload.Span); RelayInfo info = serializer.Deserialize<RelayInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to) == false) if (signCaching.TryGet(connection.Id, info.RemoteMachineId, out SignCacheInfo from, out SignCacheInfo to) == false)
{ {
connection.Write(Helper.FalseArray); connection.Write(Helper.FalseArray);
@@ -243,7 +243,7 @@ namespace linker.messenger.relay.messenger
try try
{ {
relayServerReportResolver.Add(connection.ReceiveRequestWrap.Payload.Length, 0); relayServerReportResolver.Add(connection.ReceiveRequestWrap.Payload.Length, 0);
RelayServerNodeReportInfo170 info = serializer.Deserialize<RelayServerNodeReportInfo170>(connection.ReceiveRequestWrap.Payload.Span); RelayServerNodeReportInfo info = serializer.Deserialize<RelayServerNodeReportInfo>(connection.ReceiveRequestWrap.Payload.Span);
relayServerTransfer.SetNodeReport(connection, info); relayServerTransfer.SetNodeReport(connection, info);
} }
catch (Exception) catch (Exception)
@@ -258,7 +258,7 @@ namespace linker.messenger.relay.messenger
try try
{ {
relayServerReportResolver.Add(connection.ReceiveRequestWrap.Payload.Length, 0); relayServerReportResolver.Add(connection.ReceiveRequestWrap.Payload.Length, 0);
RelayServerNodeReportInfo188 info = serializer.Deserialize<RelayServerNodeReportInfo188>(connection.ReceiveRequestWrap.Payload.Span); RelayServerNodeReportInfo info = serializer.Deserialize<RelayServerNodeReportInfo>(connection.ReceiveRequestWrap.Payload.Span);
relayServerTransfer.SetNodeReport(connection, info); relayServerTransfer.SetNodeReport(connection, info);
} }
catch (Exception) catch (Exception)
@@ -305,7 +305,7 @@ namespace linker.messenger.relay.messenger
[MessengerId((ushort)RelayMessengerIds.Edit188)] [MessengerId((ushort)RelayMessengerIds.Edit188)]
public void Edit188(IConnection connection) public void Edit188(IConnection connection)
{ {
RelayServerNodeUpdateInfo188 info = serializer.Deserialize<RelayServerNodeUpdateInfo188>(connection.ReceiveRequestWrap.Payload.Span); RelayServerNodeUpdateInfo info = serializer.Deserialize<RelayServerNodeUpdateInfo>(connection.ReceiveRequestWrap.Payload.Span);
relayServerNodeTransfer.Edit(info); relayServerNodeTransfer.Edit(info);
} }
/// <summary> /// <summary>
@@ -316,7 +316,7 @@ namespace linker.messenger.relay.messenger
[MessengerId((ushort)RelayMessengerIds.EditForward188)] [MessengerId((ushort)RelayMessengerIds.EditForward188)]
public async Task EditForward188(IConnection connection) public async Task EditForward188(IConnection connection)
{ {
RelayServerNodeUpdateWrapInfo188 info = serializer.Deserialize<RelayServerNodeUpdateWrapInfo188>(connection.ReceiveRequestWrap.Payload.Span); RelayServerNodeUpdateWrapInfo info = serializer.Deserialize<RelayServerNodeUpdateWrapInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && cache.Super) if (signCaching.TryGet(connection.Id, out SignCacheInfo cache) && cache.Super)
{ {
await relayServerTransfer.Edit(info.Info).ConfigureAwait(false); await relayServerTransfer.Edit(info.Info).ConfigureAwait(false);

View File

@@ -6,9 +6,6 @@ using linker.tunnel.connection;
namespace linker.messenger.relay.server namespace linker.messenger.relay.server
{ {
/// <summary>
/// 中继节点存储器
/// </summary>
public interface IRelayServerNodeStore public interface IRelayServerNodeStore
{ {
/// <summary> /// <summary>
@@ -25,7 +22,7 @@ namespace linker.messenger.relay.server
/// </summary> /// </summary>
/// <param name="node"></param> /// <param name="node"></param>
public void SetInfo(RelayServerNodeInfo node); public void SetInfo(RelayServerNodeInfo node);
public void UpdateInfo(RelayServerNodeUpdateInfo188 update); public void UpdateInfo(RelayServerNodeUpdateInfo update);
public void SetMasterHosts(string[] hosts); public void SetMasterHosts(string[] hosts);
/// <summary> /// <summary>
@@ -89,10 +86,6 @@ namespace linker.messenger.relay.server
public string[] MasterHosts { get; set; } = []; public string[] MasterHosts { get; set; } = [];
} }
public partial class RelayServerNodeUpdateWrapInfo
{
public RelayServerNodeUpdateInfo Info { get; set; }
}
public partial class RelayServerNodeUpdateInfo public partial class RelayServerNodeUpdateInfo
{ {
public string Id { get; set; } = string.Empty; public string Id { get; set; } = string.Empty;
@@ -109,16 +102,16 @@ namespace linker.messenger.relay.server
public bool AllowTcp { get; set; } = true; public bool AllowTcp { get; set; } = true;
public bool AllowUdp { get; set; } public bool AllowUdp { get; set; }
}
public partial class RelayServerNodeUpdateWrapInfo188 /// <summary>
{ /// 188+
public RelayServerNodeUpdateInfo188 Info { get; set; } /// </summary>
}
public partial class RelayServerNodeUpdateInfo188 : RelayServerNodeUpdateInfo
{
public bool Sync2Server { get; set; } public bool Sync2Server { get; set; }
} }
public partial class RelayServerNodeUpdateWrapInfo
{
public RelayServerNodeUpdateInfo Info { get; set; }
}
public partial class RelayServerNodeReportInfo public partial class RelayServerNodeReportInfo
{ {
@@ -141,29 +134,26 @@ namespace linker.messenger.relay.server
public IPEndPoint EndPoint { get; set; } public IPEndPoint EndPoint { get; set; }
public long LastTicks { get; set; } public long LastTicks { get; set; }
}
public partial class RelayServerNodeReportInfo170 : RelayServerNodeReportInfo /// <summary>
{ /// 170+
/// </summary>
public string Url { get; set; } = "https://linker-doc.snltty.com"; public string Url { get; set; } = "https://linker-doc.snltty.com";
public TunnelProtocolType AllowProtocol { get; set; } = TunnelProtocolType.Tcp; public TunnelProtocolType AllowProtocol { get; set; } = TunnelProtocolType.Tcp;
/// <summary>
/// 188+
/// </summary>
public string Version { get; set; } = string.Empty;
public bool Sync2Server { get; set; }
[JsonIgnore] [JsonIgnore]
public IConnection Connection { get; set; } public IConnection Connection { get; set; }
} }
public partial class RelayServerNodeReportInfo188 : RelayServerNodeReportInfo170
{
public string Version { get; set; } = string.Empty;
public bool Sync2Server { get; set; }
}
public partial class RelayAskResultInfo public partial class RelayAskResultInfo
{ {
public ulong FlowingId { get; set; } public ulong FlowingId { get; set; }
public List<RelayServerNodeReportInfo> Nodes { get; set; } = new List<RelayServerNodeReportInfo>(); public List<RelayServerNodeReportInfo> Nodes { get; set; } = new List<RelayServerNodeReportInfo>();
} }
public partial class RelayAskResultInfo170 : RelayAskResultInfo
{
public new List<RelayServerNodeReportInfo170> Nodes { get; set; } = new List<RelayServerNodeReportInfo170>();
}
} }

View File

@@ -16,7 +16,7 @@ namespace linker.messenger.relay.server
{ {
private ulong relayFlowingId = 0; private ulong relayFlowingId = 0;
private readonly ConcurrentDictionary<string, RelayServerNodeReportInfo188> reports = new ConcurrentDictionary<string, RelayServerNodeReportInfo188>(); private readonly ConcurrentDictionary<string, RelayServerNodeReportInfo> reports = new ConcurrentDictionary<string, RelayServerNodeReportInfo>();
private readonly ConcurrentQueue<Dictionary<int, long>> trafficQueue = new ConcurrentQueue<Dictionary<int, long>>(); private readonly ConcurrentQueue<Dictionary<int, long>> trafficQueue = new ConcurrentQueue<Dictionary<int, long>>();
@@ -80,29 +80,7 @@ namespace linker.messenger.relay.server
} }
return null; return null;
} }
public void SetNodeReport(IConnection connection, RelayServerNodeReportInfo170 info) public void SetNodeReport(IConnection connection, RelayServerNodeReportInfo info)
{
SetNodeReport(connection, new RelayServerNodeReportInfo188
{
Version = string.Empty,
Sync2Server = false,
Id = info.Id,
Name = info.Name,
MaxConnection = info.MaxConnection,
MaxBandwidth = info.MaxBandwidth,
MaxBandwidthTotal = info.MaxBandwidthTotal,
MaxGbTotal = info.MaxGbTotal,
MaxGbTotalLastBytes = info.MaxGbTotalLastBytes,
ConnectionRatio = info.ConnectionRatio,
BandwidthRatio = info.BandwidthRatio,
Public = info.Public,
EndPoint = info.EndPoint,
LastTicks = info.LastTicks,
Url = info.Url,
Connection = connection
});
}
public void SetNodeReport(IConnection connection, RelayServerNodeReportInfo188 info)
{ {
try try
{ {
@@ -126,21 +104,10 @@ namespace linker.messenger.relay.server
} }
} }
} }
public async Task Edit(RelayServerNodeUpdateInfo info) public async Task Edit(RelayServerNodeUpdateInfo info)
{ {
if (reports.TryGetValue(info.Id, out RelayServerNodeReportInfo188 cache)) if (reports.TryGetValue(info.Id, out RelayServerNodeReportInfo cache))
{
await messengerSender.SendOnly(new MessageRequestWrap
{
Connection = cache.Connection,
MessengerId = (ushort)RelayMessengerIds.Edit,
Payload = serializer.Serialize(info)
}).ConfigureAwait(false);
}
}
public async Task Edit(RelayServerNodeUpdateInfo188 info)
{
if (reports.TryGetValue(info.Id, out RelayServerNodeReportInfo188 cache))
{ {
await messengerSender.SendOnly(new MessageRequestWrap await messengerSender.SendOnly(new MessageRequestWrap
{ {
@@ -152,7 +119,7 @@ namespace linker.messenger.relay.server
} }
public async Task Exit(string id) public async Task Exit(string id)
{ {
if (reports.TryGetValue(id, out RelayServerNodeReportInfo188 cache)) if (reports.TryGetValue(id, out RelayServerNodeReportInfo cache))
{ {
await messengerSender.SendOnly(new MessageRequestWrap await messengerSender.SendOnly(new MessageRequestWrap
{ {
@@ -163,7 +130,7 @@ namespace linker.messenger.relay.server
} }
public async Task Update(string id, string version) public async Task Update(string id, string version)
{ {
if (reports.TryGetValue(id, out RelayServerNodeReportInfo188 cache)) if (reports.TryGetValue(id, out RelayServerNodeReportInfo cache))
{ {
await messengerSender.SendOnly(new MessageRequestWrap await messengerSender.SendOnly(new MessageRequestWrap
{ {
@@ -179,7 +146,7 @@ namespace linker.messenger.relay.server
/// </summary> /// </summary>
/// <param name="validated">是否已认证</param> /// <param name="validated">是否已认证</param>
/// <returns></returns> /// <returns></returns>
public async Task<List<RelayServerNodeReportInfo188>> GetNodes(bool validated, string userid, string machineId) public async Task<List<RelayServerNodeReportInfo>> GetNodes(bool validated, string userid, string machineId)
{ {
var nodes = (await relayServerWhiteListStore.GetNodes(userid, machineId)).Where(c => c.Bandwidth >= 0).SelectMany(c => c.Nodes); var nodes = (await relayServerWhiteListStore.GetNodes(userid, machineId)).Where(c => c.Bandwidth >= 0).SelectMany(c => c.Nodes);
@@ -201,7 +168,7 @@ namespace linker.messenger.relay.server
.ThenByDescending(x => x.MaxGbTotalLastBytes == 0 ? long.MaxValue : x.MaxGbTotalLastBytes) .ThenByDescending(x => x.MaxGbTotalLastBytes == 0 ? long.MaxValue : x.MaxGbTotalLastBytes)
.ToList(); .ToList();
} }
public List<RelayServerNodeReportInfo188> GetPublicNodes() public List<RelayServerNodeReportInfo> GetPublicNodes()
{ {
var result = reports.Values var result = reports.Values
.Where(c => Environment.TickCount64 - c.LastTicks < 15000) .Where(c => Environment.TickCount64 - c.LastTicks < 15000)

View File

@@ -85,29 +85,6 @@ namespace linker.messenger.relay.server
} }
public void Edit(RelayServerNodeUpdateInfo info) public void Edit(RelayServerNodeUpdateInfo info)
{
if (info.Id == Node.Id)
{
relayServerNodeStore.UpdateInfo(new RelayServerNodeUpdateInfo188
{
AllowTcp = info.AllowTcp,
AllowUdp = info.AllowUdp,
Id = info.Id,
Name = info.Name,
MaxConnection = info.MaxConnection,
MaxBandwidth = info.MaxBandwidth,
MaxBandwidthTotal = info.MaxBandwidthTotal,
MaxGbTotal = info.MaxGbTotal,
MaxGbTotalLastBytes = info.MaxGbTotalLastBytes,
Public = info.Public,
Url = info.Url,
});
relayServerNodeStore.Confirm();
_ = Report();
}
}
public void Edit(RelayServerNodeUpdateInfo188 info)
{ {
if (info.Id == Node.Id) if (info.Id == Node.Id)
{ {
@@ -315,7 +292,7 @@ namespace linker.messenger.relay.server
try try
{ {
IPEndPoint endPoint = await NetworkHelper.GetEndPointAsync(Node.Host, relayServerNodeStore.ServicePort).ConfigureAwait(false) ?? new IPEndPoint(IPAddress.Any, relayServerNodeStore.ServicePort); IPEndPoint endPoint = await NetworkHelper.GetEndPointAsync(Node.Host, relayServerNodeStore.ServicePort).ConfigureAwait(false) ?? new IPEndPoint(IPAddress.Any, relayServerNodeStore.ServicePort);
RelayServerNodeReportInfo188 relayNodeReportInfo = new RelayServerNodeReportInfo188 RelayServerNodeReportInfo relayNodeReportInfo = new RelayServerNodeReportInfo
{ {
Id = Node.Id, Id = Node.Id,
Name = Node.Name, Name = Node.Name,

View File

@@ -16,7 +16,7 @@ namespace linker.messenger.relay.server.validator
/// <param name="fromMachine">来源客户端</param> /// <param name="fromMachine">来源客户端</param>
/// <param name="toMachine">目标客户端可能为null</param> /// <param name="toMachine">目标客户端可能为null</param>
/// <returns></returns> /// <returns></returns>
public Task<string> Validate(RelayInfo170 relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine); public Task<string> Validate(RelayInfo relayInfo, SignCacheInfo fromMachine, SignCacheInfo toMachine);
/// <summary> /// <summary>
/// 验证节点 /// 验证节点
/// </summary> /// </summary>
@@ -24,6 +24,6 @@ namespace linker.messenger.relay.server.validator
/// <param name="fromMachine"></param> /// <param name="fromMachine"></param>
/// <param name="nodes"></param> /// <param name="nodes"></param>
/// <returns></returns> /// <returns></returns>
public Task<List<RelayServerNodeReportInfo170>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo170> nodes); public Task<List<RelayServerNodeReportInfo>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo> nodes);
} }
} }

View File

@@ -48,7 +48,7 @@ namespace linker.messenger.relay.server.validator
/// <param name="cache"></param> /// <param name="cache"></param>
/// <param name="cache1"></param> /// <param name="cache1"></param>
/// <returns></returns> /// <returns></returns>
public async Task<string> Validate(RelayInfo170 relayInfo, SignCacheInfo cache, SignCacheInfo cache1) public async Task<string> Validate(RelayInfo relayInfo, SignCacheInfo cache, SignCacheInfo cache1)
{ {
foreach (var item in validators) foreach (var item in validators)
{ {
@@ -60,7 +60,7 @@ namespace linker.messenger.relay.server.validator
} }
return string.Empty; return string.Empty;
} }
public async Task<List<RelayServerNodeReportInfo170>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo170> nodes) public async Task<List<RelayServerNodeReportInfo>> Validate(string userid, SignCacheInfo fromMachine, List<RelayServerNodeReportInfo> nodes)
{ {
foreach (var item in validators) foreach (var item in validators)
{ {

View File

@@ -52,9 +52,11 @@ namespace linker.messenger.serializer.memorypack
value = null; value = null;
return; return;
} }
value = new AccessUpdateInfo() ;
var wrapped = reader.ReadPackable<SerializableAccessUpdateInfo>(); reader.TryReadObjectHeader(out byte count);
value = wrapped.info; value.FromMachineId = reader.ReadValue<string>();
value.ToMachineId = reader.ReadValue<string>();
value.Access = reader.ReadValue<ulong>();
} }
} }
[MemoryPackable] [MemoryPackable]
@@ -106,8 +108,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableAccessBitsUpdateInfo>(); value = new AccessBitsUpdateInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.FromMachineId = reader.ReadValue<string>();
value.ToMachineId = reader.ReadValue<string>();
value.Access = reader.ReadValue<BitArray>();
} }
} }
@@ -158,8 +164,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableAccessInfo>(); value = new AccessInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Access = reader.ReadValue<AccessValue>();
} }
} }
[MemoryPackable] [MemoryPackable]
@@ -208,8 +216,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableAccessBitsInfo>(); value = new AccessBitsInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Access = reader.ReadValue<BitArray>();
} }
} }
@@ -259,8 +269,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableApiPasswordUpdateInfo>(); value = new ApiPasswordUpdateInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Password = reader.ReadValue<string>();
} }
} }

View File

@@ -1,5 +1,4 @@
using linker.messenger; using MemoryPack;
using MemoryPack;
namespace linker.messenger.serializer.memorypack namespace linker.messenger.serializer.memorypack
{ {

View File

@@ -49,8 +49,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableDecenterSyncInfo>();
value = wrapped.info; value = new DecenterSyncInfo();
reader.TryReadObjectHeader(out byte count);
value.Name = reader.ReadValue<string>();
value.Data = reader.ReadValue<Memory<byte>>();
} }
} }
@@ -104,8 +108,11 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableDecenterPullPageInfo>(); value =new DecenterPullPageInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Name = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.Size = reader.ReadValue<int>();
} }
} }
@@ -161,8 +168,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableDecenterPullPageResultInfo>(); value = new DecenterPullPageResultInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.Size = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.List = reader.ReadValue<List<Memory<byte>>>();
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace linker.messenger.serializer.memorypack
MemoryPackFormatterProvider.Register(new SyncInfoFormatter()); MemoryPackFormatterProvider.Register(new SyncInfoFormatter());
MemoryPackFormatterProvider.Register(new Sync184InfoFormatter()); MemoryPackFormatterProvider.Register(new SyncInfoFormatter());
MemoryPackFormatterProvider.Register(new TunnelTransportWanPortInfoFormatter()); MemoryPackFormatterProvider.Register(new TunnelTransportWanPortInfoFormatter());
@@ -56,24 +56,16 @@ namespace linker.messenger.serializer.memorypack
MemoryPackFormatterProvider.Register(new UpdaterClientInfo170Formatter()); MemoryPackFormatterProvider.Register(new UpdaterClientInfo170Formatter());
MemoryPackFormatterProvider.Register(new UpdaterInfoFormatter()); MemoryPackFormatterProvider.Register(new UpdaterInfoFormatter());
MemoryPackFormatterProvider.Register(new UpdaterInfo170Formatter()); MemoryPackFormatterProvider.Register(new UpdaterInfo170Formatter());
MemoryPackFormatterProvider.Register(new Updater184InfoFormatter()); MemoryPackFormatterProvider.Register(new UpdaterInfo170Formatter());
MemoryPackFormatterProvider.Register(new Updater186InfoFormatter()); MemoryPackFormatterProvider.Register(new UpdaterInfo170Formatter());
MemoryPackFormatterProvider.Register(new UpdaterSyncInfoFormatter()); MemoryPackFormatterProvider.Register(new UpdaterSyncInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayTestInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayTestInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayTestInfo170Formatter());
MemoryPackFormatterProvider.Register(new RelayTestInfo188Formatter());
MemoryPackFormatterProvider.Register(new RelayInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayInfo170Formatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateInfo188Formatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateWrapInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateWrapInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeUpdateWrapInfo188Formatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeReportInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayServerNodeReportInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeReportInfo170Formatter());
MemoryPackFormatterProvider.Register(new RelayServerNodeReportInfo188Formatter());
MemoryPackFormatterProvider.Register(new RelayAskResultInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayAskResultInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayAskResultInfo170Formatter());
MemoryPackFormatterProvider.Register(new RelayCacheInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayCacheInfoFormatter());
MemoryPackFormatterProvider.Register(new RelayMessageInfoFormatter()); MemoryPackFormatterProvider.Register(new RelayMessageInfoFormatter());
@@ -96,9 +88,6 @@ namespace linker.messenger.serializer.memorypack
MemoryPackFormatterProvider.Register(new SForwardRemoveForwardInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardRemoveForwardInfoFormatter());
MemoryPackFormatterProvider.Register(new SForwardProxyInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardProxyInfoFormatter());
MemoryPackFormatterProvider.Register(new SForwardCountInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardCountInfoFormatter());
MemoryPackFormatterProvider.Register(new SForwardAddForwardInfo191Formatter());
MemoryPackFormatterProvider.Register(new SForwardAddInfo191Formatter());
MemoryPackFormatterProvider.Register(new SForwardInfo191Formatter());
MemoryPackFormatterProvider.Register(new SForwardServerNodeUpdateInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardServerNodeUpdateInfoFormatter());
MemoryPackFormatterProvider.Register(new SForwardServerNodeUpdateWrapInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardServerNodeUpdateWrapInfoFormatter());
MemoryPackFormatterProvider.Register(new SForwardServerNodeReportInfoFormatter()); MemoryPackFormatterProvider.Register(new SForwardServerNodeReportInfoFormatter());

View File

@@ -91,8 +91,19 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallRuleInfo>(); value = new FirewallRuleInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<string>();
value.SrcId = reader.ReadValue<string>();
value.SrcName = reader.ReadValue<string>();
value.GroupId = reader.ReadValue<string>();
value.DstCIDR = reader.ReadValue<string>();
value.DstPort = reader.ReadValue<string>();
value.Protocol = reader.ReadValue<nat.LinkerFirewallProtocolType>();
value.Action = reader.ReadValue<nat.LinkerFirewallAction>();
value.Disabled = reader.ReadValue<bool>();
value.OrderBy = reader.ReadValue<int>();
value.Remark = reader.ReadValue<string>();
} }
} }
@@ -103,8 +114,6 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly FirewallSearchInfo info; public readonly FirewallSearchInfo info;
[MemoryPackInclude] [MemoryPackInclude]
string GroupId => info.GroupId; string GroupId => info.GroupId;
@@ -162,8 +171,13 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallSearchInfo>(); value = new FirewallSearchInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.GroupId = reader.ReadValue<string>();
value.Str = reader.ReadValue<string>();
value.Protocol = reader.ReadValue<nat.LinkerFirewallProtocolType>();
value.Action = reader.ReadValue<nat.LinkerFirewallAction>();
value.Disabled = reader.ReadValue<int>();
} }
} }
@@ -216,8 +230,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallSearchForwardInfo>(); value = new FirewallSearchForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Data = reader.ReadValue<FirewallSearchInfo>();
} }
} }
@@ -271,8 +287,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallListInfo>(); value = new FirewallListInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.State = reader.ReadValue<LinkerFirewallState>();
value.List = reader.ReadValue<List<FirewallRuleInfo>>();
} }
} }
@@ -326,8 +344,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallAddForwardInfo>(); value = new FirewallAddForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Data = reader.ReadValue<FirewallRuleInfo>();
} }
} }
@@ -382,8 +402,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallRemoveForwardInfo>(); value = new FirewallRemoveForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Id = reader.ReadValue<string>();
} }
} }
@@ -437,8 +459,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallStateForwardInfo>(); value = new FirewallStateForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.State = reader.ReadValue<LinkerFirewallState>();
} }
} }
@@ -492,8 +516,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallCheckInfo>(); value = new FirewallCheckInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Ids = reader.ReadValue<List<string>>();
value.IsChecked = reader.ReadValue<bool>();
} }
} }
[MemoryPackable] [MemoryPackable]
@@ -545,8 +571,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFirewallCheckForwardInfo>(); value = new FirewallCheckForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Data = reader.ReadValue<FirewallCheckInfo>();
} }
} }
} }

View File

@@ -51,8 +51,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFlowItemInfo>(); value = new FlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
} }
} }
@@ -113,8 +115,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFlowReportNetInfo>(); value = new FlowReportNetInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.City = reader.ReadValue<string>();
value.Lat = reader.ReadValue<double>();
value.Lon = reader.ReadValue<double>();
value.Count = reader.ReadValue<int>();
} }
} }
@@ -168,8 +174,11 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableFlowInfo>(); value = new FlowInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Items = reader.ReadValue<Dictionary<string, FlowItemInfo>>();
value.Start = reader.ReadValue<DateTime>();
value.Now = reader.ReadValue<DateTime>();
} }
} }
@@ -241,8 +250,14 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayFlowItemInfo>(); value = new RelayFlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
value.DiffReceiveBytes = reader.ReadValue<long>();
value.DiffSendtBytes = reader.ReadValue<long>();
value.FromName = reader.ReadValue<string>();
value.ToName = reader.ReadValue<string>();
} }
} }
@@ -314,8 +329,14 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayFlowRequestInfo>(); value = new RelayFlowRequestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Key = reader.ReadValue<string>();
value.SecretKey = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Order = reader.ReadValue<RelayFlowOrder>();
value.OrderType = reader.ReadValue<RelayFlowOrderType>();
} }
} }
@@ -379,8 +400,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayFlowResponseInfo>(); value = new RelayFlowResponseInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.Data = reader.ReadValue<List<RelayFlowItemInfo>>();
} }
} }
@@ -450,8 +475,13 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardFlowItemInfo>(); value = new SForwardFlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
value.DiffReceiveBytes = reader.ReadValue<long>();
value.DiffSendtBytes = reader.ReadValue<long>();
value.Key = reader.ReadValue<string>();
} }
} }
@@ -521,8 +551,14 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardFlowRequestInfo>(); value = new SForwardFlowRequestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Key = reader.ReadValue<string>();
value.MachineId = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Order = reader.ReadValue<SForwardFlowOrder>();
value.OrderType = reader.ReadValue<SForwardFlowOrderType>();
} }
} }
@@ -584,8 +620,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardFlowResponseInfo>(); value = new SForwardFlowResponseInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.Data = reader.ReadValue<List<SForwardFlowItemInfo>>();
} }
} }
@@ -658,8 +698,15 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardFlowItemInfo>(); value = new ForwardFlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
value.DiffReceiveBytes = reader.ReadValue<long>();
value.DiffSendtBytes = reader.ReadValue<long>();
value.Key = reader.ReadValue<string>();
value.Target = reader.ReadValue<IPEndPoint>();
} }
} }
@@ -725,8 +772,13 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardFlowRequestInfo>(); value = new ForwardFlowRequestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Order = reader.ReadValue<ForwardFlowOrder>();
value.OrderType = reader.ReadValue<ForwardFlowOrderType>();
} }
} }
@@ -788,8 +840,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardFlowResponseInfo>(); value = new ForwardFlowResponseInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.Data = reader.ReadValue<List<ForwardFlowItemInfo>>();
} }
} }
@@ -863,8 +919,15 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSocks5FlowItemInfo>(); value = new Socks5FlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
value.DiffReceiveBytes = reader.ReadValue<long>();
value.DiffSendtBytes = reader.ReadValue<long>();
value.Key = reader.ReadValue<string>();
value.Target = reader.ReadValue<IPEndPoint>();
} }
} }
@@ -930,8 +993,13 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSocks5FlowRequestInfo>(); value = new Socks5FlowRequestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Order = reader.ReadValue<Socks5FlowOrder>();
value.OrderType = reader.ReadValue<Socks5FlowOrderType>();
} }
} }
@@ -993,8 +1061,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSocks5FlowResponseInfo>(); value = new Socks5FlowResponseInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.Data = reader.ReadValue<List<Socks5FlowItemInfo>>();
} }
} }
@@ -1069,8 +1141,15 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableTunnelFlowItemInfo>(); value = new TunnelFlowItemInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.ReceiveBytes = reader.ReadValue<long>();
value.SendtBytes = reader.ReadValue<long>();
value.Key = reader.ReadValue<string>();
value.TransitionId = reader.ReadValue<string>();
value.Direction = reader.ReadValue<TunnelDirection>();
value.Type = reader.ReadValue<TunnelType>();
value.Mode = reader.ReadValue<TunnelMode>();
} }
} }
@@ -1136,8 +1215,13 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableTunnelFlowRequestInfo>(); value = new TunnelFlowRequestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Order = reader.ReadValue<TunnelFlowOrder>();
value.OrderType = reader.ReadValue<TunnelFlowOrderType>();
} }
} }
@@ -1199,8 +1283,12 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableTunnelFlowResponseInfo>(); value = new TunnelFlowResponseInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Page = reader.ReadValue<int>();
value.PageSize = reader.ReadValue<int>();
value.Count = reader.ReadValue<int>();
value.Data = reader.ReadValue<List<TunnelFlowItemInfo>>();
} }
} }
} }

View File

@@ -47,7 +47,8 @@ namespace linker.messenger.serializer.memorypack
string TargetMsg => info.TargetMsg; string TargetMsg => info.TargetMsg;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableForwardInfo(long id, string name, string machineId, string groupId, string machineName, IPAddress bindIPAddress, int port, IPEndPoint targetEP, bool started, byte bufferSize, string msg, string targetMsg) SerializableForwardInfo(long id, string name, string machineId, string groupId, string machineName, IPAddress bindIPAddress, int port, IPEndPoint targetEP,
bool started, byte bufferSize, string msg, string targetMsg)
{ {
this.info = new ForwardInfo this.info = new ForwardInfo
{ {
@@ -94,8 +95,20 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardInfo>(); value = new ForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<long>();
value.Name = reader.ReadValue<string>();
value.MachineId = reader.ReadValue<string>();
value.GroupId = reader.ReadValue<string>();
value.MachineName = reader.ReadValue<string>();
value.BindIPAddress = reader.ReadValue<IPAddress>();
value.Port = reader.ReadValue<int>();
value.TargetEP = reader.ReadValue<IPEndPoint>();
value.Started = reader.ReadValue<bool>();
value.BufferSize = reader.ReadValue<byte>();
value.Msg = reader.ReadValue<string>();
value.TargetMsg = reader.ReadValue<string>();
} }
} }
@@ -150,8 +163,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardAddForwardInfo>(); value = new ForwardAddForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Data = reader.ReadValue<ForwardInfo>();
} }
} }
@@ -206,8 +221,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardRemoveForwardInfo>(); value = new ForwardRemoveForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Id = reader.ReadValue<int>();
} }
} }
@@ -262,8 +279,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardCountInfo>(); value =new ForwardCountInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Count = reader.ReadValue<int>();
} }
} }
@@ -318,8 +337,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableForwardTestInfo>(); value = new ForwardTestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Target = reader.ReadValue<IPEndPoint>();
value.Msg = reader.ReadValue<string>();
} }
} }

View File

@@ -76,8 +76,17 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializablePlanInfo>(); value = new PlanInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<int>();
value.Category = reader.ReadValue<string>();
value.Key = reader.ReadValue<string>();
value.Handle = reader.ReadValue<string>();
value.Value = reader.ReadValue<string>();
value.Disabled = reader.ReadValue<bool>();
value.TriggerHandle = reader.ReadValue<string>();
value.Method = reader.ReadValue<PlanMethod>();
value.Rule = reader.ReadValue<string>();
} }
} }
@@ -131,8 +140,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializablePlanGetInfo>(); value = new PlanGetInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Category = reader.ReadValue<string>();
} }
} }
@@ -186,8 +197,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializablePlanAddInfo>(); value = new PlanAddInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Plan = reader.ReadValue<PlanInfo>();
} }
} }
@@ -241,8 +254,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializablePlanRemoveInfo>(); value = new PlanRemoveInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.PlanId = reader.ReadValue<int>();
} }
} }
} }

View File

@@ -6,6 +6,8 @@ using System.Net;
namespace linker.messenger.serializer.memorypack namespace linker.messenger.serializer.memorypack
{ {
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayTestInfo public readonly partial struct SerializableRelayTestInfo
{ {
@@ -19,11 +21,13 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude, MemoryPackAllowSerialize] [MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint Server => info.Server; IPEndPoint Server => info.Server;
[MemoryPackInclude]
string UserId => info.UserId;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayTestInfo(string machineId, string secretKey, IPEndPoint server) SerializableRelayTestInfo(string machineId, string secretKey, IPEndPoint server, string userid)
{ {
var info = new RelayTestInfo { MachineId = machineId, Server = server }; var info = new RelayTestInfo { MachineId = machineId, Server = server, UserId = userid };
this.info = info; this.info = info;
} }
@@ -54,64 +58,14 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayTestInfo>(); value = new RelayTestInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
} value.MachineId = reader.ReadValue<string>();
} reader.ReadValue<string>(); // secret key
value.Server = reader.ReadValue<IPEndPoint>();
if (count > 3)
value.UserId = reader.ReadValue<string>();
[MemoryPackable]
public readonly partial struct SerializableRelayTestInfo170
{
[MemoryPackIgnore]
public readonly RelayTestInfo170 info;
[MemoryPackInclude]
string MachineId => info.MachineId;
[MemoryPackInclude]
string SecretKey => string.Empty;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint Server => info.Server;
[MemoryPackInclude]
string UserId => info.UserId;
[MemoryPackConstructor]
SerializableRelayTestInfo170(string machineId, string secretKey, IPEndPoint server, string userid)
{
var info = new RelayTestInfo170 { MachineId = machineId, Server = server, UserId = userid };
this.info = info;
}
public SerializableRelayTestInfo170(RelayTestInfo170 info)
{
this.info = info;
}
}
public class RelayTestInfo170Formatter : MemoryPackFormatter<RelayTestInfo170>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayTestInfo170 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayTestInfo170(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayTestInfo170 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayTestInfo170>();
value = wrapped.info;
} }
} }
@@ -146,12 +100,14 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
bool SSL => info.SSL; bool SSL => info.SSL;
[MemoryPackInclude]
string UserId => info.UserId;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayInfo(string fromMachineId, string fromMachineName, SerializableRelayInfo(string fromMachineId, string fromMachineName,
string remoteMachineId, string remoteMachineName, string remoteMachineId, string remoteMachineName,
string transactionId, string secretKey, string transportName, ulong flowingId, string transactionId, string secretKey, string transportName, ulong flowingId,
string nodeId, IPEndPoint server, bool ssl) string nodeId, IPEndPoint server, bool ssl, string userid)
{ {
var info = new RelayInfo var info = new RelayInfo
{ {
@@ -164,7 +120,8 @@ namespace linker.messenger.serializer.memorypack
SSL = ssl, SSL = ssl,
TransactionId = transactionId, TransactionId = transactionId,
TransportName = transportName, TransportName = transportName,
Server = server Server = server,
UserId = userid,
}; };
this.info = info; this.info = info;
} }
@@ -196,438 +153,24 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayInfo>(); value = new RelayInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.FromMachineId = reader.ReadValue<string>();
value.FromMachineName = reader.ReadValue<string>();
value.RemoteMachineId = reader.ReadValue<string>();
value.RemoteMachineName = reader.ReadValue<string>();
value.TransactionId = reader.ReadValue<string>();
reader.ReadValue<string>(); // secret key
value.TransportName = reader.ReadValue<string>();
value.FlowingId = reader.ReadValue<ulong>();
value.NodeId = reader.ReadValue<string>();
value.Server = reader.ReadValue<IPEndPoint>();
value.SSL = reader.ReadValue<bool>();
if (count > 11)
value.UserId = reader.ReadValue<string>();
} }
} }
[MemoryPackable]
public readonly partial struct SerializableRelayInfo170
{
[MemoryPackIgnore]
public readonly RelayInfo170 info;
[MemoryPackInclude]
string FromMachineId => info.FromMachineId;
[MemoryPackInclude]
string FromMachineName => info.FromMachineName;
[MemoryPackInclude]
string RemoteMachineId => info.RemoteMachineId;
[MemoryPackInclude]
string RemoteMachineName => info.RemoteMachineName;
[MemoryPackInclude]
string TransactionId => info.TransactionId;
[MemoryPackInclude]
string SecretKey => string.Empty;
[MemoryPackInclude]
string TransportName => info.TransportName;
[MemoryPackInclude]
ulong FlowingId => info.FlowingId;
[MemoryPackInclude]
string NodeId => info.NodeId;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint Server => info.Server;
[MemoryPackInclude]
bool SSL => info.SSL;
[MemoryPackInclude]
string UserId => info.UserId;
[MemoryPackInclude]
bool UseCdkey => info.UseCdkey;
[MemoryPackConstructor]
SerializableRelayInfo170(string fromMachineId, string fromMachineName,
string remoteMachineId, string remoteMachineName,
string transactionId, string secretKey, string transportName, ulong flowingId,
string nodeId, IPEndPoint server, bool ssl, string userid, bool useCdkey)
{
var info = new RelayInfo170
{
FlowingId = flowingId,
FromMachineId = fromMachineId,
FromMachineName = fromMachineName,
NodeId = nodeId,
RemoteMachineId = remoteMachineId,
RemoteMachineName = remoteMachineName,
SSL = ssl,
TransactionId = transactionId,
TransportName = transportName,
Server = server,
UserId = userid,
UseCdkey = useCdkey
};
this.info = info;
}
public SerializableRelayInfo170(RelayInfo170 relayInfo)
{
this.info = relayInfo;
}
}
public class RelayInfo170Formatter : MemoryPackFormatter<RelayInfo170>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayInfo170 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayInfo170(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayInfo170 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayInfo170>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableRelayServerNodeUpdateInfo
{
[MemoryPackIgnore]
public readonly RelayServerNodeUpdateInfo info;
[MemoryPackInclude]
string Id => info.Id;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
int MaxConnection => info.MaxConnection;
[MemoryPackInclude]
double MaxBandwidth => info.MaxBandwidth;
[MemoryPackInclude]
double MaxBandwidthTotal => info.MaxBandwidthTotal;
[MemoryPackInclude]
double MaxGbTotal => info.MaxGbTotal;
[MemoryPackInclude]
long MaxGbTotalLastBytes => info.MaxGbTotalLastBytes;
[MemoryPackInclude]
bool Public => info.Public;
[MemoryPackInclude]
string Url => info.Url;
[MemoryPackInclude]
bool AllowTcp => info.AllowTcp;
[MemoryPackInclude]
bool AllowUdp => info.AllowUdp;
[MemoryPackConstructor]
SerializableRelayServerNodeUpdateInfo(
string id, string name,
int maxConnection, double maxBandwidth, double maxBandwidthTotal,
double maxGbTotal, long maxGbTotalLastBytes,
bool Public, string url, bool allowTcp, bool allowUdp)
{
var info = new RelayServerNodeUpdateInfo
{
Id = id,
MaxBandwidth = maxBandwidth,
MaxBandwidthTotal = maxBandwidthTotal,
MaxConnection = maxConnection,
MaxGbTotal = maxGbTotal,
MaxGbTotalLastBytes = maxGbTotalLastBytes,
Name = name,
Public = Public,
Url = url,
AllowTcp = allowTcp,
AllowUdp = allowUdp,
};
this.info = info;
}
public SerializableRelayServerNodeUpdateInfo(RelayServerNodeUpdateInfo info)
{
this.info = info;
}
}
public class RelayServerNodeUpdateInfoFormatter : MemoryPackFormatter<RelayServerNodeUpdateInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayServerNodeUpdateInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayServerNodeUpdateInfo>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableRelayServerNodeUpdateWrapInfo
{
[MemoryPackIgnore]
public readonly RelayServerNodeUpdateWrapInfo info;
[MemoryPackInclude]
string SecretKey => string.Empty;
[MemoryPackInclude, MemoryPackAllowSerialize]
RelayServerNodeUpdateInfo Info => info.Info;
[MemoryPackConstructor]
SerializableRelayServerNodeUpdateWrapInfo(string secretKey, RelayServerNodeUpdateInfo info)
{
this.info = new RelayServerNodeUpdateWrapInfo
{
Info = info
};
}
public SerializableRelayServerNodeUpdateWrapInfo(RelayServerNodeUpdateWrapInfo info)
{
this.info = info;
}
}
public class RelayServerNodeUpdateWrapInfoFormatter : MemoryPackFormatter<RelayServerNodeUpdateWrapInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateWrapInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayServerNodeUpdateWrapInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateWrapInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayServerNodeUpdateWrapInfo>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableRelayServerNodeReportInfo
{
[MemoryPackIgnore]
public readonly RelayServerNodeReportInfo info;
[MemoryPackInclude]
string Id => info.Id;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
int MaxConnection => info.MaxConnection;
[MemoryPackInclude]
double MaxBandwidth => info.MaxBandwidth;
[MemoryPackInclude]
double MaxBandwidthTotal => info.MaxBandwidthTotal;
[MemoryPackInclude]
double MaxGbTotal => info.MaxGbTotal;
[MemoryPackInclude]
long MaxGbTotalLastBytes => info.MaxGbTotalLastBytes;
[MemoryPackInclude]
double ConnectionRatio => info.ConnectionRatio;
[MemoryPackInclude]
double BandwidthRatio => info.BandwidthRatio;
[MemoryPackInclude]
bool Public => info.Public;
[MemoryPackInclude]
int Delay => info.Delay;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint EndPoint => info.EndPoint;
[MemoryPackInclude]
long LastTicks => info.LastTicks;
[MemoryPackConstructor]
SerializableRelayServerNodeReportInfo(
string id, string name,
int maxConnection, double maxBandwidth, double maxBandwidthTotal,
double maxGbTotal, long maxGbTotalLastBytes,
double connectionRatio, double bandwidthRatio,
bool Public, int delay,
IPEndPoint endPoint, long lastTicks)
{
var info = new RelayServerNodeReportInfo
{
BandwidthRatio = bandwidthRatio,
ConnectionRatio = connectionRatio,
Delay = delay,
EndPoint = endPoint,
Id = id,
LastTicks = lastTicks,
MaxBandwidth = maxBandwidth,
MaxBandwidthTotal = maxBandwidthTotal,
MaxConnection = maxConnection,
MaxGbTotal = maxGbTotal,
MaxGbTotalLastBytes = maxGbTotalLastBytes,
Name = name,
Public = Public
};
this.info = info;
}
public SerializableRelayServerNodeReportInfo(RelayServerNodeReportInfo info)
{
this.info = info;
}
}
public class RelayServerNodeReportInfoFormatter : MemoryPackFormatter<RelayServerNodeReportInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeReportInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayServerNodeReportInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeReportInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayServerNodeReportInfo>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableRelayServerNodeReportInfo170
{
[MemoryPackIgnore]
public readonly RelayServerNodeReportInfo170 info;
[MemoryPackInclude]
string Id => info.Id;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
int MaxConnection => info.MaxConnection;
[MemoryPackInclude]
double MaxBandwidth => info.MaxBandwidth;
[MemoryPackInclude]
double MaxBandwidthTotal => info.MaxBandwidthTotal;
[MemoryPackInclude]
double MaxGbTotal => info.MaxGbTotal;
[MemoryPackInclude]
long MaxGbTotalLastBytes => info.MaxGbTotalLastBytes;
[MemoryPackInclude]
double ConnectionRatio => info.ConnectionRatio;
[MemoryPackInclude]
double BandwidthRatio => info.BandwidthRatio;
[MemoryPackInclude]
bool Public => info.Public;
[MemoryPackInclude]
int Delay => info.Delay;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint EndPoint => info.EndPoint;
[MemoryPackInclude]
long LastTicks => info.LastTicks;
[MemoryPackInclude]
string Url => info.Url;
[MemoryPackInclude]
TunnelProtocolType AllowProtocol => info.AllowProtocol;
[MemoryPackConstructor]
SerializableRelayServerNodeReportInfo170(
string id, string name,
int maxConnection, double maxBandwidth, double maxBandwidthTotal,
double maxGbTotal, long maxGbTotalLastBytes,
double connectionRatio, double bandwidthRatio,
bool Public, int delay,
IPEndPoint endPoint, long lastTicks, string url, TunnelProtocolType allowProtocol)
{
var info = new RelayServerNodeReportInfo170
{
BandwidthRatio = bandwidthRatio,
ConnectionRatio = connectionRatio,
Delay = delay,
EndPoint = endPoint,
Id = id,
LastTicks = lastTicks,
MaxBandwidth = maxBandwidth,
MaxBandwidthTotal = maxBandwidthTotal,
MaxConnection = maxConnection,
MaxGbTotal = maxGbTotal,
MaxGbTotalLastBytes = maxGbTotalLastBytes,
Name = name,
Public = Public,
Url = url,
AllowProtocol = allowProtocol
};
this.info = info;
}
public SerializableRelayServerNodeReportInfo170(RelayServerNodeReportInfo170 info)
{
this.info = info;
}
}
public class RelayServerNodeReportInfo170Formatter : MemoryPackFormatter<RelayServerNodeReportInfo170>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeReportInfo170 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayServerNodeReportInfo170(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeReportInfo170 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayServerNodeReportInfo170>();
value = wrapped.info;
}
}
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayAskResultInfo public readonly partial struct SerializableRelayAskResultInfo
{ {
@@ -680,58 +223,6 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackable]
public readonly partial struct SerializableRelayAskResultInfo170
{
[MemoryPackIgnore]
public readonly RelayAskResultInfo170 info;
[MemoryPackInclude]
ulong FlowingId => info.FlowingId;
[MemoryPackInclude]
List<RelayServerNodeReportInfo170> Nodes => info.Nodes;
[MemoryPackConstructor]
SerializableRelayAskResultInfo170(ulong flowingId, List<RelayServerNodeReportInfo170> nodes)
{
var info = new RelayAskResultInfo170 { FlowingId = flowingId, Nodes = nodes };
this.info = info;
}
public SerializableRelayAskResultInfo170(RelayAskResultInfo170 info)
{
this.info = info;
}
}
public class RelayAskResultInfo170Formatter : MemoryPackFormatter<RelayAskResultInfo170>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayAskResultInfo170 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayAskResultInfo170(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayAskResultInfo170 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayAskResultInfo170>();
value = wrapped.info;
}
}
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayCacheInfo public readonly partial struct SerializableRelayCacheInfo
{ {
@@ -754,7 +245,6 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
bool Super => info.Super; bool Super => info.Super;
[MemoryPackInclude] [MemoryPackInclude]
double Bandwidth => info.Bandwidth; double Bandwidth => info.Bandwidth;
@@ -762,7 +252,7 @@ namespace linker.messenger.serializer.memorypack
string UserId => info.UserId; string UserId => info.UserId;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayCacheInfo(ulong flowId, string fromId, string fromName, string toId, string toName, string groupId, bool super, double bandwidth,string userid) SerializableRelayCacheInfo(ulong flowId, string fromId, string fromName, string toId, string toName, string groupId, bool super, double bandwidth, string userid)
{ {
var info = new RelayCacheInfo var info = new RelayCacheInfo
{ {
@@ -774,7 +264,7 @@ namespace linker.messenger.serializer.memorypack
ToName = toName, ToName = toName,
Super = super, Super = super,
Bandwidth = bandwidth, Bandwidth = bandwidth,
UserId = userid UserId = userid
}; };
this.info = info; this.info = info;
} }
@@ -806,8 +296,18 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayCacheInfo>(); value = new RelayCacheInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.FlowId = reader.ReadValue<ulong>();
value.FromId = reader.ReadValue<string>();
value.FromName = reader.ReadValue<string>();
value.ToId = reader.ReadValue<string>();
value.ToName = reader.ReadValue<string>();
value.GroupId = reader.ReadValue<string>();
value.Super = reader.ReadValue<bool>();
value.Bandwidth = reader.ReadValue<double>();
if (count > 8)
value.UserId = reader.ReadValue<string>();
} }
} }
@@ -872,72 +372,23 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayMessageInfo>(); value = new RelayMessageInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Type = reader.ReadValue<RelayMessengerType>();
value.FlowId = reader.ReadValue<ulong>();
value.FromId = reader.ReadValue<string>();
value.ToId = reader.ReadValue<string>();
if (count > 4)
value.NodeId = reader.ReadValue<string>();
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayTestInfo188 public readonly partial struct SerializableRelayServerNodeUpdateInfo
{ {
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly RelayTestInfo188 info; public readonly RelayServerNodeUpdateInfo info;
[MemoryPackInclude]
string MachineId => info.MachineId;
[MemoryPackInclude]
string SecretKey => string.Empty;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint Server => info.Server;
[MemoryPackInclude]
string UserId => info.UserId;
[MemoryPackConstructor]
SerializableRelayTestInfo188(string machineId, string secretKey, IPEndPoint server, string userid)
{
var info = new RelayTestInfo188 { MachineId = machineId, Server = server, UserId = userid };
this.info = info;
}
public SerializableRelayTestInfo188(RelayTestInfo188 info)
{
this.info = info;
}
}
public class RelayTestInfo188Formatter : MemoryPackFormatter<RelayTestInfo188>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayTestInfo188 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableRelayTestInfo188(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayTestInfo188 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableRelayTestInfo188>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableRelayServerNodeUpdateInfo188
{
[MemoryPackIgnore]
public readonly RelayServerNodeUpdateInfo188 info;
[MemoryPackInclude] [MemoryPackInclude]
string Id => info.Id; string Id => info.Id;
[MemoryPackInclude] [MemoryPackInclude]
@@ -965,13 +416,13 @@ namespace linker.messenger.serializer.memorypack
bool Sync2Server => info.Sync2Server; bool Sync2Server => info.Sync2Server;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayServerNodeUpdateInfo188( SerializableRelayServerNodeUpdateInfo(
string id, string name, string id, string name,
int maxConnection, double maxBandwidth, double maxBandwidthTotal, int maxConnection, double maxBandwidth, double maxBandwidthTotal,
double maxGbTotal, long maxGbTotalLastBytes, double maxGbTotal, long maxGbTotalLastBytes,
bool Public, string url, bool allowTcp, bool allowUdp, bool sync2Server) bool Public, string url, bool allowTcp, bool allowUdp, bool sync2Server)
{ {
var info = new RelayServerNodeUpdateInfo188 var info = new RelayServerNodeUpdateInfo
{ {
Id = id, Id = id,
MaxBandwidth = maxBandwidth, MaxBandwidth = maxBandwidth,
@@ -988,15 +439,14 @@ namespace linker.messenger.serializer.memorypack
}; };
this.info = info; this.info = info;
} }
public SerializableRelayServerNodeUpdateInfo(RelayServerNodeUpdateInfo info)
public SerializableRelayServerNodeUpdateInfo188(RelayServerNodeUpdateInfo188 info)
{ {
this.info = info; this.info = info;
} }
} }
public class RelayServerNodeUpdateInfo188Formatter : MemoryPackFormatter<RelayServerNodeUpdateInfo188> public class RelayServerNodeUpdateInfoFormatter : MemoryPackFormatter<RelayServerNodeUpdateInfo>
{ {
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateInfo188 value) public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateInfo value)
{ {
if (value == null) if (value == null)
{ {
@@ -1004,10 +454,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
writer.WritePackable(new SerializableRelayServerNodeUpdateInfo188(value)); writer.WritePackable(new SerializableRelayServerNodeUpdateInfo(value));
} }
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateInfo188 value) public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateInfo value)
{ {
if (reader.PeekIsNull()) if (reader.PeekIsNull())
{ {
@@ -1015,38 +465,53 @@ namespace linker.messenger.serializer.memorypack
value = null; value = null;
return; return;
} }
value = new RelayServerNodeUpdateInfo();
var wrapped = reader.ReadPackable<SerializableRelayServerNodeUpdateInfo188>(); reader.TryReadObjectHeader(out byte count);
value = wrapped.info; value.Id = reader.ReadValue<string>();
value.Name = reader.ReadValue<string>();
value.MaxConnection = reader.ReadValue<int>();
value.MaxBandwidth = reader.ReadValue<double>();
value.MaxBandwidthTotal = reader.ReadValue<double>();
value.MaxGbTotal = reader.ReadValue<double>();
value.MaxGbTotalLastBytes = reader.ReadValue<long>();
value.Public = reader.ReadValue<bool>();
if (count > 8)
value.Url = reader.ReadValue<string>();
if (count > 9)
value.AllowTcp = reader.ReadValue<bool>();
if (count > 10)
value.AllowUdp = reader.ReadValue<bool>();
if (count > 11)
value.Sync2Server = reader.ReadValue<bool>();
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayServerNodeUpdateWrapInfo188 public readonly partial struct SerializableRelayServerNodeUpdateWrapInfo
{ {
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly RelayServerNodeUpdateWrapInfo188 info; public readonly RelayServerNodeUpdateWrapInfo info;
[MemoryPackInclude] [MemoryPackInclude]
string SecretKey => string.Empty; string SecretKey => string.Empty;
[MemoryPackInclude, MemoryPackAllowSerialize] [MemoryPackInclude, MemoryPackAllowSerialize]
RelayServerNodeUpdateInfo188 Info => info.Info; RelayServerNodeUpdateInfo Info => info.Info;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayServerNodeUpdateWrapInfo188(string secretKey, RelayServerNodeUpdateInfo188 info) SerializableRelayServerNodeUpdateWrapInfo(string secretKey, RelayServerNodeUpdateInfo info)
{ {
this.info = new RelayServerNodeUpdateWrapInfo188 this.info = new RelayServerNodeUpdateWrapInfo
{ {
Info = info Info = info
}; };
} }
public SerializableRelayServerNodeUpdateWrapInfo188(RelayServerNodeUpdateWrapInfo188 info) public SerializableRelayServerNodeUpdateWrapInfo(RelayServerNodeUpdateWrapInfo info)
{ {
this.info = info; this.info = info;
} }
} }
public class RelayServerNodeUpdateWrapInfo188Formatter : MemoryPackFormatter<RelayServerNodeUpdateWrapInfo188> public class RelayServerNodeUpdateWrapInfoFormatter : MemoryPackFormatter<RelayServerNodeUpdateWrapInfo>
{ {
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateWrapInfo188 value) public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeUpdateWrapInfo value)
{ {
if (value == null) if (value == null)
{ {
@@ -1054,10 +519,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
writer.WritePackable(new SerializableRelayServerNodeUpdateWrapInfo188(value)); writer.WritePackable(new SerializableRelayServerNodeUpdateWrapInfo(value));
} }
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateWrapInfo188 value) public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeUpdateWrapInfo value)
{ {
if (reader.PeekIsNull()) if (reader.PeekIsNull())
{ {
@@ -1066,15 +531,15 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayServerNodeUpdateWrapInfo188>(); var wrapped = reader.ReadPackable<SerializableRelayServerNodeUpdateWrapInfo>();
value = wrapped.info; value = wrapped.info;
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableRelayServerNodeReportInfo188 public readonly partial struct SerializableRelayServerNodeReportInfo
{ {
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly RelayServerNodeReportInfo188 info; public readonly RelayServerNodeReportInfo info;
[MemoryPackInclude] [MemoryPackInclude]
string Id => info.Id; string Id => info.Id;
@@ -1115,7 +580,7 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableRelayServerNodeReportInfo188( SerializableRelayServerNodeReportInfo(
string id, string name, string id, string name,
int maxConnection, double maxBandwidth, double maxBandwidthTotal, int maxConnection, double maxBandwidth, double maxBandwidthTotal,
double maxGbTotal, long maxGbTotalLastBytes, double maxGbTotal, long maxGbTotalLastBytes,
@@ -1123,7 +588,7 @@ namespace linker.messenger.serializer.memorypack
bool Public, int delay, bool Public, int delay,
IPEndPoint endPoint, long lastTicks, string url, TunnelProtocolType allowProtocol, bool sync2Server, string version) IPEndPoint endPoint, long lastTicks, string url, TunnelProtocolType allowProtocol, bool sync2Server, string version)
{ {
var info = new RelayServerNodeReportInfo188 var info = new RelayServerNodeReportInfo
{ {
BandwidthRatio = bandwidthRatio, BandwidthRatio = bandwidthRatio,
ConnectionRatio = connectionRatio, ConnectionRatio = connectionRatio,
@@ -1146,14 +611,14 @@ namespace linker.messenger.serializer.memorypack
this.info = info; this.info = info;
} }
public SerializableRelayServerNodeReportInfo188(RelayServerNodeReportInfo188 info) public SerializableRelayServerNodeReportInfo(RelayServerNodeReportInfo info)
{ {
this.info = info; this.info = info;
} }
} }
public class RelayServerNodeReportInfo188Formatter : MemoryPackFormatter<RelayServerNodeReportInfo188> public class RelayServerNodeReportInfoFormatter : MemoryPackFormatter<RelayServerNodeReportInfo>
{ {
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeReportInfo188 value) public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeReportInfo value)
{ {
if (value == null) if (value == null)
{ {
@@ -1161,10 +626,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
writer.WritePackable(new SerializableRelayServerNodeReportInfo188(value)); writer.WritePackable(new SerializableRelayServerNodeReportInfo(value));
} }
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeReportInfo188 value) public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeReportInfo value)
{ {
if (reader.PeekIsNull()) if (reader.PeekIsNull())
{ {
@@ -1173,8 +638,29 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableRelayServerNodeReportInfo188>(); value = new RelayServerNodeReportInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<string>();
value.Name = reader.ReadValue<string>();
value.MaxConnection = reader.ReadValue<int>();
value.MaxBandwidth = reader.ReadValue<double>();
value.MaxBandwidthTotal = reader.ReadValue<double>();
value.MaxGbTotal = reader.ReadValue<double>();
value.MaxGbTotalLastBytes = reader.ReadValue<long>();
value.ConnectionRatio = reader.ReadValue<double>();
value.BandwidthRatio = reader.ReadValue<double>();
value.Public = reader.ReadValue<bool>();
value.Delay = reader.ReadValue<int>();
value.EndPoint = reader.ReadValue<IPEndPoint>();
value.LastTicks = reader.ReadValue<long>();
if(count > 13)
value.Url = reader.ReadValue<string>();
if (count > 14)
value.AllowProtocol = reader.ReadValue<TunnelProtocolType>();
if (count > 15)
value.Sync2Server = reader.ReadValue<bool>();
if (count > 16)
value.Version = reader.ReadValue<string>();
} }
} }

View File

@@ -6,153 +6,6 @@ using System.Net.Sockets;
namespace linker.messenger.serializer.memorypack namespace linker.messenger.serializer.memorypack
{ {
[MemoryPackable]
public readonly partial struct SerializableSForwardInfo
{
[MemoryPackIgnore]
public readonly SForwardInfo info;
[MemoryPackInclude]
long Id => info.Id;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
string Domain => info.Domain;
[MemoryPackInclude]
int RemotePort => info.RemotePort;
[MemoryPackInclude]
byte BufferSize => info.BufferSize;
[MemoryPackInclude, MemoryPackAllowSerialize]
IPEndPoint LocalEP => info.LocalEP;
[MemoryPackInclude]
bool Started => info.Started;
[MemoryPackInclude]
string Msg => info.Msg;
[MemoryPackInclude]
string LocalMsg => info.LocalMsg;
[MemoryPackInclude]
int RemotePortMin => info.RemotePortMin;
[MemoryPackInclude]
int RemotePortMax => info.RemotePortMax;
[MemoryPackConstructor]
SerializableSForwardInfo(long id, string name, string domain, int remotePort, byte bufferSize, IPEndPoint localEP, bool started, string msg, string localMsg, int remotePortMin, int remotePortMax)
{
this.info = new SForwardInfo
{
LocalEP = localEP,
RemotePort = remotePort,
RemotePortMax = remotePortMax,
Name = name,
BufferSize = bufferSize,
Domain = domain,
Id = id,
LocalMsg = localMsg,
Msg = localMsg,
RemotePortMin = remotePortMin,
Started = started,
};
}
public SerializableSForwardInfo(SForwardInfo info)
{
this.info = info;
}
}
public class SForwardInfoFormatter : MemoryPackFormatter<SForwardInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableSForwardInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableSForwardInfo>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableSForwardAddInfo
{
[MemoryPackIgnore]
public readonly SForwardAddInfo info;
[MemoryPackInclude]
string Domain => info.Domain;
[MemoryPackInclude]
int RemotePort => info.RemotePort;
[MemoryPackInclude]
string SecretKey => string.Empty;
[MemoryPackConstructor]
SerializableSForwardAddInfo(string domain, int remotePort, string secretKey)
{
this.info = new SForwardAddInfo
{
RemotePort = remotePort,
Domain = domain
};
}
public SerializableSForwardAddInfo(SForwardAddInfo info)
{
this.info = info;
}
}
public class SForwardAddInfoFormatter : MemoryPackFormatter<SForwardAddInfo>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardAddInfo value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableSForwardAddInfo(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardAddInfo value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableSForwardAddInfo>();
value = wrapped.info;
}
}
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableSForwardAddResultInfo public readonly partial struct SerializableSForwardAddResultInfo
{ {
@@ -206,8 +59,11 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardAddResultInfo>(); value = new SForwardAddResultInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Success = reader.ReadValue<bool>();
value.Message = reader.ReadValue<string>();
value.BufferSize = reader.ReadValue<byte>();
} }
} }
@@ -262,8 +118,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardAddForwardInfo>(); value =new SForwardAddForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Data = reader.ReadValue<SForwardInfo>();
} }
} }
@@ -317,8 +175,11 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardRemoveForwardInfo>(); value =new SForwardRemoveForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Id = reader.ReadValue<int>();
} }
} }
@@ -368,7 +229,6 @@ namespace linker.messenger.serializer.memorypack
MachineId = machineId MachineId = machineId
}; };
} }
public SerializableSForwardProxyInfo(SForwardProxyInfo info) public SerializableSForwardProxyInfo(SForwardProxyInfo info)
{ {
this.info = info; this.info = info;
@@ -396,8 +256,16 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardProxyInfo>(); value = new SForwardProxyInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<ulong>();
value.Domain = reader.ReadValue<string>();
value.RemotePort = reader.ReadValue<int>();
value.BufferSize = reader.ReadValue<byte>();
value.MachineId = reader.ReadValue<string>();
value.NodeId = reader.ReadValue<string>();
value.ProtocolType = reader.ReadValue<ProtocolType>();
value.Addr = reader.ReadValue<IPAddress>();
} }
} }
@@ -451,72 +319,20 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardCountInfo>(); value = new SForwardCountInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.MachineId = reader.ReadValue<string>();
value.Count = reader.ReadValue<int>();
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableSForwardAddForwardInfo191 public readonly partial struct SerializableSForwardAddInfo
{ {
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly SForwardAddForwardInfo191 info; public readonly SForwardAddInfo info;
[MemoryPackInclude]
string MachineId => info.MachineId;
[MemoryPackInclude, MemoryPackAllowSerialize]
SForwardInfo191 Data => info.Data;
[MemoryPackConstructor]
SerializableSForwardAddForwardInfo191(string machineId, SForwardInfo191 data)
{
this.info = new SForwardAddForwardInfo191
{
MachineId = machineId,
Data = data
};
}
public SerializableSForwardAddForwardInfo191(SForwardAddForwardInfo191 info)
{
this.info = info;
}
}
public class SForwardAddForwardInfo191Formatter : MemoryPackFormatter<SForwardAddForwardInfo191>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardAddForwardInfo191 value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableSForwardAddForwardInfo191(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardAddForwardInfo191 value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableSForwardAddForwardInfo191>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableSForwardAddInfo191
{
[MemoryPackIgnore]
public readonly SForwardAddInfo191 info;
[MemoryPackInclude] [MemoryPackInclude]
string Domain => info.Domain; string Domain => info.Domain;
@@ -532,35 +348,35 @@ namespace linker.messenger.serializer.memorypack
string GroupId => info.GroupId; string GroupId => info.GroupId;
[MemoryPackInclude] [MemoryPackInclude]
bool Validated => info.Super; bool Super => info.Super;
[MemoryPackInclude] [MemoryPackInclude]
double Bandwidth => info.Bandwidth; double Bandwidth => info.Bandwidth;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableSForwardAddInfo191(string domain, int remotePort, string nodeid, string machineid, string groupid, bool validated, double bandwidth) SerializableSForwardAddInfo(string domain, int remotePort, string nodeid, string machineid, string groupid, bool super, double bandwidth)
{ {
this.info = new SForwardAddInfo191 this.info = new SForwardAddInfo
{ {
RemotePort = remotePort, RemotePort = remotePort,
Domain = domain, Domain = domain,
NodeId = nodeid, NodeId = nodeid,
GroupId = groupid, GroupId = groupid,
MachineId = machineid, MachineId = machineid,
Super = validated, Super = super,
Bandwidth = bandwidth Bandwidth = bandwidth
}; };
} }
public SerializableSForwardAddInfo191(SForwardAddInfo191 info) public SerializableSForwardAddInfo(SForwardAddInfo info)
{ {
this.info = info; this.info = info;
} }
} }
public class SForwardAddInfo191Formatter : MemoryPackFormatter<SForwardAddInfo191> public class SForwardAddInfoFormatter : MemoryPackFormatter<SForwardAddInfo>
{ {
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardAddInfo191 value) public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardAddInfo value)
{ {
if (value == null) if (value == null)
{ {
@@ -568,10 +384,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
writer.WritePackable(new SerializableSForwardAddInfo191(value)); writer.WritePackable(new SerializableSForwardAddInfo(value));
} }
public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardAddInfo191 value) public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardAddInfo value)
{ {
if (reader.PeekIsNull()) if (reader.PeekIsNull())
{ {
@@ -580,15 +396,26 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardAddInfo191>(); value = new SForwardAddInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Domain = reader.ReadValue<string>();
value.RemotePort = reader.ReadValue<int>();
if(count > 2)
{
value.NodeId = reader.ReadValue<string>();
value.MachineId = reader.ReadValue<string>();
value.GroupId = reader.ReadValue<string>();
value.Super = reader.ReadValue<bool>();
value.Bandwidth = reader.ReadValue<double>();
}
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableSForwardInfo191 public readonly partial struct SerializableSForwardInfo
{ {
[MemoryPackIgnore] [MemoryPackIgnore]
public readonly SForwardInfo191 info; public readonly SForwardInfo info;
[MemoryPackInclude] [MemoryPackInclude]
long Id => info.Id; long Id => info.Id;
@@ -626,9 +453,10 @@ namespace linker.messenger.serializer.memorypack
string NodeId => info.NodeId; string NodeId => info.NodeId;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableSForwardInfo191(long id, string name, string domain, int remotePort, byte bufferSize, IPEndPoint localEP, bool started, string msg, string localMsg, int remotePortMin, int remotePortMax, string nodeid) SerializableSForwardInfo(long id, string name, string domain, int remotePort, byte bufferSize, IPEndPoint localEP,
bool started, string msg, string localMsg, int remotePortMin, int remotePortMax, string nodeid)
{ {
this.info = new SForwardInfo191 this.info = new SForwardInfo
{ {
LocalEP = localEP, LocalEP = localEP,
RemotePort = remotePort, RemotePort = remotePort,
@@ -638,21 +466,21 @@ namespace linker.messenger.serializer.memorypack
Domain = domain, Domain = domain,
Id = id, Id = id,
LocalMsg = localMsg, LocalMsg = localMsg,
Msg = localMsg, Msg = msg,
RemotePortMin = remotePortMin, RemotePortMin = remotePortMin,
Started = started, Started = started,
NodeId = nodeid NodeId = nodeid
}; };
} }
public SerializableSForwardInfo191(SForwardInfo191 info) public SerializableSForwardInfo(SForwardInfo info)
{ {
this.info = info; this.info = info;
} }
} }
public class SForwardInfo191Formatter : MemoryPackFormatter<SForwardInfo191> public class SForwardInfoFormatter : MemoryPackFormatter<SForwardInfo>
{ {
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardInfo191 value) public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref SForwardInfo value)
{ {
if (value == null) if (value == null)
{ {
@@ -660,10 +488,10 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
writer.WritePackable(new SerializableSForwardInfo191(value)); writer.WritePackable(new SerializableSForwardInfo(value));
} }
public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardInfo191 value) public override void Deserialize(ref MemoryPackReader reader, scoped ref SForwardInfo value)
{ {
if (reader.PeekIsNull()) if (reader.PeekIsNull())
{ {
@@ -672,10 +500,26 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableSForwardInfo191>(); value = new SForwardInfo();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
value.Id = reader.ReadValue<long>();
value.Name = reader.ReadValue<string>();
value.Domain = reader.ReadValue<string>();
value.RemotePort = reader.ReadValue<int>();
value.BufferSize = reader.ReadValue<byte>();
value.LocalEP = reader.ReadValue<IPEndPoint>();
value.Started = reader.ReadValue<bool>();
value.Msg = reader.ReadValue<string>();
value.LocalMsg = reader.ReadValue<string>();
value.RemotePortMin = reader.ReadValue<int>();
value.RemotePortMax = reader.ReadValue<int>();
if (count > 11)
{
value.NodeId = reader.ReadValue<string>();
}
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableSForwardServerNodeUpdateInfo public readonly partial struct SerializableSForwardServerNodeUpdateInfo
{ {

View File

@@ -31,11 +31,24 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
byte MapPrefixLength => info.MapPrefixLength; byte MapPrefixLength => info.MapPrefixLength;
[MemoryPackInclude]
string Remark => info.Remark;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableSocks5LanInfo(IPAddress ip, byte prefixLength, bool disabled, bool exists, string error, IPAddress mapip, byte mapprefixLength) SerializableSocks5LanInfo(IPAddress ip, byte prefixLength, bool disabled, bool exists, string error, IPAddress mapip, byte mapprefixLength, string remark)
{ {
var info = new Socks5LanInfo { Disabled = disabled, Error = error, Exists = exists, IP = ip, PrefixLength = prefixLength, MapIP = mapip, MapPrefixLength = mapprefixLength }; var info = new Socks5LanInfo
{
Disabled = disabled,
Error = error,
Exists = exists,
IP = ip,
PrefixLength = prefixLength,
MapIP = mapip,
MapPrefixLength = mapprefixLength,
Remark = remark
};
this.info = info; this.info = info;
} }
@@ -65,9 +78,17 @@ namespace linker.messenger.serializer.memorypack
value = null; value = null;
return; return;
} }
reader.TryReadObjectHeader(out byte count);
var wrapped = reader.ReadPackable<SerializableSocks5LanInfo>(); value = new Socks5LanInfo();
value = wrapped.info; value.IP = reader.ReadValue<IPAddress>();
value.PrefixLength = reader.ReadValue<byte>();
value.Disabled = reader.ReadValue<bool>();
value.Exists = reader.ReadValue<bool>();
value.Error = reader.ReadValue<string>();
value.MapIP = reader.ReadValue<IPAddress>();
value.MapPrefixLength = reader.ReadValue<byte>();
if (count > 7)
value.Remark = reader.ReadValue<string>();
} }
} }
@@ -93,14 +114,14 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
string SetupError => info.SetupError; string SetupError => info.SetupError;
[MemoryPackInclude,MemoryPackAllowSerialize] [MemoryPackInclude, MemoryPackAllowSerialize]
IPAddress Wan => info.Wan; IPAddress Wan => info.Wan;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableSocks5Info(string machineId, Socks5Status status, int port, List<Socks5LanInfo> lans, string setupError, IPAddress wan) SerializableSocks5Info(string machineId, Socks5Status status, int port, List<Socks5LanInfo> lans, string setupError, IPAddress wan)
{ {
var info = new Socks5Info { MachineId = machineId, Lans = lans, Port = port, SetupError = setupError, Status = status, Wan= wan }; var info = new Socks5Info { MachineId = machineId, Lans = lans, Port = port, SetupError = setupError, Status = status, Wan = wan };
this.info = info; this.info = info;
} }

View File

@@ -5,6 +5,7 @@ namespace linker.messenger.serializer.memorypack
{ {
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableSyncInfo public readonly partial struct SerializableSyncInfo
{ {
@@ -17,17 +18,20 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
Memory<byte> Data => info.Data; Memory<byte> Data => info.Data;
[MemoryPackInclude]
string[] Ids => info.Ids;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableSyncInfo(string name, Memory<byte> data) SerializableSyncInfo(string name, Memory<byte> data, string[] ids)
{ {
var info = new SyncInfo { Name = name, Data = data }; var info = new SyncInfo { Name = name, Data = data, Ids = ids };
this.info = info; this.info = info;
} }
public SerializableSyncInfo(SyncInfo signInfo) public SerializableSyncInfo(SyncInfo info)
{ {
this.info = signInfo; this.info = info;
} }
} }
public class SyncInfoFormatter : MemoryPackFormatter<SyncInfo> public class SyncInfoFormatter : MemoryPackFormatter<SyncInfo>
@@ -51,65 +55,12 @@ namespace linker.messenger.serializer.memorypack
value = null; value = null;
return; return;
} }
value = new SyncInfo();
var wrapped = reader.ReadPackable<SerializableSyncInfo>(); reader.TryReadObjectHeader(out byte count);
value = wrapped.info; value.Name = reader.ReadValue<string>();
} value.Data = reader.ReadValue<Memory<byte>>();
} if (count > 2)
value.Ids = reader.ReadValue<string[]>();
[MemoryPackable]
public readonly partial struct SerializableSync184Info
{
[MemoryPackIgnore]
public readonly Sync184Info info;
[MemoryPackInclude]
string Name => info.Name;
[MemoryPackInclude]
Memory<byte> Data => info.Data;
[MemoryPackInclude]
string[] Ids => info.Ids;
[MemoryPackConstructor]
SerializableSync184Info(string name, Memory<byte> data, string[] ids)
{
var info = new Sync184Info { Name = name, Data = data, Ids = ids };
this.info = info;
}
public SerializableSync184Info(Sync184Info info)
{
this.info = info;
}
}
public class Sync184InfoFormatter : MemoryPackFormatter<Sync184Info>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref Sync184Info value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableSync184Info(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref Sync184Info value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableSync184Info>();
value = wrapped.info;
} }
} }
} }

View File

@@ -442,8 +442,11 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude, MemoryPackAllowSerialize] [MemoryPackInclude, MemoryPackAllowSerialize]
byte MapPrefixLength => info.MapPrefixLength; byte MapPrefixLength => info.MapPrefixLength;
[MemoryPackInclude]
string Remark => info.Remark;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableTuntapLanInfo(IPAddress ip, byte prefixLength, bool disabled, bool exists, string error, IPAddress mapip, byte mapprefixLength) SerializableTuntapLanInfo(IPAddress ip, byte prefixLength, bool disabled, bool exists, string error, IPAddress mapip, byte mapprefixLength, string remark)
{ {
var info = new TuntapLanInfo var info = new TuntapLanInfo
{ {
@@ -454,6 +457,7 @@ namespace linker.messenger.serializer.memorypack
Error = error, Error = error,
MapIP = mapip, MapIP = mapip,
MapPrefixLength = mapprefixLength, MapPrefixLength = mapprefixLength,
Remark = remark
}; };
this.info = info; this.info = info;
} }
@@ -485,8 +489,19 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableTuntapLanInfo>(); reader.TryReadObjectHeader(out byte count);
value = wrapped.info; value = new TuntapLanInfo();
value.IP = reader.ReadValue<IPAddress>();
value.PrefixLength = reader.ReadValue<byte>();
value.Disabled = reader.ReadValue<bool>();
value.Exists = reader.ReadValue<bool>();
value.Error = reader.ReadValue<string>();
value.MapIP = reader.ReadValue<IPAddress>();
value.MapPrefixLength = reader.ReadValue<byte>();
if (count > 7)
value.Remark = reader.ReadValue<string>();
//reader.Advance(count);
} }
} }

View File

@@ -216,7 +216,6 @@ namespace linker.messenger.serializer.memorypack
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableUpdateInfo public readonly partial struct SerializableUpdateInfo
{ {
@@ -280,8 +279,6 @@ namespace linker.messenger.serializer.memorypack
} }
} }
[MemoryPackable] [MemoryPackable]
public readonly partial struct SerializableUpdaterInfo170 public readonly partial struct SerializableUpdaterInfo170
{ {
@@ -302,10 +299,16 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude] [MemoryPackInclude]
long Current => info.Current; long Current => info.Current;
[MemoryPackInclude]
string ServerVersion => info.ServerVersion;
[MemoryPackInclude]
bool Sync2Server => info.Sync2Server;
[MemoryPackConstructor] [MemoryPackConstructor]
SerializableUpdaterInfo170(string machineId, string version, UpdaterStatus status, long length, long current) SerializableUpdaterInfo170(string machineId, string version, UpdaterStatus status, long length, long current, string serverVersion, bool sync2Server)
{ {
this.info = new UpdaterInfo170 { MachineId = machineId, Version = version, Status = status, Length = length, Current = current }; this.info = new UpdaterInfo170 { MachineId = machineId, Version = version, Status = status, Length = length, Current = current, ServerVersion = serverVersion, Sync2Server = sync2Server };
} }
public SerializableUpdaterInfo170(UpdaterInfo170 info) public SerializableUpdaterInfo170(UpdaterInfo170 info)
@@ -335,135 +338,17 @@ namespace linker.messenger.serializer.memorypack
return; return;
} }
var wrapped = reader.ReadPackable<SerializableUpdaterInfo170>(); value = new UpdaterInfo170();
value = wrapped.info; reader.TryReadObjectHeader(out byte count);
} value.MachineId = reader.ReadValue<string>();
} value.Version = reader.ReadValue<string>();
value.Status = reader.ReadValue<UpdaterStatus>();
value.Length = reader.ReadValue<long>();
[MemoryPackable] value.Current = reader.ReadValue<long>();
public readonly partial struct SerializableUpdater184Info if (count > 5)
{ value.ServerVersion = reader.ReadValue<string>();
[MemoryPackIgnore] if (count > 6)
public readonly Updater184Info info; value.Sync2Server = reader.ReadValue<bool>();
[MemoryPackInclude]
string MachineId => info.MachineId;
[MemoryPackInclude]
string Version => info.Version;
[MemoryPackInclude]
UpdaterStatus Status => info.Status;
[MemoryPackInclude]
long Length => info.Length;
[MemoryPackInclude]
long Current => info.Current;
[MemoryPackInclude]
string ServerVersion => info.ServerVersion;
[MemoryPackConstructor]
SerializableUpdater184Info(string machineId, string version, UpdaterStatus status, long length, long current, string serverVersion)
{
this.info = new Updater184Info { MachineId = machineId, Version = version, Status = status, Length = length, Current = current, ServerVersion = serverVersion };
}
public SerializableUpdater184Info(Updater184Info info)
{
this.info = info;
}
}
public class Updater184InfoFormatter : MemoryPackFormatter<Updater184Info>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref Updater184Info value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableUpdater184Info(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref Updater184Info value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableUpdater184Info>();
value = wrapped.info;
}
}
[MemoryPackable]
public readonly partial struct SerializableUpdater186Info
{
[MemoryPackIgnore]
public readonly Updater186Info info;
[MemoryPackInclude]
string MachineId => info.MachineId;
[MemoryPackInclude]
string Version => info.Version;
[MemoryPackInclude]
UpdaterStatus Status => info.Status;
[MemoryPackInclude]
long Length => info.Length;
[MemoryPackInclude]
long Current => info.Current;
[MemoryPackInclude]
string ServerVersion => info.ServerVersion;
[MemoryPackInclude]
bool Sync2Server => info.Sync2Server;
[MemoryPackConstructor]
SerializableUpdater186Info(string machineId, string version, UpdaterStatus status, long length, long current, string serverVersion, bool sync2Server)
{
this.info = new Updater186Info { MachineId = machineId, Version = version, Status = status, Length = length, Current = current, ServerVersion = serverVersion, Sync2Server = sync2Server };
}
public SerializableUpdater186Info(Updater186Info info)
{
this.info = info;
}
}
public class Updater186InfoFormatter : MemoryPackFormatter<Updater186Info>
{
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref Updater186Info value)
{
if (value == null)
{
writer.WriteNullObjectHeader();
return;
}
writer.WritePackable(new SerializableUpdater186Info(value));
}
public override void Deserialize(ref MemoryPackReader reader, scoped ref Updater186Info value)
{
if (reader.PeekIsNull())
{
reader.Advance(1); // skip null block
value = null;
return;
}
var wrapped = reader.ReadPackable<SerializableUpdater186Info>();
value = wrapped.info;
} }
} }

View File

@@ -54,11 +54,9 @@ namespace linker.messenger.sforward
/// </summary> /// </summary>
public int RemotePortMax { get; set; } public int RemotePortMax { get; set; }
/// <summary>
} /// 191+
/// </summary>
public sealed class SForwardInfo191 : SForwardInfo
{
public string NodeId { get; set; } = string.Empty; public string NodeId { get; set; } = string.Empty;
public string NodeId1 { get; set; } = string.Empty; public string NodeId1 { get; set; } = string.Empty;
} }
@@ -95,11 +93,9 @@ namespace linker.messenger.sforward
/// 或者端口。域名优先 /// 或者端口。域名优先
/// </summary> /// </summary>
public int RemotePort { get; set; } public int RemotePort { get; set; }
}
public sealed partial class SForwardAddInfo191 : SForwardAddInfo
{
/// <summary> /// <summary>
/// 节点id /// 191+
/// </summary> /// </summary>
public string NodeId { get; set; } = string.Empty; public string NodeId { get; set; } = string.Empty;
public string MachineId { get; set; } = string.Empty; public string MachineId { get; set; } = string.Empty;
@@ -108,7 +104,6 @@ namespace linker.messenger.sforward
public bool Super { get; set; } public bool Super { get; set; }
public double Bandwidth { get; set; } public double Bandwidth { get; set; }
} }
/// <summary> /// <summary>
/// 添加穿透结果 /// 添加穿透结果
/// </summary> /// </summary>
@@ -133,10 +128,6 @@ namespace linker.messenger.sforward
public string MachineId { get; set; } public string MachineId { get; set; }
public SForwardInfo Data { get; set; } public SForwardInfo Data { get; set; }
} }
public sealed partial class SForwardAddForwardInfo191 : SForwardAddForwardInfo
{
public new SForwardInfo191 Data { get; set; }
}
public sealed partial class SForwardRemoveForwardInfo public sealed partial class SForwardRemoveForwardInfo
{ {
public string MachineId { get; set; } public string MachineId { get; set; }

View File

@@ -12,31 +12,31 @@
/// 获取穿透列表 /// 获取穿透列表
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public IEnumerable<SForwardInfo191> Get(); public IEnumerable<SForwardInfo> Get();
/// <summary> /// <summary>
/// 获取穿透 /// 获取穿透
/// </summary> /// </summary>
/// <param name="id"></param> /// <param name="id"></param>
/// <returns></returns> /// <returns></returns>
public SForwardInfo191 Get(long id); public SForwardInfo Get(long id);
/// <summary> /// <summary>
/// 获取穿透 /// 获取穿透
/// </summary> /// </summary>
/// <param name="domain"></param> /// <param name="domain"></param>
/// <returns></returns> /// <returns></returns>
public SForwardInfo191 Get(string domain); public SForwardInfo Get(string domain);
/// <summary> /// <summary>
/// 获取穿透 /// 获取穿透
/// </summary> /// </summary>
/// <param name="port"></param> /// <param name="port"></param>
/// <returns></returns> /// <returns></returns>
public SForwardInfo191 GetPort(int port); public SForwardInfo GetPort(int port);
/// <summary> /// <summary>
/// 添加穿透 /// 添加穿透
/// </summary> /// </summary>
/// <param name="info"></param> /// <param name="info"></param>
/// <returns></returns> /// <returns></returns>
public bool Add(SForwardInfo191 info); public bool Add(SForwardInfo info);
/// <summary> /// <summary>
/// 更新穿透 /// 更新穿透
/// </summary> /// </summary>

View File

@@ -46,15 +46,15 @@ namespace linker.messenger.sforward.client
/// </summary> /// </summary>
/// <param name="param"></param> /// <param name="param"></param>
/// <returns></returns> /// <returns></returns>
public async Task<List<SForwardInfo191>> Get(ApiControllerParamsInfo param) public async Task<List<SForwardInfo>> Get(ApiControllerParamsInfo param)
{ {
if (param.Content == signInClientStore.Id) if (param.Content == signInClientStore.Id)
{ {
if (accessStore.HasAccess(AccessValue.ForwardShowSelf) == false) return new List<SForwardInfo191>(); if (accessStore.HasAccess(AccessValue.ForwardShowSelf) == false) return new List<SForwardInfo>();
return sForwardClientStore.Get().ToList(); return sForwardClientStore.Get().ToList();
} }
if (accessStore.HasAccess(AccessValue.ForwardShowOther) == false) return new List<SForwardInfo191>(); if (accessStore.HasAccess(AccessValue.ForwardShowOther) == false) return new List<SForwardInfo>();
var resp = await messengerSender.SendReply(new MessageRequestWrap var resp = await messengerSender.SendReply(new MessageRequestWrap
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
@@ -63,9 +63,9 @@ namespace linker.messenger.sforward.client
}).ConfigureAwait(false); }).ConfigureAwait(false);
if (resp.Code == MessageResponeCodes.OK) if (resp.Code == MessageResponeCodes.OK)
{ {
return serializer.Deserialize<List<SForwardInfo191>>(resp.Data.Span); return serializer.Deserialize<List<SForwardInfo>>(resp.Data.Span);
} }
return new List<SForwardInfo191>(); return new List<SForwardInfo>();
} }
/// <summary> /// <summary>
@@ -75,7 +75,7 @@ namespace linker.messenger.sforward.client
/// <returns></returns> /// <returns></returns>
public async Task<bool> Add(ApiControllerParamsInfo param) public async Task<bool> Add(ApiControllerParamsInfo param)
{ {
SForwardAddForwardInfo191 info = param.Content.DeJson<SForwardAddForwardInfo191>(); SForwardAddForwardInfo info = param.Content.DeJson<SForwardAddForwardInfo>();
if (info.MachineId == signInClientStore.Id) if (info.MachineId == signInClientStore.Id)
{ {
if (accessStore.HasAccess(AccessValue.ForwardSelf) == false) return false; if (accessStore.HasAccess(AccessValue.ForwardSelf) == false) return false;

View File

@@ -38,7 +38,7 @@ namespace linker.messenger.sforward.client
public void Start(long id, string flag = "") public void Start(long id, string flag = "")
{ {
SForwardInfo191 forwardInfo = sForwardClientStore.Get(id); SForwardInfo forwardInfo = sForwardClientStore.Get(id);
if (forwardInfo != null) if (forwardInfo != null)
{ {
Start(forwardInfo, flag); Start(forwardInfo, flag);
@@ -47,14 +47,14 @@ namespace linker.messenger.sforward.client
} }
public void Stop(long id, string flag = "") public void Stop(long id, string flag = "")
{ {
SForwardInfo191 forwardInfo = sForwardClientStore.Get(id); SForwardInfo forwardInfo = sForwardClientStore.Get(id);
if (forwardInfo != null) if (forwardInfo != null)
{ {
Stop(forwardInfo, flag); Stop(forwardInfo, flag);
OnChanged(); OnChanged();
} }
} }
private void Start(SForwardInfo191 forwardInfo, string flag = "") private void Start(SForwardInfo forwardInfo, string flag = "")
{ {
if (forwardInfo.RemotePort == 0 && string.IsNullOrWhiteSpace(forwardInfo.Domain)) if (forwardInfo.RemotePort == 0 && string.IsNullOrWhiteSpace(forwardInfo.Domain))
{ {
@@ -78,7 +78,7 @@ namespace linker.messenger.sforward.client
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)SForwardMessengerIds.AddForward191, MessengerId = (ushort)SForwardMessengerIds.AddForward191,
Payload = serializer.Serialize(new SForwardAddInfo191 { Domain = forwardInfo.Domain, RemotePort = forwardInfo.RemotePort, NodeId = forwardInfo.NodeId1 }) Payload = serializer.Serialize(new SForwardAddInfo { Domain = forwardInfo.Domain, RemotePort = forwardInfo.RemotePort, NodeId = forwardInfo.NodeId1 })
}).ContinueWith((result) => }).ContinueWith((result) =>
{ {
if (result.Result.Code == MessageResponeCodes.OK) if (result.Result.Code == MessageResponeCodes.OK)
@@ -110,7 +110,7 @@ namespace linker.messenger.sforward.client
} }
} }
private void Stop(SForwardInfo191 forwardInfo, string flag = "") private void Stop(SForwardInfo forwardInfo, string flag = "")
{ {
try try
{ {
@@ -120,7 +120,7 @@ namespace linker.messenger.sforward.client
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)SForwardMessengerIds.RemoveForward191, MessengerId = (ushort)SForwardMessengerIds.RemoveForward191,
Payload = serializer.Serialize(new SForwardAddInfo191 { Domain = forwardInfo.Domain, RemotePort = forwardInfo.RemotePort, NodeId = forwardInfo.NodeId1 }) Payload = serializer.Serialize(new SForwardAddInfo { Domain = forwardInfo.Domain, RemotePort = forwardInfo.RemotePort, NodeId = forwardInfo.NodeId1 })
}).ContinueWith((result) => }).ContinueWith((result) =>
{ {
OnClose(forwardInfo.Id, flag); OnClose(forwardInfo.Id, flag);
@@ -134,7 +134,7 @@ namespace linker.messenger.sforward.client
} }
public bool Add(SForwardInfo191 forwardInfo) public bool Add(SForwardInfo forwardInfo)
{ {
sForwardClientStore.Add(forwardInfo); sForwardClientStore.Add(forwardInfo);
OnChanged(); OnChanged();

View File

@@ -152,21 +152,21 @@ namespace linker.messenger.sforward.messenger
result.Message = "need sign in"; result.Message = "need sign in";
return; return;
} }
SForwardAddInfo191 sForwardAddInfo191 = new SForwardAddInfo191 SForwardAddInfo SForwardAddInfo = new SForwardAddInfo
{ {
Domain = sForwardAddInfo.Domain, Domain = sForwardAddInfo.Domain,
RemotePort = sForwardAddInfo.RemotePort, RemotePort = sForwardAddInfo.RemotePort,
MachineId = cache.MachineId, MachineId = cache.MachineId,
GroupId = cache.GroupId GroupId = cache.GroupId
}; };
string error = await validator.Validate(cache, sForwardAddInfo191).ConfigureAwait(false); string error = await validator.Validate(cache, SForwardAddInfo).ConfigureAwait(false);
if (string.IsNullOrWhiteSpace(error) == false) if (string.IsNullOrWhiteSpace(error) == false)
{ {
result.Success = false; result.Success = false;
result.Message = error; result.Message = error;
return; return;
} }
Add(sForwardAddInfo, cache.MachineId, cache.GroupId, result, sForwardAddInfo191.Super, sForwardAddInfo191.Bandwidth); Add(sForwardAddInfo, cache.MachineId, cache.GroupId, result, SForwardAddInfo.Super, SForwardAddInfo.Bandwidth);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -183,7 +183,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.Add191)] [MessengerId((ushort)SForwardMessengerIds.Add191)]
public void Add191(IConnection connection) public void Add191(IConnection connection)
{ {
SForwardAddInfo191 sForwardAddInfo = serializer.Deserialize<SForwardAddInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardAddInfo sForwardAddInfo = serializer.Deserialize<SForwardAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true, BufferSize = 3 }; SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true, BufferSize = 3 };
try try
{ {
@@ -204,7 +204,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.AddForward191)] [MessengerId((ushort)SForwardMessengerIds.AddForward191)]
public async Task AddForward191(IConnection connection) public async Task AddForward191(IConnection connection)
{ {
SForwardAddInfo191 sForwardAddInfo = serializer.Deserialize<SForwardAddInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardAddInfo sForwardAddInfo = serializer.Deserialize<SForwardAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true, BufferSize = 3 }; SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true, BufferSize = 3 };
try try
{ {
@@ -281,7 +281,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.Remove191)] [MessengerId((ushort)SForwardMessengerIds.Remove191)]
public void Remove191(IConnection connection) public void Remove191(IConnection connection)
{ {
SForwardAddInfo191 sForwardAddInfo = serializer.Deserialize<SForwardAddInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardAddInfo sForwardAddInfo = serializer.Deserialize<SForwardAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true }; SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true };
try try
@@ -299,7 +299,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.RemoveForward191)] [MessengerId((ushort)SForwardMessengerIds.RemoveForward191)]
public async Task RemoveForward191(IConnection connection) public async Task RemoveForward191(IConnection connection)
{ {
SForwardAddInfo191 sForwardAddInfo = serializer.Deserialize<SForwardAddInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardAddInfo sForwardAddInfo = serializer.Deserialize<SForwardAddInfo>(connection.ReceiveRequestWrap.Payload.Span);
SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true }; SForwardAddResultInfo result = new SForwardAddResultInfo { Success = true };
try try
@@ -363,7 +363,7 @@ namespace linker.messenger.sforward.messenger
result.Message = $"sforward fail : {ex.Message}"; result.Message = $"sforward fail : {ex.Message}";
} }
} }
public void Remove(SForwardAddInfo191 sForwardAddInfo, SForwardAddResultInfo result) public void Remove(SForwardAddInfo sForwardAddInfo, SForwardAddResultInfo result)
{ {
Remove((SForwardAddInfo)sForwardAddInfo, sForwardAddInfo.MachineId, result); Remove((SForwardAddInfo)sForwardAddInfo, sForwardAddInfo.MachineId, result);
} }
@@ -443,7 +443,7 @@ namespace linker.messenger.sforward.messenger
result.Message = $"sforward fail : {ex.Message}"; result.Message = $"sforward fail : {ex.Message}";
} }
} }
public void Add(SForwardAddInfo191 sForwardAddInfo, SForwardAddResultInfo result) public void Add(SForwardAddInfo sForwardAddInfo, SForwardAddResultInfo result)
{ {
Add((SForwardAddInfo)sForwardAddInfo, sForwardAddInfo.MachineId, sForwardAddInfo.GroupId, result, sForwardAddInfo.Super, sForwardAddInfo.Bandwidth); Add((SForwardAddInfo)sForwardAddInfo, sForwardAddInfo.MachineId, sForwardAddInfo.GroupId, result, sForwardAddInfo.Super, sForwardAddInfo.Bandwidth);
} }
@@ -520,7 +520,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.AddClientForward191)] [MessengerId((ushort)SForwardMessengerIds.AddClientForward191)]
public async Task AddClientForward191(IConnection connection) public async Task AddClientForward191(IConnection connection)
{ {
SForwardAddForwardInfo191 info = serializer.Deserialize<SForwardAddForwardInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardAddForwardInfo info = serializer.Deserialize<SForwardAddForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to)) if (signCaching.TryGet(connection.Id, info.MachineId, out SignCacheInfo from, out SignCacheInfo to))
{ {
uint requestid = connection.ReceiveRequestWrap.RequestId; uint requestid = connection.ReceiveRequestWrap.RequestId;
@@ -781,7 +781,7 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.Get)] [MessengerId((ushort)SForwardMessengerIds.Get)]
public void Get(IConnection connection) public void Get(IConnection connection)
{ {
List<SForwardInfo191> result = sForwardClientStore.Get().ToList(); List<SForwardInfo> result = sForwardClientStore.Get().ToList();
connection.Write(serializer.Serialize(result)); connection.Write(serializer.Serialize(result));
} }
/// <summary> /// <summary>
@@ -791,14 +791,14 @@ namespace linker.messenger.sforward.messenger
[MessengerId((ushort)SForwardMessengerIds.AddClient)] [MessengerId((ushort)SForwardMessengerIds.AddClient)]
public void AddClient(IConnection connection) public void AddClient(IConnection connection)
{ {
SForwardInfo191 sForwardInfo = serializer.Deserialize<SForwardInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardInfo sForwardInfo = serializer.Deserialize<SForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
sForwardTransfer.Add(sForwardInfo); sForwardTransfer.Add(sForwardInfo);
connection.Write(Helper.TrueArray); connection.Write(Helper.TrueArray);
} }
[MessengerId((ushort)SForwardMessengerIds.AddClient191)] [MessengerId((ushort)SForwardMessengerIds.AddClient191)]
public void AddClient191(IConnection connection) public void AddClient191(IConnection connection)
{ {
SForwardInfo191 sForwardInfo = serializer.Deserialize<SForwardInfo191>(connection.ReceiveRequestWrap.Payload.Span); SForwardInfo sForwardInfo = serializer.Deserialize<SForwardInfo>(connection.ReceiveRequestWrap.Payload.Span);
sForwardTransfer.Add(sForwardInfo); sForwardTransfer.Add(sForwardInfo);
connection.Write(Helper.TrueArray); connection.Write(Helper.TrueArray);
} }

View File

@@ -95,7 +95,7 @@ namespace linker.messenger.sforward.server
} }
} }
public async Task<SForwardAddResultInfo> Add(SForwardAddInfo191 info, SignCacheInfo from) public async Task<SForwardAddResultInfo> Add(SForwardAddInfo info, SignCacheInfo from)
{ {
if (string.IsNullOrWhiteSpace(info.NodeId)) info.NodeId = sForwardServerNodeStore.Node.Id; if (string.IsNullOrWhiteSpace(info.NodeId)) info.NodeId = sForwardServerNodeStore.Node.Id;
if (GetNode(info.NodeId, out var node) == false) if (GetNode(info.NodeId, out var node) == false)
@@ -148,7 +148,7 @@ namespace linker.messenger.sforward.server
Success = false Success = false
}; };
} }
public async Task<SForwardAddResultInfo> Remove(SForwardAddInfo191 info) public async Task<SForwardAddResultInfo> Remove(SForwardAddInfo info)
{ {
if (string.IsNullOrWhiteSpace(info.NodeId)) info.NodeId = sForwardServerNodeStore.Node.Id; if (string.IsNullOrWhiteSpace(info.NodeId)) info.NodeId = sForwardServerNodeStore.Node.Id;

View File

@@ -11,6 +11,6 @@ namespace linker.messenger.sforward.server.validator
/// <param name="signCacheInfo">来源客户端</param> /// <param name="signCacheInfo">来源客户端</param>
/// <param name="sForwardAddInfo">穿透信息</param> /// <param name="sForwardAddInfo">穿透信息</param>
/// <returns></returns> /// <returns></returns>
public Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo191 sForwardAddInfo); public Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo sForwardAddInfo);
} }
} }

View File

@@ -19,7 +19,7 @@ namespace linker.messenger.sforward.server.validator
this.sForwardServerNodeStore = sForwardServerNodeStore; this.sForwardServerNodeStore = sForwardServerNodeStore;
} }
public async Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo191 sForwardAddInfo) public async Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo sForwardAddInfo)
{ {
if (string.IsNullOrWhiteSpace(sForwardAddInfo.NodeId)) sForwardAddInfo.NodeId = sForwardServerNodeStore.Node.Id; if (string.IsNullOrWhiteSpace(sForwardAddInfo.NodeId)) sForwardAddInfo.NodeId = sForwardServerNodeStore.Node.Id;

View File

@@ -45,7 +45,7 @@ namespace linker.messenger.sforward.server.validator
/// <param name="signCacheInfo"></param> /// <param name="signCacheInfo"></param>
/// <param name="sForwardAddInfo"></param> /// <param name="sForwardAddInfo"></param>
/// <returns></returns> /// <returns></returns>
public async Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo191 sForwardAddInfo) public async Task<string> Validate(SignCacheInfo signCacheInfo, SForwardAddInfo sForwardAddInfo)
{ {
foreach (var item in validators) foreach (var item in validators)
{ {

View File

@@ -284,6 +284,10 @@ namespace linker.messenger.signin
} }
} }
/// <summary>
/// 检查超级权限
/// </summary>
/// <returns></returns>
public async Task CheckSuper() public async Task CheckSuper()
{ {
MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap MessageResponeInfo resp = await messengerSender.SendReply(new MessageRequestWrap

View File

@@ -68,6 +68,7 @@ namespace linker.messenger.socks5
public bool Disabled { get; set; } public bool Disabled { get; set; }
public bool Exists { get; set; } public bool Exists { get; set; }
public string Error { get; set; } = string.Empty; public string Error { get; set; } = string.Empty;
public string Remark { get; set; } = string.Empty;
} }
public enum Socks5Status : byte public enum Socks5Status : byte

View File

@@ -22,7 +22,7 @@ namespace linker.messenger.store.file.relay
{ {
config.Data.Server.Relay.Distributed.Node = node; config.Data.Server.Relay.Distributed.Node = node;
} }
public void UpdateInfo(RelayServerNodeUpdateInfo188 update) public void UpdateInfo(RelayServerNodeUpdateInfo update)
{ {
config.Data.Server.Relay.Distributed.Node.Name = update.Name; config.Data.Server.Relay.Distributed.Node.Name = update.Name;
config.Data.Server.Relay.Distributed.Node.MaxConnection = update.MaxConnection; config.Data.Server.Relay.Distributed.Node.MaxConnection = update.MaxConnection;

View File

@@ -10,43 +10,43 @@ namespace linker.messenger.store.file.sforward
{ {
private readonly FileConfig fileConfig; private readonly FileConfig fileConfig;
private readonly Storefactory dBfactory; private readonly Storefactory dBfactory;
private readonly ILiteCollection<SForwardInfo191> liteCollection; private readonly ILiteCollection<SForwardInfo> liteCollection;
public SForwardClientStore(FileConfig fileConfig, Storefactory dBfactory) public SForwardClientStore(FileConfig fileConfig, Storefactory dBfactory)
{ {
this.fileConfig = fileConfig; this.fileConfig = fileConfig;
this.dBfactory = dBfactory; this.dBfactory = dBfactory;
liteCollection = dBfactory.GetCollection<SForwardInfo191>("sforward"); liteCollection = dBfactory.GetCollection<SForwardInfo>("sforward");
liteCollection.UpdateMany(c => new SForwardInfo191 { Started = false }, c => c.Started == true); liteCollection.UpdateMany(c => new SForwardInfo { Started = false }, c => c.Started == true);
} }
public int Count() public int Count()
{ {
return liteCollection.Count(); return liteCollection.Count();
} }
public IEnumerable<SForwardInfo191> Get() public IEnumerable<SForwardInfo> Get()
{ {
return liteCollection.FindAll(); return liteCollection.FindAll();
} }
public SForwardInfo191 Get(long id) public SForwardInfo Get(long id)
{ {
return liteCollection.FindOne(x => x.Id == id); return liteCollection.FindOne(x => x.Id == id);
} }
public SForwardInfo191 Get(string domain) public SForwardInfo Get(string domain)
{ {
return liteCollection.FindOne(x => x.Domain == domain); return liteCollection.FindOne(x => x.Domain == domain);
} }
public SForwardInfo191 GetPort(int port) public SForwardInfo GetPort(int port)
{ {
return liteCollection.FindOne(c => c.RemotePort == port); return liteCollection.FindOne(c => c.RemotePort == port);
} }
public bool Add(SForwardInfo191 info) public bool Add(SForwardInfo info)
{ {
SForwardInfo191 old = liteCollection.FindOne(c => info.RemotePort > 0 && c.RemotePort == info.RemotePort || string.IsNullOrWhiteSpace(info.Domain) == false && c.Domain == info.Domain); SForwardInfo old = liteCollection.FindOne(c => info.RemotePort > 0 && c.RemotePort == info.RemotePort || string.IsNullOrWhiteSpace(info.Domain) == false && c.Domain == info.Domain);
if (old != null && old.Id != info.Id) if (old != null && old.Id != info.Id)
{ {
return false; return false;
@@ -59,7 +59,7 @@ namespace linker.messenger.store.file.sforward
} }
if (info.Id != 0) if (info.Id != 0)
{ {
liteCollection.UpdateMany(c => new SForwardInfo191 liteCollection.UpdateMany(c => new SForwardInfo
{ {
RemotePort = info.RemotePort, RemotePort = info.RemotePort,
Name = info.Name, Name = info.Name,
@@ -82,20 +82,20 @@ namespace linker.messenger.store.file.sforward
} }
public bool Update(long id, bool started, string msg) public bool Update(long id, bool started, string msg)
{ {
return liteCollection.UpdateMany(c => new SForwardInfo191 { Started = started, Msg = msg }, c => c.Id == id) > 0; return liteCollection.UpdateMany(c => new SForwardInfo { Started = started, Msg = msg }, c => c.Id == id) > 0;
} }
public bool Update(long id, bool started) public bool Update(long id, bool started)
{ {
return liteCollection.UpdateMany(c => new SForwardInfo191 { Started = started }, c => c.Id == id) > 0; return liteCollection.UpdateMany(c => new SForwardInfo { Started = started }, c => c.Id == id) > 0;
} }
public bool Update(long id, string localMsg) public bool Update(long id, string localMsg)
{ {
return liteCollection.UpdateMany(c => new SForwardInfo191 { LocalMsg = localMsg }, c => c.Id == id) > 0; return liteCollection.UpdateMany(c => new SForwardInfo { LocalMsg = localMsg }, c => c.Id == id) > 0;
} }
public bool UpdateNodeId1(long id, string nodeid1) public bool UpdateNodeId1(long id, string nodeid1)
{ {
return liteCollection.UpdateMany(c => new SForwardInfo191 { NodeId1 = nodeid1 }, c => c.Id == id) > 0; return liteCollection.UpdateMany(c => new SForwardInfo { NodeId1 = nodeid1 }, c => c.Id == id) > 0;
} }
public bool Remove(long id) public bool Remove(long id)

View File

@@ -13,10 +13,7 @@ namespace linker.messenger.sync
public SyncInfo() { } public SyncInfo() { }
public string Name { get; set; } public string Name { get; set; }
public Memory<byte> Data { get; set; } public Memory<byte> Data { get; set; }
}
public sealed partial class Sync184Info : SyncInfo
{
public Sync184Info() { }
public string[] Ids { get; set; } public string[] Ids { get; set; }
} }
} }

View File

@@ -42,7 +42,7 @@ namespace linker.messenger.sync
[MessengerId((ushort)ConfigMessengerIds.Sync184Forward)] [MessengerId((ushort)ConfigMessengerIds.Sync184Forward)]
public async Task Sync184Forward(IConnection connection) public async Task Sync184Forward(IConnection connection)
{ {
Sync184Info info = serializer.Deserialize<Sync184Info>(connection.ReceiveRequestWrap.Payload.Span); SyncInfo info = serializer.Deserialize<SyncInfo>(connection.ReceiveRequestWrap.Payload.Span);
string[] ids = info.Ids; string[] ids = info.Ids;
info.Ids = []; info.Ids = [];
Memory<byte> data = serializer.Serialize(info); Memory<byte> data = serializer.Serialize(info);
@@ -87,7 +87,7 @@ namespace linker.messenger.sync
[MessengerId((ushort)ConfigMessengerIds.Sync184)] [MessengerId((ushort)ConfigMessengerIds.Sync184)]
public void Sync184(IConnection connection) public void Sync184(IConnection connection)
{ {
Sync184Info info = serializer.Deserialize<Sync184Info>(connection.ReceiveRequestWrap.Payload.Span); SyncInfo info = serializer.Deserialize<SyncInfo>(connection.ReceiveRequestWrap.Payload.Span);
syncTreansfer.Sync(info); syncTreansfer.Sync(info);
} }

View File

@@ -41,7 +41,7 @@ namespace linker.messenger.sync
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)ConfigMessengerIds.Sync184Forward, MessengerId = (ushort)ConfigMessengerIds.Sync184Forward,
Payload = serializer.Serialize(new Sync184Info { Name = sync.Name, Data = data, Ids = ids }), Payload = serializer.Serialize(new SyncInfo { Name = sync.Name, Data = data, Ids = ids }),
}).ConfigureAwait(false); }).ConfigureAwait(false);
} }
} }
@@ -56,7 +56,7 @@ namespace linker.messenger.sync
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)ConfigMessengerIds.Sync184Forward, MessengerId = (ushort)ConfigMessengerIds.Sync184Forward,
Payload = serializer.Serialize(new Sync184Info { Name = sync.Name, Data = sync.GetData(), Ids = ids }), Payload = serializer.Serialize(new SyncInfo { Name = sync.Name, Data = sync.GetData(), Ids = ids }),
}).ConfigureAwait(false); }).ConfigureAwait(false);
} }
return; return;
@@ -73,7 +73,7 @@ namespace linker.messenger.sync
{ {
Connection = signInClientState.Connection, Connection = signInClientState.Connection,
MessengerId = (ushort)ConfigMessengerIds.Sync184Forward, MessengerId = (ushort)ConfigMessengerIds.Sync184Forward,
Payload = serializer.Serialize(new Sync184Info { Name = c.Name, Data = c.GetData(), Ids = ids }), Payload = serializer.Serialize(new SyncInfo { Name = c.Name, Data = c.GetData(), Ids = ids }),
}); });
}).ToList(); }).ToList();

View File

@@ -401,7 +401,7 @@ namespace linker.messenger.tuntap
public IPAddress MapIP { get; set; } = IPAddress.Any; public IPAddress MapIP { get; set; } = IPAddress.Any;
public byte MapPrefixLength { get; set; } = 24; public byte MapPrefixLength { get; set; } = 24;
public string Rematk { get; set; } = string.Empty; public string Remark { get; set; } = string.Empty;
} }
public enum TuntapStatus : byte public enum TuntapStatus : byte

View File

@@ -1,5 +1,4 @@
using linker.libs; using System.Collections.Concurrent;
using System.Collections.Concurrent;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
namespace linker.messenger.updater namespace linker.messenger.updater
{ {
@@ -81,17 +80,11 @@ namespace linker.messenger.updater
public UpdaterStatus Status { get; set; } public UpdaterStatus Status { get; set; }
public long Length { get; set; } public long Length { get; set; }
public long Current { get; set; } public long Current { get; set; }
}
public partial class Updater184Info : UpdaterInfo170
{
public string ServerVersion { get; set; } public string ServerVersion { get; set; }
}
public sealed partial class Updater186Info : Updater184Info
{
public bool Sync2Server { get; set; } public bool Sync2Server { get; set; }
} }
public enum UpdaterStatus : byte public enum UpdaterStatus : byte
{ {
None = 0, None = 0,

View File

@@ -171,7 +171,7 @@ namespace linker.messenger.updater
}).ConfigureAwait(false); }).ConfigureAwait(false);
if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0) if (resp.Code == MessageResponeCodes.OK && resp.Data.Length > 0)
{ {
Updater186Info info = serializer.Deserialize<Updater186Info>(resp.Data.Span); UpdaterInfo170 info = serializer.Deserialize<UpdaterInfo170>(resp.Data.Span);
//服务端不是已经开始下载,本地也不是已经开始下载,就更新一下本地状态 //服务端不是已经开始下载,本地也不是已经开始下载,就更新一下本地状态
if (info.Status < UpdaterStatus.Downloading && updateInfo.Status < UpdaterStatus.Downloading) if (info.Status < UpdaterStatus.Downloading && updateInfo.Status < UpdaterStatus.Downloading)

View File

@@ -144,7 +144,7 @@ namespace linker.messenger.updater
public void UpdateServer184(IConnection connection) public void UpdateServer184(IConnection connection)
{ {
var info = updaterServerTransfer.Get(); var info = updaterServerTransfer.Get();
Updater184Info result = new Updater184Info UpdaterInfo170 result = new UpdaterInfo170
{ {
MachineId = string.Empty, MachineId = string.Empty,
Current = info.Current, Current = info.Current,
@@ -159,7 +159,7 @@ namespace linker.messenger.updater
public void UpdateServer186(IConnection connection) public void UpdateServer186(IConnection connection)
{ {
var info = updaterServerTransfer.Get(); var info = updaterServerTransfer.Get();
Updater186Info result = new Updater186Info UpdaterInfo170 result = new UpdaterInfo170
{ {
MachineId = string.Empty, MachineId = string.Empty,
Current = info.Current, Current = info.Current,

View File

@@ -45,18 +45,24 @@ namespace linker.messenger
return; return;
} }
int length = await socket.ReceiveAsync(buffer.AsMemory(0, 1), SocketFlags.None).ConfigureAwait(false); int length = await socket.ReceiveAsync(buffer.AsMemory(0, 1), SocketFlags.None).AsTask().WaitAsync(TimeSpan.FromMilliseconds(1000)).ConfigureAwait(false);
byte type = buffer[0]; byte type = buffer[0];
if (resolvers.TryGetValue(type, out IResolver resolver)) if (resolvers.TryGetValue(type, out IResolver resolver))
{ {
await resolver.Resolve(socket, buffer.AsMemory(1, length)).ConfigureAwait(false); await resolver.Resolve(socket, buffer.AsMemory(1, length)).ConfigureAwait(false);
} }
else
{
socket.SafeClose();
}
} }
catch (Exception ex) catch (Exception ex)
{ {
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
LoggerHelper.Instance.Error(ex); LoggerHelper.Instance.Error(ex);
socket.SafeClose();
} }
finally finally
{ {

View File

@@ -62,7 +62,7 @@ namespace linker.tunnel
{ {
if (await HasMap(device, Protocol.Tcp, MapInfo.PublicPort).ConfigureAwait(false) == false) if (await HasMap(device, Protocol.Tcp, MapInfo.PublicPort).ConfigureAwait(false) == false)
{ {
Mapping mapping = new Mapping(Protocol.Tcp, MapInfo.PrivatePort, MapInfo.PublicPort, 720, $"linker-tcp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); Mapping mapping = new Mapping(Protocol.Tcp, MapInfo.PrivatePort, MapInfo.PublicPort, 86400, $"linker-tcp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}");
await device.CreatePortMapAsync(mapping).ConfigureAwait(false); await device.CreatePortMapAsync(mapping).ConfigureAwait(false);
Mapping m = await device.GetSpecificMappingAsync(Protocol.Tcp, mapping.PublicPort).ConfigureAwait(false); Mapping m = await device.GetSpecificMappingAsync(Protocol.Tcp, mapping.PublicPort).ConfigureAwait(false);
} }
@@ -75,7 +75,7 @@ namespace linker.tunnel
{ {
if (await HasMap(device, Protocol.Udp, MapInfo.PublicPort).ConfigureAwait(false) == false) if (await HasMap(device, Protocol.Udp, MapInfo.PublicPort).ConfigureAwait(false) == false)
{ {
Mapping mapping = new Mapping(Protocol.Udp, MapInfo.PrivatePort, MapInfo.PublicPort, 720, $"linker-udp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}"); Mapping mapping = new Mapping(Protocol.Udp, MapInfo.PrivatePort, MapInfo.PublicPort, 86400, $"linker-udp-{MapInfo.PublicPort}-{MapInfo.PrivatePort}");
await device.CreatePortMapAsync(mapping).ConfigureAwait(false); await device.CreatePortMapAsync(mapping).ConfigureAwait(false);
Mapping m = await device.GetSpecificMappingAsync(Protocol.Udp, mapping.PublicPort).ConfigureAwait(false); Mapping m = await device.GetSpecificMappingAsync(Protocol.Udp, mapping.PublicPort).ConfigureAwait(false);
} }
@@ -92,7 +92,7 @@ namespace linker.tunnel
try try
{ {
Mapping m = await device.GetSpecificMappingAsync(protocol, publicPort).ConfigureAwait(false); Mapping m = await device.GetSpecificMappingAsync(protocol, publicPort).ConfigureAwait(false);
return true; return (DateTime.Now - m.Expiration).TotalSeconds > 2 * 60;
} }
catch (Exception) catch (Exception)
{ {

View File

@@ -0,0 +1,233 @@
# Details
Date : 2025-11-19 15:40:20
Directory c:\\Users\\snltty\\Desktop\\linker\\src\\linker.web
Total : 218 files, 24592 codes, 40 comments, 1113 blanks, all 25745 lines
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
## Files
| filename | language | code | comment | blank | total |
| :--- | :--- | ---: | ---: | ---: | ---: |
| [README.md](/README.md) | Markdown | 15 | 0 | 5 | 20 |
| [babel.config.js](/babel.config.js) | JavaScript | 5 | 0 | 1 | 6 |
| [jsconfig.json](/jsconfig.json) | JSON with Comments | 19 | 0 | 1 | 20 |
| [package-lock.json](/package-lock.json) | JSON | 9,999 | 0 | 1 | 10,000 |
| [package.json](/package.json) | JSON | 31 | 0 | 1 | 32 |
| [public/404\_default.html](/public/404_default.html) | HTML | 13 | 0 | 1 | 14 |
| [public/action.svg](/public/action.svg) | XML | 1 | 0 | 0 | 1 |
| [public/aliyun.svg](/public/aliyun.svg) | XML | 1 | 0 | 0 | 1 |
| [public/alpine.svg](/public/alpine.svg) | XML | 1 | 0 | 0 | 1 |
| [public/amazon.svg](/public/amazon.svg) | XML | 1 | 0 | 0 | 1 |
| [public/android.svg](/public/android.svg) | XML | 1 | 0 | 0 | 1 |
| [public/archlinux.svg](/public/archlinux.svg) | XML | 1 | 0 | 0 | 1 |
| [public/armbian.svg](/public/armbian.svg) | XML | 1 | 0 | 0 | 1 |
| [public/blist.svg](/public/blist.svg) | XML | 1 | 0 | 0 | 1 |
| [public/centos.svg](/public/centos.svg) | XML | 1 | 0 | 0 | 1 |
| [public/chinamobile.svg](/public/chinamobile.svg) | XML | 1 | 0 | 0 | 1 |
| [public/chinanet.svg](/public/chinanet.svg) | XML | 1 | 0 | 0 | 1 |
| [public/chinaunicom.svg](/public/chinaunicom.svg) | XML | 1 | 0 | 0 | 1 |
| [public/debian.svg](/public/debian.svg) | XML | 1 | 0 | 0 | 1 |
| [public/docker.svg](/public/docker.svg) | XML | 1 | 0 | 0 | 1 |
| [public/fedora.svg](/public/fedora.svg) | XML | 1 | 0 | 0 | 1 |
| [public/firewall.svg](/public/firewall.svg) | XML | 1 | 0 | 0 | 1 |
| [public/google.svg](/public/google.svg) | XML | 1 | 0 | 0 | 1 |
| [public/home.svg](/public/home.svg) | XML | 1 | 0 | 0 | 1 |
| [public/huawei.svg](/public/huawei.svg) | XML | 1 | 0 | 0 | 1 |
| [public/index.html](/public/index.html) | HTML | 23 | 1 | 3 | 27 |
| [public/ios.svg](/public/ios.svg) | XML | 1 | 0 | 0 | 1 |
| [public/iphone.svg](/public/iphone.svg) | XML | 1 | 0 | 0 | 1 |
| [public/jdcom.svg](/public/jdcom.svg) | XML | 1 | 0 | 0 | 1 |
| [public/linux.svg](/public/linux.svg) | XML | 1 | 0 | 0 | 1 |
| [public/logger.svg](/public/logger.svg) | XML | 1 | 0 | 0 | 1 |
| [public/openwrt.svg](/public/openwrt.svg) | XML | 1 | 0 | 0 | 1 |
| [public/oppo.svg](/public/oppo.svg) | XML | 1 | 0 | 0 | 1 |
| [public/refresh.svg](/public/refresh.svg) | XML | 1 | 0 | 0 | 1 |
| [public/rocky.svg](/public/rocky.svg) | XML | 1 | 0 | 0 | 1 |
| [public/samsung.svg](/public/samsung.svg) | XML | 1 | 0 | 0 | 1 |
| [public/server.svg](/public/server.svg) | XML | 1 | 0 | 0 | 1 |
| [public/system.svg](/public/system.svg) | XML | 1 | 0 | 0 | 1 |
| [public/transport.svg](/public/transport.svg) | XML | 1 | 0 | 0 | 1 |
| [public/ubuntu.svg](/public/ubuntu.svg) | XML | 1 | 0 | 0 | 1 |
| [public/vivo.svg](/public/vivo.svg) | XML | 1 | 0 | 0 | 1 |
| [public/wakeup.svg](/public/wakeup.svg) | XML | 1 | 0 | 0 | 1 |
| [public/windows.svg](/public/windows.svg) | XML | 1 | 0 | 0 | 1 |
| [public/wlist-none.svg](/public/wlist-none.svg) | XML | 1 | 0 | 0 | 1 |
| [public/wlist.svg](/public/wlist.svg) | XML | 1 | 0 | 0 | 1 |
| [public/xiaomi.svg](/public/xiaomi.svg) | XML | 1 | 0 | 0 | 1 |
| [src/App.vue](/src/App.vue) | Vue | 43 | 0 | 4 | 47 |
| [src/apis/access.js](/src/apis/access.js) | JavaScript | 13 | 0 | 1 | 14 |
| [src/apis/action.js](/src/apis/action.js) | JavaScript | 7 | 0 | 2 | 9 |
| [src/apis/cdkey.js](/src/apis/cdkey.js) | JavaScript | 25 | 0 | 1 | 26 |
| [src/apis/config.js](/src/apis/config.js) | JavaScript | 22 | 0 | 2 | 24 |
| [src/apis/decenter.js](/src/apis/decenter.js) | JavaScript | 7 | 0 | 3 | 10 |
| [src/apis/firewall.js](/src/apis/firewall.js) | JavaScript | 16 | 0 | 1 | 17 |
| [src/apis/flow.js](/src/apis/flow.js) | JavaScript | 28 | 0 | 1 | 29 |
| [src/apis/forward.js](/src/apis/forward.js) | JavaScript | 16 | 0 | 2 | 18 |
| [src/apis/logger.js](/src/apis/logger.js) | JavaScript | 13 | 0 | 4 | 17 |
| [src/apis/plan.js](/src/apis/plan.js) | JavaScript | 10 | 0 | 2 | 12 |
| [src/apis/relay.js](/src/apis/relay.js) | JavaScript | 28 | 0 | 1 | 29 |
| [src/apis/request.js](/src/apis/request.js) | JavaScript | 158 | 19 | 8 | 185 |
| [src/apis/sforward.js](/src/apis/sforward.js) | JavaScript | 31 | 0 | 5 | 36 |
| [src/apis/signin.js](/src/apis/signin.js) | JavaScript | 37 | 0 | 6 | 43 |
| [src/apis/socks5.js](/src/apis/socks5.js) | JavaScript | 16 | 0 | 1 | 17 |
| [src/apis/sync.js](/src/apis/sync.js) | JavaScript | 7 | 0 | 1 | 8 |
| [src/apis/tunnel.js](/src/apis/tunnel.js) | JavaScript | 34 | 0 | 5 | 39 |
| [src/apis/tuntap.js](/src/apis/tuntap.js) | JavaScript | 40 | 0 | 6 | 46 |
| [src/apis/updater.js](/src/apis/updater.js) | JavaScript | 37 | 0 | 4 | 41 |
| [src/apis/wakeup.js](/src/apis/wakeup.js) | JavaScript | 19 | 0 | 1 | 20 |
| [src/apis/wlist.js](/src/apis/wlist.js) | JavaScript | 19 | 0 | 0 | 19 |
| [src/assets/cell.svg](/src/assets/cell.svg) | XML | 5 | 0 | 0 | 5 |
| [src/assets/coin.svg](/src/assets/coin.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/dianchi.svg](/src/assets/dianchi.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/group.svg](/src/assets/group.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/loading.svg](/src/assets/loading.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/no-permission.svg](/src/assets/no-permission.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/run.svg](/src/assets/run.svg) | XML | 1 | 0 | 0 | 1 |
| [src/assets/style.css](/src/assets/style.css) | PostCSS | 394 | 9 | 109 | 512 |
| [src/lang/en-us.js](/src/lang/en-us.js) | JavaScript | 384 | 0 | 30 | 414 |
| [src/lang/index.js](/src/lang/index.js) | JavaScript | 18 | 0 | 1 | 19 |
| [src/lang/provide.js](/src/lang/provide.js) | JavaScript | 19 | 0 | 0 | 19 |
| [src/lang/zh-cn.js](/src/lang/zh-cn.js) | JavaScript | 470 | 0 | 40 | 510 |
| [src/main.js](/src/main.js) | JavaScript | 78 | 0 | 8 | 86 |
| [src/provide.js](/src/provide.js) | JavaScript | 44 | 3 | 5 | 52 |
| [src/router/index.js](/src/router/index.js) | JavaScript | 63 | 0 | 3 | 66 |
| [src/views/Api.vue](/src/views/Api.vue) | Vue | 134 | 0 | 12 | 146 |
| [src/views/NoPermission.vue](/src/views/NoPermission.vue) | Vue | 41 | 0 | 5 | 46 |
| [src/views/Refresh.vue](/src/views/Refresh.vue) | Vue | 71 | 0 | 8 | 79 |
| [src/views/components/accesss/Access.vue](/src/views/components/accesss/Access.vue) | Vue | 103 | 0 | 5 | 108 |
| [src/views/components/accesss/AccessBoolean.vue](/src/views/components/accesss/AccessBoolean.vue) | Vue | 20 | 0 | 5 | 25 |
| [src/views/components/accesss/AccessEdit.vue](/src/views/components/accesss/AccessEdit.vue) | Vue | 61 | 0 | 3 | 64 |
| [src/views/components/accesss/AccessNum.vue](/src/views/components/accesss/AccessNum.vue) | Vue | 23 | 0 | 5 | 28 |
| [src/views/components/accesss/AccessShow.vue](/src/views/components/accesss/AccessShow.vue) | Vue | 17 | 0 | 4 | 21 |
| [src/views/components/accesss/access.js](/src/views/components/accesss/access.js) | JavaScript | 40 | 0 | 3 | 43 |
| [src/views/components/action/Action.vue](/src/views/components/action/Action.vue) | Vue | 72 | 0 | 1 | 73 |
| [src/views/components/action/Oper.vue](/src/views/components/action/Oper.vue) | Vue | 24 | 0 | 6 | 30 |
| [src/views/components/action/OperDialog.vue](/src/views/components/action/OperDialog.vue) | Vue | 40 | 0 | 0 | 40 |
| [src/views/components/action/action.js](/src/views/components/action/action.js) | JavaScript | 15 | 0 | 1 | 16 |
| [src/views/components/adv/Index.vue](/src/views/components/adv/Index.vue) | Vue | 39 | 0 | 7 | 46 |
| [src/views/components/decenter/decenter.js](/src/views/components/decenter/decenter.js) | JavaScript | 43 | 0 | 3 | 46 |
| [src/views/components/device/Device.vue](/src/views/components/device/Device.vue) | Vue | 56 | 0 | 5 | 61 |
| [src/views/components/device/DeviceEdit.vue](/src/views/components/device/DeviceEdit.vue) | Vue | 66 | 0 | 3 | 69 |
| [src/views/components/device/DeviceName.vue](/src/views/components/device/DeviceName.vue) | Vue | 56 | 0 | 8 | 64 |
| [src/views/components/device/devices.js](/src/views/components/device/devices.js) | JavaScript | 147 | 1 | 7 | 155 |
| [src/views/components/firewall/Add.vue](/src/views/components/firewall/Add.vue) | Vue | 210 | 0 | 11 | 221 |
| [src/views/components/firewall/Firewall.vue](/src/views/components/firewall/Firewall.vue) | Vue | 290 | 0 | 15 | 305 |
| [src/views/components/firewall/Oper.vue](/src/views/components/firewall/Oper.vue) | Vue | 40 | 0 | 6 | 46 |
| [src/views/components/firewall/OperDialog.vue](/src/views/components/firewall/OperDialog.vue) | Vue | 40 | 0 | 2 | 42 |
| [src/views/components/firewall/firewall.js](/src/views/components/firewall/firewall.js) | JavaScript | 15 | 0 | 1 | 16 |
| [src/views/components/flow/Index.vue](/src/views/components/flow/Index.vue) | Vue | 190 | 0 | 16 | 206 |
| [src/views/components/flow/OnlineAllMap.vue](/src/views/components/flow/OnlineAllMap.vue) | Vue | 75 | 0 | 9 | 84 |
| [src/views/components/flow/OnlineMap.vue](/src/views/components/flow/OnlineMap.vue) | Vue | 87 | 0 | 9 | 96 |
| [src/views/components/flow/Oper.vue](/src/views/components/flow/Oper.vue) | Vue | 30 | 0 | 7 | 37 |
| [src/views/components/flow/OperDialog.vue](/src/views/components/flow/OperDialog.vue) | Vue | 31 | 0 | 1 | 32 |
| [src/views/components/flow/ServerFlowForward.vue](/src/views/components/flow/ServerFlowForward.vue) | Vue | 149 | 0 | 11 | 160 |
| [src/views/components/flow/ServerFlowMessenger.vue](/src/views/components/flow/ServerFlowMessenger.vue) | Vue | 111 | 0 | 12 | 123 |
| [src/views/components/flow/ServerFlowRelay.vue](/src/views/components/flow/ServerFlowRelay.vue) | Vue | 141 | 0 | 10 | 151 |
| [src/views/components/flow/ServerFlowSForward.vue](/src/views/components/flow/ServerFlowSForward.vue) | Vue | 141 | 0 | 10 | 151 |
| [src/views/components/flow/ServerFlowSocks5.vue](/src/views/components/flow/ServerFlowSocks5.vue) | Vue | 149 | 0 | 11 | 160 |
| [src/views/components/flow/ServerFlowTunnel.vue](/src/views/components/flow/ServerFlowTunnel.vue) | Vue | 157 | 0 | 11 | 168 |
| [src/views/components/flow/flow.js](/src/views/components/flow/flow.js) | JavaScript | 22 | 0 | 1 | 23 |
| [src/views/components/flow/messenger/Index.vue](/src/views/components/flow/messenger/Index.vue) | Vue | 101 | 0 | 11 | 112 |
| [src/views/components/flow/stopwatch/Index.vue](/src/views/components/flow/stopwatch/Index.vue) | Vue | 42 | 0 | 4 | 46 |
| [src/views/components/flow/stopwatch/Stopwatch.vue](/src/views/components/flow/stopwatch/Stopwatch.vue) | Vue | 56 | 0 | 5 | 61 |
| [src/views/components/forward/Config.vue](/src/views/components/forward/Config.vue) | Vue | 59 | 1 | 4 | 64 |
| [src/views/components/forward/EditNode.vue](/src/views/components/forward/EditNode.vue) | Vue | 123 | 0 | 7 | 130 |
| [src/views/components/forward/Forward.vue](/src/views/components/forward/Forward.vue) | Vue | 86 | 0 | 4 | 90 |
| [src/views/components/forward/ForwardEdit.vue](/src/views/components/forward/ForwardEdit.vue) | Vue | 318 | 0 | 13 | 331 |
| [src/views/components/forward/Nodes.vue](/src/views/components/forward/Nodes.vue) | Vue | 156 | 0 | 4 | 160 |
| [src/views/components/forward/SForwardEdit.vue](/src/views/components/forward/SForwardEdit.vue) | Vue | 319 | 0 | 15 | 334 |
| [src/views/components/forward/forward.js](/src/views/components/forward/forward.js) | JavaScript | 16 | 0 | 1 | 17 |
| [src/views/components/forward/sforward.js](/src/views/components/forward/sforward.js) | JavaScript | 17 | 0 | 3 | 20 |
| [src/views/components/global/PcShow.vue](/src/views/components/global/PcShow.vue) | Vue | 16 | 0 | 5 | 21 |
| [src/views/components/global/PhoneShow.vue](/src/views/components/global/PhoneShow.vue) | Vue | 17 | 0 | 4 | 21 |
| [src/views/components/groups/Groups.vue](/src/views/components/groups/Groups.vue) | Vue | 156 | 3 | 5 | 164 |
| [src/views/components/groups/Index.vue](/src/views/components/groups/Index.vue) | Vue | 85 | 0 | 3 | 88 |
| [src/views/components/oper/Oper.vue](/src/views/components/oper/Oper.vue) | Vue | 147 | 0 | 16 | 163 |
| [src/views/components/oper/oper.js](/src/views/components/oper/oper.js) | JavaScript | 14 | 0 | 1 | 15 |
| [src/views/components/plan/PlanEdit.vue](/src/views/components/plan/PlanEdit.vue) | Vue | 279 | 0 | 9 | 288 |
| [src/views/components/plan/PlanList.vue](/src/views/components/plan/PlanList.vue) | Vue | 66 | 0 | 5 | 71 |
| [src/views/components/plan/PlanShow.vue](/src/views/components/plan/PlanShow.vue) | Vue | 90 | 0 | 7 | 97 |
| [src/views/components/relay/Config.vue](/src/views/components/relay/Config.vue) | Vue | 83 | 0 | 4 | 87 |
| [src/views/components/relay/EditNode.vue](/src/views/components/relay/EditNode.vue) | Vue | 114 | 0 | 4 | 118 |
| [src/views/components/relay/Nodes.vue](/src/views/components/relay/Nodes.vue) | Vue | 222 | 0 | 6 | 228 |
| [src/views/components/socks5/Socks5.vue](/src/views/components/socks5/Socks5.vue) | Vue | 21 | 0 | 1 | 22 |
| [src/views/components/socks5/Socks5Edit.vue](/src/views/components/socks5/Socks5Edit.vue) | Vue | 86 | 0 | 3 | 89 |
| [src/views/components/socks5/Socks5Lan.vue](/src/views/components/socks5/Socks5Lan.vue) | Vue | 146 | 0 | 5 | 151 |
| [src/views/components/socks5/Socks5Show.vue](/src/views/components/socks5/Socks5Show.vue) | Vue | 133 | 0 | 9 | 142 |
| [src/views/components/socks5/socks5.js](/src/views/components/socks5/socks5.js) | JavaScript | 58 | 0 | 5 | 63 |
| [src/views/components/status/Api.vue](/src/views/components/status/Api.vue) | Vue | 53 | 0 | 1 | 54 |
| [src/views/components/status/Export.vue](/src/views/components/status/Export.vue) | Vue | 262 | 1 | 18 | 281 |
| [src/views/components/status/Index.vue](/src/views/components/status/Index.vue) | Vue | 81 | 1 | 4 | 86 |
| [src/views/components/status/server/Flow.vue](/src/views/components/status/server/Flow.vue) | Vue | 43 | 0 | 3 | 46 |
| [src/views/components/status/server/Index.vue](/src/views/components/status/server/Index.vue) | Vue | 39 | 0 | 3 | 42 |
| [src/views/components/status/server/Version.vue](/src/views/components/status/server/Version.vue) | Vue | 154 | 0 | 11 | 165 |
| [src/views/components/sync/Ids.vue](/src/views/components/sync/Ids.vue) | Vue | 54 | 0 | 4 | 58 |
| [src/views/components/sync/Index.vue](/src/views/components/sync/Index.vue) | Vue | 95 | 0 | 3 | 98 |
| [src/views/components/transport/Oper.vue](/src/views/components/transport/Oper.vue) | Vue | 36 | 0 | 4 | 40 |
| [src/views/components/transport/OperDialog.vue](/src/views/components/transport/OperDialog.vue) | Vue | 43 | 0 | 4 | 47 |
| [src/views/components/transport/Transport.vue](/src/views/components/transport/Transport.vue) | Vue | 93 | 0 | 3 | 96 |
| [src/views/components/transport/transport.js](/src/views/components/transport/transport.js) | JavaScript | 15 | 0 | 1 | 16 |
| [src/views/components/tunnel/ConnectionShow.vue](/src/views/components/tunnel/ConnectionShow.vue) | Vue | 74 | 0 | 8 | 82 |
| [src/views/components/tunnel/ConnectionsEdit.vue](/src/views/components/tunnel/ConnectionsEdit.vue) | Vue | 244 | 1 | 16 | 261 |
| [src/views/components/tunnel/Tunnel.vue](/src/views/components/tunnel/Tunnel.vue) | Vue | 127 | 0 | 10 | 137 |
| [src/views/components/tunnel/TunnelEdit.vue](/src/views/components/tunnel/TunnelEdit.vue) | Vue | 124 | 0 | 6 | 130 |
| [src/views/components/tunnel/connections.js](/src/views/components/tunnel/connections.js) | JavaScript | 78 | 0 | 13 | 91 |
| [src/views/components/tunnel/tunnel.js](/src/views/components/tunnel/tunnel.js) | JavaScript | 112 | 0 | 10 | 122 |
| [src/views/components/tuntap/SystemInfo.vue](/src/views/components/tuntap/SystemInfo.vue) | Vue | 26 | 0 | 2 | 28 |
| [src/views/components/tuntap/Tuntap.vue](/src/views/components/tuntap/Tuntap.vue) | Vue | 30 | 0 | 3 | 33 |
| [src/views/components/tuntap/TuntapEdit.vue](/src/views/components/tuntap/TuntapEdit.vue) | Vue | 83 | 0 | 5 | 88 |
| [src/views/components/tuntap/TuntapForward.vue](/src/views/components/tuntap/TuntapForward.vue) | Vue | 191 | 0 | 10 | 201 |
| [src/views/components/tuntap/TuntapIP.vue](/src/views/components/tuntap/TuntapIP.vue) | Vue | 119 | 0 | 7 | 126 |
| [src/views/components/tuntap/TuntapLan.vue](/src/views/components/tuntap/TuntapLan.vue) | Vue | 163 | 0 | 5 | 168 |
| [src/views/components/tuntap/TuntapLease.vue](/src/views/components/tuntap/TuntapLease.vue) | Vue | 133 | 0 | 5 | 138 |
| [src/views/components/tuntap/TuntapRoutes.vue](/src/views/components/tuntap/TuntapRoutes.vue) | Vue | 48 | 0 | 4 | 52 |
| [src/views/components/tuntap/TuntapShow.vue](/src/views/components/tuntap/TuntapShow.vue) | Vue | 175 | 0 | 12 | 187 |
| [src/views/components/tuntap/tuntap.js](/src/views/components/tuntap/tuntap.js) | JavaScript | 76 | 0 | 10 | 86 |
| [src/views/components/updater/Config.vue](/src/views/components/updater/Config.vue) | Vue | 37 | 0 | 2 | 39 |
| [src/views/components/updater/UpdaterBtn.vue](/src/views/components/updater/UpdaterBtn.vue) | Vue | 133 | 0 | 9 | 142 |
| [src/views/components/updater/UpdaterConfirm.vue](/src/views/components/updater/UpdaterConfirm.vue) | Vue | 104 | 0 | 8 | 112 |
| [src/views/components/updater/updater.js](/src/views/components/updater/updater.js) | JavaScript | 53 | 0 | 7 | 60 |
| [src/views/components/wakeup/Add.vue](/src/views/components/wakeup/Add.vue) | Vue | 216 | 0 | 6 | 222 |
| [src/views/components/wakeup/Oper.vue](/src/views/components/wakeup/Oper.vue) | Vue | 40 | 0 | 4 | 44 |
| [src/views/components/wakeup/OperDialog.vue](/src/views/components/wakeup/OperDialog.vue) | Vue | 40 | 0 | 2 | 42 |
| [src/views/components/wakeup/Wakeup.vue](/src/views/components/wakeup/Wakeup.vue) | Vue | 210 | 0 | 9 | 219 |
| [src/views/components/wakeup/wakeup.js](/src/views/components/wakeup/wakeup.js) | JavaScript | 15 | 0 | 1 | 16 |
| [src/views/components/wlist/Add.vue](/src/views/components/wlist/Add.vue) | Vue | 194 | 0 | 14 | 208 |
| [src/views/components/wlist/Device.vue](/src/views/components/wlist/Device.vue) | Vue | 54 | 0 | 8 | 62 |
| [src/views/components/wlist/Index.vue](/src/views/components/wlist/Index.vue) | Vue | 25 | 0 | 4 | 29 |
| [src/views/components/wlist/Manager.vue](/src/views/components/wlist/Manager.vue) | Vue | 152 | 0 | 7 | 159 |
| [src/views/components/wlist/OperDialog.vue](/src/views/components/wlist/OperDialog.vue) | Vue | 119 | 0 | 8 | 127 |
| [src/views/components/wlist/Status.vue](/src/views/components/wlist/Status.vue) | Vue | 49 | 0 | 6 | 55 |
| [src/views/components/wlist/wlist.js](/src/views/components/wlist/wlist.js) | JavaScript | 41 | 0 | 6 | 47 |
| [src/views/layout/full/Index.vue](/src/views/layout/full/Index.vue) | Vue | 63 | 0 | 3 | 66 |
| [src/views/layout/full/action/Index.vue](/src/views/layout/full/action/Index.vue) | Vue | 25 | 0 | 0 | 25 |
| [src/views/layout/full/config/Config.vue](/src/views/layout/full/config/Config.vue) | Vue | 99 | 0 | 5 | 104 |
| [src/views/layout/full/config/Index.vue](/src/views/layout/full/config/Index.vue) | Vue | 24 | 0 | 0 | 24 |
| [src/views/layout/full/firewall/Index.vue](/src/views/layout/full/firewall/Index.vue) | Vue | 34 | 0 | 3 | 37 |
| [src/views/layout/full/head/Background.vue](/src/views/layout/full/head/Background.vue) | Vue | 80 | 0 | 6 | 86 |
| [src/views/layout/full/head/Index.vue](/src/views/layout/full/head/Index.vue) | Vue | 105 | 0 | 15 | 120 |
| [src/views/layout/full/head/Locale.vue](/src/views/layout/full/head/Locale.vue) | Vue | 57 | 0 | 5 | 62 |
| [src/views/layout/full/head/Menu.vue](/src/views/layout/full/head/Menu.vue) | Vue | 108 | 0 | 8 | 116 |
| [src/views/layout/full/head/Theme.vue](/src/views/layout/full/head/Theme.vue) | Vue | 45 | 0 | 5 | 50 |
| [src/views/layout/full/install/Client.vue](/src/views/layout/full/install/Client.vue) | Vue | 170 | 0 | 8 | 178 |
| [src/views/layout/full/install/Common.vue](/src/views/layout/full/install/Common.vue) | Vue | 53 | 0 | 6 | 59 |
| [src/views/layout/full/install/Copy.vue](/src/views/layout/full/install/Copy.vue) | Vue | 38 | 0 | 4 | 42 |
| [src/views/layout/full/install/Index.vue](/src/views/layout/full/install/Index.vue) | Vue | 38 | 0 | 3 | 41 |
| [src/views/layout/full/install/Input.vue](/src/views/layout/full/install/Input.vue) | Vue | 84 | 0 | 3 | 87 |
| [src/views/layout/full/install/Save.vue](/src/views/layout/full/install/Save.vue) | Vue | 57 | 0 | 4 | 61 |
| [src/views/layout/full/install/Server.vue](/src/views/layout/full/install/Server.vue) | Vue | 178 | 0 | 7 | 185 |
| [src/views/layout/full/list/Index.vue](/src/views/layout/full/list/Index.vue) | Vue | 212 | 0 | 30 | 242 |
| [src/views/layout/full/list/Sort.vue](/src/views/layout/full/list/Sort.vue) | Vue | 58 | 0 | 7 | 65 |
| [src/views/layout/full/logger/Index.vue](/src/views/layout/full/logger/Index.vue) | Vue | 184 | 0 | 13 | 197 |
| [src/views/layout/full/logger/Setting.vue](/src/views/layout/full/logger/Setting.vue) | Vue | 127 | 0 | 8 | 135 |
| [src/views/layout/full/transport/Index.vue](/src/views/layout/full/transport/Index.vue) | Vue | 27 | 0 | 0 | 27 |
| [src/views/layout/full/wakeup/Index.vue](/src/views/layout/full/wakeup/Index.vue) | Vue | 34 | 0 | 2 | 36 |
| [src/views/layout/net/Head.vue](/src/views/layout/net/Head.vue) | Vue | 75 | 0 | 7 | 82 |
| [src/views/layout/net/Index.vue](/src/views/layout/net/Index.vue) | Vue | 41 | 0 | 1 | 42 |
| [src/views/layout/net/List.vue](/src/views/layout/net/List.vue) | Vue | 90 | 0 | 6 | 96 |
| [vue.config.js](/vue.config.js) | JavaScript | 10 | 0 | 1 | 11 |
[Summary](results.md) / Details / [Diff Summary](diff.md) / [Diff Details](diff-details.md)

View File

@@ -0,0 +1,15 @@
# Diff Details
Date : 2025-11-19 15:40:20
Directory c:\\Users\\snltty\\Desktop\\linker\\src\\linker.web
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details
## Files
| filename | language | code | comment | blank | total |
| :--- | :--- | ---: | ---: | ---: | ---: |
[Summary](results.md) / [Details](details.md) / [Diff Summary](diff.md) / Diff Details

View File

@@ -0,0 +1,2 @@
"filename", "language", "", "comment", "blank", "total"
"Total", "-", , 0, 0, 0
1 filename language comment blank total
2 Total - 0 0 0

View File

@@ -0,0 +1,19 @@
# Diff Summary
Date : 2025-11-19 15:40:20
Directory c:\\Users\\snltty\\Desktop\\linker\\src\\linker.web
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)
## Languages
| language | files | code | comment | blank | total |
| :--- | ---: | ---: | ---: | ---: | ---: |
## Directories
| path | files | code | comment | blank | total |
| :--- | ---: | ---: | ---: | ---: | ---: |
[Summary](results.md) / [Details](details.md) / Diff Summary / [Diff Details](diff-details.md)

View File

@@ -0,0 +1,22 @@
Date : 2025-11-19 15:40:20
Directory : c:\Users\snltty\Desktop\linker\src\linker.web
Total : 0 files, 0 codes, 0 comments, 0 blanks, all 0 lines
Languages
+----------+------------+------------+------------+------------+------------+
| language | files | code | comment | blank | total |
+----------+------------+------------+------------+------------+------------+
+----------+------------+------------+------------+------------+------------+
Directories
+------+------------+------------+------------+------------+------------+
| path | files | code | comment | blank | total |
+------+------------+------------+------------+------------+------------+
+------+------------+------------+------------+------------+------------+
Files
+----------+----------+------------+------------+------------+------------+
| filename | language | code | comment | blank | total |
+----------+----------+------------+------------+------------+------------+
| Total | | 0 | 0 | 0 | 0 |
+----------+----------+------------+------------+------------+------------+

View File

@@ -0,0 +1,220 @@
"filename", "language", "Markdown", "JavaScript", "XML", "HTML", "Vue", "JSON", "JSON with Comments", "PostCSS", "comment", "blank", "total"
"c:\Users\snltty\Desktop\linker\src\linker.web\README.md", "Markdown", 15, 0, 0, 0, 0, 0, 0, 0, 0, 5, 20
"c:\Users\snltty\Desktop\linker\src\linker.web\babel.config.js", "JavaScript", 0, 5, 0, 0, 0, 0, 0, 0, 0, 1, 6
"c:\Users\snltty\Desktop\linker\src\linker.web\jsconfig.json", "JSON with Comments", 0, 0, 0, 0, 0, 0, 19, 0, 0, 1, 20
"c:\Users\snltty\Desktop\linker\src\linker.web\package-lock.json", "JSON", 0, 0, 0, 0, 0, 9999, 0, 0, 0, 1, 10000
"c:\Users\snltty\Desktop\linker\src\linker.web\package.json", "JSON", 0, 0, 0, 0, 0, 31, 0, 0, 0, 1, 32
"c:\Users\snltty\Desktop\linker\src\linker.web\public\404_default.html", "HTML", 0, 0, 0, 13, 0, 0, 0, 0, 0, 1, 14
"c:\Users\snltty\Desktop\linker\src\linker.web\public\action.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\aliyun.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\alpine.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\amazon.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\android.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\archlinux.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\armbian.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\blist.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\centos.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\chinamobile.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\chinanet.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\chinaunicom.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\debian.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\docker.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\fedora.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\firewall.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\google.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\home.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\huawei.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\index.html", "HTML", 0, 0, 0, 23, 0, 0, 0, 0, 1, 3, 27
"c:\Users\snltty\Desktop\linker\src\linker.web\public\ios.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\iphone.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\jdcom.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\linux.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\logger.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\openwrt.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\oppo.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\refresh.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\rocky.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\samsung.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\server.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\system.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\transport.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\ubuntu.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\vivo.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\wakeup.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\windows.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist-none.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\public\xiaomi.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\App.vue", "Vue", 0, 0, 0, 0, 43, 0, 0, 0, 0, 4, 47
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\access.js", "JavaScript", 0, 13, 0, 0, 0, 0, 0, 0, 0, 1, 14
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\action.js", "JavaScript", 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 9
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\cdkey.js", "JavaScript", 0, 25, 0, 0, 0, 0, 0, 0, 0, 1, 26
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\config.js", "JavaScript", 0, 22, 0, 0, 0, 0, 0, 0, 0, 2, 24
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\decenter.js", "JavaScript", 0, 7, 0, 0, 0, 0, 0, 0, 0, 3, 10
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\firewall.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 17
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\flow.js", "JavaScript", 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 29
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\forward.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 2, 18
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\logger.js", "JavaScript", 0, 13, 0, 0, 0, 0, 0, 0, 0, 4, 17
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\plan.js", "JavaScript", 0, 10, 0, 0, 0, 0, 0, 0, 0, 2, 12
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\relay.js", "JavaScript", 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 29
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\request.js", "JavaScript", 0, 158, 0, 0, 0, 0, 0, 0, 19, 8, 185
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sforward.js", "JavaScript", 0, 31, 0, 0, 0, 0, 0, 0, 0, 5, 36
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\signin.js", "JavaScript", 0, 37, 0, 0, 0, 0, 0, 0, 0, 6, 43
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\socks5.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 17
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sync.js", "JavaScript", 0, 7, 0, 0, 0, 0, 0, 0, 0, 1, 8
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tunnel.js", "JavaScript", 0, 34, 0, 0, 0, 0, 0, 0, 0, 5, 39
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tuntap.js", "JavaScript", 0, 40, 0, 0, 0, 0, 0, 0, 0, 6, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\updater.js", "JavaScript", 0, 37, 0, 0, 0, 0, 0, 0, 0, 4, 41
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wakeup.js", "JavaScript", 0, 19, 0, 0, 0, 0, 0, 0, 0, 1, 20
"c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wlist.js", "JavaScript", 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\cell.svg", "XML", 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 5
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\coin.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\dianchi.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\group.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\loading.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\no-permission.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\run.svg", "XML", 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1
"c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\style.css", "PostCSS", 0, 0, 0, 0, 0, 0, 0, 394, 9, 109, 512
"c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\en-us.js", "JavaScript", 0, 384, 0, 0, 0, 0, 0, 0, 0, 30, 414
"c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\index.js", "JavaScript", 0, 18, 0, 0, 0, 0, 0, 0, 0, 1, 19
"c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\provide.js", "JavaScript", 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 19
"c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\zh-cn.js", "JavaScript", 0, 470, 0, 0, 0, 0, 0, 0, 0, 40, 510
"c:\Users\snltty\Desktop\linker\src\linker.web\src\main.js", "JavaScript", 0, 78, 0, 0, 0, 0, 0, 0, 0, 8, 86
"c:\Users\snltty\Desktop\linker\src\linker.web\src\provide.js", "JavaScript", 0, 44, 0, 0, 0, 0, 0, 0, 3, 5, 52
"c:\Users\snltty\Desktop\linker\src\linker.web\src\router\index.js", "JavaScript", 0, 63, 0, 0, 0, 0, 0, 0, 0, 3, 66
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Api.vue", "Vue", 0, 0, 0, 0, 134, 0, 0, 0, 0, 12, 146
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\NoPermission.vue", "Vue", 0, 0, 0, 0, 41, 0, 0, 0, 0, 5, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Refresh.vue", "Vue", 0, 0, 0, 0, 71, 0, 0, 0, 0, 8, 79
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\Access.vue", "Vue", 0, 0, 0, 0, 103, 0, 0, 0, 0, 5, 108
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessBoolean.vue", "Vue", 0, 0, 0, 0, 20, 0, 0, 0, 0, 5, 25
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessEdit.vue", "Vue", 0, 0, 0, 0, 61, 0, 0, 0, 0, 3, 64
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessNum.vue", "Vue", 0, 0, 0, 0, 23, 0, 0, 0, 0, 5, 28
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessShow.vue", "Vue", 0, 0, 0, 0, 17, 0, 0, 0, 0, 4, 21
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\access.js", "JavaScript", 0, 40, 0, 0, 0, 0, 0, 0, 0, 3, 43
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Action.vue", "Vue", 0, 0, 0, 0, 72, 0, 0, 0, 0, 1, 73
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Oper.vue", "Vue", 0, 0, 0, 0, 24, 0, 0, 0, 0, 6, 30
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\OperDialog.vue", "Vue", 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 40
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\action.js", "JavaScript", 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 16
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\adv\Index.vue", "Vue", 0, 0, 0, 0, 39, 0, 0, 0, 0, 7, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\decenter\decenter.js", "JavaScript", 0, 43, 0, 0, 0, 0, 0, 0, 0, 3, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\Device.vue", "Vue", 0, 0, 0, 0, 56, 0, 0, 0, 0, 5, 61
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceEdit.vue", "Vue", 0, 0, 0, 0, 66, 0, 0, 0, 0, 3, 69
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceName.vue", "Vue", 0, 0, 0, 0, 56, 0, 0, 0, 0, 8, 64
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\devices.js", "JavaScript", 0, 147, 0, 0, 0, 0, 0, 0, 1, 7, 155
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Add.vue", "Vue", 0, 0, 0, 0, 210, 0, 0, 0, 0, 11, 221
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Firewall.vue", "Vue", 0, 0, 0, 0, 290, 0, 0, 0, 0, 15, 305
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Oper.vue", "Vue", 0, 0, 0, 0, 40, 0, 0, 0, 0, 6, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\OperDialog.vue", "Vue", 0, 0, 0, 0, 40, 0, 0, 0, 0, 2, 42
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\firewall.js", "JavaScript", 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 16
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Index.vue", "Vue", 0, 0, 0, 0, 190, 0, 0, 0, 0, 16, 206
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineAllMap.vue", "Vue", 0, 0, 0, 0, 75, 0, 0, 0, 0, 9, 84
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineMap.vue", "Vue", 0, 0, 0, 0, 87, 0, 0, 0, 0, 9, 96
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Oper.vue", "Vue", 0, 0, 0, 0, 30, 0, 0, 0, 0, 7, 37
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OperDialog.vue", "Vue", 0, 0, 0, 0, 31, 0, 0, 0, 0, 1, 32
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowForward.vue", "Vue", 0, 0, 0, 0, 149, 0, 0, 0, 0, 11, 160
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowMessenger.vue", "Vue", 0, 0, 0, 0, 111, 0, 0, 0, 0, 12, 123
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowRelay.vue", "Vue", 0, 0, 0, 0, 141, 0, 0, 0, 0, 10, 151
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSForward.vue", "Vue", 0, 0, 0, 0, 141, 0, 0, 0, 0, 10, 151
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSocks5.vue", "Vue", 0, 0, 0, 0, 149, 0, 0, 0, 0, 11, 160
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowTunnel.vue", "Vue", 0, 0, 0, 0, 157, 0, 0, 0, 0, 11, 168
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\flow.js", "JavaScript", 0, 22, 0, 0, 0, 0, 0, 0, 0, 1, 23
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\messenger\Index.vue", "Vue", 0, 0, 0, 0, 101, 0, 0, 0, 0, 11, 112
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Index.vue", "Vue", 0, 0, 0, 0, 42, 0, 0, 0, 0, 4, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Stopwatch.vue", "Vue", 0, 0, 0, 0, 56, 0, 0, 0, 0, 5, 61
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Config.vue", "Vue", 0, 0, 0, 0, 59, 0, 0, 0, 1, 4, 64
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\EditNode.vue", "Vue", 0, 0, 0, 0, 123, 0, 0, 0, 0, 7, 130
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Forward.vue", "Vue", 0, 0, 0, 0, 86, 0, 0, 0, 0, 4, 90
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\ForwardEdit.vue", "Vue", 0, 0, 0, 0, 318, 0, 0, 0, 0, 13, 331
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Nodes.vue", "Vue", 0, 0, 0, 0, 156, 0, 0, 0, 0, 4, 160
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\SForwardEdit.vue", "Vue", 0, 0, 0, 0, 319, 0, 0, 0, 0, 15, 334
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\forward.js", "JavaScript", 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 17
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\sforward.js", "JavaScript", 0, 17, 0, 0, 0, 0, 0, 0, 0, 3, 20
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PcShow.vue", "Vue", 0, 0, 0, 0, 16, 0, 0, 0, 0, 5, 21
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PhoneShow.vue", "Vue", 0, 0, 0, 0, 17, 0, 0, 0, 0, 4, 21
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Groups.vue", "Vue", 0, 0, 0, 0, 156, 0, 0, 0, 3, 5, 164
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Index.vue", "Vue", 0, 0, 0, 0, 85, 0, 0, 0, 0, 3, 88
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\Oper.vue", "Vue", 0, 0, 0, 0, 147, 0, 0, 0, 0, 16, 163
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\oper.js", "JavaScript", 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 15
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanEdit.vue", "Vue", 0, 0, 0, 0, 279, 0, 0, 0, 0, 9, 288
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanList.vue", "Vue", 0, 0, 0, 0, 66, 0, 0, 0, 0, 5, 71
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanShow.vue", "Vue", 0, 0, 0, 0, 90, 0, 0, 0, 0, 7, 97
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Config.vue", "Vue", 0, 0, 0, 0, 83, 0, 0, 0, 0, 4, 87
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\EditNode.vue", "Vue", 0, 0, 0, 0, 114, 0, 0, 0, 0, 4, 118
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Nodes.vue", "Vue", 0, 0, 0, 0, 222, 0, 0, 0, 0, 6, 228
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5.vue", "Vue", 0, 0, 0, 0, 21, 0, 0, 0, 0, 1, 22
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Edit.vue", "Vue", 0, 0, 0, 0, 86, 0, 0, 0, 0, 3, 89
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Lan.vue", "Vue", 0, 0, 0, 0, 146, 0, 0, 0, 0, 5, 151
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Show.vue", "Vue", 0, 0, 0, 0, 133, 0, 0, 0, 0, 9, 142
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\socks5.js", "JavaScript", 0, 58, 0, 0, 0, 0, 0, 0, 0, 5, 63
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Api.vue", "Vue", 0, 0, 0, 0, 53, 0, 0, 0, 0, 1, 54
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Export.vue", "Vue", 0, 0, 0, 0, 262, 0, 0, 0, 1, 18, 281
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Index.vue", "Vue", 0, 0, 0, 0, 81, 0, 0, 0, 1, 4, 86
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Flow.vue", "Vue", 0, 0, 0, 0, 43, 0, 0, 0, 0, 3, 46
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Index.vue", "Vue", 0, 0, 0, 0, 39, 0, 0, 0, 0, 3, 42
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Version.vue", "Vue", 0, 0, 0, 0, 154, 0, 0, 0, 0, 11, 165
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Ids.vue", "Vue", 0, 0, 0, 0, 54, 0, 0, 0, 0, 4, 58
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Index.vue", "Vue", 0, 0, 0, 0, 95, 0, 0, 0, 0, 3, 98
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Oper.vue", "Vue", 0, 0, 0, 0, 36, 0, 0, 0, 0, 4, 40
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\OperDialog.vue", "Vue", 0, 0, 0, 0, 43, 0, 0, 0, 0, 4, 47
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Transport.vue", "Vue", 0, 0, 0, 0, 93, 0, 0, 0, 0, 3, 96
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\transport.js", "JavaScript", 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 16
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionShow.vue", "Vue", 0, 0, 0, 0, 74, 0, 0, 0, 0, 8, 82
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionsEdit.vue", "Vue", 0, 0, 0, 0, 244, 0, 0, 0, 1, 16, 261
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\Tunnel.vue", "Vue", 0, 0, 0, 0, 127, 0, 0, 0, 0, 10, 137
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\TunnelEdit.vue", "Vue", 0, 0, 0, 0, 124, 0, 0, 0, 0, 6, 130
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\connections.js", "JavaScript", 0, 78, 0, 0, 0, 0, 0, 0, 0, 13, 91
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\tunnel.js", "JavaScript", 0, 112, 0, 0, 0, 0, 0, 0, 0, 10, 122
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\SystemInfo.vue", "Vue", 0, 0, 0, 0, 26, 0, 0, 0, 0, 2, 28
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\Tuntap.vue", "Vue", 0, 0, 0, 0, 30, 0, 0, 0, 0, 3, 33
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapEdit.vue", "Vue", 0, 0, 0, 0, 83, 0, 0, 0, 0, 5, 88
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapForward.vue", "Vue", 0, 0, 0, 0, 191, 0, 0, 0, 0, 10, 201
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapIP.vue", "Vue", 0, 0, 0, 0, 119, 0, 0, 0, 0, 7, 126
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLan.vue", "Vue", 0, 0, 0, 0, 163, 0, 0, 0, 0, 5, 168
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLease.vue", "Vue", 0, 0, 0, 0, 133, 0, 0, 0, 0, 5, 138
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapRoutes.vue", "Vue", 0, 0, 0, 0, 48, 0, 0, 0, 0, 4, 52
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapShow.vue", "Vue", 0, 0, 0, 0, 175, 0, 0, 0, 0, 12, 187
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\tuntap.js", "JavaScript", 0, 76, 0, 0, 0, 0, 0, 0, 0, 10, 86
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\Config.vue", "Vue", 0, 0, 0, 0, 37, 0, 0, 0, 0, 2, 39
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterBtn.vue", "Vue", 0, 0, 0, 0, 133, 0, 0, 0, 0, 9, 142
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterConfirm.vue", "Vue", 0, 0, 0, 0, 104, 0, 0, 0, 0, 8, 112
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\updater.js", "JavaScript", 0, 53, 0, 0, 0, 0, 0, 0, 0, 7, 60
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Add.vue", "Vue", 0, 0, 0, 0, 216, 0, 0, 0, 0, 6, 222
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Oper.vue", "Vue", 0, 0, 0, 0, 40, 0, 0, 0, 0, 4, 44
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\OperDialog.vue", "Vue", 0, 0, 0, 0, 40, 0, 0, 0, 0, 2, 42
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Wakeup.vue", "Vue", 0, 0, 0, 0, 210, 0, 0, 0, 0, 9, 219
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\wakeup.js", "JavaScript", 0, 15, 0, 0, 0, 0, 0, 0, 0, 1, 16
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Add.vue", "Vue", 0, 0, 0, 0, 194, 0, 0, 0, 0, 14, 208
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Device.vue", "Vue", 0, 0, 0, 0, 54, 0, 0, 0, 0, 8, 62
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Index.vue", "Vue", 0, 0, 0, 0, 25, 0, 0, 0, 0, 4, 29
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Manager.vue", "Vue", 0, 0, 0, 0, 152, 0, 0, 0, 0, 7, 159
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\OperDialog.vue", "Vue", 0, 0, 0, 0, 119, 0, 0, 0, 0, 8, 127
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Status.vue", "Vue", 0, 0, 0, 0, 49, 0, 0, 0, 0, 6, 55
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\wlist.js", "JavaScript", 0, 41, 0, 0, 0, 0, 0, 0, 0, 6, 47
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\Index.vue", "Vue", 0, 0, 0, 0, 63, 0, 0, 0, 0, 3, 66
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\action\Index.vue", "Vue", 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 25
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Config.vue", "Vue", 0, 0, 0, 0, 99, 0, 0, 0, 0, 5, 104
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Index.vue", "Vue", 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 24
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\firewall\Index.vue", "Vue", 0, 0, 0, 0, 34, 0, 0, 0, 0, 3, 37
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Background.vue", "Vue", 0, 0, 0, 0, 80, 0, 0, 0, 0, 6, 86
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Index.vue", "Vue", 0, 0, 0, 0, 105, 0, 0, 0, 0, 15, 120
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Locale.vue", "Vue", 0, 0, 0, 0, 57, 0, 0, 0, 0, 5, 62
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Menu.vue", "Vue", 0, 0, 0, 0, 108, 0, 0, 0, 0, 8, 116
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Theme.vue", "Vue", 0, 0, 0, 0, 45, 0, 0, 0, 0, 5, 50
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Client.vue", "Vue", 0, 0, 0, 0, 170, 0, 0, 0, 0, 8, 178
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Common.vue", "Vue", 0, 0, 0, 0, 53, 0, 0, 0, 0, 6, 59
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Copy.vue", "Vue", 0, 0, 0, 0, 38, 0, 0, 0, 0, 4, 42
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Index.vue", "Vue", 0, 0, 0, 0, 38, 0, 0, 0, 0, 3, 41
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Input.vue", "Vue", 0, 0, 0, 0, 84, 0, 0, 0, 0, 3, 87
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Save.vue", "Vue", 0, 0, 0, 0, 57, 0, 0, 0, 0, 4, 61
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Server.vue", "Vue", 0, 0, 0, 0, 178, 0, 0, 0, 0, 7, 185
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Index.vue", "Vue", 0, 0, 0, 0, 212, 0, 0, 0, 0, 30, 242
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Sort.vue", "Vue", 0, 0, 0, 0, 58, 0, 0, 0, 0, 7, 65
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Index.vue", "Vue", 0, 0, 0, 0, 184, 0, 0, 0, 0, 13, 197
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Setting.vue", "Vue", 0, 0, 0, 0, 127, 0, 0, 0, 0, 8, 135
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\transport\Index.vue", "Vue", 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 27
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\wakeup\Index.vue", "Vue", 0, 0, 0, 0, 34, 0, 0, 0, 0, 2, 36
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Head.vue", "Vue", 0, 0, 0, 0, 75, 0, 0, 0, 0, 7, 82
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Index.vue", "Vue", 0, 0, 0, 0, 41, 0, 0, 0, 0, 1, 42
"c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\List.vue", "Vue", 0, 0, 0, 0, 90, 0, 0, 0, 0, 6, 96
"c:\Users\snltty\Desktop\linker\src\linker.web\vue.config.js", "JavaScript", 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 11
"Total", "-", 15, 2451, 50, 36, 11597, 10030, 19, 394, 40, 1113, 25745
1 filename language Markdown JavaScript XML HTML Vue JSON JSON with Comments PostCSS comment blank total
2 c:\Users\snltty\Desktop\linker\src\linker.web\README.md Markdown 15 0 0 0 0 0 0 0 0 5 20
3 c:\Users\snltty\Desktop\linker\src\linker.web\babel.config.js JavaScript 0 5 0 0 0 0 0 0 0 1 6
4 c:\Users\snltty\Desktop\linker\src\linker.web\jsconfig.json JSON with Comments 0 0 0 0 0 0 19 0 0 1 20
5 c:\Users\snltty\Desktop\linker\src\linker.web\package-lock.json JSON 0 0 0 0 0 9999 0 0 0 1 10000
6 c:\Users\snltty\Desktop\linker\src\linker.web\package.json JSON 0 0 0 0 0 31 0 0 0 1 32
7 c:\Users\snltty\Desktop\linker\src\linker.web\public\404_default.html HTML 0 0 0 13 0 0 0 0 0 1 14
8 c:\Users\snltty\Desktop\linker\src\linker.web\public\action.svg XML 0 0 1 0 0 0 0 0 0 0 1
9 c:\Users\snltty\Desktop\linker\src\linker.web\public\aliyun.svg XML 0 0 1 0 0 0 0 0 0 0 1
10 c:\Users\snltty\Desktop\linker\src\linker.web\public\alpine.svg XML 0 0 1 0 0 0 0 0 0 0 1
11 c:\Users\snltty\Desktop\linker\src\linker.web\public\amazon.svg XML 0 0 1 0 0 0 0 0 0 0 1
12 c:\Users\snltty\Desktop\linker\src\linker.web\public\android.svg XML 0 0 1 0 0 0 0 0 0 0 1
13 c:\Users\snltty\Desktop\linker\src\linker.web\public\archlinux.svg XML 0 0 1 0 0 0 0 0 0 0 1
14 c:\Users\snltty\Desktop\linker\src\linker.web\public\armbian.svg XML 0 0 1 0 0 0 0 0 0 0 1
15 c:\Users\snltty\Desktop\linker\src\linker.web\public\blist.svg XML 0 0 1 0 0 0 0 0 0 0 1
16 c:\Users\snltty\Desktop\linker\src\linker.web\public\centos.svg XML 0 0 1 0 0 0 0 0 0 0 1
17 c:\Users\snltty\Desktop\linker\src\linker.web\public\chinamobile.svg XML 0 0 1 0 0 0 0 0 0 0 1
18 c:\Users\snltty\Desktop\linker\src\linker.web\public\chinanet.svg XML 0 0 1 0 0 0 0 0 0 0 1
19 c:\Users\snltty\Desktop\linker\src\linker.web\public\chinaunicom.svg XML 0 0 1 0 0 0 0 0 0 0 1
20 c:\Users\snltty\Desktop\linker\src\linker.web\public\debian.svg XML 0 0 1 0 0 0 0 0 0 0 1
21 c:\Users\snltty\Desktop\linker\src\linker.web\public\docker.svg XML 0 0 1 0 0 0 0 0 0 0 1
22 c:\Users\snltty\Desktop\linker\src\linker.web\public\fedora.svg XML 0 0 1 0 0 0 0 0 0 0 1
23 c:\Users\snltty\Desktop\linker\src\linker.web\public\firewall.svg XML 0 0 1 0 0 0 0 0 0 0 1
24 c:\Users\snltty\Desktop\linker\src\linker.web\public\google.svg XML 0 0 1 0 0 0 0 0 0 0 1
25 c:\Users\snltty\Desktop\linker\src\linker.web\public\home.svg XML 0 0 1 0 0 0 0 0 0 0 1
26 c:\Users\snltty\Desktop\linker\src\linker.web\public\huawei.svg XML 0 0 1 0 0 0 0 0 0 0 1
27 c:\Users\snltty\Desktop\linker\src\linker.web\public\index.html HTML 0 0 0 23 0 0 0 0 1 3 27
28 c:\Users\snltty\Desktop\linker\src\linker.web\public\ios.svg XML 0 0 1 0 0 0 0 0 0 0 1
29 c:\Users\snltty\Desktop\linker\src\linker.web\public\iphone.svg XML 0 0 1 0 0 0 0 0 0 0 1
30 c:\Users\snltty\Desktop\linker\src\linker.web\public\jdcom.svg XML 0 0 1 0 0 0 0 0 0 0 1
31 c:\Users\snltty\Desktop\linker\src\linker.web\public\linux.svg XML 0 0 1 0 0 0 0 0 0 0 1
32 c:\Users\snltty\Desktop\linker\src\linker.web\public\logger.svg XML 0 0 1 0 0 0 0 0 0 0 1
33 c:\Users\snltty\Desktop\linker\src\linker.web\public\openwrt.svg XML 0 0 1 0 0 0 0 0 0 0 1
34 c:\Users\snltty\Desktop\linker\src\linker.web\public\oppo.svg XML 0 0 1 0 0 0 0 0 0 0 1
35 c:\Users\snltty\Desktop\linker\src\linker.web\public\refresh.svg XML 0 0 1 0 0 0 0 0 0 0 1
36 c:\Users\snltty\Desktop\linker\src\linker.web\public\rocky.svg XML 0 0 1 0 0 0 0 0 0 0 1
37 c:\Users\snltty\Desktop\linker\src\linker.web\public\samsung.svg XML 0 0 1 0 0 0 0 0 0 0 1
38 c:\Users\snltty\Desktop\linker\src\linker.web\public\server.svg XML 0 0 1 0 0 0 0 0 0 0 1
39 c:\Users\snltty\Desktop\linker\src\linker.web\public\system.svg XML 0 0 1 0 0 0 0 0 0 0 1
40 c:\Users\snltty\Desktop\linker\src\linker.web\public\transport.svg XML 0 0 1 0 0 0 0 0 0 0 1
41 c:\Users\snltty\Desktop\linker\src\linker.web\public\ubuntu.svg XML 0 0 1 0 0 0 0 0 0 0 1
42 c:\Users\snltty\Desktop\linker\src\linker.web\public\vivo.svg XML 0 0 1 0 0 0 0 0 0 0 1
43 c:\Users\snltty\Desktop\linker\src\linker.web\public\wakeup.svg XML 0 0 1 0 0 0 0 0 0 0 1
44 c:\Users\snltty\Desktop\linker\src\linker.web\public\windows.svg XML 0 0 1 0 0 0 0 0 0 0 1
45 c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist-none.svg XML 0 0 1 0 0 0 0 0 0 0 1
46 c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist.svg XML 0 0 1 0 0 0 0 0 0 0 1
47 c:\Users\snltty\Desktop\linker\src\linker.web\public\xiaomi.svg XML 0 0 1 0 0 0 0 0 0 0 1
48 c:\Users\snltty\Desktop\linker\src\linker.web\src\App.vue Vue 0 0 0 0 43 0 0 0 0 4 47
49 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\access.js JavaScript 0 13 0 0 0 0 0 0 0 1 14
50 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\action.js JavaScript 0 7 0 0 0 0 0 0 0 2 9
51 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\cdkey.js JavaScript 0 25 0 0 0 0 0 0 0 1 26
52 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\config.js JavaScript 0 22 0 0 0 0 0 0 0 2 24
53 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\decenter.js JavaScript 0 7 0 0 0 0 0 0 0 3 10
54 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\firewall.js JavaScript 0 16 0 0 0 0 0 0 0 1 17
55 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\flow.js JavaScript 0 28 0 0 0 0 0 0 0 1 29
56 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\forward.js JavaScript 0 16 0 0 0 0 0 0 0 2 18
57 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\logger.js JavaScript 0 13 0 0 0 0 0 0 0 4 17
58 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\plan.js JavaScript 0 10 0 0 0 0 0 0 0 2 12
59 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\relay.js JavaScript 0 28 0 0 0 0 0 0 0 1 29
60 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\request.js JavaScript 0 158 0 0 0 0 0 0 19 8 185
61 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sforward.js JavaScript 0 31 0 0 0 0 0 0 0 5 36
62 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\signin.js JavaScript 0 37 0 0 0 0 0 0 0 6 43
63 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\socks5.js JavaScript 0 16 0 0 0 0 0 0 0 1 17
64 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sync.js JavaScript 0 7 0 0 0 0 0 0 0 1 8
65 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tunnel.js JavaScript 0 34 0 0 0 0 0 0 0 5 39
66 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tuntap.js JavaScript 0 40 0 0 0 0 0 0 0 6 46
67 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\updater.js JavaScript 0 37 0 0 0 0 0 0 0 4 41
68 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wakeup.js JavaScript 0 19 0 0 0 0 0 0 0 1 20
69 c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wlist.js JavaScript 0 19 0 0 0 0 0 0 0 0 19
70 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\cell.svg XML 0 0 5 0 0 0 0 0 0 0 5
71 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\coin.svg XML 0 0 1 0 0 0 0 0 0 0 1
72 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\dianchi.svg XML 0 0 1 0 0 0 0 0 0 0 1
73 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\group.svg XML 0 0 1 0 0 0 0 0 0 0 1
74 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\loading.svg XML 0 0 1 0 0 0 0 0 0 0 1
75 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\no-permission.svg XML 0 0 1 0 0 0 0 0 0 0 1
76 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\run.svg XML 0 0 1 0 0 0 0 0 0 0 1
77 c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\style.css PostCSS 0 0 0 0 0 0 0 394 9 109 512
78 c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\en-us.js JavaScript 0 384 0 0 0 0 0 0 0 30 414
79 c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\index.js JavaScript 0 18 0 0 0 0 0 0 0 1 19
80 c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\provide.js JavaScript 0 19 0 0 0 0 0 0 0 0 19
81 c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\zh-cn.js JavaScript 0 470 0 0 0 0 0 0 0 40 510
82 c:\Users\snltty\Desktop\linker\src\linker.web\src\main.js JavaScript 0 78 0 0 0 0 0 0 0 8 86
83 c:\Users\snltty\Desktop\linker\src\linker.web\src\provide.js JavaScript 0 44 0 0 0 0 0 0 3 5 52
84 c:\Users\snltty\Desktop\linker\src\linker.web\src\router\index.js JavaScript 0 63 0 0 0 0 0 0 0 3 66
85 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Api.vue Vue 0 0 0 0 134 0 0 0 0 12 146
86 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\NoPermission.vue Vue 0 0 0 0 41 0 0 0 0 5 46
87 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Refresh.vue Vue 0 0 0 0 71 0 0 0 0 8 79
88 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\Access.vue Vue 0 0 0 0 103 0 0 0 0 5 108
89 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessBoolean.vue Vue 0 0 0 0 20 0 0 0 0 5 25
90 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessEdit.vue Vue 0 0 0 0 61 0 0 0 0 3 64
91 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessNum.vue Vue 0 0 0 0 23 0 0 0 0 5 28
92 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessShow.vue Vue 0 0 0 0 17 0 0 0 0 4 21
93 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\access.js JavaScript 0 40 0 0 0 0 0 0 0 3 43
94 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Action.vue Vue 0 0 0 0 72 0 0 0 0 1 73
95 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Oper.vue Vue 0 0 0 0 24 0 0 0 0 6 30
96 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\OperDialog.vue Vue 0 0 0 0 40 0 0 0 0 0 40
97 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\action.js JavaScript 0 15 0 0 0 0 0 0 0 1 16
98 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\adv\Index.vue Vue 0 0 0 0 39 0 0 0 0 7 46
99 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\decenter\decenter.js JavaScript 0 43 0 0 0 0 0 0 0 3 46
100 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\Device.vue Vue 0 0 0 0 56 0 0 0 0 5 61
101 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceEdit.vue Vue 0 0 0 0 66 0 0 0 0 3 69
102 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceName.vue Vue 0 0 0 0 56 0 0 0 0 8 64
103 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\devices.js JavaScript 0 147 0 0 0 0 0 0 1 7 155
104 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Add.vue Vue 0 0 0 0 210 0 0 0 0 11 221
105 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Firewall.vue Vue 0 0 0 0 290 0 0 0 0 15 305
106 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Oper.vue Vue 0 0 0 0 40 0 0 0 0 6 46
107 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\OperDialog.vue Vue 0 0 0 0 40 0 0 0 0 2 42
108 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\firewall.js JavaScript 0 15 0 0 0 0 0 0 0 1 16
109 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Index.vue Vue 0 0 0 0 190 0 0 0 0 16 206
110 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineAllMap.vue Vue 0 0 0 0 75 0 0 0 0 9 84
111 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineMap.vue Vue 0 0 0 0 87 0 0 0 0 9 96
112 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Oper.vue Vue 0 0 0 0 30 0 0 0 0 7 37
113 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OperDialog.vue Vue 0 0 0 0 31 0 0 0 0 1 32
114 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowForward.vue Vue 0 0 0 0 149 0 0 0 0 11 160
115 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowMessenger.vue Vue 0 0 0 0 111 0 0 0 0 12 123
116 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowRelay.vue Vue 0 0 0 0 141 0 0 0 0 10 151
117 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSForward.vue Vue 0 0 0 0 141 0 0 0 0 10 151
118 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSocks5.vue Vue 0 0 0 0 149 0 0 0 0 11 160
119 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowTunnel.vue Vue 0 0 0 0 157 0 0 0 0 11 168
120 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\flow.js JavaScript 0 22 0 0 0 0 0 0 0 1 23
121 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\messenger\Index.vue Vue 0 0 0 0 101 0 0 0 0 11 112
122 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Index.vue Vue 0 0 0 0 42 0 0 0 0 4 46
123 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Stopwatch.vue Vue 0 0 0 0 56 0 0 0 0 5 61
124 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Config.vue Vue 0 0 0 0 59 0 0 0 1 4 64
125 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\EditNode.vue Vue 0 0 0 0 123 0 0 0 0 7 130
126 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Forward.vue Vue 0 0 0 0 86 0 0 0 0 4 90
127 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\ForwardEdit.vue Vue 0 0 0 0 318 0 0 0 0 13 331
128 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Nodes.vue Vue 0 0 0 0 156 0 0 0 0 4 160
129 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\SForwardEdit.vue Vue 0 0 0 0 319 0 0 0 0 15 334
130 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\forward.js JavaScript 0 16 0 0 0 0 0 0 0 1 17
131 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\sforward.js JavaScript 0 17 0 0 0 0 0 0 0 3 20
132 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PcShow.vue Vue 0 0 0 0 16 0 0 0 0 5 21
133 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PhoneShow.vue Vue 0 0 0 0 17 0 0 0 0 4 21
134 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Groups.vue Vue 0 0 0 0 156 0 0 0 3 5 164
135 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Index.vue Vue 0 0 0 0 85 0 0 0 0 3 88
136 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\Oper.vue Vue 0 0 0 0 147 0 0 0 0 16 163
137 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\oper.js JavaScript 0 14 0 0 0 0 0 0 0 1 15
138 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanEdit.vue Vue 0 0 0 0 279 0 0 0 0 9 288
139 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanList.vue Vue 0 0 0 0 66 0 0 0 0 5 71
140 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanShow.vue Vue 0 0 0 0 90 0 0 0 0 7 97
141 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Config.vue Vue 0 0 0 0 83 0 0 0 0 4 87
142 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\EditNode.vue Vue 0 0 0 0 114 0 0 0 0 4 118
143 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Nodes.vue Vue 0 0 0 0 222 0 0 0 0 6 228
144 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5.vue Vue 0 0 0 0 21 0 0 0 0 1 22
145 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Edit.vue Vue 0 0 0 0 86 0 0 0 0 3 89
146 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Lan.vue Vue 0 0 0 0 146 0 0 0 0 5 151
147 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Show.vue Vue 0 0 0 0 133 0 0 0 0 9 142
148 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\socks5.js JavaScript 0 58 0 0 0 0 0 0 0 5 63
149 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Api.vue Vue 0 0 0 0 53 0 0 0 0 1 54
150 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Export.vue Vue 0 0 0 0 262 0 0 0 1 18 281
151 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Index.vue Vue 0 0 0 0 81 0 0 0 1 4 86
152 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Flow.vue Vue 0 0 0 0 43 0 0 0 0 3 46
153 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Index.vue Vue 0 0 0 0 39 0 0 0 0 3 42
154 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Version.vue Vue 0 0 0 0 154 0 0 0 0 11 165
155 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Ids.vue Vue 0 0 0 0 54 0 0 0 0 4 58
156 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Index.vue Vue 0 0 0 0 95 0 0 0 0 3 98
157 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Oper.vue Vue 0 0 0 0 36 0 0 0 0 4 40
158 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\OperDialog.vue Vue 0 0 0 0 43 0 0 0 0 4 47
159 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Transport.vue Vue 0 0 0 0 93 0 0 0 0 3 96
160 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\transport.js JavaScript 0 15 0 0 0 0 0 0 0 1 16
161 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionShow.vue Vue 0 0 0 0 74 0 0 0 0 8 82
162 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionsEdit.vue Vue 0 0 0 0 244 0 0 0 1 16 261
163 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\Tunnel.vue Vue 0 0 0 0 127 0 0 0 0 10 137
164 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\TunnelEdit.vue Vue 0 0 0 0 124 0 0 0 0 6 130
165 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\connections.js JavaScript 0 78 0 0 0 0 0 0 0 13 91
166 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\tunnel.js JavaScript 0 112 0 0 0 0 0 0 0 10 122
167 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\SystemInfo.vue Vue 0 0 0 0 26 0 0 0 0 2 28
168 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\Tuntap.vue Vue 0 0 0 0 30 0 0 0 0 3 33
169 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapEdit.vue Vue 0 0 0 0 83 0 0 0 0 5 88
170 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapForward.vue Vue 0 0 0 0 191 0 0 0 0 10 201
171 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapIP.vue Vue 0 0 0 0 119 0 0 0 0 7 126
172 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLan.vue Vue 0 0 0 0 163 0 0 0 0 5 168
173 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLease.vue Vue 0 0 0 0 133 0 0 0 0 5 138
174 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapRoutes.vue Vue 0 0 0 0 48 0 0 0 0 4 52
175 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapShow.vue Vue 0 0 0 0 175 0 0 0 0 12 187
176 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\tuntap.js JavaScript 0 76 0 0 0 0 0 0 0 10 86
177 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\Config.vue Vue 0 0 0 0 37 0 0 0 0 2 39
178 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterBtn.vue Vue 0 0 0 0 133 0 0 0 0 9 142
179 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterConfirm.vue Vue 0 0 0 0 104 0 0 0 0 8 112
180 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\updater.js JavaScript 0 53 0 0 0 0 0 0 0 7 60
181 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Add.vue Vue 0 0 0 0 216 0 0 0 0 6 222
182 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Oper.vue Vue 0 0 0 0 40 0 0 0 0 4 44
183 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\OperDialog.vue Vue 0 0 0 0 40 0 0 0 0 2 42
184 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Wakeup.vue Vue 0 0 0 0 210 0 0 0 0 9 219
185 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\wakeup.js JavaScript 0 15 0 0 0 0 0 0 0 1 16
186 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Add.vue Vue 0 0 0 0 194 0 0 0 0 14 208
187 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Device.vue Vue 0 0 0 0 54 0 0 0 0 8 62
188 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Index.vue Vue 0 0 0 0 25 0 0 0 0 4 29
189 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Manager.vue Vue 0 0 0 0 152 0 0 0 0 7 159
190 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\OperDialog.vue Vue 0 0 0 0 119 0 0 0 0 8 127
191 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Status.vue Vue 0 0 0 0 49 0 0 0 0 6 55
192 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\wlist.js JavaScript 0 41 0 0 0 0 0 0 0 6 47
193 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\Index.vue Vue 0 0 0 0 63 0 0 0 0 3 66
194 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\action\Index.vue Vue 0 0 0 0 25 0 0 0 0 0 25
195 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Config.vue Vue 0 0 0 0 99 0 0 0 0 5 104
196 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Index.vue Vue 0 0 0 0 24 0 0 0 0 0 24
197 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\firewall\Index.vue Vue 0 0 0 0 34 0 0 0 0 3 37
198 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Background.vue Vue 0 0 0 0 80 0 0 0 0 6 86
199 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Index.vue Vue 0 0 0 0 105 0 0 0 0 15 120
200 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Locale.vue Vue 0 0 0 0 57 0 0 0 0 5 62
201 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Menu.vue Vue 0 0 0 0 108 0 0 0 0 8 116
202 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Theme.vue Vue 0 0 0 0 45 0 0 0 0 5 50
203 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Client.vue Vue 0 0 0 0 170 0 0 0 0 8 178
204 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Common.vue Vue 0 0 0 0 53 0 0 0 0 6 59
205 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Copy.vue Vue 0 0 0 0 38 0 0 0 0 4 42
206 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Index.vue Vue 0 0 0 0 38 0 0 0 0 3 41
207 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Input.vue Vue 0 0 0 0 84 0 0 0 0 3 87
208 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Save.vue Vue 0 0 0 0 57 0 0 0 0 4 61
209 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Server.vue Vue 0 0 0 0 178 0 0 0 0 7 185
210 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Index.vue Vue 0 0 0 0 212 0 0 0 0 30 242
211 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Sort.vue Vue 0 0 0 0 58 0 0 0 0 7 65
212 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Index.vue Vue 0 0 0 0 184 0 0 0 0 13 197
213 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Setting.vue Vue 0 0 0 0 127 0 0 0 0 8 135
214 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\transport\Index.vue Vue 0 0 0 0 27 0 0 0 0 0 27
215 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\wakeup\Index.vue Vue 0 0 0 0 34 0 0 0 0 2 36
216 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Head.vue Vue 0 0 0 0 75 0 0 0 0 7 82
217 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Index.vue Vue 0 0 0 0 41 0 0 0 0 1 42
218 c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\List.vue Vue 0 0 0 0 90 0 0 0 0 6 96
219 c:\Users\snltty\Desktop\linker\src\linker.web\vue.config.js JavaScript 0 10 0 0 0 0 0 0 0 1 11
220 Total - 15 2451 50 36 11597 10030 19 394 40 1113 25745

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,79 @@
# Summary
Date : 2025-11-19 15:40:20
Directory c:\\Users\\snltty\\Desktop\\linker\\src\\linker.web
Total : 218 files, 24592 codes, 40 comments, 1113 blanks, all 25745 lines
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)
## Languages
| language | files | code | comment | blank | total |
| :--- | ---: | ---: | ---: | ---: | ---: |
| Vue | 118 | 11,597 | 7 | 772 | 12,376 |
| JSON | 2 | 10,030 | 0 | 2 | 10,032 |
| JavaScript | 47 | 2,451 | 23 | 220 | 2,694 |
| PostCSS | 1 | 394 | 9 | 109 | 512 |
| XML | 46 | 50 | 0 | 0 | 50 |
| HTML | 2 | 36 | 1 | 4 | 41 |
| JSON with Comments | 1 | 19 | 0 | 1 | 20 |
| Markdown | 1 | 15 | 0 | 5 | 20 |
## Directories
| path | files | code | comment | blank | total |
| :--- | ---: | ---: | ---: | ---: | ---: |
| . | 218 | 24,592 | 40 | 1,113 | 25,745 |
| . (Files) | 6 | 10,079 | 0 | 10 | 10,089 |
| public | 41 | 75 | 1 | 4 | 80 |
| src | 171 | 14,438 | 39 | 1,099 | 15,576 |
| src (Files) | 3 | 165 | 3 | 17 | 185 |
| src\\apis | 21 | 583 | 19 | 57 | 659 |
| src\\assets | 8 | 405 | 9 | 109 | 523 |
| src\\lang | 4 | 891 | 0 | 71 | 962 |
| src\\router | 1 | 63 | 0 | 3 | 66 |
| src\\views | 134 | 12,331 | 8 | 842 | 13,181 |
| src\\views (Files) | 3 | 246 | 0 | 25 | 271 |
| src\\views\\components | 105 | 9,979 | 8 | 658 | 10,645 |
| src\\views\\components\\accesss | 6 | 264 | 0 | 25 | 289 |
| src\\views\\components\\action | 4 | 151 | 0 | 8 | 159 |
| src\\views\\components\\adv | 1 | 39 | 0 | 7 | 46 |
| src\\views\\components\\decenter | 1 | 43 | 0 | 3 | 46 |
| src\\views\\components\\device | 4 | 325 | 1 | 23 | 349 |
| src\\views\\components\\firewall | 5 | 595 | 0 | 35 | 630 |
| src\\views\\components\\flow | 15 | 1,482 | 0 | 128 | 1,610 |
| src\\views\\components\\flow (Files) | 12 | 1,283 | 0 | 108 | 1,391 |
| src\\views\\components\\flow\\messenger | 1 | 101 | 0 | 11 | 112 |
| src\\views\\components\\flow\\stopwatch | 2 | 98 | 0 | 9 | 107 |
| src\\views\\components\\forward | 8 | 1,094 | 1 | 51 | 1,146 |
| src\\views\\components\\global | 2 | 33 | 0 | 9 | 42 |
| src\\views\\components\\groups | 2 | 241 | 3 | 8 | 252 |
| src\\views\\components\\oper | 2 | 161 | 0 | 17 | 178 |
| src\\views\\components\\plan | 3 | 435 | 0 | 21 | 456 |
| src\\views\\components\\relay | 3 | 419 | 0 | 14 | 433 |
| src\\views\\components\\socks5 | 5 | 444 | 0 | 23 | 467 |
| src\\views\\components\\status | 6 | 632 | 2 | 40 | 674 |
| src\\views\\components\\status (Files) | 3 | 396 | 2 | 23 | 421 |
| src\\views\\components\\status\\server | 3 | 236 | 0 | 17 | 253 |
| src\\views\\components\\sync | 2 | 149 | 0 | 7 | 156 |
| src\\views\\components\\transport | 4 | 187 | 0 | 12 | 199 |
| src\\views\\components\\tunnel | 6 | 759 | 1 | 63 | 823 |
| src\\views\\components\\tuntap | 10 | 1,044 | 0 | 63 | 1,107 |
| src\\views\\components\\updater | 4 | 327 | 0 | 26 | 353 |
| src\\views\\components\\wakeup | 5 | 521 | 0 | 22 | 543 |
| src\\views\\components\\wlist | 7 | 634 | 0 | 53 | 687 |
| src\\views\\layout | 26 | 2,106 | 0 | 159 | 2,265 |
| src\\views\\layout\\full | 23 | 1,900 | 0 | 145 | 2,045 |
| src\\views\\layout\\full (Files) | 1 | 63 | 0 | 3 | 66 |
| src\\views\\layout\\full\\action | 1 | 25 | 0 | 0 | 25 |
| src\\views\\layout\\full\\config | 2 | 123 | 0 | 5 | 128 |
| src\\views\\layout\\full\\firewall | 1 | 34 | 0 | 3 | 37 |
| src\\views\\layout\\full\\head | 5 | 395 | 0 | 39 | 434 |
| src\\views\\layout\\full\\install | 7 | 618 | 0 | 35 | 653 |
| src\\views\\layout\\full\\list | 2 | 270 | 0 | 37 | 307 |
| src\\views\\layout\\full\\logger | 2 | 311 | 0 | 21 | 332 |
| src\\views\\layout\\full\\transport | 1 | 27 | 0 | 0 | 27 |
| src\\views\\layout\\full\\wakeup | 1 | 34 | 0 | 2 | 36 |
| src\\views\\layout\\net | 3 | 206 | 0 | 14 | 220 |
Summary / [Details](details.md) / [Diff Summary](diff.md) / [Diff Details](diff-details.md)

View File

@@ -0,0 +1,300 @@
Date : 2025-11-19 15:40:20
Directory : c:\Users\snltty\Desktop\linker\src\linker.web
Total : 218 files, 24592 codes, 40 comments, 1113 blanks, all 25745 lines
Languages
+--------------------+------------+------------+------------+------------+------------+
| language | files | code | comment | blank | total |
+--------------------+------------+------------+------------+------------+------------+
| Vue | 118 | 11,597 | 7 | 772 | 12,376 |
| JSON | 2 | 10,030 | 0 | 2 | 10,032 |
| JavaScript | 47 | 2,451 | 23 | 220 | 2,694 |
| PostCSS | 1 | 394 | 9 | 109 | 512 |
| XML | 46 | 50 | 0 | 0 | 50 |
| HTML | 2 | 36 | 1 | 4 | 41 |
| JSON with Comments | 1 | 19 | 0 | 1 | 20 |
| Markdown | 1 | 15 | 0 | 5 | 20 |
+--------------------+------------+------------+------------+------------+------------+
Directories
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
| path | files | code | comment | blank | total |
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
| . | 218 | 24,592 | 40 | 1,113 | 25,745 |
| . (Files) | 6 | 10,079 | 0 | 10 | 10,089 |
| public | 41 | 75 | 1 | 4 | 80 |
| src | 171 | 14,438 | 39 | 1,099 | 15,576 |
| src (Files) | 3 | 165 | 3 | 17 | 185 |
| src\apis | 21 | 583 | 19 | 57 | 659 |
| src\assets | 8 | 405 | 9 | 109 | 523 |
| src\lang | 4 | 891 | 0 | 71 | 962 |
| src\router | 1 | 63 | 0 | 3 | 66 |
| src\views | 134 | 12,331 | 8 | 842 | 13,181 |
| src\views (Files) | 3 | 246 | 0 | 25 | 271 |
| src\views\components | 105 | 9,979 | 8 | 658 | 10,645 |
| src\views\components\accesss | 6 | 264 | 0 | 25 | 289 |
| src\views\components\action | 4 | 151 | 0 | 8 | 159 |
| src\views\components\adv | 1 | 39 | 0 | 7 | 46 |
| src\views\components\decenter | 1 | 43 | 0 | 3 | 46 |
| src\views\components\device | 4 | 325 | 1 | 23 | 349 |
| src\views\components\firewall | 5 | 595 | 0 | 35 | 630 |
| src\views\components\flow | 15 | 1,482 | 0 | 128 | 1,610 |
| src\views\components\flow (Files) | 12 | 1,283 | 0 | 108 | 1,391 |
| src\views\components\flow\messenger | 1 | 101 | 0 | 11 | 112 |
| src\views\components\flow\stopwatch | 2 | 98 | 0 | 9 | 107 |
| src\views\components\forward | 8 | 1,094 | 1 | 51 | 1,146 |
| src\views\components\global | 2 | 33 | 0 | 9 | 42 |
| src\views\components\groups | 2 | 241 | 3 | 8 | 252 |
| src\views\components\oper | 2 | 161 | 0 | 17 | 178 |
| src\views\components\plan | 3 | 435 | 0 | 21 | 456 |
| src\views\components\relay | 3 | 419 | 0 | 14 | 433 |
| src\views\components\socks5 | 5 | 444 | 0 | 23 | 467 |
| src\views\components\status | 6 | 632 | 2 | 40 | 674 |
| src\views\components\status (Files) | 3 | 396 | 2 | 23 | 421 |
| src\views\components\status\server | 3 | 236 | 0 | 17 | 253 |
| src\views\components\sync | 2 | 149 | 0 | 7 | 156 |
| src\views\components\transport | 4 | 187 | 0 | 12 | 199 |
| src\views\components\tunnel | 6 | 759 | 1 | 63 | 823 |
| src\views\components\tuntap | 10 | 1,044 | 0 | 63 | 1,107 |
| src\views\components\updater | 4 | 327 | 0 | 26 | 353 |
| src\views\components\wakeup | 5 | 521 | 0 | 22 | 543 |
| src\views\components\wlist | 7 | 634 | 0 | 53 | 687 |
| src\views\layout | 26 | 2,106 | 0 | 159 | 2,265 |
| src\views\layout\full | 23 | 1,900 | 0 | 145 | 2,045 |
| src\views\layout\full (Files) | 1 | 63 | 0 | 3 | 66 |
| src\views\layout\full\action | 1 | 25 | 0 | 0 | 25 |
| src\views\layout\full\config | 2 | 123 | 0 | 5 | 128 |
| src\views\layout\full\firewall | 1 | 34 | 0 | 3 | 37 |
| src\views\layout\full\head | 5 | 395 | 0 | 39 | 434 |
| src\views\layout\full\install | 7 | 618 | 0 | 35 | 653 |
| src\views\layout\full\list | 2 | 270 | 0 | 37 | 307 |
| src\views\layout\full\logger | 2 | 311 | 0 | 21 | 332 |
| src\views\layout\full\transport | 1 | 27 | 0 | 0 | 27 |
| src\views\layout\full\wakeup | 1 | 34 | 0 | 2 | 36 |
| src\views\layout\net | 3 | 206 | 0 | 14 | 220 |
+-------------------------------------------------------------------------------------------------+------------+------------+------------+------------+------------+
Files
+-------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
| filename | language | code | comment | blank | total |
+-------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+
| c:\Users\snltty\Desktop\linker\src\linker.web\README.md | Markdown | 15 | 0 | 5 | 20 |
| c:\Users\snltty\Desktop\linker\src\linker.web\babel.config.js | JavaScript | 5 | 0 | 1 | 6 |
| c:\Users\snltty\Desktop\linker\src\linker.web\jsconfig.json | JSON with Comments | 19 | 0 | 1 | 20 |
| c:\Users\snltty\Desktop\linker\src\linker.web\package-lock.json | JSON | 9,999 | 0 | 1 | 10,000 |
| c:\Users\snltty\Desktop\linker\src\linker.web\package.json | JSON | 31 | 0 | 1 | 32 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\404_default.html | HTML | 13 | 0 | 1 | 14 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\action.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\aliyun.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\alpine.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\amazon.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\android.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\archlinux.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\armbian.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\blist.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\centos.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\chinamobile.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\chinanet.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\chinaunicom.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\debian.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\docker.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\fedora.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\firewall.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\google.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\home.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\huawei.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\index.html | HTML | 23 | 1 | 3 | 27 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\ios.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\iphone.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\jdcom.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\linux.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\logger.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\openwrt.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\oppo.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\refresh.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\rocky.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\samsung.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\server.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\system.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\transport.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\ubuntu.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\vivo.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\wakeup.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\windows.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist-none.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\wlist.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\public\xiaomi.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\App.vue | Vue | 43 | 0 | 4 | 47 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\access.js | JavaScript | 13 | 0 | 1 | 14 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\action.js | JavaScript | 7 | 0 | 2 | 9 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\cdkey.js | JavaScript | 25 | 0 | 1 | 26 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\config.js | JavaScript | 22 | 0 | 2 | 24 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\decenter.js | JavaScript | 7 | 0 | 3 | 10 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\firewall.js | JavaScript | 16 | 0 | 1 | 17 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\flow.js | JavaScript | 28 | 0 | 1 | 29 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\forward.js | JavaScript | 16 | 0 | 2 | 18 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\logger.js | JavaScript | 13 | 0 | 4 | 17 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\plan.js | JavaScript | 10 | 0 | 2 | 12 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\relay.js | JavaScript | 28 | 0 | 1 | 29 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\request.js | JavaScript | 158 | 19 | 8 | 185 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sforward.js | JavaScript | 31 | 0 | 5 | 36 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\signin.js | JavaScript | 37 | 0 | 6 | 43 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\socks5.js | JavaScript | 16 | 0 | 1 | 17 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\sync.js | JavaScript | 7 | 0 | 1 | 8 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tunnel.js | JavaScript | 34 | 0 | 5 | 39 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\tuntap.js | JavaScript | 40 | 0 | 6 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\updater.js | JavaScript | 37 | 0 | 4 | 41 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wakeup.js | JavaScript | 19 | 0 | 1 | 20 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\apis\wlist.js | JavaScript | 19 | 0 | 0 | 19 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\cell.svg | XML | 5 | 0 | 0 | 5 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\coin.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\dianchi.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\group.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\loading.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\no-permission.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\run.svg | XML | 1 | 0 | 0 | 1 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\assets\style.css | PostCSS | 394 | 9 | 109 | 512 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\en-us.js | JavaScript | 384 | 0 | 30 | 414 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\index.js | JavaScript | 18 | 0 | 1 | 19 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\provide.js | JavaScript | 19 | 0 | 0 | 19 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\lang\zh-cn.js | JavaScript | 470 | 0 | 40 | 510 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\main.js | JavaScript | 78 | 0 | 8 | 86 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\provide.js | JavaScript | 44 | 3 | 5 | 52 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\router\index.js | JavaScript | 63 | 0 | 3 | 66 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Api.vue | Vue | 134 | 0 | 12 | 146 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\NoPermission.vue | Vue | 41 | 0 | 5 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\Refresh.vue | Vue | 71 | 0 | 8 | 79 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\Access.vue | Vue | 103 | 0 | 5 | 108 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessBoolean.vue | Vue | 20 | 0 | 5 | 25 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessEdit.vue | Vue | 61 | 0 | 3 | 64 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessNum.vue | Vue | 23 | 0 | 5 | 28 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\AccessShow.vue | Vue | 17 | 0 | 4 | 21 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\accesss\access.js | JavaScript | 40 | 0 | 3 | 43 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Action.vue | Vue | 72 | 0 | 1 | 73 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\Oper.vue | Vue | 24 | 0 | 6 | 30 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\OperDialog.vue | Vue | 40 | 0 | 0 | 40 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\action\action.js | JavaScript | 15 | 0 | 1 | 16 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\adv\Index.vue | Vue | 39 | 0 | 7 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\decenter\decenter.js | JavaScript | 43 | 0 | 3 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\Device.vue | Vue | 56 | 0 | 5 | 61 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceEdit.vue | Vue | 66 | 0 | 3 | 69 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\DeviceName.vue | Vue | 56 | 0 | 8 | 64 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\device\devices.js | JavaScript | 147 | 1 | 7 | 155 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Add.vue | Vue | 210 | 0 | 11 | 221 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Firewall.vue | Vue | 290 | 0 | 15 | 305 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\Oper.vue | Vue | 40 | 0 | 6 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\OperDialog.vue | Vue | 40 | 0 | 2 | 42 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\firewall\firewall.js | JavaScript | 15 | 0 | 1 | 16 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Index.vue | Vue | 190 | 0 | 16 | 206 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineAllMap.vue | Vue | 75 | 0 | 9 | 84 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OnlineMap.vue | Vue | 87 | 0 | 9 | 96 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\Oper.vue | Vue | 30 | 0 | 7 | 37 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\OperDialog.vue | Vue | 31 | 0 | 1 | 32 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowForward.vue | Vue | 149 | 0 | 11 | 160 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowMessenger.vue | Vue | 111 | 0 | 12 | 123 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowRelay.vue | Vue | 141 | 0 | 10 | 151 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSForward.vue | Vue | 141 | 0 | 10 | 151 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowSocks5.vue | Vue | 149 | 0 | 11 | 160 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\ServerFlowTunnel.vue | Vue | 157 | 0 | 11 | 168 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\flow.js | JavaScript | 22 | 0 | 1 | 23 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\messenger\Index.vue | Vue | 101 | 0 | 11 | 112 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Index.vue | Vue | 42 | 0 | 4 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\flow\stopwatch\Stopwatch.vue | Vue | 56 | 0 | 5 | 61 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Config.vue | Vue | 59 | 1 | 4 | 64 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\EditNode.vue | Vue | 123 | 0 | 7 | 130 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Forward.vue | Vue | 86 | 0 | 4 | 90 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\ForwardEdit.vue | Vue | 318 | 0 | 13 | 331 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\Nodes.vue | Vue | 156 | 0 | 4 | 160 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\SForwardEdit.vue | Vue | 319 | 0 | 15 | 334 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\forward.js | JavaScript | 16 | 0 | 1 | 17 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\forward\sforward.js | JavaScript | 17 | 0 | 3 | 20 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PcShow.vue | Vue | 16 | 0 | 5 | 21 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\global\PhoneShow.vue | Vue | 17 | 0 | 4 | 21 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Groups.vue | Vue | 156 | 3 | 5 | 164 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\groups\Index.vue | Vue | 85 | 0 | 3 | 88 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\Oper.vue | Vue | 147 | 0 | 16 | 163 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\oper\oper.js | JavaScript | 14 | 0 | 1 | 15 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanEdit.vue | Vue | 279 | 0 | 9 | 288 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanList.vue | Vue | 66 | 0 | 5 | 71 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\plan\PlanShow.vue | Vue | 90 | 0 | 7 | 97 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Config.vue | Vue | 83 | 0 | 4 | 87 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\EditNode.vue | Vue | 114 | 0 | 4 | 118 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\relay\Nodes.vue | Vue | 222 | 0 | 6 | 228 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5.vue | Vue | 21 | 0 | 1 | 22 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Edit.vue | Vue | 86 | 0 | 3 | 89 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Lan.vue | Vue | 146 | 0 | 5 | 151 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\Socks5Show.vue | Vue | 133 | 0 | 9 | 142 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\socks5\socks5.js | JavaScript | 58 | 0 | 5 | 63 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Api.vue | Vue | 53 | 0 | 1 | 54 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Export.vue | Vue | 262 | 1 | 18 | 281 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\Index.vue | Vue | 81 | 1 | 4 | 86 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Flow.vue | Vue | 43 | 0 | 3 | 46 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Index.vue | Vue | 39 | 0 | 3 | 42 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\status\server\Version.vue | Vue | 154 | 0 | 11 | 165 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Ids.vue | Vue | 54 | 0 | 4 | 58 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\sync\Index.vue | Vue | 95 | 0 | 3 | 98 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Oper.vue | Vue | 36 | 0 | 4 | 40 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\OperDialog.vue | Vue | 43 | 0 | 4 | 47 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\Transport.vue | Vue | 93 | 0 | 3 | 96 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\transport\transport.js | JavaScript | 15 | 0 | 1 | 16 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionShow.vue | Vue | 74 | 0 | 8 | 82 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\ConnectionsEdit.vue | Vue | 244 | 1 | 16 | 261 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\Tunnel.vue | Vue | 127 | 0 | 10 | 137 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\TunnelEdit.vue | Vue | 124 | 0 | 6 | 130 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\connections.js | JavaScript | 78 | 0 | 13 | 91 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tunnel\tunnel.js | JavaScript | 112 | 0 | 10 | 122 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\SystemInfo.vue | Vue | 26 | 0 | 2 | 28 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\Tuntap.vue | Vue | 30 | 0 | 3 | 33 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapEdit.vue | Vue | 83 | 0 | 5 | 88 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapForward.vue | Vue | 191 | 0 | 10 | 201 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapIP.vue | Vue | 119 | 0 | 7 | 126 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLan.vue | Vue | 163 | 0 | 5 | 168 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapLease.vue | Vue | 133 | 0 | 5 | 138 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapRoutes.vue | Vue | 48 | 0 | 4 | 52 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\TuntapShow.vue | Vue | 175 | 0 | 12 | 187 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\tuntap\tuntap.js | JavaScript | 76 | 0 | 10 | 86 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\Config.vue | Vue | 37 | 0 | 2 | 39 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterBtn.vue | Vue | 133 | 0 | 9 | 142 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\UpdaterConfirm.vue | Vue | 104 | 0 | 8 | 112 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\updater\updater.js | JavaScript | 53 | 0 | 7 | 60 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Add.vue | Vue | 216 | 0 | 6 | 222 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Oper.vue | Vue | 40 | 0 | 4 | 44 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\OperDialog.vue | Vue | 40 | 0 | 2 | 42 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\Wakeup.vue | Vue | 210 | 0 | 9 | 219 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wakeup\wakeup.js | JavaScript | 15 | 0 | 1 | 16 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Add.vue | Vue | 194 | 0 | 14 | 208 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Device.vue | Vue | 54 | 0 | 8 | 62 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Index.vue | Vue | 25 | 0 | 4 | 29 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Manager.vue | Vue | 152 | 0 | 7 | 159 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\OperDialog.vue | Vue | 119 | 0 | 8 | 127 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\Status.vue | Vue | 49 | 0 | 6 | 55 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\components\wlist\wlist.js | JavaScript | 41 | 0 | 6 | 47 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\Index.vue | Vue | 63 | 0 | 3 | 66 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\action\Index.vue | Vue | 25 | 0 | 0 | 25 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Config.vue | Vue | 99 | 0 | 5 | 104 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\config\Index.vue | Vue | 24 | 0 | 0 | 24 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\firewall\Index.vue | Vue | 34 | 0 | 3 | 37 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Background.vue | Vue | 80 | 0 | 6 | 86 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Index.vue | Vue | 105 | 0 | 15 | 120 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Locale.vue | Vue | 57 | 0 | 5 | 62 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Menu.vue | Vue | 108 | 0 | 8 | 116 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\head\Theme.vue | Vue | 45 | 0 | 5 | 50 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Client.vue | Vue | 170 | 0 | 8 | 178 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Common.vue | Vue | 53 | 0 | 6 | 59 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Copy.vue | Vue | 38 | 0 | 4 | 42 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Index.vue | Vue | 38 | 0 | 3 | 41 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Input.vue | Vue | 84 | 0 | 3 | 87 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Save.vue | Vue | 57 | 0 | 4 | 61 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\install\Server.vue | Vue | 178 | 0 | 7 | 185 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Index.vue | Vue | 212 | 0 | 30 | 242 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\list\Sort.vue | Vue | 58 | 0 | 7 | 65 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Index.vue | Vue | 184 | 0 | 13 | 197 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\logger\Setting.vue | Vue | 127 | 0 | 8 | 135 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\transport\Index.vue | Vue | 27 | 0 | 0 | 27 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\full\wakeup\Index.vue | Vue | 34 | 0 | 2 | 36 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Head.vue | Vue | 75 | 0 | 7 | 82 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\Index.vue | Vue | 41 | 0 | 1 | 42 |
| c:\Users\snltty\Desktop\linker\src\linker.web\src\views\layout\net\List.vue | Vue | 90 | 0 | 6 | 96 |
| c:\Users\snltty\Desktop\linker\src\linker.web\vue.config.js | JavaScript | 10 | 0 | 1 | 11 |
| Total | | 24,592 | 40 | 1,113 | 25,745 |
+-------------------------------------------------------------------------------------------------+--------------------+------------+------------+------------+------------+

View File

@@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1763364230445" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12699" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><path d="M0 512c0 282.4 229.6 512 512 512s512-229.6 512-512S794.4 0 512 0 0 229.6 0 512z" fill="#515151" p-id="12700" data-spm-anchor-id="a313x.search_index.0.i2.53a83a81qrVrBK" class="selected"></path><path d="M85.6 512c0 236 191.2 426.4 426.4 426.4 236 0 426.4-191.2 426.4-426.4 0-236-191.2-426.4-426.4-426.4S85.6 276 85.6 512z" fill="#FFFFFF" p-id="12701"></path><path d="M624.8 469.6v104L720 793.6s28.8 46.4-16.8 60c0 0-30.4 4.8-46.4-24L572 668.8s-18.4-48-34.4-30.4l-60 64.8s-16.8 34.4-16.8 128c0 0 7.2 22.4-37.6 22.4 0 0-30.4 1.6-30.4-20.8V745.6s4.8-99.2 92-197.6v-28.8l-15.2-81.6s-16.8-20.8-28.8-3.2c0 0 3.2 24-48 51.2l-58.4 20.8s-32.8 12-37.6-7.2c0 0-12-25.6 7.2-32.8l52.8-28.8s61.6-40.8 58.4-92c0 0 10.4-58.4 63.2-75.2 0 0 25.6-20.8 58.4-8.8l138.4 63.2s18.4 12 18.4 25.6v136.8s3.2 25.6-15.2 25.6c0 0-30.4-10.4-30.4-18.4l1.6-102.4s-3.2-8.8-25.6-22.4l-22.4-16.8S576 336 580.8 360c-2.4-1.6 44 66.4 44 109.6zM445.6 256c-32.8 0-60-25.6-60-60 0-32.8 25.6-60 60-60s60 25.6 60 60-26.4 60-60 60z" fill="#515151" p-id="12702" data-spm-anchor-id="a313x.search_index.0.i3.53a83a81qrVrBK" class="selected"></path></svg> <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1763625401599" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5643" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000" height="1000"><path d="M0 512c0 282.4 229.6 512 512 512s512-229.6 512-512S794.4 0 512 0 0 229.6 0 512z" fill="#cdcdcd" p-id="5644" data-spm-anchor-id="a313x.search_index.0.i2.74063a81vN1pno" class="selected"></path><path d="M85.6 512c0 236 191.2 426.4 426.4 426.4 236 0 426.4-191.2 426.4-426.4 0-236-191.2-426.4-426.4-426.4S85.6 276 85.6 512z" fill="#FFFFFF" p-id="5645"></path><path d="M624.8 469.6v104L720 793.6s28.8 46.4-16.8 60c0 0-30.4 4.8-46.4-24L572 668.8s-18.4-48-34.4-30.4l-60 64.8s-16.8 34.4-16.8 128c0 0 7.2 22.4-37.6 22.4 0 0-30.4 1.6-30.4-20.8V745.6s4.8-99.2 92-197.6v-28.8l-15.2-81.6s-16.8-20.8-28.8-3.2c0 0 3.2 24-48 51.2l-58.4 20.8s-32.8 12-37.6-7.2c0 0-12-25.6 7.2-32.8l52.8-28.8s61.6-40.8 58.4-92c0 0 10.4-58.4 63.2-75.2 0 0 25.6-20.8 58.4-8.8l138.4 63.2s18.4 12 18.4 25.6v136.8s3.2 25.6-15.2 25.6c0 0-30.4-10.4-30.4-18.4l1.6-102.4s-3.2-8.8-25.6-22.4l-22.4-16.8S576 336 580.8 360c-2.4-1.6 44 66.4 44 109.6zM445.6 256c-32.8 0-60-25.6-60-60 0-32.8 25.6-60 60-60s60 25.6 60 60-26.4 60-60 60z" fill="#cdcdcd" p-id="5646" data-spm-anchor-id="a313x.search_index.0.i3.74063a81vN1pno" class="selected"></path></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -48,16 +48,16 @@
<div> <div>
<template v-for="(item1,index) in item.hook_tuntap.Lans" :key="index"> <template v-for="(item1,index) in item.hook_tuntap.Lans" :key="index">
<template v-if="item.hook_tuntap.Available == false"> <template v-if="item.hook_tuntap.Available == false">
<div class="flex disable" title="IP不生效可能是设备不在线">{{ item1.IP }} / {{ item1.PrefixLength }}</div> <div class="flex disable" title="IP不生效可能是设备不在线">{{ item1.IP }}/{{ item1.PrefixLength }}</div>
</template> </template>
<template v-else-if="item1.Disabled"> <template v-else-if="item1.Disabled">
<div class="flex disable" title="已禁用">{{ item1.IP }} / {{ item1.PrefixLength }}</div> <div class="flex disable" title="已禁用">{{ item1.IP }}/{{ item1.PrefixLength }}</div>
</template> </template>
<template v-else-if="item1.Exists"> <template v-else-if="item1.Exists">
<div class="flex yellow" title="与其它设备填写IP、或本机局域网IP有冲突、或与本机外网IP一致">{{ item1.IP }} / {{ item1.PrefixLength }}</div> <div class="flex yellow" title="与其它设备填写IP、或本机局域网IP有冲突、或与本机外网IP一致">{{ item1.IP }}/{{ item1.PrefixLength }}</div>
</template> </template>
<template v-else> <template v-else>
<div class="flex green" title="正常使用">{{ item1.IP }} / {{ item1.PrefixLength }}</div> <div class="flex green" title="正常使用">{{ item1.IP }}/{{ item1.PrefixLength }}</div>
</template> </template>
</template> </template>
</div> </div>