diff --git a/go.mod b/go.mod index 636e968..dbd1ccf 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/meehow/privtracker go 1.21.4 require ( - github.com/gofiber/fiber/v2 v2.52.6 + github.com/gofiber/fiber/v2 v2.52.5 github.com/jackpal/bencode-go v1.0.2 golang.org/x/crypto v0.32.0 ) diff --git a/go.sum b/go.sum index 2749856..fb0e0f9 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/gofiber/fiber/v2 v2.52.6 h1:Rfp+ILPiYSvvVuIPvxrBns+HJp8qGLDnLJawAu27XVI= -github.com/gofiber/fiber/v2 v2.52.6/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo= +github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/jackpal/bencode-go v1.0.2 h1:LcCNfZ344u0LpBPOZNjpCLps/wUOuN4r87Fy9+5yU8g= diff --git a/storage.go b/storage.go index 8a2cd2e..0af2075 100644 --- a/storage.go +++ b/storage.go @@ -24,18 +24,23 @@ func (peer Peer) String() string { return fmt.Sprintf("%s:%d", net.IP(peer[:16]), binary.BigEndian.Uint16(peer[16:])) } -// type serializedPeer [18]byte - type shard struct { - swarms map[Hash]swarm + swarms map[Hash]Swarm sync.RWMutex } -type swarm struct { +type Swarm struct { seeders map[Peer]int64 leechers map[Peer]int64 } +func NewSwarm() Swarm { + return Swarm{ + seeders: make(map[Peer]int64), + leechers: make(map[Peer]int64), + } +} + var shards = NewShards(512) var v4InV6Prefix = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff} @@ -47,29 +52,18 @@ func NewShards(size int) []*shard { shards := make([]*shard, size) for i := 0; i < size; i++ { shards[i] = &shard{ - swarms: make(map[Hash]swarm), + swarms: make(map[Hash]Swarm), } } return shards } -// func serialize(ip net.IP, port uint16) serializedPeer { -// var sp serializedPeer -// copy(sp[:], ip) -// sp[16] = byte(port >> 8) -// sp[17] = byte(port) -// return sp -// } - func PutPeer(room, infoHash string, peer Peer, seeding bool) { h := sha1.Sum([]byte(room + infoHash)) shard := shards[shardIndex(h)] shard.Lock() if _, ok := shard.swarms[h]; !ok { - shard.swarms[h] = swarm{ - seeders: make(map[Peer]int64), - leechers: make(map[Peer]int64), - } + shard.swarms[h] = NewSwarm() } if seeding { shard.swarms[h].seeders[peer] = time.Now().Unix() @@ -96,10 +90,7 @@ func GraduateLeecher(room, infoHash string, peer Peer) { shard := shards[shardIndex(h)] shard.Lock() if _, ok := shard.swarms[h]; !ok { - shard.swarms[h] = swarm{ - seeders: make(map[Peer]int64), - leechers: make(map[Peer]int64), - } + shard.swarms[h] = NewSwarm() } shard.swarms[h].seeders[peer] = time.Now().Unix() delete(shard.swarms[h].leechers, peer)