Example #1
0
        public bool IsRegistered(ITrackerListener listener)
        {
            CheckDisposed();
            if (listener == null)
            {
                throw new ArgumentNullException(nameof(listener));
            }

            return(Listeners.Contains(listener));
        }
Example #2
0
        public void UnregisterListener(ITrackerListener listener)
        {
            CheckDisposed();
            if (listener == null)
            {
                throw new ArgumentNullException("listener");
            }

            listener.AnnounceReceived -= ListenerReceivedAnnounce;
            listener.ScrapeReceived   -= ListenerReceivedScrape;
            Listeners.Remove(listener);
        }
Example #3
0
        public void RegisterListener(ITrackerListener listener)
        {
            CheckDisposed();
            if (listener == null)
            {
                throw new ArgumentNullException(nameof(listener));
            }

            listener.AnnounceReceived += ListenerReceivedAnnounce;
            listener.ScrapeReceived   += ListenerReceivedScrape;
            Listeners.Add(listener);
        }
Example #4
0
        //-------------------------------------------------------------
        public void StartTracker(byte[] torrentData)
        //-------------------------------------------------------------
        {
            Log.Get().Write("Starting torrent tracker server, http on port: " + TRACKERHTTP_PORT + " udp on port: " + TRACKERUDP_PORT);
            if (!Helper.IsPortAvailable(TRACKERHTTP_PORT))
            {
                Log.Get().Write("Failed starting torrent tracker server on http port: " + TRACKERHTTP_PORT + " Port in use", Log.LogType.Error);
            }
            if (!Helper.IsPortAvailable(TRACKERUDP_PORT))
            {
                Log.Get().Write("Failed starting torrent tracker server on UDP port: " + TRACKERUDP_PORT + " Port in use", Log.LogType.Error);
            }

            //-------------------------------------------------------------
            //Create tracker server
            //-------------------------------------------------------------
            if (trackerServer == null)
            {
                trackerServer = new TrackerServer();
                listenerHttp  = TrackerListenerFactory.CreateHttp(IPAddress.Any, TRACKERHTTP_PORT); // http://localhost:{TRACKER_PORT}/announce
                listenerUdp   = TrackerListenerFactory.CreateUdp(IPAddress.Any, TRACKERUDP_PORT);   // http://localhost:{TRACKER_PORT}/announce

                //Add logning
                trackerServer.PeerAnnounced   += delegate(object o, AnnounceEventArgs e) { Log.Get().Write("TrackerServer PeerAnnounced"); };
                trackerServer.PeerScraped     += delegate(object o, ScrapeEventArgs e) { Log.Get().Write("TrackerServer PeerScrape"); };
                trackerServer.PeerTimedOut    += delegate(object o, TimedOutEventArgs e) { Log.Get().Write("TrackerServer Peer timeout"); };
                listenerHttp.AnnounceReceived += delegate(object o, AnnounceRequest e) { Log.Get().Write("TrackerListenerHTTP Announce received"); };
                listenerHttp.ScrapeReceived   += delegate(object o, TrackerScrapeRequest e) { Log.Get().Write("TrackerListenerHTTP Scrape received"); };
                listenerHttp.StatusChanged    += delegate(object o, EventArgs e)
                {
                    Log.Get().Write("TrackerListenerHttp Status changed: " + listenerHttp.Status);  //Typecast not working here, protectionlevel error. :( /*((MonoTorrent.Tracker.Listeners.HttpTrackerListener)o)*/
                };
                listenerUdp.AnnounceReceived += delegate(object o, AnnounceRequest e) { Log.Get().Write("TrackerListenerUDP Announce received"); };
                listenerUdp.ScrapeReceived   += delegate(object o, TrackerScrapeRequest e) { Log.Get().Write("TrackerListenerUDP Scrape received"); };
                listenerUdp.StatusChanged    += delegate(object o, EventArgs e)
                {
                    Log.Get().Write("TrackerListenerUdp Status changed: " + listenerUdp.Status);
                };

                //Start tracking server
                trackerServer.RegisterListener(listenerHttp);
                trackerServer.RegisterListener(listenerUdp);
                listenerUdp.Start();
                listenerHttp.Start();
                trackerServer.AllowUnregisteredTorrents = false; // If an announce request is received for a torrent which is not registered with the tracker an error will be returned.
                Log.Get().Write("TrackerListener listener status http:" + listenerHttp.Status + " udp status: " + listenerUdp.Status);
            }

            //-------------------------------------------------------------
            //Add new torrent to tracker
            //-------------------------------------------------------------
            MonoTorrent.Torrent torrent   = MonoTorrent.Torrent.Load(torrentData);
            InfoHashTrackable   trackable = new InfoHashTrackable(torrent);

            trackerServer.Add(trackable);
            Log.Get().Write("Adding torrent to tracker server, torrent size: " + torrentData.Length);

            //-------------------------------------------------------------
            //Seed file
            //-------------------------------------------------------------
            Log.Get().Write("Prepare to seed file");
            DownloadTorrent(torrent);
        }