"time"
"github.com/anacrolix/dht/krpc"
- "github.com/anacrolix/missinggo"
"github.com/anacrolix/torrent/tracker"
)
// Announces a torrent to a tracker at regular intervals, when peers are
// required.
type trackerScraper struct {
- u url.URL
- // Causes the trackerScraper to stop running.
- stop missinggo.Event
+ u url.URL
t *Torrent
lastAnnounce trackerAnnounceResult
}
me.t.cl.lock()
req := me.t.announceRequest(event)
me.t.cl.unlock()
+ //log.Printf("announcing %s %s to %q", me.t, req.Event, me.u.String())
res, err := tracker.Announce{
HTTPProxy: me.t.cl.config.HTTPProxy,
UserAgent: me.t.cl.config.HTTPUserAgent,
}
func (me *trackerScraper) Run() {
+ defer me.announceStopped()
// make sure first announce is a "started"
e := tracker.Started
for {
select {
case <-me.t.closed.LockedChan(me.t.cl.locker()):
return
- case <-me.stop.LockedChan(me.t.cl.locker()):
- return
case <-wantPeers:
goto wait
case <-time.After(time.Until(ar.Completed.Add(interval))):
}
}
-func (me *trackerScraper) Stop() {
- req := me.t.announceRequest(tracker.Stopped)
- ip, _ := me.getIp()
- tracker.Announce{
- HTTPProxy: me.t.cl.config.HTTPProxy,
- UserAgent: me.t.cl.config.HTTPUserAgent,
- TrackerUrl: me.trackerUrl(ip),
- Request: req,
- HostHeader: me.u.Host,
- ServerName: me.u.Hostname(),
- }.Do()
+func (me *trackerScraper) announceStopped() {
+ me.announce(tracker.Stopped)
}