From 38856e82be6a1204e8c2676a49e27106c2191be3 Mon Sep 17 00:00:00 2001 From: Leo Balduf Date: Tue, 12 Apr 2016 12:06:32 -0400 Subject: [PATCH] store: added peer parameters to AnnouncePeers --- server/store/memory/peer_store.go | 8 +++++++- server/store/memory/peer_store_test.go | 2 +- server/store/middleware/response/response.go | 4 +++- server/store/peer_store.go | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/server/store/memory/peer_store.go b/server/store/memory/peer_store.go index 846256e..bc9ecf8 100644 --- a/server/store/memory/peer_store.go +++ b/server/store/memory/peer_store.go @@ -224,7 +224,7 @@ func (s *peerStore) CollectGarbage(cutoff time.Time) error { return nil } -func (s *peerStore) AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int) (peers, peers6 []chihaya.Peer, err error) { +func (s *peerStore) AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int, peer4, peer6 chihaya.Peer) (peers, peers6 []chihaya.Peer, err error) { lkey := leechersKey(infoHash) skey := seedersKey(infoHash) shard := s.shards[s.shardIndex(infoHash)] @@ -271,8 +271,14 @@ func (s *peerStore) AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWan } if p.IP.To4() == nil { + if p.Equal(&peer6) { + continue + } peers6 = append(peers6, p.Peer) } else { + if p.Equal(&peer4) { + continue + } peers = append(peers, p.Peer) } numWant-- diff --git a/server/store/memory/peer_store_test.go b/server/store/memory/peer_store_test.go index 62e350f..ffcf52c 100644 --- a/server/store/memory/peer_store_test.go +++ b/server/store/memory/peer_store_test.go @@ -147,7 +147,7 @@ func TestPeerStoreAPI(t *testing.T) { assert.Equal(t, 7, s.NumSeeders(hash)) assert.Equal(t, 3, s.NumLeechers(hash)) - peers1, peers61, err := s.AnnouncePeers(hash, true, 5) + peers1, peers61, err := s.AnnouncePeers(hash, true, 5,peer,chihaya.Peer{}) assert.Nil(t, err) assert.NotNil(t, peers1) assert.NotNil(t, peers61) diff --git a/server/store/middleware/response/response.go b/server/store/middleware/response/response.go index f21dfb6..1970667 100644 --- a/server/store/middleware/response/response.go +++ b/server/store/middleware/response/response.go @@ -27,12 +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)) + resp.IPv4Peers, resp.IPv6Peers, err = storage.AnnouncePeers(req.InfoHash, req.Left == 0, int(req.NumWant), peer4, peer6) if err != nil { return err.(FailedToRetrievePeers) } diff --git a/server/store/peer_store.go b/server/store/peer_store.go index 8aadd47..74289d0 100644 --- a/server/store/peer_store.go +++ b/server/store/peer_store.go @@ -37,7 +37,7 @@ type PeerStore interface { // If it is false then seeders will be returned up until numWant or the // available seeders, whichever is smaller. If the available seeders is less // than numWant then peers are returned until numWant or they run out. - AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int) (peers, peers6 []chihaya.Peer, err error) + AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int, peer4, peer6 chihaya.Peer) (peers, peers6 []chihaya.Peer, err error) // CollectGarbage deletes peers from the peerStore which are older than the // cutoff time. CollectGarbage(cutoff time.Time) error