Пример #1
0
        public void ScrapeTest()
        {
            UdpTracker t = (UdpTracker)TrackerFactory.Create(new Uri(prefix));

            Assert.IsTrue(t.CanScrape, "#1");
            TrackerConnectionID id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            ScrapeResponseEventArgs p = null;

            t.ScrapeComplete += delegate(object o, ScrapeResponseEventArgs e)
            {
                p = e;
                id.WaitHandle.Set();
            };
            MonoTorrent.Client.Tracker.ScrapeParameters pars = new ScrapeParameters(new InfoHash(new byte[20]));

            t.Scrape(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#2");

            //TODO: search and fix SocketException
            //Assert.IsTrue(p.Successful, "#3");
            Assert.AreEqual(0, t.Complete, "#1");
            Assert.AreEqual(0, t.Incomplete, "#2");
            Assert.AreEqual(0, t.Downloaded, "#3");
        }
Пример #2
0
        void OfflineScrapeTest()
        {
            UdpTracker t = (UdpTracker)TrackerFactory.Create(new Uri("udp://127.0.0.1:57532/announce"));

            t.RetryDelay = TimeSpan.FromMilliseconds(500);
            TrackerConnectionID id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            ScrapeResponseEventArgs p = null;

            t.ScrapeComplete += delegate(object o, ScrapeResponseEventArgs e)
            {
                if (e.Successful)
                {
                    Console.ReadLine();
                }
                p = e;
                id.WaitHandle.Set();
            };
            System.Net.BitTorrent.Client.Tracker.ScrapeParameters pars = new ScrapeParameters(new InfoHash(new byte[20]));

            t.Scrape(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsFalse(p.Successful);
        }
Пример #3
0
        public void Announce()
        {
            var fakeTracker = new FakeUdpTracker(5001);

            fakeTracker.Start();

            var trackerClient = new UdpTracker(new LocalTcpConnectionOptions
            {
                Port          = 5000,
                BindAddress   = IPAddress.Loopback,
                PublicAddress = IPAddress.Loopback,
            },
                                               new Uri("udp://localhost:5001"));

            var response = trackerClient.Announce(_request).Result;
            var peers    = response.Peers.Cast <TcpTransportStream>().ToArray();

            Assert.That(peers, Has.Length.EqualTo(2));

            var peer1 = peers.Single(x => x.RemoteEndPoint.Port == 5001);

            Assert.That(peer1.RemoteEndPoint.Address, Is.EqualTo(IPAddress.Parse("192.168.0.1")));

            var peer2 = peers.Single(x => x.RemoteEndPoint.Port == 5002);

            Assert.That(peer2.RemoteEndPoint.Address, Is.EqualTo(IPAddress.Parse("192.168.0.2")));

            fakeTracker.Stop();
        }
Пример #4
0
        public List <Peer> RequestPeersFromTracker(string addr)
        {
            Tracker tracker;

            if (addr.StartsWith("udp"))
            {
                tracker = new UdpTracker(addr, torrent);
            }
            else if (addr.StartsWith("http"))
            {
                tracker = new HttpTracker(addr, torrent);
            }
            else
            {
                Console.WriteLine("Unimplemented tracker protocol: " + addr); return(null);
            }

            if (tracker.Handshake())
            {
                Console.WriteLine("Handshake ok with " + addr);
                trackers.Add(tracker);
            }
            else
            {
                Console.WriteLine("Handshake failed with " + addr);
            }

            return(tracker.Scrape());
        }
Пример #5
0
        public void Setup()
        {
            keys.Clear();
            tracker            = (UdpTracker)TrackerFactory.Create(new Uri("udp://127.0.0.1:6767/announce/"));
            tracker.RetryDelay = TimeSpan.FromMilliseconds(50);

            listener.IgnoreAnnounces = false;
            listener.IgnoreConnects  = false;
            listener.IgnoreErrors    = false;
            listener.IgnoreScrapes   = false;
        }
Пример #6
0
        public void Setup()
        {
            keys.Clear();
            tracker            = (UdpTracker)TrackerFactory.Create(new Uri("udp://127.0.0.1:6767/announce/"));
            tracker.RetryDelay = TimeSpan.FromMilliseconds(50);
            id = new TrackerConnectionID(tracker, false, TorrentEvent.Started, new ManualResetEvent(false));

            listener.IgnoreAnnounces = false;
            listener.IgnoreConnects  = false;
            listener.IgnoreErrors    = false;
            listener.IgnoreScrapes   = false;
        }
Пример #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TransferManager" /> class.
        /// </summary>
        /// <param name="listeningPort">The port.</param>
        /// <param name="torrentInfo">The torrent information.</param>
        /// <param name="throttlingManager">The throttling manager.</param>
        /// <param name="persistenceManager">The persistence manager.</param>
        public TransferManager(int listeningPort, TorrentInfo torrentInfo, ThrottlingManager throttlingManager, PersistenceManager persistenceManager)
        {
            listeningPort.MustBeGreaterThanOrEqualTo(IPEndPoint.MinPort);
            listeningPort.MustBeLessThanOrEqualTo(IPEndPoint.MaxPort);
            torrentInfo.CannotBeNull();
            throttlingManager.CannotBeNull();
            persistenceManager.CannotBeNull();

            Tracker tracker = null;

            this.PeerId = "-AB1100-" + "0123456789ABCDEF".Random(24);

            Debug.WriteLine($"creating torrent manager for torrent {torrentInfo.InfoHash}");
            Debug.WriteLine($"local peer id {this.PeerId}");

            this.TorrentInfo = torrentInfo;

            this.throttlingManager = throttlingManager;

            this.persistenceManager = persistenceManager;

            // initialize trackers
            foreach (var trackerUri in torrentInfo.AnnounceList)
            {
                if (trackerUri.Scheme == "http" ||
                    trackerUri.Scheme == "https")
                {
                    tracker = new HttpTracker(trackerUri, this.PeerId, torrentInfo.InfoHash, listeningPort);
                }
                else if (trackerUri.Scheme == "udp")
                {
                    tracker = new UdpTracker(trackerUri, this.PeerId, torrentInfo.InfoHash, listeningPort);
                }

                if (tracker != null)
                {
                    tracker.TrackingEvent       = TrackingEvent.Started;
                    tracker.Announcing         += this.Tracker_Announcing;
                    tracker.Announced          += this.Tracker_Announced;
                    tracker.TrackingFailed     += this.Tracker_TrackingFailed;
                    tracker.BytesLeftToDownload = this.TorrentInfo.Length - this.Downloaded;
                    tracker.WantedPeerCount     = 30; // we can handle 30 peers at a time

                    this.trackers.Add(trackerUri, tracker);
                }
                else
                {
                    // unsupported tracker protocol
                    Debug.WriteLine($"unsupported tracker protocol {trackerUri.Scheme}");
                }
            }
        }
Пример #8
0
        public void AnnounceTest()
        {
            UdpTracker          t  = (UdpTracker)TrackerFactory.Create(new Uri(prefix));
            TrackerConnectionID id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            AnnounceResponseEventArgs p = null;

            t.AnnounceComplete += delegate(object o, AnnounceResponseEventArgs e)
            {
                p = e;
                id.WaitHandle.Set();
            };
            System.Net.BitTorrent.Client.Tracker.AnnounceParameters pars = new AnnounceParameters();
            pars.InfoHash = new InfoHash(new byte[20]);
            pars.PeerId   = "";

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            //Assert.AreEqual(keys[0], t.Key, "#2");
        }
Пример #9
0
        void OfflineAnnounceTest()
        {
            UdpTracker t = (UdpTracker)TrackerFactory.Create(new Uri("udp://127.0.0.1:57532/announce"));

            t.RetryDelay = TimeSpan.FromMilliseconds(500);
            TrackerConnectionID id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            AnnounceResponseEventArgs p = null;

            t.AnnounceComplete += delegate(object o, AnnounceResponseEventArgs e) {
                p = e;
                id.WaitHandle.Set();
            };
            MonoTorrent.Client.Tracker.AnnounceParameters pars = new AnnounceParameters();
            pars.InfoHash = new InfoHash(new byte[20]);
            pars.PeerId   = "";

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsFalse(p.Successful);
        }
Пример #10
0
        public void Setup()
        {
            keys   = new List <BEncodedString>();
            server = new MonoTorrent.Tracker.TrackerServer();
            server.AllowUnregisteredTorrents = true;
            server.RegisterListener(listener);

            peerEndpoints = new List <IPEndPoint> {
                new IPEndPoint(IPAddress.Parse("123.123.123.123"), 12312),
                new IPEndPoint(IPAddress.Parse("254.254.254.254"), 3522),
                new IPEndPoint(IPAddress.Parse("1.1.1.1"), 123),
                new IPEndPoint(IPAddress.Parse("1.2.3.4"), 65000),
            };

            tracker        = (UdpTracker)TrackerFactory.Create(new Uri($"udp://127.0.0.1:{listener.EndPoint.Port}/announce/"));
            announceparams = announceparams.WithPort(listener.EndPoint.Port);

            listener.IgnoreAnnounces = false;
            listener.IgnoreConnects  = false;
            listener.IgnoreErrors    = false;
            listener.IgnoreScrapes   = false;
        }