mirror of
https://github.com/SinTan1729/privtracker.git
synced 2025-04-19 17:50:00 -05:00
don't return self IP address
This commit is contained in:
parent
e3d1d82f5b
commit
b900c2862f
2 changed files with 26 additions and 22 deletions
2
main.go
2
main.go
|
@ -57,7 +57,7 @@ func announce(c *gin.Context) {
|
||||||
default:
|
default:
|
||||||
PutPeer(c.Param("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding())
|
PutPeer(c.Param("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding())
|
||||||
}
|
}
|
||||||
peersv4, peersv6, numSeeders, numLeechers := GetPeers(c.Param("room"), req.InfoHash, req.Numwant, req.IsSeeding())
|
peersv4, peersv6, numSeeders, numLeechers := GetPeers(c.Param("room"), req.InfoHash, req.IP, req.Port, req.IsSeeding(), req.Numwant)
|
||||||
interval := 120
|
interval := 120
|
||||||
if numSeeders == 0 {
|
if numSeeders == 0 {
|
||||||
interval /= 2
|
interval /= 2
|
||||||
|
|
46
storage.go
46
storage.go
|
@ -43,7 +43,7 @@ func serialize(ip string, port uint16) serializedPeer {
|
||||||
return serializedPeer(append(net.ParseIP(ip), byte(port>>8), byte(port)))
|
return serializedPeer(append(net.ParseIP(ip), byte(port>>8), byte(port)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func PutPeer(room, infoHash string, ip string, port uint16, seeding bool) {
|
func PutPeer(room, infoHash, ip string, port uint16, seeding bool) {
|
||||||
h := sha1.Sum([]byte(room + infoHash))
|
h := sha1.Sum([]byte(room + infoHash))
|
||||||
shard := shards[shardIndex(h)]
|
shard := shards[shardIndex(h)]
|
||||||
shard.Lock()
|
shard.Lock()
|
||||||
|
@ -53,29 +53,29 @@ func PutPeer(room, infoHash string, ip string, port uint16, seeding bool) {
|
||||||
leechers: make(map[serializedPeer]int64),
|
leechers: make(map[serializedPeer]int64),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
serialized := serialize(ip, port)
|
client := serialize(ip, port)
|
||||||
if seeding {
|
if seeding {
|
||||||
shard.swarms[h].seeders[serialized] = time.Now().Unix()
|
shard.swarms[h].seeders[client] = time.Now().Unix()
|
||||||
} else {
|
} else {
|
||||||
shard.swarms[h].leechers[serialized] = time.Now().Unix()
|
shard.swarms[h].leechers[client] = time.Now().Unix()
|
||||||
}
|
}
|
||||||
shard.Unlock()
|
shard.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeletePeer(room, infoHash string, ip string, port uint16) {
|
func DeletePeer(room, infoHash, ip string, port uint16) {
|
||||||
h := sha1.Sum([]byte(room + infoHash))
|
h := sha1.Sum([]byte(room + infoHash))
|
||||||
shard := shards[shardIndex(h)]
|
shard := shards[shardIndex(h)]
|
||||||
shard.Lock()
|
shard.Lock()
|
||||||
if _, ok := shard.swarms[h]; !ok {
|
if _, ok := shard.swarms[h]; !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
serialized := serialize(ip, port)
|
client := serialize(ip, port)
|
||||||
delete(shard.swarms[h].seeders, serialized)
|
delete(shard.swarms[h].seeders, client)
|
||||||
delete(shard.swarms[h].leechers, serialized)
|
delete(shard.swarms[h].leechers, client)
|
||||||
shard.Unlock()
|
shard.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func GraduateLeecher(room, infoHash string, ip string, port uint16) {
|
func GraduateLeecher(room, infoHash, ip string, port uint16) {
|
||||||
h := sha1.Sum([]byte(room + infoHash))
|
h := sha1.Sum([]byte(room + infoHash))
|
||||||
shard := shards[shardIndex(h)]
|
shard := shards[shardIndex(h)]
|
||||||
shard.Lock()
|
shard.Lock()
|
||||||
|
@ -85,38 +85,42 @@ func GraduateLeecher(room, infoHash string, ip string, port uint16) {
|
||||||
leechers: make(map[serializedPeer]int64),
|
leechers: make(map[serializedPeer]int64),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
serialized := serialize(ip, port)
|
client := serialize(ip, port)
|
||||||
shard.swarms[h].seeders[serialized] = time.Now().Unix()
|
shard.swarms[h].seeders[client] = time.Now().Unix()
|
||||||
delete(shard.swarms[h].leechers, serialized)
|
delete(shard.swarms[h].leechers, client)
|
||||||
shard.Unlock()
|
shard.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPeers(room, infoHash string, numWant uint, seeding bool) (peersv4, peersv6 []byte, numSeeders, numLeechers int) {
|
func GetPeers(room, infoHash, ip string, port uint16, seeding bool, numWant uint) (peersv4, peersv6 []byte, numSeeders, numLeechers int) {
|
||||||
h := sha1.Sum([]byte(room + infoHash))
|
h := sha1.Sum([]byte(room + infoHash))
|
||||||
shard := shards[shardIndex(h)]
|
shard := shards[shardIndex(h)]
|
||||||
shard.RLock()
|
shard.RLock()
|
||||||
|
client := serialize(ip, port)
|
||||||
// seeders don't need other seeders
|
// seeders don't need other seeders
|
||||||
if !seeding {
|
if !seeding {
|
||||||
for serialized := range shard.swarms[h].seeders {
|
for peer := range shard.swarms[h].seeders {
|
||||||
if numWant == 0 {
|
if numWant == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) {
|
if bytes.HasPrefix([]byte(peer), v4InV6Prefix) {
|
||||||
peersv4 = append(peersv4, serialized[12:]...)
|
peersv4 = append(peersv4, peer[12:]...)
|
||||||
} else {
|
} else {
|
||||||
peersv6 = append(peersv6, serialized...)
|
peersv6 = append(peersv6, peer...)
|
||||||
}
|
}
|
||||||
numWant--
|
numWant--
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for serialized := range shard.swarms[h].leechers {
|
for peer := range shard.swarms[h].leechers {
|
||||||
|
if peer == client {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if numWant == 0 {
|
if numWant == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if bytes.HasPrefix([]byte(serialized), v4InV6Prefix) {
|
if bytes.HasPrefix([]byte(peer), v4InV6Prefix) {
|
||||||
peersv4 = append(peersv4, serialized[12:]...)
|
peersv4 = append(peersv4, peer[12:]...)
|
||||||
} else {
|
} else {
|
||||||
peersv6 = append(peersv6, serialized...)
|
peersv6 = append(peersv6, peer...)
|
||||||
}
|
}
|
||||||
numWant--
|
numWant--
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue