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"); }
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); }
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(); }
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()); }
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; }
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; }
/// <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}"); } } }
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"); }
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); }
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; }