Skip to content

Commit

Permalink
wip: use new Net interface for gathering candidates
Browse files Browse the repository at this point in the history
  • Loading branch information
stv0g committed Nov 15, 2022
1 parent 1a11255 commit 01062c7
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 13 deletions.
37 changes: 29 additions & 8 deletions gather.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
}

Expand All @@ -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"
Expand Down
9 changes: 4 additions & 5 deletions mdns.go
Original file line number Diff line number Diff line change
@@ -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"
)

Expand All @@ -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)
Expand Down

0 comments on commit 01062c7

Please sign in to comment.