Forráskód Böngészése

Handle static relays

Ettore Di Giacinto 3 éve
szülő
commit
3ebc0496f9
2 módosított fájl, 24 hozzáadás és 23 törlés
  1. 8 10
      pkg/config/config.go
  2. 16 13
      pkg/discovery/dht.go

+ 8 - 10
pkg/config/config.go

@@ -245,18 +245,16 @@ func (c Config) ToOpts(l *logger.Logger) ([]node.Option, []vpn.Option, error) {
 			relayOpts = append(relayOpts, autorelay.WithCircuitV1Support())
 		}
 
+		staticRelays := c.Connection.StaticRelays
+		if len(staticRelays) == 0 {
+			staticRelays = autorelay.DefaultRelays
+		}
+		if c.Connection.AutoRelayDiscoveryInterval == 0 {
+			c.Connection.AutoRelayDiscoveryInterval = 5 * time.Minute
+		}
 		// If no relays are specified and no discovery interval, then just use default static relays (to be deprecated)
-		if len(c.Connection.StaticRelays) > 0 && c.Connection.OnlyStaticRelays {
-			relayOpts = append(relayOpts, autorelay.WithStaticRelays(peers2AddrInfo(c.Connection.StaticRelays)))
-		} else {
 
-			if c.Connection.AutoRelayDiscoveryInterval == 0 {
-				c.Connection.AutoRelayDiscoveryInterval = 5 * time.Minute
-			}
-
-			staticRelays := append(autorelay.DefaultRelays, c.Connection.StaticRelays...)
-			relayOpts = append(relayOpts, autorelay.WithPeerSource(d.FindClosePeers(llger, staticRelays...), c.Connection.AutoRelayDiscoveryInterval))
-		}
+		relayOpts = append(relayOpts, autorelay.WithPeerSource(d.FindClosePeers(llger, c.Connection.OnlyStaticRelays, staticRelays...), c.Connection.AutoRelayDiscoveryInterval))
 
 		libp2pOpts = append(libp2pOpts,
 			libp2p.EnableAutoRelay(relayOpts...))

+ 16 - 13
pkg/discovery/dht.go

@@ -157,25 +157,28 @@ func (d *DHT) bootstrapPeers(c log.StandardLogger, ctx context.Context, host hos
 	wg.Wait()
 }
 
-func (d *DHT) FindClosePeers(ll log.StandardLogger, static ...string) func(numPeers int) <-chan peer.AddrInfo {
+func (d *DHT) FindClosePeers(ll log.StandardLogger, onlyStaticRelays bool, static ...string) func(numPeers int) <-chan peer.AddrInfo {
 	return func(numPeers int) <-chan peer.AddrInfo {
-		peerChan := make(chan peer.AddrInfo)
+		peerChan := make(chan peer.AddrInfo, numPeers)
 		go func() {
-			ctx := context.Background()
-			closestPeers, err := d.GetClosestPeers(ctx, d.PeerID().String())
-			if err != nil {
-				close(peerChan)
-			}
 
 			toStream := []peer.AddrInfo{}
 
-			for _, p := range closestPeers {
-				addrs := d.Host().Peerstore().Addrs(p)
-				if len(addrs) == 0 {
-					continue
+			if !onlyStaticRelays {
+				ctx := context.Background()
+				closestPeers, err := d.GetClosestPeers(ctx, d.PeerID().String())
+				if err != nil {
+					close(peerChan)
+				}
+
+				for _, p := range closestPeers {
+					addrs := d.Host().Peerstore().Addrs(p)
+					if len(addrs) == 0 {
+						continue
+					}
+					ll.Debugf("[relay discovery] Found close peer '%s'", p.Pretty())
+					toStream = append(toStream, peer.AddrInfo{ID: p, Addrs: addrs})
 				}
-				ll.Debugf("[relay discovery] Found close peer '%s'", p.Pretty())
-				toStream = append(toStream, peer.AddrInfo{ID: p, Addrs: addrs})
 			}
 
 			for _, r := range static {