|
|
@ -14,8 +14,10 @@ import ( |
|
|
|
"github.com/libp2p/go-libp2p/core/peer" |
|
|
|
"github.com/libp2p/go-libp2p/core/peerstore" |
|
|
|
"github.com/libp2p/go-libp2p/core/transport" |
|
|
|
|
|
|
|
ma "github.com/multiformats/go-multiaddr" |
|
|
|
madns "github.com/multiformats/go-multiaddr-dns" |
|
|
|
mafmt "github.com/multiformats/go-multiaddr-fmt" |
|
|
|
manet "github.com/multiformats/go-multiaddr/net" |
|
|
|
) |
|
|
|
|
|
|
@ -65,6 +67,19 @@ var ( |
|
|
|
ErrGaterDisallowedConnection = errors.New("gater disallows connection to peer") |
|
|
|
) |
|
|
|
|
|
|
|
// ErrQUICDraft29 wraps ErrNoTransport and provide a more meaningful error message
|
|
|
|
var ErrQUICDraft29 errQUICDraft29 |
|
|
|
|
|
|
|
type errQUICDraft29 struct{} |
|
|
|
|
|
|
|
func (errQUICDraft29) Error() string { |
|
|
|
return "QUIC draft-29 has been removed, QUIC (RFC 9000) is accessible with /quic-v1" |
|
|
|
} |
|
|
|
|
|
|
|
func (errQUICDraft29) Unwrap() error { |
|
|
|
return ErrNoTransport |
|
|
|
} |
|
|
|
|
|
|
|
// DialAttempts governs how many times a goroutine will try to dial a given peer.
|
|
|
|
// Note: this is down to one, as we have _too many dials_ atm. To add back in,
|
|
|
|
// add loop back in Dial(.)
|
|
|
@ -407,6 +422,8 @@ func (s *Swarm) nonProxyAddr(addr ma.Multiaddr) bool { |
|
|
|
return !t.Proxy() |
|
|
|
} |
|
|
|
|
|
|
|
var quicDraft29DialMatcher = mafmt.And(mafmt.IP, mafmt.Base(ma.P_UDP), mafmt.Base(ma.P_QUIC)) |
|
|
|
|
|
|
|
// filterKnownUndialables takes a list of multiaddrs, and removes those
|
|
|
|
// that we definitely don't want to dial: addresses configured to be blocked,
|
|
|
|
// IPv6 link-local addresses, addresses without a dial-capable transport,
|
|
|
@ -435,7 +452,13 @@ func (s *Swarm) filterKnownUndialables(p peer.ID, addrs []ma.Multiaddr) (goodAdd |
|
|
|
// filter addresses with no transport
|
|
|
|
addrs = ma.FilterAddrs(addrs, func(a ma.Multiaddr) bool { |
|
|
|
if s.TransportForDialing(a) == nil { |
|
|
|
addrErrs = append(addrErrs, TransportError{Address: a, Cause: ErrNoTransport}) |
|
|
|
e := ErrNoTransport |
|
|
|
// We used to support QUIC draft-29 for a long time.
|
|
|
|
// Provide a more useful error when attempting to dial a QUIC draft-29 address.
|
|
|
|
if quicDraft29DialMatcher.Matches(a) { |
|
|
|
e = ErrQUICDraft29 |
|
|
|
} |
|
|
|
addrErrs = append(addrErrs, TransportError{Address: a, Cause: e}) |
|
|
|
return false |
|
|
|
} |
|
|
|
return true |
|
|
|