From ba428196aa2be2c45fb68bdc9cb82cfe5eb238ee Mon Sep 17 00:00:00 2001 From: Honfika Date: Fri, 30 Aug 2019 13:16:41 +0200 Subject: [PATCH] Fix for #593 and #596 --- .../Extensions/UriExtensions.cs | 16 ++++++++++++++++ src/Titanium.Web.Proxy/Http/HttpWebClient.cs | 3 +-- .../Network/Tcp/TcpConnectionFactory.cs | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/Titanium.Web.Proxy/Extensions/UriExtensions.cs diff --git a/src/Titanium.Web.Proxy/Extensions/UriExtensions.cs b/src/Titanium.Web.Proxy/Extensions/UriExtensions.cs new file mode 100644 index 000000000..5003c622f --- /dev/null +++ b/src/Titanium.Web.Proxy/Extensions/UriExtensions.cs @@ -0,0 +1,16 @@ +using System; + +namespace Titanium.Web.Proxy.Extensions +{ + internal static class UriExtensions + { + internal static string GetOriginalPathAndQuery(this Uri uri) + { + string leftPart = uri.GetLeftPart(UriPartial.Authority); + if (uri.OriginalString.StartsWith(leftPart)) + return uri.OriginalString.Substring(leftPart.Length); + + return uri.IsWellFormedOriginalString() ? uri.PathAndQuery : uri.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped); + } + } +} diff --git a/src/Titanium.Web.Proxy/Http/HttpWebClient.cs b/src/Titanium.Web.Proxy/Http/HttpWebClient.cs index 1fba12e5c..92b18d858 100644 --- a/src/Titanium.Web.Proxy/Http/HttpWebClient.cs +++ b/src/Titanium.Web.Proxy/Http/HttpWebClient.cs @@ -104,8 +104,7 @@ internal async Task SendRequest(bool enable100ContinueBehaviour, bool isTranspar } else { - var uri = Request.RequestUri; - url = uri.IsWellFormedOriginalString() ? uri.PathAndQuery : uri.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped); + url = Request.RequestUri.GetOriginalPathAndQuery(); } // prepare the request & headers diff --git a/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs b/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs index 258513b0c..1548164c2 100644 --- a/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs +++ b/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs @@ -327,6 +327,9 @@ private async Task createServerConnection(string remoteHost { throw new Exception($"Could not establish connection to {hostname}", e); } + + // dispose the current TcpClient and try the next address + tcpClient?.Dispose(); } }