store: added peer parameters to AnnouncePeers
This commit is contained in:
parent
d453bf7a75
commit
38856e82be
4 changed files with 12 additions and 4 deletions
|
@ -224,7 +224,7 @@ func (s *peerStore) CollectGarbage(cutoff time.Time) error {
|
||||||
return nil
|
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)
|
lkey := leechersKey(infoHash)
|
||||||
skey := seedersKey(infoHash)
|
skey := seedersKey(infoHash)
|
||||||
shard := s.shards[s.shardIndex(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.IP.To4() == nil {
|
||||||
|
if p.Equal(&peer6) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
peers6 = append(peers6, p.Peer)
|
peers6 = append(peers6, p.Peer)
|
||||||
} else {
|
} else {
|
||||||
|
if p.Equal(&peer4) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
peers = append(peers, p.Peer)
|
peers = append(peers, p.Peer)
|
||||||
}
|
}
|
||||||
numWant--
|
numWant--
|
||||||
|
|
|
@ -147,7 +147,7 @@ func TestPeerStoreAPI(t *testing.T) {
|
||||||
assert.Equal(t, 7, s.NumSeeders(hash))
|
assert.Equal(t, 7, s.NumSeeders(hash))
|
||||||
assert.Equal(t, 3, s.NumLeechers(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.Nil(t, err)
|
||||||
assert.NotNil(t, peers1)
|
assert.NotNil(t, peers1)
|
||||||
assert.NotNil(t, peers61)
|
assert.NotNil(t, peers61)
|
||||||
|
|
|
@ -27,12 +27,14 @@ func (f FailedToRetrievePeers) Error() string { return string(f) }
|
||||||
func responseAnnounceClient(next tracker.AnnounceHandler) tracker.AnnounceHandler {
|
func responseAnnounceClient(next tracker.AnnounceHandler) tracker.AnnounceHandler {
|
||||||
return func(cfg *chihaya.TrackerConfig, req *chihaya.AnnounceRequest, resp *chihaya.AnnounceResponse) (err error) {
|
return func(cfg *chihaya.TrackerConfig, req *chihaya.AnnounceRequest, resp *chihaya.AnnounceResponse) (err error) {
|
||||||
storage := store.MustGetStore()
|
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.MinInterval = cfg.MinAnnounceInterval
|
||||||
resp.Compact = req.Compact
|
resp.Compact = req.Compact
|
||||||
resp.Complete = int32(storage.NumSeeders(req.InfoHash))
|
resp.Complete = int32(storage.NumSeeders(req.InfoHash))
|
||||||
resp.Incomplete = int32(storage.NumLeechers(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 {
|
if err != nil {
|
||||||
return err.(FailedToRetrievePeers)
|
return err.(FailedToRetrievePeers)
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ type PeerStore interface {
|
||||||
// If it is false then seeders will be returned up until numWant or the
|
// 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
|
// available seeders, whichever is smaller. If the available seeders is less
|
||||||
// than numWant then peers are returned until numWant or they run out.
|
// 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
|
// CollectGarbage deletes peers from the peerStore which are older than the
|
||||||
// cutoff time.
|
// cutoff time.
|
||||||
CollectGarbage(cutoff time.Time) error
|
CollectGarbage(cutoff time.Time) error
|
||||||
|
|
Loading…
Reference in a new issue