Esempio n. 1
0
        private void OfflineAnnounceTest()
        {
            var udpTracker = (UdpTracker)TrackerFactory.Create(new Uri("udp://127.0.0.1:57532/announce"));

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

            AnnounceResponseEventArgs p = null;

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

            udpTracker.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsFalse(p.Successful);
        }
Esempio n. 2
0
 public override Task AnnounceAsync(AnnounceParameters parameters, TrackerConnectionID state)
 {
     RaiseBeforeAnnounce();
     AnnouncedAt.Add(DateTime.Now);
     RaiseAnnounceComplete(new AnnounceResponseEventArgs(this, state, !FailAnnounce));
     return(Task.CompletedTask);
 }
        /// <summary>
        /// Generates the AnnounceParameters from PeerEntry
        /// </summary>
        private AnnounceParameters GenerateAnnounceParameters(byte[] infoHash, PeerEntry entry)
        {
            NameValueCollection c = new NameValueCollection();

            // "info_hash", "peer_id", "port", "uploaded(bytes)", "downloaded", "left", "compact"
            // InfoHash here should be just like what's in HttpRequests
            c.Add("info_hash", System.Web.HttpUtility.UrlEncode(infoHash));
            c.Add("peer_id", entry.PeerID);
            c.Add("port", entry.PeerPort.ToString());
            // Fake the mandatory fields, these are solely used to compute the upload/download speed
            c.Add("uploaded", "0");
            c.Add("downloaded", "0");
            c.Add("left", "1000");
            c.Add("compact", "1");
            // Optional but needs to set for monotorrent tracker
            if (entry.PeerState != MonoTorrent.Common.TorrentEvent.None)
            {
                c.Add("event", entry.PeerEventAsRequestKey);
            }
            // NOTE: "ip" is optional and we don't supply it.
            // AnnounceParameters will set entry.PeerIP as its ClientAddress.
            AnnounceParameters par = new AnnounceParameters(c, IPAddress.Parse(entry.PeerIP));

            return(par);
        }
Esempio n. 4
0
        public byte[] HandleASP(string rawurl, IPAddress ipa, bool isScrape, bool invalidPassKey)
        {
            RequestParameters   parameters;
            NameValueCollection collection = ParseQuery(rawurl);

            if (isScrape)
            {
                parameters = new ScrapeParameters(collection, ipa);
            }
            else
            {
                parameters = new AnnounceParameters(collection, ipa, invalidPassKey);
            }

            if (!parameters.IsValid)
            {
                // The failure reason has already been filled in to the response
                return((byte[])parameters.Response.Encode());
            }
            else
            {
                if (isScrape)
                {
                    RaiseScrapeReceived((ScrapeParameters)parameters);
                }
                else
                {
                    RaiseAnnounceReceived((AnnounceParameters)parameters);
                }
            }

            byte[] response = parameters.Response.Encode();
            return(response);
        }
Esempio n. 5
0
        public virtual BEncodedDictionary Handle(NameValueCollection collection, IPAddress remoteAddress, bool isScrape)
        {
            if (collection == null)
                throw new ArgumentNullException("collection");
            if (remoteAddress == null)
                throw new ArgumentNullException("remoteAddress");

            RequestParameters parameters;
            if (isScrape)
                parameters = new ScrapeParameters(collection, remoteAddress);
            else
                parameters = new AnnounceParameters(collection, remoteAddress);

            // If the parameters are invalid, the failure reason will be added to the response dictionary
            if (!parameters.IsValid)
                return parameters.Response;

            // Fire the necessary event so the request will be handled and response filled in
            if (isScrape)
                RaiseScrapeReceived((ScrapeParameters)parameters);
            else
                RaiseAnnounceReceived((AnnounceParameters)parameters);

            // Return the response now that the connection has been handled correctly.
            return parameters.Response;
        }
Esempio n. 6
0
        public void ScrapeTest()
        {
            var t = TrackerFactory.Create(new Uri(Prefix.Substring(0, Prefix.Length - 1)));

            Assert.IsTrue(t.CanScrape, "#1");
            var 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();
            };
            var pars = new AnnounceParameters {
                PeerId = "id", InfoHash = new InfoHash(new byte[20])
            };

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#2");
            Assert.IsTrue(p.Successful, "#3");
            Assert.AreEqual(1, t.Complete, "#1");
            Assert.AreEqual(0, t.Incomplete, "#2");
            Assert.AreEqual(0, t.Downloaded, "#3");
        }
Esempio n. 7
0
        public void MultipleAnnounce()
        {
            var announceCount = 0;
            var random        = new Random();
            var handle        = new ManualResetEvent(false);

            for (var i = 0; i < 20; i++)
            {
                var infoHash = new InfoHash(new byte[20]);
                random.NextBytes(infoHash.Hash);
                var tier = new TrackerTier(new[] { _uri.ToString() });
                tier.Trackers[0].AnnounceComplete += (sender, args) =>
                {
                    if (++announceCount == 20)
                    {
                        handle.Set();
                    }
                };
                var id = new TrackerConnectionID(tier.Trackers[0], false, TorrentEvent.Started,
                                                 new ManualResetEvent(false));
                var parameters = new AnnounceParameters(0, 0, 0, TorrentEvent.Started,
                                                        infoHash, false, new string('1', 20),
                                                        string.Empty, 1411);
                tier.Trackers[0].Announce(parameters, id);
            }

            Assert.IsTrue(handle.WaitOne(5000, true), "Some of the responses weren't received");
        }
        /// <summary>
        /// Announces Peer to DHT with AnnounceParameters infomation.
        /// </summary>
        /// <returns>True if successful</returns>
        public void AnnouncePeer(byte[] infoHash, AnnounceParameters pars)
        {
            PeerEntry entry = new PeerEntry(pars);

            Logger.WriteLineIf(LogLevel.Verbose, _log_props,
                               string.Format("Peer to be announced to DHT:\n{0}", entry.ToString()));
            AnnouncePeer(infoHash, entry);
        }
Esempio n. 9
0
        private void RaiseAnnounceReceived(AnnounceParameters e)
        {
            EventHandler <AnnounceParameters> h = AnnounceReceived;

            if (h != null)
            {
                h(this, e);
            }
        }
Esempio n. 10
0
        protected override Task <List <Peer> > DoAnnounceAsync(AnnounceParameters parameters)
        {
            AnnouncedAt.Add(DateTime.Now);
            if (FailAnnounce)
            {
                throw new TrackerException("Deliberately failing announce request", null);
            }

            return(Task.FromResult(peers));
        }
Esempio n. 11
0
        public override Task <List <Peer> > AnnounceAsync(AnnounceParameters parameters)
        {
            AnnouncedAt.Add(DateTime.Now);
            RaiseAnnounceComplete(new AnnounceResponseEventArgs(this, !FailAnnounce));
            if (FailAnnounce)
            {
                throw new TrackerException("Deliberately failing announce request", null);
            }

            return(Task.FromResult(peers));
        }
 /// <summary>
 /// Listens to event fired by HttpListener and delegates the handling 
 /// process to DhtListener where a list of peers are retrieved.
 /// </summary>
 private void OnAnnounceReceived(object sender, AnnounceParameters e) {
   Logger.WriteLineIf(LogLevel.Verbose, _log_props,
     string.Format("Annoucement received from {0}", e.RemoteAddress));
   try {
     _dictListener.HandleAnnounceRequest(e);
   } catch (Exception ex) {
     Logger.WriteLineIf(LogLevel.Error, _log_props, 
       string.Format("Exception caught while processing announce request. {0}", ex));
     throw;
   }
 }
Esempio n. 13
0
 /**
  * This initializes the PeerEntry to be stored in Dht
  * @param pars
  */
 public PeerEntry(AnnounceParameters pars)
 {
     /*
      * The ClientAddress here could be ["ip"] in the args of GET request
      * or, if it is null, the remote endpoint IP of the request.
      * Don't use pars.RemoteAddress
      */
     this._peer_endpoint = pars.ClientAddress;
     this._peer_id       = pars.PeerId;
     this._event         = pars.Event;
 }
Esempio n. 14
0
        public void Setup()
        {
            keys.Clear();
            tracker = (HTTPTracker)TrackerFactory.Create(AnnounceUrl);

            announceParams          = new AnnounceParameters();
            announceParams.PeerId   = "id";
            announceParams.InfoHash = new InfoHash(new byte[20]);

            scrapeParams = new ScrapeParameters(new InfoHash(new byte[20]));
        }
Esempio n. 15
0
        protected override ReusableTask <AnnounceResponse> DoAnnounceAsync(AnnounceParameters parameters, CancellationToken token)
        {
            AnnouncedAt.Add(DateTime.Now);
            if (FailAnnounce)
            {
                throw new TrackerException("Deliberately failing announce request", null);
            }

            AnnounceParameters.Add(parameters);
            return(ReusableTask.FromResult(new AnnounceResponse(peers, null, null)));
        }
Esempio n. 16
0
        public void KeyTest()
        {
            MonoTorrent.Client.Tracker.AnnounceParameters pars = new AnnounceParameters();
            pars.PeerId   = "id";
            pars.InfoHash = new InfoHash(new byte[20]);

            Tracker.Tracker     t  = TrackerFactory.Create(new Uri(prefix + "?key=value"));
            TrackerConnectionID id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            t.AnnounceComplete += delegate { id.WaitHandle.Set(); };
            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.AreEqual("value", keys[0], "#1");
        }
Esempio n. 17
0
        private WaitHandle Announce(Tracker.Tracker tracker, TorrentEvent clientEvent, bool trySubsequent,
                                    ManualResetEvent waitHandle)
        {
            ClientEngine engine = _manager.Engine;

            // If the engine is null, we have been unregistered
            if (engine == null)
            {
                waitHandle.Set();
                return(waitHandle);
            }

            UpdateSucceeded = true;
            LastUpdated     = DateTime.Now;

            EncryptionTypes e = engine.Settings.AllowedEncryption;
            var             requireEncryption  = !Toolbox.HasEncryption(e, EncryptionTypes.PlainText);
            var             supportsEncryption = Toolbox.HasEncryption(e, EncryptionTypes.RC4Full) ||
                                                 Toolbox.HasEncryption(e, EncryptionTypes.RC4Header);

            requireEncryption  = requireEncryption && ClientEngine.SupportsEncryption;
            supportsEncryption = supportsEncryption && ClientEngine.SupportsEncryption;

            IPEndPoint reportedAddress = engine.Settings.ReportedAddress;
            var        ip   = reportedAddress?.Address.ToString();
            int        port = reportedAddress?.Port ?? engine.Listener.Endpoint.Port;

            // FIXME: In metadata mode we need to pretend we need to download data otherwise
            // tracker optimisations might result in no peers being sent back.
            long bytesLeft = 1000;

            if (_manager.HasMetadata)
            {
                bytesLeft = (long)((1 - _manager.Bitfield.PercentComplete / 100.0) * _manager.Torrent.Size);
            }
            var p = new AnnounceParameters(_manager.Monitor.DataBytesDownloaded,
                                           _manager.Monitor.DataBytesUploaded,
                                           bytesLeft,
                                           clientEvent, _infoHash, requireEncryption, _manager.Engine.PeerId,
                                           ip, port)
            {
                SupportsEncryption = supportsEncryption
            };
            var id = new TrackerConnectionID(tracker, trySubsequent, clientEvent, waitHandle);

            tracker.Announce(p, id);
            return(waitHandle);
        }
Esempio n. 18
0
        public AnnounceMessage(int transactionId, long connectionId, AnnounceParameters parameters)
            : base(1, transactionId)
        {
            this.ConnectionId = connectionId;
            if (parameters == null)
                return;

            Downloaded = parameters.BytesDownloaded;
            Infohash = parameters.InfoHash;
            Ip = 0;
            Key = (uint) DateTime.Now.GetHashCode(); // TODO: Don't do this! It should be constant
            Left = parameters.BytesLeft;
            NumWanted = 50;
            PeerId = parameters.PeerId;
            Port = (ushort) parameters.Port;
            TorrentEvent = parameters.ClientEvent;
            Uploaded = parameters.BytesUploaded;
        }
        public AnnounceMessage(int transactionId, long connectionId, AnnounceParameters parameters)
            : base(1, transactionId)
        {
            this.connectionId = connectionId;
            if (parameters == null)
            {
                return;
            }

            this.downloaded   = parameters.BytesDownloaded;
            this.infoHash     = parameters.InfoHash;
            this.ip           = 0;
            this.key          = (uint)DateTime.Now.GetHashCode(); // FIXME: Don't do this! It should be constant
            this.left         = parameters.BytesLeft;
            this.numWanted    = 50;
            this.peerId       = parameters.PeerId;
            this.port         = (ushort)parameters.Port;
            this.torrentEvent = parameters.ClientEvent;
            this.uploaded     = parameters.BytesUploaded;
        }
Esempio n. 20
0
        public AnnounceMessage(int transactionId, long connectionId, AnnounceParameters parameters)
            : base(1, transactionId)
        {
            ConnectionId = connectionId;
            if (parameters == null)
            {
                return;
            }

            Downloaded   = parameters.BytesDownloaded;
            Infohash     = parameters.InfoHash;
            Ip           = 0;
            Key          = (uint)DateTime.Now.GetHashCode(); // FIXME: Don't do this! It should be constant
            Left         = parameters.BytesLeft;
            NumWanted    = 50;
            PeerId       = parameters.PeerId;
            Port         = (ushort)parameters.Port;
            TorrentEvent = parameters.ClientEvent;
            Uploaded     = parameters.BytesUploaded;
        }
Esempio n. 21
0
        public virtual BEncodedDictionary Handle(NameValueCollection collection, IPAddress remoteAddress, bool isScrape)
        {
            if (collection == null)
            {
                throw new ArgumentNullException("collection");
            }
            if (remoteAddress == null)
            {
                throw new ArgumentNullException("remoteAddress");
            }

            RequestParameters parameters;

            if (isScrape)
            {
                parameters = new ScrapeParameters(collection, remoteAddress);
            }
            else
            {
                parameters = new AnnounceParameters(collection, remoteAddress);
            }

            // If the parameters are invalid, the failure reason will be added to the response dictionary
            if (!parameters.IsValid)
            {
                return(parameters.Response);
            }

            // Fire the necessary event so the request will be handled and response filled in
            if (isScrape)
            {
                RaiseScrapeReceived((ScrapeParameters)parameters);
            }
            else
            {
                RaiseAnnounceReceived((AnnounceParameters)parameters);
            }

            // Return the response now that the connection has been handled correctly.
            return(parameters.Response);
        }
Esempio n. 22
0
        public void AnnounceTest()
        {
            HTTPTracker         t  = (HTTPTracker)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();
            };
            MonoTorrent.Client.Tracker.AnnounceParameters pars = new AnnounceParameters();
            pars.PeerId   = "id";
            pars.InfoHash = new InfoHash(new byte[20]);

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            Assert.AreEqual(keys[0].ToLowerInvariant(), t.Key.ToLowerInvariant(), "#2");
        }
Esempio n. 23
0
        void listener_AnnounceReceived(object sender, AnnounceParameters e)
        {
            //insere na base de dados para ser processado posteriormente pelo robô
            using (var repositorio = new DataRepository <EventoAnnounce>())
            {
                var announce = new EventoAnnounce();
                announce.IdEventoAnnounce = 0;
                announce.HashInfoTorrent  = e.InfoHash.ToString();
                announce.PasskeyUsuario   = e.PassKey;
                announce.Evento           = e.Event.ToString();
                announce.DataEvento       = DateTime.Now;
                announce.Downloaded       = e.Downloaded;
                announce.Uploaded         = e.Uploaded;
                announce.Processado       = false;
                announce.EnderecoIP       = e.ClientAddress.Address.ToString();
                announce.PeerID           = e.PeerId;

                repositorio.Add(announce);
                repositorio.SaveChanges();
            }
        }
Esempio n. 24
0
        public async Task AnnounceTest()
        {
            announceparams = announceparams
                             .WithBytesDownloaded(123)
                             .WithBytesLeft(456)
                             .WithBytesUploaded(789);

            var announceArgsTask = new TaskCompletionSource <MonoTorrent.Tracker.AnnounceEventArgs> ();

            server.PeerAnnounced += (o, e) => announceArgsTask.TrySetResult(e);
            await tracker.AnnounceAsync(announceparams);

            await announceArgsTask.Task;

            var args = announceArgsTask.Task.Result;

            Assert.AreEqual(PeerId, args.Peer.PeerId, "#1");
            Assert.AreEqual(123, args.Peer.Downloaded);
            Assert.AreEqual(456, args.Peer.Remaining);
            Assert.AreEqual(789, args.Peer.Uploaded);
        }
        /// <summary>
        /// Gets the peers from DHT and generates AnnounceParameters of a list of
        /// peers and puts the peer info of this announcing peer to DHT
        /// </summary>
        /// <param name="parameters">
        /// AnnounceParameters from the requesting client. It's modified in method.
        /// </param>
        internal void HandleAnnounceRequest(AnnounceParameters parameters)
        {
            IEnumerable <PeerEntry> entries = _proxy.GetPeers(parameters.InfoHash.ToArray());

            foreach (PeerEntry entry in entries)
            {
                AnnounceParameters par = GenerateAnnounceParameters(
                    parameters.InfoHash.ToArray(), entry);
                if (par.IsValid)
                {
                    // Tracker will write to the par.Response but we don't use it
                    // ListenerBase.Handle use par.ClientAddress to generate
                    // AnnounceParameters again.
                    Handle(par.Parameters, par.ClientAddress.Address, false);
                }
                else
                {
                    Logger.WriteLineIf(LogLevel.Error, _log_props, string.Format(
                                           "Parameters invalid!"));
                    continue;
                }

                //Logger.WriteLineIf(LogLevel.Verbose, _log_props,
                //    string.Format("Tracker's response for this peer {0} from DHT: {1}",
                //    par.ClientAddress, par.Response.ToString()));
            }

            // Got all I need, now announce myself to DHT.
            try {
                _proxy.AnnouncePeer(parameters.InfoHash.ToArray(), parameters);
            } catch (Exception ex) {
                // It is OK to temporarily unable to announce to Dht. We can try the next time.
                Logger.WriteLineIf(LogLevel.Error, _log_props, string.Format(
                                       "Unable to reach Dht. We can try the next time.\n{0}", ex));
            }

            Logger.WriteLineIf(LogLevel.Info, _log_props,
                               string.Format("DhtListener finished handling annoucement from {0}",
                                             parameters.RemoteAddress));
        }
Esempio n. 26
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;
        }
Esempio n. 27
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.NotNull(p);
            Assert.True(p.Successful);
            //Assert.Equal(keys[0], t.Key, "#2");
        }
Esempio n. 28
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();
            };
            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.NotNull(p);
            Assert.False(p.Successful);
        }
Esempio n. 29
0
        public void AnnounceTest()
        {
            var t = (HTTPTracker) TrackerFactory.Create(new Uri(Prefix));
            var id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            AnnounceResponseEventArgs p = null;
            t.AnnounceComplete += (o, e) =>
                                      {
                                          p = e;
                                          id.WaitHandle.Set();
                                      };
            var pars = new AnnounceParameters
                           {
                               PeerId = "id",
                               InfoHash = new InfoHash(new byte[20])
                           };

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            Assert.AreEqual(_keys[0], t.Key, "#2");
        }
Esempio n. 30
0
        public void AnnounceTest()
        {
            var t  = (HTTPTracker)TrackerFactory.Create(new Uri(Prefix));
            var id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));

            AnnounceResponseEventArgs p = null;

            t.AnnounceComplete += (o, e) =>
            {
                p = e;
                id.WaitHandle.Set();
            };
            var pars = new AnnounceParameters
            {
                PeerId   = "id",
                InfoHash = new InfoHash(new byte[20])
            };

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            Assert.AreEqual(_keys[0], t.Key, "#2");
        }
        public void ScrapeTest()
        {
            Tracker.Tracker t = TrackerFactory.Create(new Uri(prefix.Substring(0, prefix.Length - 1)));
            Assert.True(t.CanScrape, "#1");
            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.PeerId   = "id";
            pars.InfoHash = new InfoHash(new byte[20]);

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.NotNull(p);
            Assert.True(p.Successful, "#3");
            Assert.Equal(1, t.Complete);
            Assert.Equal(0, t.Incomplete);
            Assert.Equal(0, t.Downloaded);
        }
Esempio n. 32
0
        public void AnnounceTest()
        {
            var udpTracker = (UdpTracker)TrackerFactory.Create(new Uri(Prefix));
            var id         = new TrackerConnectionID(udpTracker, false, TorrentEvent.Started, new ManualResetEvent(false));

            AnnounceResponseEventArgs p = null;

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

            udpTracker.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            //Assert.AreEqual(keys[0], t.Key, "#2");
        }
Esempio n. 33
0
        public override void Announce(AnnounceParameters parameters, object state)
        {
            var e = new AnnounceResponseEventArgs(this, state, true);

            RaiseAnnounceComplete(e);
        }
Esempio n. 34
0
        public void AnnounceTest()
        {
            var udpTracker = (UdpTracker) TrackerFactory.Create(new Uri(Prefix));
            var id = new TrackerConnectionID(udpTracker, false, TorrentEvent.Started, new ManualResetEvent(false));

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

            udpTracker.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsTrue(p.Successful);
            //Assert.AreEqual(keys[0], t.Key, "#2");
        }
Esempio n. 35
0
        public void KeyTest()
        {
            var pars = new AnnounceParameters
                           {
                               PeerId = "id",
                               InfoHash = new InfoHash(new byte[20])
                           };

            var t = TrackerFactory.Create(new Uri(Prefix + "?key=value"));
            var id = new TrackerConnectionID(t, false, TorrentEvent.Started, new ManualResetEvent(false));
            t.AnnounceComplete += delegate { id.WaitHandle.Set(); };
            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.AreEqual("value", _keys[0], "#1");
        }
Esempio n. 36
0
        public void ScrapeTest()
        {
            var t = TrackerFactory.Create(new Uri(Prefix.Substring(0, Prefix.Length - 1)));
            Assert.IsTrue(t.CanScrape, "#1");
            var 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();
                                      };
            var pars = new AnnounceParameters {PeerId = "id", InfoHash = new InfoHash(new byte[20])};

            t.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#2");
            Assert.IsTrue(p.Successful, "#3");
            Assert.AreEqual(1, t.Complete, "#1");
            Assert.AreEqual(0, t.Incomplete, "#2");
            Assert.AreEqual(0, t.Downloaded, "#3");
        }
Esempio n. 37
0
 private void RaiseAnnounceReceived(AnnounceParameters e)
 {
     EventHandler<AnnounceParameters> h = AnnounceReceived;
     if (h != null)
         h(this, e);
 }
Esempio n. 38
0
 public override void Announce(AnnounceParameters parameters, object state)
 {
     RaiseAnnounceComplete(new AnnounceResponseEventArgs(this, state, true));
 }
 private void RaiseAnnounceReceived(AnnounceParameters e)
 {
     var h = AnnounceReceived;
     if (h != null)
         h(this, e);
 }
Esempio n. 40
0
        private void OfflineAnnounceTest()
        {
            var udpTracker = (UdpTracker) TrackerFactory.Create(new Uri("udp://127.0.0.1:57532/announce"));
            udpTracker.RetryDelay = TimeSpan.FromMilliseconds(500);
            var id = new TrackerConnectionID(udpTracker, false, TorrentEvent.Started, new ManualResetEvent(false));

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

            udpTracker.Announce(pars, id);
            Wait(id.WaitHandle);
            Assert.IsNotNull(p, "#1");
            Assert.IsFalse(p.Successful);
        }
 public object GetKey(AnnounceParameters parameters)
 {
     return parameters.ClientAddress;
 }