private void ProxyConnectCallback(IAsyncResult ar) { if (_closed) { return; } try { AsyncSession <ProxyTimer> session = (AsyncSession <ProxyTimer>)ar.AsyncState; ProxyTimer timer = session.State; EndPoint destEndPoint = timer.DestEndPoint; Server server = timer.Server; timer.Elapsed -= ProxyConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); IProxy remote = session.Remote; // Complete the connection. remote.EndConnectProxy(ar); _proxyConnected = true; if (!(remote is DirectConnect)) { Logger.Debug($"Socket connected to proxy {remote.ProxyEndPoint}"); } _startConnectTime = DateTime.Now; ServerTimer connectTimer = new ServerTimer(_serverTimeout) { AutoReset = false }; connectTimer.Elapsed += DestConnectTimer_Elapsed; connectTimer.Enabled = true; connectTimer.Session = session; connectTimer.Server = server; _destConnected = false; NetworkCredential auth = null; if (_config.useAuth) { auth = new NetworkCredential(_config.authUser, _config.authPwd); } // Connect to the remote endpoint. remote.BeginConnectDest(destEndPoint, ConnectCallback, new AsyncSession <ServerTimer>(session, connectTimer), auth); } catch (ArgumentException) { } catch (Exception e) { ErrorClose(e); } }
private void ProxyConnectCallback(IAsyncResult ar) { Server server = null; if (_closed) { return; } try { ProxyTimer timer = (ProxyTimer)ar.AsyncState; var destEndPoint = timer.DestEndPoint; server = timer.Server; timer.Elapsed -= proxyConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); // Complete the connection. remote.EndConnectProxy(ar); _proxyConnected = true; if (_config.isVerboseLogging) { if (!(remote is DirectConnect)) { Logging.Info($"Socket connected to proxy {remote.ProxyEndPoint}"); } } _startConnectTime = DateTime.Now; ServerTimer connectTimer = new ServerTimer(3000); connectTimer.AutoReset = false; connectTimer.Elapsed += destConnectTimer_Elapsed; connectTimer.Enabled = true; connectTimer.Server = server; _destConnected = false; // Connect to the remote endpoint. remote.BeginConnectDest(destEndPoint, new AsyncCallback(ConnectCallback), connectTimer); } catch (ArgumentException) { } catch (Exception e) { Logging.LogUsefulException(e); RetryConnect(); } }