Inheritance: PeerMessage
        private void CreateWebRequests(RequestMessage start, RequestMessage end)
        {
            // Properly handle the case where we have multiple files
            // This is only implemented for single file torrents
            var uri = Uri;

            if (Uri.OriginalString.EndsWith("/"))
                uri = new Uri(uri, Manager.Torrent.Name + "/");

            // startOffset and endOffset are *inclusive*. I need to subtract '1' from the end index so that i
            // stop at the correct byte when requesting the byte ranges from the server
            var startOffset = (long) start.PieceIndex*Manager.Torrent.PieceLength + start.StartOffset;
            var endOffset = (long) end.PieceIndex*Manager.Torrent.PieceLength + end.StartOffset + end.RequestLength;

            foreach (var file in Manager.Torrent.Files)
            {
                var u = uri;
                if (Manager.Torrent.Files.Length > 1)
                    u = new Uri(u, file.Path);
                if (endOffset == 0)
                    break;

                // We want data from a later file
                if (startOffset >= file.Length)
                {
                    startOffset -= file.Length;
                    endOffset -= file.Length;
                }
                // We want data from the end of the current file and from the next few files
                else if (endOffset >= file.Length)
                {
                    var request = (HttpWebRequest) WebRequest.Create(u);
                    AddRange(request, startOffset, file.Length - 1);
                    _webRequests.Enqueue(new KeyValuePair<WebRequest, int>(request, (int) (file.Length - startOffset)));
                    startOffset = 0;
                    endOffset -= file.Length;
                }
                // All the data we want is from within this file
                else
                {
                    var request = (HttpWebRequest) WebRequest.Create(u);
                    AddRange(request, startOffset, endOffset - 1);
                    _webRequests.Enqueue(new KeyValuePair<WebRequest, int>(request, (int) (endOffset - startOffset)));
                    endOffset = 0;
                }
            }
        }
 public RejectRequestMessage(RequestMessage message)
     : this(message.PieceIndex, message.StartOffset, message.RequestLength)
 {
 }
 protected override void HandleRequestMessage(PeerId id, RequestMessage message)
 {
     base.HandleRequestMessage(id, message);
     unchoker.SentBlock(id, message.PieceIndex);
 }
 public HttpRequestData(RequestMessage request)
 {
     Request = request;
     var m = new PieceMessage(request.PieceIndex, request.StartOffset, request.RequestLength);
     TotalToReceive = m.ByteLength;
 }