Let proxy module handle name resolving itself.

Fix wrong output in proxyConnectTimer_Elapsed.

Signed-off-by: noisyfox <timemanager.rick@gmail.com>
This commit is contained in:
noisyfox
2016-08-16 01:11:33 +10:00
parent 21618ef08d
commit a02cd11dc9
4 changed files with 64 additions and 37 deletions
@@ -302,7 +302,8 @@ namespace Shadowsocks.Controller
if (ar.AsyncState != null)
{
connection.EndSend(ar);
Logging.Debug(remote.LocalEndPoint, remote.DestEndPoint, RecvSize, "TCP Relay");
// TODO: need fix
//Logging.Debug(remote.LocalEndPoint, remote.DestEndPoint, RecvSize, "TCP Relay");
connection.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(ReadAll), null);
}
else
@@ -310,7 +311,8 @@ namespace Shadowsocks.Controller
int bytesRead = connection.EndReceive(ar);
if (bytesRead > 0)
{
Logging.Debug(remote.LocalEndPoint, remote.DestEndPoint, RecvSize, "TCP Relay");
// TODO: need fix
//Logging.Debug(remote.LocalEndPoint, remote.DestEndPoint, RecvSize, "TCP Relay");
connection.BeginReceive(_connetionRecvBuffer, 0, RecvSize, SocketFlags.None, new AsyncCallback(ReadAll), null);
}
else
@@ -341,7 +343,9 @@ namespace Shadowsocks.Controller
// inner class
private class ProxyTimer : Timer
{
public EndPoint DestEndPoint;
public IProxy Proxy;
public string DestHost;
public int DestPort;
public Server Server;
public ProxyTimer(int p) : base(p)
@@ -361,23 +365,15 @@ namespace Shadowsocks.Controller
{
CreateRemote();
// TODO async resolving
IPAddress ipAddress;
bool parsed = IPAddress.TryParse(server.server, out ipAddress);
if (!parsed)
{
IPHostEntry ipHostInfo = Dns.GetHostEntry(server.server);
ipAddress = ipHostInfo.AddressList[0];
}
IPEndPoint destEP = new IPEndPoint(ipAddress, server.server_port);
// Setting up proxy
IPEndPoint proxyEP;
if (_config.useProxy)
{
parsed = IPAddress.TryParse(_config.proxyServer, out ipAddress);
IPAddress ipAddress;
bool parsed = IPAddress.TryParse(_config.proxyServer, out ipAddress);
if (!parsed)
{
// TODO really necessary to resolve a proxy's address? Maybe from local hosts?
IPHostEntry ipHostInfo = Dns.GetHostEntry(_config.proxyServer);
ipAddress = ipHostInfo.AddressList[0];
}
@@ -388,7 +384,7 @@ namespace Shadowsocks.Controller
else
{
remote = new DirectConnect();
proxyEP = destEP;
proxyEP = null;
}
@@ -396,7 +392,10 @@ namespace Shadowsocks.Controller
proxyTimer.AutoReset = false;
proxyTimer.Elapsed += proxyConnectTimer_Elapsed;
proxyTimer.Enabled = true;
proxyTimer.DestEndPoint = destEP;
proxyTimer.Proxy = remote;
proxyTimer.DestHost = server.server;
proxyTimer.DestPort = server.server_port;
proxyTimer.Server = server;
_proxyConnected = false;
@@ -417,9 +416,9 @@ namespace Shadowsocks.Controller
{
return;
}
var ep = ((ProxyTimer)sender).DestEndPoint;
var proxy = ((ProxyTimer)sender).Proxy;
Logging.Info($"Proxy {ep} timed out");
Logging.Info($"Proxy {proxy.ProxyEndPoint} timed out");
remote?.Close();
RetryConnect();
}
@@ -434,7 +433,8 @@ namespace Shadowsocks.Controller
try
{
ProxyTimer timer = (ProxyTimer)ar.AsyncState;
var destEP = timer.DestEndPoint;
var destHost = timer.DestHost;
var destPort = timer.DestPort;
server = timer.Server;
timer.Elapsed -= proxyConnectTimer_Elapsed;
timer.Enabled = false;
@@ -462,7 +462,7 @@ namespace Shadowsocks.Controller
_destConnected = false;
// Connect to the remote endpoint.
remote.BeginConnectDest(destEP, new AsyncCallback(ConnectCallback), connectTimer);
remote.BeginConnectDest(destHost, destPort, new AsyncCallback(ConnectCallback), connectTimer);
}
catch (ArgumentException)
{