Commit 58ec1bb3 authored by justcoding121's avatar justcoding121

Fix server connection count; fix UpstreamEndPoint

parent 494b0e6f
...@@ -5,34 +5,6 @@ namespace Titanium.Web.Proxy.Extensions ...@@ -5,34 +5,6 @@ namespace Titanium.Web.Proxy.Extensions
{ {
internal static class TcpExtensions internal static class TcpExtensions
{ {
/// <summary>
/// verifies if the underlying socket is connected before using a TcpClient connection
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
internal static bool IsConnected(this Socket client)
{
// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
var tmp = new byte[1];
client.Blocking = false;
client.Send(tmp, 0, 0);
return true;
}
catch (SocketException e)
{
// 10035 == WSAEWOULDBLOCK
return e.SocketErrorCode == SocketError.WouldBlock;
}
finally
{
client.Blocking = blockingState;
}
}
#if NET45 #if NET45
/// <summary> /// <summary>
......
...@@ -58,7 +58,7 @@ namespace Titanium.Web.Proxy.Network.Tcp ...@@ -58,7 +58,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
client = new TcpClient(upStreamEndPoint); client = new TcpClient(upStreamEndPoint);
#else #else
client = new TcpClient(); client = new TcpClient();
client.Client.Bind(server.UpStreamEndPoint); client.Client.Bind(upStreamEndPoint);
#endif #endif
//If this proxy uses another external proxy then create a tunnel request for HTTP/HTTPS connections //If this proxy uses another external proxy then create a tunnel request for HTTP/HTTPS connections
......
...@@ -547,8 +547,8 @@ namespace Titanium.Web.Proxy ...@@ -547,8 +547,8 @@ namespace Titanium.Web.Proxy
} }
#if NET45 #if NET45
//clear any system proxy settings which is pointing to our own endpoint //clear any system proxy settings which is pointing to our own endpoint (causing a cycle)
//due to non gracious proxy shutdown before //due to non gracious proxy shutdown before or something else
if (systemProxySettingsManager != null) if (systemProxySettingsManager != null)
{ {
var proxyInfo = systemProxySettingsManager.GetProxyInfoFromRegistry(); var proxyInfo = systemProxySettingsManager.GetProxyInfoFromRegistry();
...@@ -557,7 +557,9 @@ namespace Titanium.Web.Proxy ...@@ -557,7 +557,9 @@ namespace Titanium.Web.Proxy
var protocolToRemove = ProxyProtocolType.None; var protocolToRemove = ProxyProtocolType.None;
foreach (var proxy in proxyInfo.Proxies.Values) foreach (var proxy in proxyInfo.Proxies.Values)
{ {
if (proxy.HostName == "127.0.0.1" && ProxyEndPoints.Any(x => x.Port == proxy.Port)) if ((proxy.HostName == "127.0.0.1"
|| proxy.HostName.Equals("localhost", StringComparison.OrdinalIgnoreCase))
&& ProxyEndPoints.Any(x => x.Port == proxy.Port))
{ {
protocolToRemove |= proxy.ProtocolType; protocolToRemove |= proxy.ProtocolType;
} }
...@@ -654,6 +656,7 @@ namespace Titanium.Web.Proxy ...@@ -654,6 +656,7 @@ namespace Titanium.Web.Proxy
if (serverConnection != null) if (serverConnection != null)
{ {
serverConnection.Dispose(); serverConnection.Dispose();
serverConnection = null;
UpdateServerConnectionCount(false); UpdateServerConnectionCount(false);
} }
} }
......
...@@ -163,6 +163,8 @@ namespace Titanium.Web.Proxy ...@@ -163,6 +163,8 @@ namespace Titanium.Web.Proxy
{ {
//create new connection //create new connection
using (var connection = await GetServerConnection(connectArgs, true)) using (var connection = await GetServerConnection(connectArgs, true))
{
try
{ {
if (isClientHello) if (isClientHello)
{ {
...@@ -181,8 +183,12 @@ namespace Titanium.Web.Proxy ...@@ -181,8 +183,12 @@ namespace Titanium.Web.Proxy
await TcpHelper.SendRaw(clientStream, connection.Stream, BufferSize, await TcpHelper.SendRaw(clientStream, connection.Stream, BufferSize,
(buffer, offset, count) => { connectArgs.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { connectArgs.OnDataReceived(buffer, offset, count); }); (buffer, offset, count) => { connectArgs.OnDataSent(buffer, offset, count); }, (buffer, offset, count) => { connectArgs.OnDataReceived(buffer, offset, count); });
}
finally
{
UpdateServerConnectionCount(false); UpdateServerConnectionCount(false);
} }
}
return; return;
} }
...@@ -361,8 +367,8 @@ namespace Titanium.Web.Proxy ...@@ -361,8 +367,8 @@ namespace Titanium.Web.Proxy
&& !args.WebSession.UpStreamEndPoint.Equals(connection.UpStreamEndPoint)))) && !args.WebSession.UpStreamEndPoint.Equals(connection.UpStreamEndPoint))))
{ {
connection.Dispose(); connection.Dispose();
UpdateServerConnectionCount(false);
connection = null; connection = null;
UpdateServerConnectionCount(false);
} }
if (connection == null) if (connection == null)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment