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(string.Format("Illegal piece request received. Peer requested {0} byte", message.RequestLength)); } } var 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"); var 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)); } }