specify between torrent and http errors

This commit is contained in:
Jimmy Zelinskie 2014-07-02 00:33:19 -04:00
parent 6d5290d85e
commit d954378791
2 changed files with 23 additions and 7 deletions

View file

@ -18,10 +18,13 @@ import (
func (t *Tracker) ServeAnnounce(w http.ResponseWriter, r *http.Request, p httprouter.Params) int {
ann, err := models.NewAnnounce(t.cfg, r, p)
if err != nil {
if err == models.ErrMalformedRequest {
fail(w, r, err)
return http.StatusOK
}
if err != nil {
return http.StatusInternalServerError
}
conn, err := t.tp.Get()
if err != nil {
@ -30,25 +33,31 @@ func (t *Tracker) ServeAnnounce(w http.ResponseWriter, r *http.Request, p httpro
if t.cfg.Whitelist {
err = conn.ClientWhitelisted(ann.ClientID())
if err != nil {
if err == tracker.ErrClientUnapproved {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
}
var user *models.User
if t.cfg.Private {
user, err = conn.FindUser(ann.Passkey)
if err != nil {
if err == tracker.ErrUserDNE {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
}
torrent, err := conn.FindTorrent(ann.Infohash)
if err != nil {
if err == tracker.ErrTorrentDNE {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
peer := models.NewPeer(ann, user, torrent)

View file

@ -12,14 +12,17 @@ import (
"github.com/julienschmidt/httprouter"
"github.com/chihaya/chihaya/bencode"
"github.com/chihaya/chihaya/drivers/tracker"
"github.com/chihaya/chihaya/models"
)
func (t *Tracker) ServeScrape(w http.ResponseWriter, r *http.Request, p httprouter.Params) int {
scrape, err := models.NewScrape(t.cfg, r, p)
if err != nil {
if err == models.ErrMalformedRequest {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
conn, err := t.tp.Get()
@ -29,18 +32,22 @@ func (t *Tracker) ServeScrape(w http.ResponseWriter, r *http.Request, p httprout
if t.cfg.Private {
_, err = conn.FindUser(scrape.Passkey)
if err != nil {
if err == tracker.ErrUserDNE {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
}
var torrents []*models.Torrent
for _, infohash := range scrape.Infohashes {
torrent, err := conn.FindTorrent(infohash)
if err != nil {
if err == tracker.ErrTorrentDNE {
fail(w, r, err)
return http.StatusOK
} else if err != nil {
return http.StatusInternalServerError
}
torrents = append(torrents, torrent)
}