From 42b408b5a334e0c553c845052bc55f55ce9183d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Adamski?= Date: Mon, 7 Dec 2020 00:52:51 +0100 Subject: [PATCH] share leechers with leechers, why not --- storage.go | 50 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/storage.go b/storage.go index 5d0c3d2..48c0480 100644 --- a/storage.go +++ b/storage.go @@ -96,9 +96,40 @@ func GetPeers(room, infoHash string, numWant uint, seeding bool) (peersv4, peers shard := shards[shardIndex(h)] shard.RLock() if seeding { - peersv4, peersv6 = getPeersFromSwarm(numWant, shard.swarms[h].leechers) + for serialized := range shard.swarms[h].leechers { + if numWant == 0 { + break + } + if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) { + peersv4 = append(peersv4, serialized[12:]...) + } else { + peersv6 = append(peersv6, serialized...) + } + numWant-- + } } else { - peersv4, peersv6 = getPeersFromSwarm(numWant, shard.swarms[h].seeders) + for serialized := range shard.swarms[h].seeders { + if numWant == 0 { + break + } + if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) { + peersv4 = append(peersv4, serialized[12:]...) + } else { + peersv6 = append(peersv6, serialized...) + } + numWant-- + } + for serialized := range shard.swarms[h].leechers { + if numWant == 0 { + break + } + if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) { + peersv4 = append(peersv4, serialized[12:]...) + } else { + peersv6 = append(peersv6, serialized...) + } + numWant-- + } } numSeeders = len(shard.swarms[h].seeders) numLeechers = len(shard.swarms[h].leechers) @@ -106,21 +137,6 @@ func GetPeers(room, infoHash string, numWant uint, seeding bool) (peersv4, peers return } -func getPeersFromSwarm(numWant uint, peers map[serializedPeer]int64) (peersv4, peersv6 []byte) { - for serialized := range peers { - if numWant == 0 { - break - } - if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) { - peersv4 = append(peersv4, serialized[12:]...) - } else { - peersv6 = append(peersv6, serialized...) - } - numWant-- - } - return -} - func GetStats(room, infoHash string) (numSeeders, numLeechers int) { h := sha1.Sum([]byte(room + infoHash)) shard := shards[shardIndex(h)]