X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=pexconn.go;h=9254f5e1876c15ceff293d9f37c687d004d73b5c;hb=HEAD;hp=cc6c3fc679dbbd50cc4dd7c2c57448c7f06dd59d;hpb=60370d60d425a85d7dce7a7e173085b957e46020;p=btrtrc.git diff --git a/pexconn.go b/pexconn.go index cc6c3fc6..9254f5e1 100644 --- a/pexconn.go +++ b/pexconn.go @@ -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