protected override void ReceiveScrape(ScrapeMessage scrapeMessage) { if (!IgnoreScrapes) base.ReceiveScrape(scrapeMessage); }
private NameValueCollection getCollection(ScrapeMessage scrapeMessage) { NameValueCollection res = new NameValueCollection(); if (scrapeMessage.InfoHashes.Count == 0) return res;//no infohash???? //TODO more than one infohash : paid attention to order in response!!! InfoHash hash = new InfoHash(scrapeMessage.InfoHashes[0]); res.Add("info_hash", hash.UrlEncode()); return res; }
public void ScrapeMessageTest() { var hashes = new List<byte[]>(); var r = new Random(); var hash1 = new byte[20]; var hash2 = new byte[20]; var hash3 = new byte[20]; r.NextBytes(hash1); r.NextBytes(hash2); r.NextBytes(hash3); hashes.Add(hash1); hashes.Add(hash2); hashes.Add(hash3); var m = new ScrapeMessage(12345, 123, hashes); var d = (ScrapeMessage) UdpTrackerMessage.DecodeMessage(m.Encode(), 0, m.ByteLength, MessageType.Request); Check(m, MessageType.Request); Assert.AreEqual(2, m.Action); Assert.AreEqual(m.Action, d.Action); Assert.IsTrue(Toolbox.ByteMatch(m.Encode(), d.Encode())); }
protected virtual void ReceiveScrape(ScrapeMessage scrapeMessage) { BEncodedDictionary val = Handle(getCollection(scrapeMessage), endpoint.Address, true); UdpTrackerMessage m; byte[] data; if (val.ContainsKey(RequestParameters.FailureKey)) { m = new ErrorMessage(scrapeMessage.TransactionId, val[RequestParameters.FailureKey].ToString()); } else { List<ScrapeDetails> scrapes = new List<ScrapeDetails>(); foreach (KeyValuePair<BEncodedString, BEncodedValue> keypair in val) { BEncodedDictionary dict = (BEncodedDictionary)keypair.Value; int seeds = 0; int leeches = 0; int complete = 0; foreach (KeyValuePair<BEncodedString, BEncodedValue> keypair2 in dict) { switch (keypair2.Key.Text) { case "complete"://The current number of connected seeds seeds = Convert.ToInt32(keypair2.Value.ToString()); break; case "downloaded"://The total number of completed downloads complete = Convert.ToInt32(keypair2.Value.ToString()); break; case "incomplete": leeches = Convert.ToInt32(keypair2.Value.ToString()); break; } } ScrapeDetails sd = new ScrapeDetails(seeds, leeches, complete); scrapes.Add(sd); if (scrapes.Count == 74)//protocole do not support to send more than 74 scrape at once... { m = new ScrapeResponseMessage(scrapeMessage.TransactionId, scrapes); data = m.Encode(); listener.Send(data, data.Length, endpoint); scrapes.Clear(); } } m = new ScrapeResponseMessage(scrapeMessage.TransactionId, scrapes); } data = m.Encode(); listener.Send(data, data.Length, endpoint); }