diff --git a/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs b/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs index 6f1e6446c..04681b95c 100644 --- a/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs +++ b/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs @@ -119,7 +119,7 @@ public void Stop() private async Task onBeforeTunnelConnectRequest(object sender, TunnelConnectSessionEventArgs e) { string hostname = e.HttpClient.Request.RequestUri.Host; - //await writeToConsole("Tunnel to: " + hostname); + await writeToConsole("Tunnel to: " + hostname); if (hostname.Contains("dropbox.com")) { @@ -138,8 +138,8 @@ private Task onBeforeTunnelConnectResponse(object sender, TunnelConnectSessionEv // intecept & cancel redirect or update requests private async Task onRequest(object sender, SessionEventArgs e) { - //await writeToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount); - //await writeToConsole(e.HttpClient.Request.Url); + await writeToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount); + await writeToConsole(e.HttpClient.Request.Url); // store it in the UserData property // It can be a simple integer, Guid, or any type @@ -189,7 +189,7 @@ private async Task multipartRequestPartSent(object sender, MultipartRequestPartS private async Task onResponse(object sender, SessionEventArgs e) { - //await writeToConsole("Active Server Connections:" + ((ProxyServer)sender).ServerConnectionCount); + await writeToConsole("Active Server Connections:" + ((ProxyServer)sender).ServerConnectionCount); string ext = System.IO.Path.GetExtension(e.HttpClient.Request.RequestUri.AbsolutePath); diff --git a/src/Titanium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs b/src/Titanium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs index 39827ed70..faa2ca110 100644 --- a/src/Titanium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs +++ b/src/Titanium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs @@ -105,8 +105,8 @@ private X509Certificate2 makeCertificate(string sSubjectCN, bool isRoot, // KeyLength const int keyLength = 2048; - var graceTime = DateTime.Now.AddDays(graceDays); var now = DateTime.Now; + var graceTime = now.AddDays(graceDays); var certificate = makeCertificate(isRoot, sSubjectCN, fullSubject, keyLength, hashAlgo, graceTime, now.AddDays(validDays), isRoot ? null : signingCert); return certificate; diff --git a/src/Titanium.Web.Proxy/Network/CertificateManager.cs b/src/Titanium.Web.Proxy/Network/CertificateManager.cs index ab4655f31..38e51fa6e 100644 --- a/src/Titanium.Web.Proxy/Network/CertificateManager.cs +++ b/src/Titanium.Web.Proxy/Network/CertificateManager.cs @@ -483,7 +483,7 @@ internal async void ClearIdleCertificates() var cancellationToken = clearCertificatesTokenSource.Token; while (!cancellationToken.IsCancellationRequested) { - var cutOff = DateTime.Now.AddMinutes(-1 * CertificateCacheTimeOutMinutes); + var cutOff = DateTime.Now.AddMinutes(-CertificateCacheTimeOutMinutes); var outdated = cachedCertificates.Where(x => x.Value.LastAccess < cutOff).ToList(); diff --git a/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs b/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs index 2f94734b8..50b5cc4c2 100644 --- a/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs +++ b/src/Titanium.Web.Proxy/Network/Tcp/TcpConnectionFactory.cs @@ -184,13 +184,12 @@ internal async Task GetServerConnection(string remoteHostNa { if (cache.TryGetValue(cacheKey, out var existingConnections)) { + // +3 seconds for potential delay after getting connection + var cutOff = DateTime.Now.AddSeconds(-proxyServer.ConnectionTimeOutSeconds + 3); while (existingConnections.Count > 0) { if (existingConnections.TryDequeue(out var recentConnection)) { - //+3 seconds for potential delay after getting connection - var cutOff = DateTime.Now.AddSeconds(-1 * proxyServer.ConnectionTimeOutSeconds + 3); - if (recentConnection.LastAccess > cutOff && recentConnection.TcpClient.IsGoodConnection()) { @@ -481,7 +480,7 @@ private async Task clearOutdatedConnections() { try { - var cutOff = DateTime.Now.AddSeconds(-1 * Server.ConnectionTimeOutSeconds); + var cutOff = DateTime.Now.AddSeconds(-Server.ConnectionTimeOutSeconds); foreach (var item in cache) { var queue = item.Value; @@ -490,8 +489,7 @@ private async Task clearOutdatedConnections() { if (queue.TryDequeue(out var connection)) { - if (!Server.EnableConnectionPool - || connection.LastAccess < cutOff) + if (!Server.EnableConnectionPool || connection.LastAccess < cutOff) { disposalBag.Add(connection); } @@ -508,8 +506,8 @@ private async Task clearOutdatedConnections() { await @lock.WaitAsync(); - //clear empty queues - var emptyKeys = cache.Where(x => x.Value.Count == 0).Select(x => x.Key).ToList(); + // clear empty queues + var emptyKeys = cache.ToArray().Where(x => x.Value.Count == 0).Select(x => x.Key); foreach (string key in emptyKeys) { cache.TryRemove(key, out _); diff --git a/src/Titanium.Web.Proxy/StreamExtended/Network/CustomBufferedStream.cs b/src/Titanium.Web.Proxy/StreamExtended/Network/CustomBufferedStream.cs index 766a4e0ec..2b6818f26 100644 --- a/src/Titanium.Web.Proxy/StreamExtended/Network/CustomBufferedStream.cs +++ b/src/Titanium.Web.Proxy/StreamExtended/Network/CustomBufferedStream.cs @@ -51,7 +51,7 @@ static CustomBufferedStream() try { var method = typeof(NetworkStream).GetMethod(nameof(Stream.ReadAsync), - new Type[] { typeof(byte[]), typeof(int), typeof(int), typeof(CancellationToken) }); + new[] { typeof(byte[]), typeof(int), typeof(int), typeof(CancellationToken) }); if (method != null && method.DeclaringType != typeof(Stream)) { networkStreamHack = false; @@ -684,8 +684,7 @@ public override int EndRead(IAsyncResult asyncResult) return ((TaskResult)asyncResult).Result; } - - + /// /// Fix the .net bug with SslStream slow WriteAsync /// https://github.com/justcoding121/Titanium-Web-Proxy/issues/495 @@ -709,6 +708,7 @@ public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, As return vAsyncResult; } + public override void EndWrite(IAsyncResult asyncResult) { if (!networkStreamHack)