private static HTTPConnection FindOrCreateFreeConnection(HTTPRequest request) { HTTPConnection hTTPConnection = null; string keyForRequest = HTTPManager.GetKeyForRequest(request); List <HTTPConnection> list; if (HTTPManager.Connections.TryGetValue(keyForRequest, out list)) { int num = 0; for (int i = 0; i < list.Count; i++) { if (list[i].State < HTTPConnectionStates.Free) { num++; } } if (num <= (int)HTTPManager.MaxConnectionPerServer) { int num2 = 0; while (num2 < list.Count && hTTPConnection == null) { HTTPConnection hTTPConnection2 = list[num2]; if (hTTPConnection2 != null && hTTPConnection2.IsFree && (!hTTPConnection2.HasProxy || hTTPConnection2.LastProcessedUri == null || hTTPConnection2.LastProcessedUri.Host.Equals(request.CurrentUri.Host, StringComparison.OrdinalIgnoreCase))) { hTTPConnection = hTTPConnection2; } num2++; } } } else { HTTPManager.Connections.Add(keyForRequest, list = new List <HTTPConnection>((int)HTTPManager.MaxConnectionPerServer)); } if (hTTPConnection == null) { if (list.Count >= (int)HTTPManager.MaxConnectionPerServer) { return(null); } list.Add(hTTPConnection = new HTTPConnection(keyForRequest)); } return(hTTPConnection); }