diff --git a/gather.go b/gather.go index 3a76981f..63abaf58 100644 --- a/gather.go +++ b/gather.go @@ -562,13 +562,13 @@ func (a *Agent) gatherCandidatesRelay(ctx context.Context, urls []*URL) { //noli locConn = turn.NewSTUNConn(conn) case url.Proto == ProtoTypeTCP && url.Scheme == SchemeTypeTURN: - tcpAddr, connectErr := net.ResolveTCPAddr(NetworkTypeTCP4.String(), TURNServerAddr) + tcpAddr, connectErr := a.net.ResolveTCPAddr(NetworkTypeTCP4.String(), TURNServerAddr) if connectErr != nil { a.log.Warnf("Failed to resolve TCP Addr %s: %v", TURNServerAddr, connectErr) return } - conn, connectErr := net.DialTCP(NetworkTypeTCP4.String(), nil, tcpAddr) + conn, connectErr := a.net.DialTCP(NetworkTypeTCP4.String(), nil, tcpAddr) if connectErr != nil { a.log.Warnf("Failed to Dial TCP Addr %s: %v", TURNServerAddr, connectErr) return @@ -579,18 +579,24 @@ func (a *Agent) gatherCandidatesRelay(ctx context.Context, urls []*URL) { //noli relayProtocol = tcp locConn = turn.NewSTUNConn(conn) case url.Proto == ProtoTypeUDP && url.Scheme == SchemeTypeTURNS: - udpAddr, connectErr := net.ResolveUDPAddr(network, TURNServerAddr) + udpAddr, connectErr := a.net.ResolveUDPAddr(network, TURNServerAddr) if connectErr != nil { a.log.Warnf("Failed to resolve UDP Addr %s: %v", TURNServerAddr, connectErr) return } - conn, connectErr := dtls.Dial(network, udpAddr, &dtls.Config{ + udpConn, dialErr := a.net.DialUDP("udp", nil, udpAddr) + if dialErr != nil { + a.log.Warnf("Failed to dial DTLS Address %s: %v", TURNServerAddr, connectErr) + return + } + + conn, connectErr := dtls.ClientWithContext(ctx, udpConn, &dtls.Config{ ServerName: url.Host, InsecureSkipVerify: a.insecureSkipVerify, //nolint:gosec }) if connectErr != nil { - a.log.Warnf("Failed to Dial DTLS Addr %s: %v", TURNServerAddr, connectErr) + a.log.Warnf("Failed to create DTLS client: %v", TURNServerAddr, connectErr) return } @@ -599,13 +605,28 @@ func (a *Agent) gatherCandidatesRelay(ctx context.Context, urls []*URL) { //noli relayProtocol = "dtls" locConn = &fakePacketConn{conn} case url.Proto == ProtoTypeTCP && url.Scheme == SchemeTypeTURNS: - conn, connectErr := tls.Dial(NetworkTypeTCP4.String(), TURNServerAddr, &tls.Config{ + tcpAddr, err := a.net.ResolveTCPAddr(NetworkTypeTCP4.String(), TURNServerAddr) + if err != nil { + a.log.Warnf("Failed to resolve relay address %s: %v", TURNServerAddr, err) + return + } + + tcpConn, dialErr := a.net.DialTCP(NetworkTypeTCP4.String(), nil, tcpAddr) + if dialErr != nil { + a.log.Warnf("Failed to connect to relay: %v", dialErr) + return + } + + conn := tls.Client(tcpConn, &tls.Config{ InsecureSkipVerify: a.insecureSkipVerify, //nolint:gosec }) - if connectErr != nil { - a.log.Warnf("Failed to Dial TLS Addr %s: %v", TURNServerAddr, connectErr) + + if err := conn.HandshakeContext(ctx); err != nil { + tcpConn.Close() + a.log.Warnf("Failed to connect to relay: %v", dialErr) return } + RelAddr = conn.LocalAddr().(*net.TCPAddr).IP.String() //nolint:forcetypeassert RelPort = conn.LocalAddr().(*net.TCPAddr).Port //nolint:forcetypeassert relayProtocol = "tls" diff --git a/mdns.go b/mdns.go index 5a431d15..210c28e7 100644 --- a/mdns.go +++ b/mdns.go @@ -1,11 +1,10 @@ package ice import ( - "net" - "github.com/google/uuid" "github.com/pion/logging" "github.com/pion/mdns" + "github.com/pion/transport" "golang.org/x/net/ipv4" ) @@ -31,17 +30,17 @@ func generateMulticastDNSName() (string, error) { return u.String() + ".local", err } -func createMulticastDNS(mDNSMode MulticastDNSMode, mDNSName string, log logging.LeveledLogger) (*mdns.Conn, MulticastDNSMode, error) { +func createMulticastDNS(n transport.Net, mDNSMode MulticastDNSMode, mDNSName string, log logging.LeveledLogger) (*mdns.Conn, MulticastDNSMode, error) { if mDNSMode == MulticastDNSModeDisabled { return nil, mDNSMode, nil } - addr, mdnsErr := net.ResolveUDPAddr("udp4", mdns.DefaultAddress) + addr, mdnsErr := n.ResolveUDPAddr("udp4", mdns.DefaultAddress) if mdnsErr != nil { return nil, mDNSMode, mdnsErr } - l, mdnsErr := net.ListenUDP("udp4", addr) + l, mdnsErr := n.ListenUDP("udp4", addr) if mdnsErr != nil { // If ICE fails to start MulticastDNS server just warn the user and continue log.Errorf("Failed to enable mDNS, continuing in mDNS disabled mode: (%s)", mdnsErr)