From ac02c68baeca8dc53bf0b0287fde6c30143a4869 Mon Sep 17 00:00:00 2001 From: justcoding121 Date: Sat, 30 Mar 2019 20:58:27 -0400 Subject: [PATCH] Fix fake tunnel failure --- src/Titanium.Web.Proxy/RequestHandler.cs | 15 +++++++++- .../HttpsTests.cs | 29 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/Titanium.Web.Proxy/RequestHandler.cs b/src/Titanium.Web.Proxy/RequestHandler.cs index 79b2cbf11..1800cc2aa 100644 --- a/src/Titanium.Web.Proxy/RequestHandler.cs +++ b/src/Titanium.Web.Proxy/RequestHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Net; +using System.Net.Sockets; #if NETCOREAPP2_1 using System.Net.Security; #endif @@ -188,8 +189,20 @@ await clientStreamWriter.WriteResponseAsync(args.HttpClient.Response, //If prefetch task is available. if (connection == null && prefetchTask != null) { - connection = await prefetchTask; + try + { + connection = await prefetchTask; + } + catch (SocketException e) + { + if(e.SocketErrorCode != SocketError.HostNotFound) + { + throw; + } + } + prefetchTask = null; + } // create a new connection if cache key changes. diff --git a/tests/Titanium.Web.Proxy.IntegrationTests/HttpsTests.cs b/tests/Titanium.Web.Proxy.IntegrationTests/HttpsTests.cs index cb1621bef..56e260268 100644 --- a/tests/Titanium.Web.Proxy.IntegrationTests/HttpsTests.cs +++ b/tests/Titanium.Web.Proxy.IntegrationTests/HttpsTests.cs @@ -33,5 +33,34 @@ public async Task Can_Handle_Https_Request() Assert.AreEqual("I am server. I received your greetings.", body); } + [TestMethod] + public async Task Can_Handle_Https_Fake_Tunnel_Request() + { + var testSuite = new TestSuite(); + + var server = testSuite.GetServer(); + server.HandleRequest((context) => + { + return context.Response.WriteAsync("I am server. I received your greetings."); + }); + + var proxy = testSuite.GetProxy(); + proxy.BeforeRequest += async (sender, e) => + { + e.HttpClient.Request.RequestUri = new Uri(server.ListeningHttpUrl); + await Task.FromResult(0); + }; + + var client = testSuite.GetClient(proxy); + + var response = await client.PostAsync(new Uri($"https://{Guid.NewGuid().ToString()}.com"), + new StringContent("hello server. I am a client.")); + + Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); + var body = await response.Content.ReadAsStringAsync(); + + Assert.AreEqual("I am server. I received your greetings.", body); + } + } }