From 267fab622d3438725f7658fbc9db9eec6162db0e Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Tue, 25 Apr 2023 22:31:16 +1000
Subject: [PATCH] Break PeerConn status into more lines and improve pex status

---
 peerconn.go | 38 ++++++++++++++++++++++++++------------
 1 file changed, 26 insertions(+), 12 deletions(-)

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)
+}
-- 
2.51.0