From: Matt Joiner Date: Tue, 25 Apr 2023 12:31:16 +0000 (+1000) Subject: Break PeerConn status into more lines and improve pex status X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=267fab622d3438725f7658fbc9db9eec6162db0e;p=btrtrc.git Break PeerConn status into more lines and improve pex status --- diff --git a/peerconn.go b/peerconn.go index df792ae3..4fefd610 100644 --- a/peerconn.go +++ b/peerconn.go @@ -65,20 +65,30 @@ type PeerConn struct { 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 @@ func (pc *PeerConn) remoteAddrPort() Option[netip.AddrPort] { AddrPort() netip.AddrPort }).AddrPort()) } + +func (pc *PeerConn) bitExtensionEnabled(bit pp.ExtensionBit) bool { + return pc.t.cl.config.Extensions.GetBit(bit) && pc.PeerExtensionBytes.GetBit(bit) +}