From 6233584868a1daf1b754d4eb54d3d210dfc065b5 Mon Sep 17 00:00:00 2001 From: "Gui.H" Date: Fri, 1 Jul 2022 18:12:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Kestrel/MiddleWare => }/FastTunelProtocol.cs | 5 +++-- .../{MiddleWare => Features}/FastTunnelFeature.cs | 2 +- .../{MiddleWare => Features}/IFastTunnelFeature.cs | 2 +- .../Kestrel/MiddleWare/ForwarderMiddleware.cs | 11 ++++------- FastTunnel.Core/Forwarder/Stream/DuplexPipeStream.cs | 12 ++++++------ FastTunnel.Core/Forwarder/Stream/SocketDuplexPipe.cs | 2 +- FastTunnel.Core/Handlers/Server/ForwardDispatcher.cs | 2 +- 7 files changed, 17 insertions(+), 19 deletions(-) rename FastTunnel.Core/Forwarder/{Kestrel/MiddleWare => }/FastTunelProtocol.cs (98%) rename FastTunnel.Core/Forwarder/Kestrel/{MiddleWare => Features}/FastTunnelFeature.cs (92%) rename FastTunnel.Core/Forwarder/Kestrel/{MiddleWare => Features}/IFastTunnelFeature.cs (92%) diff --git a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunelProtocol.cs b/FastTunnel.Core/Forwarder/FastTunelProtocol.cs similarity index 98% rename from FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunelProtocol.cs rename to FastTunnel.Core/Forwarder/FastTunelProtocol.cs index e6f505b..6e84cc0 100644 --- a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunelProtocol.cs +++ b/FastTunnel.Core/Forwarder/FastTunelProtocol.cs @@ -12,13 +12,14 @@ using System.Linq; using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; +using FastTunnel.Core.Forwarder.Kestrel.Features; using FastTunnel.Core.Models; using FastTunnel.Core.Protocol; using FastTunnel.Core.Server; using Microsoft.AspNetCore.Connections; using Microsoft.Extensions.FileSystemGlobbing; -namespace FastTunnel.Core.Forwarder.Kestrel.MiddleWare; +namespace FastTunnel.Core.Forwarder; public class FastTunelProtocol { @@ -56,7 +57,7 @@ public class FastTunelProtocol if (position != null) { var readedPosition = readableBuffer.GetPosition(1, position.Value); - if (ProcessLine(tempBuffer.Slice(0, position.Value), out string line)) + if (ProcessLine(tempBuffer.Slice(0, position.Value), out var line)) { if (Method == ProtocolConst.HTTP_METHOD_SWAP) { diff --git a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunnelFeature.cs b/FastTunnel.Core/Forwarder/Kestrel/Features/FastTunnelFeature.cs similarity index 92% rename from FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunnelFeature.cs rename to FastTunnel.Core/Forwarder/Kestrel/Features/FastTunnelFeature.cs index 67f4535..e9f2ddc 100644 --- a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/FastTunnelFeature.cs +++ b/FastTunnel.Core/Forwarder/Kestrel/Features/FastTunnelFeature.cs @@ -11,7 +11,7 @@ using System.Text; using System.Threading.Tasks; using FastTunnel.Core.Models; -namespace FastTunnel.Core.Forwarder.Kestrel.MiddleWare; +namespace FastTunnel.Core.Forwarder.Kestrel.Features; public class FastTunnelFeature : IFastTunnelFeature { diff --git a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/IFastTunnelFeature.cs b/FastTunnel.Core/Forwarder/Kestrel/Features/IFastTunnelFeature.cs similarity index 92% rename from FastTunnel.Core/Forwarder/Kestrel/MiddleWare/IFastTunnelFeature.cs rename to FastTunnel.Core/Forwarder/Kestrel/Features/IFastTunnelFeature.cs index 8e8dbe1..213888b 100644 --- a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/IFastTunnelFeature.cs +++ b/FastTunnel.Core/Forwarder/Kestrel/Features/IFastTunnelFeature.cs @@ -12,7 +12,7 @@ using System.Threading.Tasks; using FastTunnel.Core.Models; using FastTunnel.Core.Protocol; -namespace FastTunnel.Core.Forwarder.Kestrel.MiddleWare; +namespace FastTunnel.Core.Forwarder.Kestrel.Features; internal interface IFastTunnelFeature { diff --git a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/ForwarderMiddleware.cs b/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/ForwarderMiddleware.cs index 5537928..5758318 100644 --- a/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/ForwarderMiddleware.cs +++ b/FastTunnel.Core/Forwarder/Kestrel/MiddleWare/ForwarderMiddleware.cs @@ -14,7 +14,7 @@ using System.Threading.Tasks; using FastTunnel.Core.Exceptions; using FastTunnel.Core.Extensions; using FastTunnel.Core.Forwarder.Kestrel; -using FastTunnel.Core.Forwarder.MiddleWare; +using FastTunnel.Core.Forwarder.Kestrel.Features; using FastTunnel.Core.Models.Massage; using FastTunnel.Core.Protocol; using FastTunnel.Core.Server; @@ -93,7 +93,7 @@ internal class ForwarderMiddleware try { // 发送指令给客户端,等待建立隧道 - await web.Socket.SendCmdAsync(MessageType.SwapMsg, $"{requestId}|{web.WebConfig.LocalIp}:{web.WebConfig.LocalPort}", default); + await web.Socket.SendCmdAsync(MessageType.SwapMsg, $"{requestId}|{web.WebConfig.LocalIp}:{web.WebConfig.LocalPort}", context.ConnectionClosed); } catch (WebSocketException) { @@ -102,9 +102,7 @@ internal class ForwarderMiddleware // 通讯异常,返回客户端离线 throw new ClienOffLineException("客户端离线"); } - - var lifetime = context.Features.Get(); - + res = await tcs.Task; // using var reverseConnection = new DuplexPipeStream(context.Transport.Input, context.Transport.Output, true); @@ -142,12 +140,11 @@ internal class ForwarderMiddleware //using var reverseConnection = new DuplexPipeStream(context.Transport.Input, context.Transport.Output, true); responseStream.TrySetResult(context.Transport); - var lifetime = context.Features.Get(); var closedAwaiter = new TaskCompletionSource(); try { - closedAwaiter.Task.Wait(lifetime.ConnectionClosed); + closedAwaiter.Task.Wait(context.ConnectionClosed); } catch (Exception ex) { diff --git a/FastTunnel.Core/Forwarder/Stream/DuplexPipeStream.cs b/FastTunnel.Core/Forwarder/Stream/DuplexPipeStream.cs index 66acaa5..9a313f3 100644 --- a/FastTunnel.Core/Forwarder/Stream/DuplexPipeStream.cs +++ b/FastTunnel.Core/Forwarder/Stream/DuplexPipeStream.cs @@ -15,9 +15,9 @@ using System.Threading.Tasks; using FastTunnel.Core.Extensions; using FastTunnel.Core.Refs; -namespace FastTunnel.Core.Forwarder.MiddleWare; +namespace FastTunnel.Core.Forwarder.Stream; -internal class DuplexPipeStream : Stream +internal class DuplexPipeStream : System.IO.Stream { private readonly PipeReader _input; private readonly PipeWriter _output; @@ -96,7 +96,7 @@ internal class DuplexPipeStream : Stream WriteAsync(buffer, offset, count).GetAwaiter().GetResult(); } - public override Task WriteAsync(byte[]? buffer, int offset, int count, CancellationToken cancellationToken) + public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) { return _output.WriteAsync(buffer.AsMemory(offset, count), cancellationToken).GetAsTask(); } @@ -143,7 +143,7 @@ internal class DuplexPipeStream : Stream // buffer.Count is int var count = (int)Math.Min(readableBuffer.Length, destination.Length); readableBuffer = readableBuffer.Slice(0, count); - Console.WriteLine($"[{this.GetHashCode()}读取]{Encoding.UTF8.GetString(readableBuffer)}"); + Console.WriteLine($"[{GetHashCode()}读取]{Encoding.UTF8.GetString(readableBuffer)}"); readableBuffer.CopyTo(destination.Span); return count; } @@ -160,7 +160,7 @@ internal class DuplexPipeStream : Stream } } - public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { return TaskToApm.Begin(ReadAsync(buffer, offset, count), callback, state); } @@ -170,7 +170,7 @@ internal class DuplexPipeStream : Stream return TaskToApm.End(asyncResult); } - public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state) + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { return TaskToApm.Begin(WriteAsync(buffer, offset, count), callback, state); } diff --git a/FastTunnel.Core/Forwarder/Stream/SocketDuplexPipe.cs b/FastTunnel.Core/Forwarder/Stream/SocketDuplexPipe.cs index 35ec3f2..af147ae 100644 --- a/FastTunnel.Core/Forwarder/Stream/SocketDuplexPipe.cs +++ b/FastTunnel.Core/Forwarder/Stream/SocketDuplexPipe.cs @@ -12,7 +12,7 @@ using System.Net.Sockets; using System.Text; using System.Threading.Tasks; -namespace FastTunnel.Core.Forwarder.MiddleWare; +namespace FastTunnel.Core.Forwarder.Stream; internal class SocketDuplexPipe : IDuplexPipe, IAsyncDisposable { diff --git a/FastTunnel.Core/Handlers/Server/ForwardDispatcher.cs b/FastTunnel.Core/Handlers/Server/ForwardDispatcher.cs index 0c8dd85..d9f82fc 100644 --- a/FastTunnel.Core/Handlers/Server/ForwardDispatcher.cs +++ b/FastTunnel.Core/Handlers/Server/ForwardDispatcher.cs @@ -13,7 +13,7 @@ using System.Threading; using System.Threading.Tasks; using FastTunnel.Core.Exceptions; using FastTunnel.Core.Extensions; -using FastTunnel.Core.Forwarder.MiddleWare; +using FastTunnel.Core.Forwarder.Stream; using FastTunnel.Core.Models; using FastTunnel.Core.Models.Massage; using FastTunnel.Core.Server;