mirror of
https://github.com/FastTunnel/FastTunnel.git
synced 2025-02-08 02:39:29 +08:00
[fix] 空指针错误
This commit is contained in:
parent
05260cb5e8
commit
49b1a9b59e
|
@ -15,7 +15,7 @@ namespace FastTunnel.Core.Extensions
|
|||
ct.Token.Register(() =>
|
||||
{
|
||||
tcs.TrySetCanceled();
|
||||
action.Invoke();
|
||||
action?.Invoke();
|
||||
}, useSynchronizationContext: false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,13 +38,20 @@ namespace FastTunnel.Core.MiddleWares
|
|||
|
||||
public async Task Handle(HttpContext context, Func<Task> next)
|
||||
{
|
||||
if (!context.WebSockets.IsWebSocketRequest || !context.Request.Headers.TryGetValue(FastTunnelConst.FASTTUNNEL_VERSION, out var version))
|
||||
try
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
};
|
||||
if (!context.WebSockets.IsWebSocketRequest || !context.Request.Headers.TryGetValue(FastTunnelConst.FASTTUNNEL_VERSION, out var version))
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
};
|
||||
|
||||
await handleClient(context, next, version);
|
||||
await handleClient(context, next, version);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task handleClient(HttpContext context, Func<Task> next, string clientVersion)
|
||||
|
|
|
@ -25,43 +25,50 @@ namespace FastTunnel.Core.Forwarder.MiddleWare
|
|||
|
||||
public async Task Handle(HttpContext context, Func<Task> next)
|
||||
{
|
||||
if (context.Request.Method != "PROXY")
|
||||
try
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
if (context.Request.Method != "PROXY")
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
var requestId = context.Request.Path.Value.Trim('/');
|
||||
logger.LogDebug($"[PROXY]:Start {requestId}");
|
||||
|
||||
if (!fastTunnelServer.ResponseTasks.TryRemove(requestId, out var responseAwaiter))
|
||||
{
|
||||
logger.LogError($"[PROXY]:RequestId不存在 {requestId}");
|
||||
return;
|
||||
};
|
||||
|
||||
var lifetime = context.Features.Get<IConnectionLifetimeFeature>();
|
||||
var transport = context.Features.Get<IConnectionTransportFeature>();
|
||||
|
||||
if (lifetime == null || transport == null)
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
}
|
||||
|
||||
using var reverseConnection = new WebSocketStream(lifetime, transport);
|
||||
responseAwaiter.TrySetResult(reverseConnection);
|
||||
|
||||
var closedAwaiter = new TaskCompletionSource<object>();
|
||||
closedAwaiter.SetTimeOut(1000 * 60 * 30, null);
|
||||
|
||||
lifetime.ConnectionClosed.Register((task) =>
|
||||
{
|
||||
(task as TaskCompletionSource<object>).SetResult(null);
|
||||
}, closedAwaiter);
|
||||
|
||||
await closedAwaiter.Task;
|
||||
logger.LogError($"[PROXY]:Closed {requestId}");
|
||||
}
|
||||
|
||||
var requestId = context.Request.Path.Value.Trim('/');
|
||||
logger.LogDebug($"[PROXY]:Start {requestId}");
|
||||
|
||||
if (!fastTunnelServer.ResponseTasks.TryRemove(requestId, out var responseAwaiter))
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError($"[PROXY]:RequestId不存在 {requestId}");
|
||||
return;
|
||||
};
|
||||
|
||||
var lifetime = context.Features.Get<IConnectionLifetimeFeature>();
|
||||
var transport = context.Features.Get<IConnectionTransportFeature>();
|
||||
|
||||
if (lifetime == null || transport == null)
|
||||
{
|
||||
await next();
|
||||
return;
|
||||
logger.LogError(ex);
|
||||
}
|
||||
|
||||
using var reverseConnection = new WebSocketStream(lifetime, transport);
|
||||
responseAwaiter.TrySetResult(reverseConnection);
|
||||
|
||||
var closedAwaiter = new TaskCompletionSource<object>();
|
||||
closedAwaiter.SetTimeOut(1000 * 60 * 30, null);
|
||||
|
||||
lifetime.ConnectionClosed.Register((task) =>
|
||||
{
|
||||
(task as TaskCompletionSource<object>).SetResult(null);
|
||||
}, closedAwaiter);
|
||||
|
||||
await closedAwaiter.Task;
|
||||
logger.LogError($"[PROXY]:Closed {requestId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user