protected virtual void HandleRequestMessage(PeerId id, RequestMessage message) { // If we are not on the last piece and the user requested a stupidly big/small amount of data // we will close the connection if (manager.Torrent.Pieces.Count != (message.PieceIndex + 1)) { if (message.RequestLength > RequestMessage.MaxSize || message.RequestLength < RequestMessage.MinSize) { throw new MessageException("Illegal piece request received. Peer requested " + message.RequestLength.ToString() + " byte"); } } PieceMessage m = new PieceMessage(message.PieceIndex, message.StartOffset, message.RequestLength); // If we're not choking the peer, enqueue the message right away if (!id.AmChoking) { id.IsRequestingPiecesCount++; id.PieceReads.Add(m); id.TryProcessAsyncReads(); } // If the peer supports fast peer and the requested piece is one of the allowed pieces, enqueue it // otherwise send back a reject request message else if (id.SupportsFastPeer && ClientEngine.SupportsFastPeer) { if (id.AmAllowedFastPieces.Contains(message.PieceIndex)) { id.IsRequestingPiecesCount++; id.PieceReads.Add(m); id.TryProcessAsyncReads(); } else { id.Enqueue(new RejectRequestMessage(m)); } } }
protected virtual void HandleRequestMessage(PeerId id, RequestMessage message) { // If we are not on the last piece and the user requested a stupidly big/small amount of data // we will close the connection if (manager.Torrent.Pieces.Count != (message.PieceIndex + 1)) if (message.RequestLength > RequestMessage.MaxSize || message.RequestLength < RequestMessage.MinSize) throw new MessageException("Illegal piece request received. Peer requested " + message.RequestLength.ToString() + " byte"); PieceMessage m = new PieceMessage(message.PieceIndex, message.StartOffset, message.RequestLength); // If we're not choking the peer, enqueue the message right away if (!id.AmChoking) { id.IsRequestingPiecesCount++; id.PieceReads.Add(m); id.TryProcessAsyncReads(); } // If the peer supports fast peer and the requested piece is one of the allowed pieces, enqueue it // otherwise send back a reject request message else if (id.SupportsFastPeer && ClientEngine.SupportsFastPeer) { if (id.AmAllowedFastPieces.Contains(message.PieceIndex)) { id.IsRequestingPiecesCount++; id.PieceReads.Add(m); id.TryProcessAsyncReads(); } else id.Enqueue(new RejectRequestMessage(m)); } }