func (t *TcpTransport) newTcpDialer(base manet.Dialer, laddr ma.Multiaddr, doReuse bool) (*tcpDialer, error) { // get the local net.Addr manually la, err := manet.ToNetAddr(laddr) if err != nil { return nil, err // something wrong with laddr. } if doReuse && ReuseportIsAvailable() { rd := reuseport.Dialer{ D: net.Dialer{ LocalAddr: la, Timeout: base.Timeout, }, } return &tcpDialer{ doReuse: true, laddr: laddr, rd: rd, madialer: base, transport: t, }, nil } return &tcpDialer{ doReuse: false, laddr: laddr, madialer: base, transport: t, }, nil }
func getDialableListenAddrs(ph host.Host) ([]*net.TCPAddr, error) { var out []*net.TCPAddr for _, addr := range ph.Addrs() { na, err := manet.ToNetAddr(addr) if err != nil { continue } tcp, ok := na.(*net.TCPAddr) if ok { out = append(out, tcp) } } if len(out) == 0 { return nil, errors.New("failed to find good external addr from peerhost") } return out, nil }
func (f *Filters) AddrBlocked(a ma.Multiaddr) bool { maddr := ma.Split(a) if len(maddr) == 0 { return false } netaddr, err := manet.ToNetAddr(maddr[0]) if err != nil { // if we cant parse it, its probably not blocked return false } netip := net.ParseIP(netaddr.String()) if netip == nil { return false } f.mu.RLock() defer f.mu.RUnlock() for _, ft := range f.filters { if ft.Contains(netip) { return true } } return false }