Set IP on the request object

This commit is contained in:
Justin Li 2016-02-17 17:39:21 -05:00 committed by Jimmy Zelinskie
parent 75b4a20e56
commit b1f186b665
5 changed files with 23 additions and 14 deletions

View file

@ -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

View file

@ -44,6 +44,8 @@ func init() {
eventToString[Stopped] = "stopped"
eventToString[Completed] = "completed"
stringToEvent[""] = None
for k, v := range eventToString {
stringToEvent[v] = k
}

View file

@ -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},

View file

@ -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,
}

View file

@ -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)