From 520a357e371a4cbcb2f6fb73e05d34ce95368da3 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Sat, 27 Jun 2015 00:09:57 -0400 Subject: [PATCH] tracker: remove last "bad request" A peer can join a swarm immediately as completed if they already have the file before they ever announce. If we don't have them in our leechers, we were previously failing to add them as a seeder. --- tracker/announce.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tracker/announce.go b/tracker/announce.go index ea12fc2..57b1c3d 100644 --- a/tracker/announce.go +++ b/tracker/announce.go @@ -226,12 +226,7 @@ func (tkr *Tracker) handlePeerEvent(ann *models.Announce, p *models.Peer) (snatc } case ann.Event == "completed": - if t.Leechers.Contains(p.Key()) { - err = tkr.leecherFinished(t, p) - } else { - err = models.ErrBadRequest - } - + tkr.leecherFinished(t, p) snatched = true case t.Leechers.Contains(p.Key()) && ann.Left == 0: @@ -244,12 +239,16 @@ func (tkr *Tracker) handlePeerEvent(ann *models.Announce, p *models.Peer) (snatc // leecherFinished moves a peer from the leeching pool to the seeder pool. func (tkr *Tracker) leecherFinished(t *models.Torrent, p *models.Peer) error { - if err := tkr.DeleteLeecher(t.Infohash, p); err != nil { - return err + if t.Leechers.Contains(p.Key()) { + if err := tkr.DeleteLeecher(t.Infohash, p); err != nil { + return err + } } + if err := tkr.PutSeeder(t.Infohash, p); err != nil { return err } + stats.RecordPeerEvent(stats.Completed, p.HasIPv6()) return nil }