From b1f186b6652a27a06bdac546db8408a87c73d846 Mon Sep 17 00:00:00 2001 From: Justin Li <jli.justinli@gmail.com> Date: Wed, 17 Feb 2016 17:39:21 -0500 Subject: [PATCH] Set IP on the request object --- chihaya.go | 5 +++-- pkg/event/event.go | 2 ++ pkg/event/event_test.go | 2 +- server/http/request.go | 24 +++++++++++++++--------- server/store/peer_store.go | 4 ++-- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/chihaya.go b/chihaya.go index 20ca691..7b25e0a 100644 --- a/chihaya.go +++ b/chihaya.go @@ -19,8 +19,9 @@ type AnnounceRequest struct { Event event.Event InfoHash InfoHash PeerID PeerID - IP string - Port uint16 + + IPv4, IPv6 net.IP + Port uint16 Compact bool NumWant uint64 diff --git a/pkg/event/event.go b/pkg/event/event.go index cb88c4a..c896cda 100644 --- a/pkg/event/event.go +++ b/pkg/event/event.go @@ -44,6 +44,8 @@ func init() { eventToString[Stopped] = "stopped" eventToString[Completed] = "completed" + stringToEvent[""] = None + for k, v := range eventToString { stringToEvent[v] = k } diff --git a/pkg/event/event_test.go b/pkg/event/event_test.go index 52a5341..d586f25 100644 --- a/pkg/event/event_test.go +++ b/pkg/event/event_test.go @@ -16,7 +16,7 @@ func TestNew(t *testing.T) { expected Event expectedErr error }{ - {"", None, ErrUnknownEvent}, + {"", None, nil}, {"NONE", None, nil}, {"none", None, nil}, {"started", Started, nil}, diff --git a/server/http/request.go b/server/http/request.go index b6036c4..d5cb131 100644 --- a/server/http/request.go +++ b/server/http/request.go @@ -31,10 +31,7 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest return nil, errors.NewBadRequest("failed to provide valid client event") } - compactStr, err := q.String("compact") - if err != nil { - return nil, errors.NewBadRequest("failed to parse parameter: compact") - } + compactStr, _ := q.String("compact") request.Compact = compactStr != "0" infoHashes := q.InfoHashes() @@ -67,10 +64,7 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest return nil, errors.NewBadRequest("failed to parse parameter: uploaded") } - request.NumWant, err = q.Uint64("numwant") - if err != nil { - return nil, errors.NewBadRequest("failed to parse parameter: numwant") - } + request.NumWant, _ = q.Uint64("numwant") port, err := q.Uint64("port") if err != nil { @@ -78,6 +72,13 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest } request.Port = uint16(port) + v4, v6, err := requestedIP(q, r, cfg) + if err != nil { + return nil, errors.NewBadRequest("failed to parse remote IP") + } + request.IPv4 = v4 + request.IPv6 = v6 + return request, nil } @@ -87,8 +88,13 @@ func scrapeRequest(r *http.Request, cfg *httpConfig) (*chihaya.ScrapeRequest, er return nil, err } + infoHashes := q.InfoHashes() + if len(infoHashes) < 1 { + return nil, errors.NewBadRequest("no info_hash parameter supplied") + } + request := &chihaya.ScrapeRequest{ - InfoHashes: q.InfoHashes(), + InfoHashes: infoHashes, Params: q, } diff --git a/server/store/peer_store.go b/server/store/peer_store.go index eb88ea4..568905d 100644 --- a/server/store/peer_store.go +++ b/server/store/peer_store.go @@ -16,10 +16,10 @@ var peerStoreDrivers = make(map[string]PeerStoreDriver) // PeerStore represents an interface for manipulating peers. type PeerStore interface { PutSeeder(infoHash chihaya.InfoHash, p chihaya.Peer) error - DeleteSeeder(infoHash chihaya.InfoHash, peerID chihaya.Peer) error + DeleteSeeder(infoHash chihaya.InfoHash, p chihaya.Peer) error PutLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error - DeleteLeecher(infoHash chihaya.InfoHash, peerID chihaya.Peer) error + DeleteLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error GraduateLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int) (peers, peers6 []chihaya.Peer, err error)