Exemplo n.º 1
0
        /// <summary>
        /// Called when announce is requested.
        /// </summary>
        protected override void OnAnnounce()
        {
            AnnounceResponseMessage message;
            Uri uri;

            this.OnAnnouncing(this, EventArgs.Empty);

            try
            {
                uri = this.GetUri();

                Debug.WriteLine($"{this.TrackerUri} -> {uri}");

                if (AnnounceResponseMessage.TryDecode(uri.ExecuteBinaryRequest(), out message))
                {
                    Debug.WriteLine($"{this.TrackerUri} <- {message}");

                    this.UpdateInterval = message.UpdateInterval;

                    this.OnAnnounced(this, new AnnouncedEventArgs(message.UpdateInterval, message.LeecherCount, message.SeederCount, message.Peers));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"could not send message to HTTP tracker {this.TrackerUri} for torrent {this.TorrentInfoHash}: {ex.Message}");
            }
        }
        public void AnnounceResponseMessage_TryDecode()
        {
            AnnounceResponseMessage message;

            byte[] data = "00000001 00003300 00000002 00000003 00000004 09080706 2002 01020304 3003".Replace(" ", string.Empty).ToByteArray();

            if (AnnounceResponseMessage.TryDecode(data, 0, out message))
            {
                Assert.AreEqual(32, message.Length);
                Assert.AreEqual(1, (int)message.Action);
                Assert.AreEqual(13056, message.TransactionId);
                Assert.AreEqual(2, message.Interval.TotalSeconds);
                Assert.AreEqual(3, message.LeecherCount);
                Assert.AreEqual(4, message.SeederCount);
                Assert.AreEqual(2, message.Peers.Count());
                Assert.AreEqual(new IPEndPoint(IPAddress.Parse("9.8.7.6"), 8194), message.Peers.ElementAt(0));
                Assert.AreEqual(new IPEndPoint(IPAddress.Parse("1.2.3.4"), 12291), message.Peers.ElementAt(1));
                CollectionAssert.AreEqual(data, message.Encode());
            }
            else
            {
                Assert.Fail();
            }
        }