"io"
"math/rand"
"net"
+ "net/netip"
"strconv"
"strings"
"time"
+ utHolepunch "github.com/anacrolix/torrent/peer_protocol/ut-holepunch"
+
"github.com/RoaringBitmap/roaring"
. "github.com/anacrolix/generics"
"github.com/anacrolix/log"
peerSentHaveAll bool
peerRequestDataAllocLimiter alloclim.Limiter
+
+ outstandingHolepunchingRendezvous map[netip.AddrPort]struct{}
}
func (cn *PeerConn) peerImplStatusLines() []string {
err = fmt.Errorf("receiving pex message: %w", err)
}
return
+ case utHolepunchExtendedId:
+ var msg utHolepunch.Msg
+ err = msg.UnmarshalBinary(payload)
+ if err != nil {
+ err = fmt.Errorf("unmarshalling ut_holepunch message: %w", err)
+ return
+ }
default:
return fmt.Errorf("unexpected extended message ID: %v", id)
}
func (pc *PeerConn) remoteIsTransmission() bool {
return bytes.HasPrefix(pc.PeerID[:], []byte("-TR")) && pc.PeerID[7] == '-'
}
+
+func (pc *PeerConn) remoteAddrPort() Option[netip.AddrPort] {
+ return Some(pc.conn.RemoteAddr().(interface {
+ AddrPort() netip.AddrPort
+ }).AddrPort())
+}