Esempio n. 1
0
 /// <summary>
 /// Creates a new TrackerUpdateEventArgs
 /// </summary>
 /// <param name="manager">The manager.</param>
 /// <param name="tracker">The tracker.</param>
 /// <param name="oldState">The old state.</param>
 /// <param name="newState">The new state.</param>
 public TrackerStateChangedEventArgs(TorrentManager manager, Tracker.Tracker tracker, TrackerState oldState,
                                     TrackerState newState)
     : base(manager)
 {
     Tracker  = tracker;
     OldState = oldState;
     NewState = newState;
 }
Esempio n. 2
0
        public TrackerPeersAdded(TorrentManager manager, int peersAdded, int total, Tracker.Tracker tracker)
            : base(manager, peersAdded, total)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }

            Tracker = tracker;
        }
Esempio n. 3
0
        public WaitHandle Scrape(Tracker.Tracker tracker)
        {
            var tier = _trackerTiers.Find(t => t.Trackers.Contains(tracker));

            if (tier == null)
            {
                return(new ManualResetEvent(true));
            }

            return(Scrape(tracker, false));
        }
Esempio n. 4
0
        public WaitHandle Announce(Tracker.Tracker tracker)
        {
            Check.Tracker(tracker);
            var tier = _trackerTiers.Find(t => t.Trackers.Contains(tracker));

            if (tier == null)
            {
                throw new ArgumentException("Tracker has not been registered with the manager", nameof(tracker));
            }

            var tevent = tier.SentStartedEvent ? TorrentEvent.None : TorrentEvent.Started;

            return(Announce(tracker, tevent, false, new ManualResetEvent(false)));
        }
Esempio n. 5
0
 protected TrackerResponseEventArgs(Tracker.Tracker tracker, object state, bool successful)
 {
     if (tracker == null)
     {
         throw new ArgumentNullException(nameof(tracker));
     }
     if (!(state is TrackerConnectionID))
     {
         throw new ArgumentException("The state object must be the same object as in the call to Announce",
                                     nameof(state));
     }
     Id         = (TrackerConnectionID)state;
     Successful = successful;
     Tracker    = tracker;
 }
Esempio n. 6
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. 7
0
        private WaitHandle Scrape(Tracker.Tracker tracker, bool trySubsequent)
        {
            if (tracker == null)
            {
                throw new ArgumentNullException(nameof(tracker));
            }

            if (!tracker.CanScrape)
            {
                throw new TorrentException("This tracker does not support scraping");
            }

            var id = new TrackerConnectionID(tracker, trySubsequent, TorrentEvent.None, new ManualResetEvent(false));

            tracker.Scrape(new ScrapeParameters(_infoHash), id);
            return(id.WaitHandle);
        }
Esempio n. 8
0
        public override void OnAttach(Context c)
        {
            base.OnAttach(c);

            // Initialize the dialog for the NoLocation Exception
            this.NoLocationAlert = new AlertDialog.Builder(c);
            this.NoLocationAlert.SetTitle("Geen locatie beschikbaar");
            this.NoLocationAlert.SetMessage("Momenteel kunnen wij uw locatie niet vaststellen. Mogelijk heeft u uw locatieservices uitstaan of duurt het nog even voordat we uw locatie kunnen ontvangen.");
            this.NoLocationAlert.SetNeutralButton("Oké", (senderAlert, arg) => { });

            // Initialize the dialog for the NotOnMap Exception
            this.NotOnMapAlert = new AlertDialog.Builder(c);
            this.NotOnMapAlert.SetTitle("Buiten Utrecht");
            this.NotOnMapAlert.SetMessage("U bevindt zich momenteel buiten het bereik wat deze app aankan. Ga naar Utrecht en omgeving om deze app te gebruiken en uw positie te centeren op de kaart.");
            this.NotOnMapAlert.SetNeutralButton("Oké", (senderAlert, arg) => { });

            Bundle        b  = this.Arguments;
            TrackerParcel tp = (TrackerParcel)b.GetParcelable("Tracker");

            this.Tracker = tp.Tracker;
            this.Arguments.Remove("Tracker");
        }
Esempio n. 9
0
        private bool GetNextTracker(Tracker.Tracker tracker, out TrackerTier trackerTier, out Tracker.Tracker trackerReturn)
        {
            for (var i = 0; i < _trackerTiers.Count; i++)
            {
                for (var j = 0; j < _trackerTiers[i].Trackers.Count; j++)
                {
                    if (_trackerTiers[i].Trackers[j] != tracker)
                    {
                        continue;
                    }

                    // If we are on the last tracker of this tier, check to see if there are more tiers
                    if (j == (_trackerTiers[i].Trackers.Count - 1))
                    {
                        if (i == (_trackerTiers.Count - 1))
                        {
                            trackerTier   = null;
                            trackerReturn = null;
                            return(false);
                        }

                        trackerTier   = _trackerTiers[i + 1];
                        trackerReturn = trackerTier.Trackers[0];
                        return(true);
                    }

                    trackerTier   = _trackerTiers[i];
                    trackerReturn = trackerTier.Trackers[j + 1];
                    return(true);
                }
            }

            trackerTier   = null;
            trackerReturn = null;
            return(false);
        }
Esempio n. 10
0
 public TrackerParcel(Java.Lang.Object Tracker)
 {
     this.Tracker = (Tracker.Tracker)Tracker;
 }
Esempio n. 11
0
 public void SetTracker(Tracker.Tracker tracker)
 {
     this.tracker = tracker;
     this.tracker.TrackUpdated += this.UpdateTrackFromTracker;
 }
Esempio n. 12
0
 public void SetTracker(Tracker.Tracker tracker)
 {
     this.tracker = tracker;
 }
Esempio n. 13
0
 public ScrapeResponseEventArgs(Tracker.Tracker tracker, object state, bool successful)
     : base(tracker, state, successful)
 {
 }
Esempio n. 14
0
 public AnnounceResponseEventArgs(Tracker.Tracker tracker, object state, bool successful)
     : this(tracker, state, successful, new List <Peer>())
 {
 }
Esempio n. 15
0
 public AnnounceResponseEventArgs(Tracker.Tracker tracker, object state, bool successful, List <Peer> peers)
     : base(tracker, state, successful)
 {
     Peers = peers;
 }