|
@ -340,6 +340,15 @@ func (r *PEXReactor) ReceiveAddrs(addrs []*p2p.NetAddress, src Peer) error { |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return err |
|
|
return err |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
srcIsSeed := false |
|
|
|
|
|
for _, seedAddr := range r.seedAddrs { |
|
|
|
|
|
if seedAddr.Equals(srcAddr) { |
|
|
|
|
|
srcIsSeed = true |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
for _, netAddr := range addrs { |
|
|
for _, netAddr := range addrs { |
|
|
// Validate netAddr. Disconnect from a peer if it sends us invalid data.
|
|
|
// Validate netAddr. Disconnect from a peer if it sends us invalid data.
|
|
|
if netAddr == nil { |
|
|
if netAddr == nil { |
|
@ -365,13 +374,23 @@ func (r *PEXReactor) ReceiveAddrs(addrs []*p2p.NetAddress, src Peer) error { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// If this address came from a seed node, try to connect to it without
|
|
|
// If this address came from a seed node, try to connect to it without
|
|
|
// waiting.
|
|
|
|
|
|
for _, seedAddr := range r.seedAddrs { |
|
|
|
|
|
if seedAddr.Equals(srcAddr) { |
|
|
|
|
|
r.ensurePeers() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// waiting (#2093)
|
|
|
|
|
|
if srcIsSeed { |
|
|
|
|
|
r.Logger.Info("Will dial address, which came from seed", "addr", netAddr, "seed", srcAddr) |
|
|
|
|
|
go func(addr *p2p.NetAddress) { |
|
|
|
|
|
err := r.dialPeer(addr) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
switch err.(type) { |
|
|
|
|
|
case errMaxAttemptsToDial, errTooEarlyToDial: |
|
|
|
|
|
r.Logger.Debug(err.Error(), "addr", addr) |
|
|
|
|
|
default: |
|
|
|
|
|
r.Logger.Error(err.Error(), "addr", addr) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}(netAddr) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return nil |
|
|
return nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|