From 9f229c4ab6c55cb6d34558638e38df159eb62ff3 Mon Sep 17 00:00:00 2001 From: Leo Balduf Date: Mon, 18 Apr 2016 15:49:36 -0400 Subject: [PATCH] add helper methods to get IPv4 and IPv6 peer --- chihaya.go | 22 ++++++++++++++++++++ server/store/middleware/response/response.go | 6 ++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/chihaya.go b/chihaya.go index 8a7386b..f8e765e 100644 --- a/chihaya.go +++ b/chihaya.go @@ -34,6 +34,28 @@ type AnnounceRequest struct { Params Params } +// Peer4 returns a Peer using the IPv4 endpoint of the Announce. +// Note that, if the Announce does not contain an IPv4 address, the IP field of +// the returned Peer can be nil. +func (r *AnnounceRequest) Peer4() Peer { + return Peer{ + IP: r.IPv4, + Port: r.Port, + ID: r.PeerID, + } +} + +// Peer6 returns a Peer using the IPv6 endpoint of the Announce. +// Note that, if the Announce does not contain an IPv6 address, the IP field of +// the returned Peer can be nil. +func (r *AnnounceRequest) Peer6() Peer { + return Peer{ + IP: r.IPv6, + Port: r.Port, + ID: r.PeerID, + } +} + // AnnounceResponse represents the parameters used to create an announce // response. type AnnounceResponse struct { diff --git a/server/store/middleware/response/response.go b/server/store/middleware/response/response.go index 1970667..72d8225 100644 --- a/server/store/middleware/response/response.go +++ b/server/store/middleware/response/response.go @@ -27,16 +27,14 @@ func (f FailedToRetrievePeers) Error() string { return string(f) } func responseAnnounceClient(next tracker.AnnounceHandler) tracker.AnnounceHandler { return func(cfg *chihaya.TrackerConfig, req *chihaya.AnnounceRequest, resp *chihaya.AnnounceResponse) (err error) { storage := store.MustGetStore() - peer4 := chihaya.Peer{ID: req.PeerID, IP: req.IPv4, Port: req.Port} - peer6 := chihaya.Peer{ID: req.PeerID, IP: req.IPv6, Port: req.Port} resp.MinInterval = cfg.MinAnnounceInterval resp.Compact = req.Compact resp.Complete = int32(storage.NumSeeders(req.InfoHash)) resp.Incomplete = int32(storage.NumLeechers(req.InfoHash)) - resp.IPv4Peers, resp.IPv6Peers, err = storage.AnnouncePeers(req.InfoHash, req.Left == 0, int(req.NumWant), peer4, peer6) + resp.IPv4Peers, resp.IPv6Peers, err = storage.AnnouncePeers(req.InfoHash, req.Left == 0, int(req.NumWant), req.Peer4(), req.Peer6()) if err != nil { - return err.(FailedToRetrievePeers) + return FailedToRetrievePeers(err.Error()) } return next(cfg, req, resp)