peerconn.go | 38 ++++++++++++++++++++++++++------------ diff --git a/peerconn.go b/peerconn.go index df792ae3053cfa6cdfa9153776a23d38d83ee5cc..4fefd6101b954c0a0347108e914653425c1b234b 100644 --- a/peerconn.go +++ b/peerconn.go @@ -65,20 +65,30 @@ outstandingHolepunchingRendezvous map[netip.AddrPort]struct{} } +func (cn *PeerConn) pexStatus() string { + if !cn.bitExtensionEnabled(pp.ExtensionBitExtended) { + return "extended protocol disabled" + } + if cn.PeerExtensionIDs == nil { + return "pending extended handshake" + } + if !cn.supportsExtension(pp.ExtensionNamePex) { + return "unsupported" + } + return fmt.Sprintf( + "%v conns, %v unsent events", + len(cn.pex.remoteLiveConns), + cn.pex.numPending(), + ) +} + func (cn *PeerConn) peerImplStatusLines() []string { - lines := make([]string, 0, 2) - lines = append( - lines, - fmt.Sprintf("%+-55q %v %s", cn.PeerID, cn.PeerExtensionBytes, cn.connString)) - if cn.supportsExtension(pp.ExtensionNamePex) { - lines = append( - lines, - fmt.Sprintf( - "pex: %v conns, %v unsent events", - cn.pex.remoteLiveConns, - cn.pex.numPending())) + return []string{ + cn.connString, + fmt.Sprintf("peer id: %+q", cn.PeerID), + fmt.Sprintf("extensions: %v", cn.PeerExtensionBytes), + fmt.Sprintf("pex: %s", cn.pexStatus()), } - return lines } // Returns true if the connection is over IPv6. @@ -1069,3 +1079,7 @@ return Some(pc.conn.RemoteAddr().(interface { AddrPort() netip.AddrPort }).AddrPort()) } + +func (pc *PeerConn) bitExtensionEnabled(bit pp.ExtensionBit) bool { + return pc.t.cl.config.Extensions.GetBit(bit) && pc.PeerExtensionBytes.GetBit(bit) +}