]> Sergey Matveev's repositories - btrtrc.git/blobdiff - pexconn.go
Drop support for go 1.20
[btrtrc.git] / pexconn.go
index cc6c3fc679dbbd50cc4dd7c2c57448c7f06dd59d..9254f5e1876c15ceff293d9f37c687d004d73b5c 100644 (file)
@@ -108,13 +108,13 @@ func (s *pexConnState) updateRemoteLiveConns(rx pp.PexMsg) (errs []error) {
                delete(s.remoteLiveConns, addrPort)
        }
        for i, added := range rx.Added {
-               addr := netip.AddrFrom4([4]byte(added.IP.To4()))
+               addr := netip.AddrFrom4(*(*[4]byte)(added.IP.To4()))
                addrPort := netip.AddrPortFrom(addr, uint16(added.Port))
                flags := g.SliceGet(rx.AddedFlags, i)
                g.MakeMapIfNilAndSet(&s.remoteLiveConns, addrPort, flags)
        }
        for i, added := range rx.Added6 {
-               addr := netip.AddrFrom16([16]byte(added.IP.To16()))
+               addr := netip.AddrFrom16(*(*[16]byte)(added.IP.To16()))
                addrPort := netip.AddrPortFrom(addr, uint16(added.Port))
                flags := g.SliceGet(rx.Added6Flags, i)
                g.MakeMapIfNilAndSet(&s.remoteLiveConns, addrPort, flags)
@@ -143,11 +143,18 @@ func (s *pexConnState) Recv(payload []byte) error {
        var peers peerInfos
        peers.AppendFromPex(rx.Added6, rx.Added6Flags)
        peers.AppendFromPex(rx.Added, rx.AddedFlags)
+       if time.Now().Before(s.torrent.pex.rest) {
+               s.dbg.Printf("in cooldown period, incoming PEX discarded")
+               return nil
+       }
        added := s.torrent.addPeers(peers)
        s.dbg.Printf("got %v peers over pex, added %v", len(peers), added)
 
+       if len(peers) > 0 {
+               s.torrent.pex.rest = time.Now().Add(pexInterval)
+       }
+
        // one day we may also want to:
-       // - check if the peer is not flooding us with PEX updates
        // - handle drops somehow
        // - detect malicious peers