Beispiel #1
0
        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);
        }