예제 #1
0
 public override void Initialise(BitField bitfield, TorrentFile[] files, IEnumerable <Piece> requests)
 {
     Requests.Clear();
     foreach (var p in requests)
     {
         Requests.Add(p);
     }
 }
예제 #2
0
        private void HandleRequest(PeerId id, RequestMessage m)
        {
            Request r = new Request();

            r.PieceIndex    = m.PieceIndex;
            r.RequestedOff  = id;
            r.RequestLength = m.RequestLength;
            r.StartOffset   = m.StartOffset;
            List <Request> current = requests.FindAll(delegate(Request req) { return(req.CompareTo(r) == 0); });

            if (current.Count > 0)
            {
                foreach (Request request in current)
                {
                    if (request.Verified)
                    {
                        if (id.TorrentManager.Bitfield[request.PieceIndex])
                        {
                            Logger.Log(null, "Double request: {0}", m);
                            Logger.Log(null, "From: {0} and {1}", id.PeerID, r.RequestedOff.PeerID);
                        }
                        else
                        {
                            // The piece failed a hashcheck, so ignore it this time
                            requests.Remove(request);
                        }
                    }
                }
            }
            requests.Add(r);
        }