]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Adding Started and Stopped events
authorLeandro Martelli <martelli@epix.com.br>
Fri, 31 May 2019 16:11:01 +0000 (17:11 +0100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 2 Jun 2019 23:45:34 +0000 (09:45 +1000)
torrent.go
tracker_scraper.go

index 4a519d346d408a29b5d842cabee9886f88bcfd16..5d54bad74817ed9380bc84a477d912f04f42a5b1 100644 (file)
@@ -666,6 +666,11 @@ func (t *Torrent) numPiecesCompleted() (num int) {
 }
 
 func (t *Torrent) close() (err error) {
+       t.logger.Printf("Sending stopped event to trackers")
+       for _, ta := range t.trackerAnnouncers {
+               ta.Stop()
+       }
+
        t.closed.Set()
        t.tickleReaders()
        if t.storage != nil {
@@ -1298,11 +1303,11 @@ func (t *Torrent) startMissingTrackerScrapers() {
 
 // Returns an AnnounceRequest with fields filled out to defaults and current
 // values.
-func (t *Torrent) announceRequest() tracker.AnnounceRequest {
+func (t *Torrent) announceRequest(event tracker.AnnounceEvent) tracker.AnnounceRequest {
        // Note that IPAddress is not set. It's set for UDP inside the tracker
        // code, since it's dependent on the network in use.
        return tracker.AnnounceRequest{
-               Event:    tracker.None,
+               Event:    event,
                NumWant:  -1,
                Port:     uint16(t.cl.incomingPeerPort()),
                PeerId:   t.cl.peerID,
index 5f31a0197f40a9a8d10fe7bdedab63d577908856..8148c0f6059e6306ba3e40d90cfa8dac3706f82c 100644 (file)
@@ -96,7 +96,7 @@ func (me *trackerScraper) trackerUrl(ip net.IP) string {
 
 // Return how long to wait before trying again. For most errors, we return 5
 // minutes, a relatively quick turn around for DNS changes.
-func (me *trackerScraper) announce() (ret trackerAnnounceResult) {
+func (me *trackerScraper) announce(event tracker.AnnounceEvent) (ret trackerAnnounceResult) {
        defer func() {
                ret.Completed = time.Now()
        }()
@@ -107,7 +107,7 @@ func (me *trackerScraper) announce() (ret trackerAnnounceResult) {
                return
        }
        me.t.cl.lock()
-       req := me.t.announceRequest()
+       req := me.t.announceRequest(event)
        me.t.cl.unlock()
        res, err := tracker.Announce{
                HTTPProxy:  me.t.cl.config.HTTPProxy,
@@ -131,8 +131,12 @@ func (me *trackerScraper) announce() (ret trackerAnnounceResult) {
 }
 
 func (me *trackerScraper) Run() {
+       // make sure first announce is a "started"
+       e := tracker.Started
        for {
-               ar := me.announce()
+               ar := me.announce(e)
+               // after first announce, get back to regular "none"
+               e = tracker.None
                me.t.cl.lock()
                me.lastAnnounce = ar
                me.t.cl.unlock()
@@ -163,3 +167,16 @@ func (me *trackerScraper) Run() {
                }
        }
 }
+
+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()
+}