mirror of
https://github.com/LBRYFoundation/tracker.git
synced 2025-08-23 17:47:29 +00:00
Correctly handle ErrBadRequest in the announce handler
This commit is contained in:
parent
34729e3c91
commit
84195deb58
3 changed files with 6 additions and 8 deletions
|
@ -35,7 +35,7 @@ func makeHandler(handler ResponseHandler) httprouter.Handle {
|
||||||
duration := time.Since(start)
|
duration := time.Since(start)
|
||||||
stats.RecordTiming(stats.ResponseTime, duration)
|
stats.RecordTiming(stats.ResponseTime, duration)
|
||||||
|
|
||||||
if err != nil && err != models.ErrBadRequest {
|
if err != nil {
|
||||||
stats.RecordEvent(stats.ErroredRequest)
|
stats.RecordEvent(stats.ErroredRequest)
|
||||||
http.Error(w, err.Error(), httpCode)
|
http.Error(w, err.Error(), httpCode)
|
||||||
if glog.V(2) {
|
if glog.V(2) {
|
||||||
|
|
|
@ -42,7 +42,7 @@ func (s *Server) serveAnnounce(w http.ResponseWriter, r *http.Request, p httprou
|
||||||
ann, err := NewAnnounce(s.config, r, p)
|
ann, err := NewAnnounce(s.config, r, p)
|
||||||
writer := &Writer{w}
|
writer := &Writer{w}
|
||||||
|
|
||||||
if err == models.ErrMalformedRequest {
|
if err == models.ErrMalformedRequest || err == models.ErrBadRequest {
|
||||||
writer.WriteError(err)
|
writer.WriteError(err)
|
||||||
return http.StatusOK, nil
|
return http.StatusOK, nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
|
|
@ -68,12 +68,12 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error {
|
||||||
|
|
||||||
peer := models.NewPeer(ann, user, torrent)
|
peer := models.NewPeer(ann, user, torrent)
|
||||||
|
|
||||||
created, err := updateSwarm(conn, w, ann, peer, torrent)
|
created, err := updateSwarm(conn, ann, peer, torrent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
snatched, err := handleEvent(conn, w, ann, peer, user, torrent)
|
snatched, err := handleEvent(conn, ann, peer, user, torrent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ func (tkr *Tracker) HandleAnnounce(ann *models.Announce, w Writer) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// updateSwarm handles the changes to a torrent's swarm given an announce.
|
// updateSwarm handles the changes to a torrent's swarm given an announce.
|
||||||
func updateSwarm(c Conn, w Writer, ann *models.Announce, p *models.Peer, t *models.Torrent) (created bool, err error) {
|
func updateSwarm(c Conn, ann *models.Announce, p *models.Peer, t *models.Torrent) (created bool, err error) {
|
||||||
c.TouchTorrent(t.Infohash)
|
c.TouchTorrent(t.Infohash)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
|
@ -116,7 +116,6 @@ func updateSwarm(c Conn, w Writer, ann *models.Announce, p *models.Peer, t *mode
|
||||||
default:
|
default:
|
||||||
if ann.Event != "" && ann.Event != "started" {
|
if ann.Event != "" && ann.Event != "started" {
|
||||||
err = models.ErrBadRequest
|
err = models.ErrBadRequest
|
||||||
w.WriteError(err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +143,7 @@ func updateSwarm(c Conn, w Writer, ann *models.Announce, p *models.Peer, t *mode
|
||||||
|
|
||||||
// handleEvent checks to see whether an announce has an event and if it does,
|
// handleEvent checks to see whether an announce has an event and if it does,
|
||||||
// properly handles that event.
|
// properly handles that event.
|
||||||
func handleEvent(c Conn, w Writer, ann *models.Announce, p *models.Peer, u *models.User, t *models.Torrent) (snatched bool, err error) {
|
func handleEvent(c Conn, ann *models.Announce, p *models.Peer, u *models.User, t *models.Torrent) (snatched bool, err error) {
|
||||||
switch {
|
switch {
|
||||||
case ann.Event == "stopped" || ann.Event == "paused":
|
case ann.Event == "stopped" || ann.Event == "paused":
|
||||||
// updateSwarm checks if the peer is active on the torrent,
|
// updateSwarm checks if the peer is active on the torrent,
|
||||||
|
@ -185,7 +184,6 @@ func handleEvent(c Conn, w Writer, ann *models.Announce, p *models.Peer, u *mode
|
||||||
err = leecherFinished(c, t.Infohash, p)
|
err = leecherFinished(c, t.Infohash, p)
|
||||||
} else {
|
} else {
|
||||||
err = models.ErrBadRequest
|
err = models.ErrBadRequest
|
||||||
w.WriteError(err)
|
|
||||||
}
|
}
|
||||||
snatched = true
|
snatched = true
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue