diff --git a/src/Fluxzy.Core/Core/ProxyOrchestrator.cs b/src/Fluxzy.Core/Core/ProxyOrchestrator.cs index 6262a83d..c61d6f71 100644 --- a/src/Fluxzy.Core/Core/ProxyOrchestrator.cs +++ b/src/Fluxzy.Core/Core/ProxyOrchestrator.cs @@ -99,17 +99,20 @@ public async ValueTask Operate(TcpClient client, RsBuffer buffer, bool closeImme var endPoint = (IPEndPoint)client.Client.RemoteEndPoint!; var localEndPoint = (IPEndPoint)client.Client.LocalEndPoint!; - exchange.Metrics.DownStreamClientPort = endPoint.Port; - exchange.Metrics.DownStreamClientAddress = endPoint.Address.ToString(); - exchange.Metrics.DownStreamLocalPort = localEndPoint.Port; - exchange.Metrics.DownStreamLocalAddress = localEndPoint.Address.ToString(); - exchange.Context.DownStreamLocalAddressStruct = localEndPoint.Address; - exchange.Context.ProxyListenPort = _proxyRuntimeSetting.ProxyListenPort; - var shouldClose = false; + var downStreamClientAddress = endPoint.Address.ToString(); + var localEndPointsAddress = localEndPoint.Address.ToString(); + do { + exchange.Metrics.DownStreamClientPort = endPoint.Port; + exchange.Metrics.DownStreamClientAddress = downStreamClientAddress; + exchange.Metrics.DownStreamLocalPort = localEndPoint.Port; + exchange.Metrics.DownStreamLocalAddress = localEndPointsAddress; + exchange.Context.DownStreamLocalAddressStruct = localEndPoint.Address; + exchange.Context.ProxyListenPort = _proxyRuntimeSetting.ProxyListenPort; + var processMessage = !exchange.Unprocessed; if (processMessage) diff --git a/test/Fluxzy.Tests/Cases/SelfCallTests.cs b/test/Fluxzy.Tests/Cases/SelfCallTests.cs new file mode 100644 index 00000000..a02c3123 --- /dev/null +++ b/test/Fluxzy.Tests/Cases/SelfCallTests.cs @@ -0,0 +1,28 @@ +// Copyright 2021 - Haga Rakotoharivelo - https://github.com/haga-rak + +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Fluxzy.Tests.Cases +{ + public class SelfCallTests + { + [Fact] + public async Task MakeMultipleSelfCall() + { + var setting = FluxzySetting.CreateLocalRandomPort(); + + await using var proxy = new Proxy(setting); + + var endPoints = proxy.Run(); + using var client = HttpClientUtility.CreateHttpClient(endPoints, setting); + + for (int i = 0; i < 4; i++) { + var response = await client.GetAsync($"http://127.0.0.1:{endPoints.First().Port}/welcome"); + response.EnsureSuccessStatusCode(); + var content = await response.Content.ReadAsStringAsync(); + } + } + } +}