Просмотр исходного кода

ipn/ipnlocal: actually fill out PeerAPIURLs in PeerStatus

The earlier 5f6d63936f3 was not complete.

Updates tailscale/corp#7515

Change-Id: I35efca51d1584c48ef6834a7d29cd42d7c943628
Signed-off-by: Brad Fitzpatrick <[email protected]>
Brad Fitzpatrick 3 лет назад
Родитель
Сommit
a26f23d949
2 измененных файлов с 11 добавлено и 6 удалено
  1. 8 6
      ipn/ipnlocal/local.go
  2. 3 0
      ipn/ipnstate/ipnstate.go

+ 8 - 6
ipn/ipnlocal/local.go

@@ -672,13 +672,11 @@ func (b *LocalBackend) populatePeerStatusLocked(sb *ipnstate.StatusBuilder) {
 		peerStatusFromNode(ps, p)
 
 		p4, p6 := peerAPIPorts(p)
-		ip4 := nodeIP(p, netip.Addr.Is4)
-		ip6 := nodeIP(p, netip.Addr.Is6)
-		if p4 != 0 && ip4.IsValid() {
-			ps.PeerAPIURL = append(ps.PeerAPIURL, peerAPIURL(ip4, p4))
+		if u := peerAPIURL(nodeIP(p, netip.Addr.Is4), p4); u != "" {
+			ps.PeerAPIURL = append(ps.PeerAPIURL, u)
 		}
-		if p6 != 0 && ip6.IsValid() {
-			ps.PeerAPIURL = append(ps.PeerAPIURL, peerAPIURL(ip6, p6))
+		if u := peerAPIURL(nodeIP(p, netip.Addr.Is6), p6); u != "" {
+			ps.PeerAPIURL = append(ps.PeerAPIURL, u)
 		}
 		sb.AddPeer(p.Key, ps)
 	}
@@ -3701,6 +3699,10 @@ func peerAPIPorts(peer *tailcfg.Node) (p4, p6 uint16) {
 	return
 }
 
+// peerAPIURL returns an HTTP URL for the peer's peerapi service,
+// without a trailing slash.
+//
+// If ip or port is the zero value then it returns the empty string.
 func peerAPIURL(ip netip.Addr, port uint16) string {
 	if port == 0 || !ip.IsValid() {
 		return ""

+ 3 - 0
ipn/ipnstate/ipnstate.go

@@ -391,6 +391,9 @@ func (sb *StatusBuilder) AddPeer(peer key.NodePublic, st *PeerStatus) {
 	if st.Active {
 		e.Active = true
 	}
+	if st.PeerAPIURL != nil {
+		e.PeerAPIURL = st.PeerAPIURL
+	}
 }
 
 type StatusUpdater interface {