Support TURN over TCP

Relates to pion/turn#1
This commit is contained in:
Sean DuBois
2019-10-06 10:15:27 -07:00
committed by Sean DuBois
parent 377e52e387
commit 84576aed1f
4 changed files with 42 additions and 13 deletions
+1
View File
@@ -45,6 +45,7 @@ func TestRelayOnlyConnection(t *testing.T) {
Username: "username",
Password: "password",
Port: serverPort,
Proto: ProtoTypeUDP,
},
},
CandidateTypes: []CandidateType{CandidateTypeRelay},
+38 -7
View File
@@ -378,13 +378,45 @@ func (a *Agent) gatherCandidatesRelay(urls []*URL) error {
return ErrPasswordEmpty
}
locConn, err := a.net.ListenPacket(network, "0.0.0.0:0")
if err != nil {
return err
TURNServerAddr := fmt.Sprintf("%s:%d", url.Host, url.Port)
var (
locConn net.PacketConn
err error
RelAddr string
RelPort int
)
if url.Proto == ProtoTypeUDP {
locConn, err = a.net.ListenPacket(network, "0.0.0.0:0")
if err != nil {
return err
}
RelAddr = locConn.LocalAddr().(*net.UDPAddr).IP.String()
RelPort = locConn.LocalAddr().(*net.UDPAddr).Port
} else {
var (
tcpAddr *net.TCPAddr
tcpConn *net.TCPConn
)
tcpAddr, err = net.ResolveTCPAddr(NetworkTypeTCP4.String(), TURNServerAddr)
if err != nil {
return err
}
tcpConn, err = net.DialTCP(NetworkTypeTCP4.String(), nil, tcpAddr)
if err != nil {
return err
}
RelAddr = tcpConn.LocalAddr().(*net.TCPAddr).IP.String()
RelPort = tcpConn.LocalAddr().(*net.TCPAddr).Port
locConn = turn.NewSTUNConn(tcpConn)
}
client, err := turn.NewClient(&turn.ClientConfig{
TURNServerAddr: fmt.Sprintf("%s:%d", url.Host, url.Port),
TURNServerAddr: TURNServerAddr,
Conn: locConn,
Username: url.Username,
Password: url.Password,
@@ -405,7 +437,6 @@ func (a *Agent) gatherCandidatesRelay(urls []*URL) error {
return err
}
laddr := locConn.LocalAddr().(*net.UDPAddr)
raddr := relayConn.LocalAddr().(*net.UDPAddr)
relayConfig := CandidateRelayConfig{
@@ -413,8 +444,8 @@ func (a *Agent) gatherCandidatesRelay(urls []*URL) error {
Component: ComponentRTP,
Address: raddr.IP.String(),
Port: raddr.Port,
RelAddr: laddr.IP.String(),
RelPort: laddr.Port,
RelAddr: RelAddr,
RelPort: RelPort,
OnClose: func() error {
client.Close()
return locConn.Close()
+1 -1
View File
@@ -7,7 +7,7 @@ require (
github.com/pion/mdns v0.0.3
github.com/pion/stun v0.3.3
github.com/pion/transport v0.8.9
github.com/pion/turn v1.3.7
github.com/pion/turn v1.4.0
github.com/stretchr/testify v1.4.0
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 // indirect
+2 -5
View File
@@ -13,15 +13,12 @@ github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY=
github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms=
github.com/pion/mdns v0.0.3 h1:DxdOYd0pgwLKiDlIIxfU0qdG5iWh1Xn6CsS9vc6cMAY=
github.com/pion/mdns v0.0.3/go.mod h1:VrN3wefVgtfL8QgpEblPUC46ag1reLIfpqekCnKunLE=
github.com/pion/stun v0.3.2 h1:Vsy6C+bTbJKEC2TH4vHYOnRKmozNPi5FpeKv9/bX16k=
github.com/pion/stun v0.3.2/go.mod h1:xrCld6XM+6GWDZdvjPlLMsTU21rNxnO6UO8XsAvHr/M=
github.com/pion/stun v0.3.3 h1:brYuPl9bN9w/VM7OdNzRSLoqsnwlyNvD9MVeJrHjDQw=
github.com/pion/stun v0.3.3/go.mod h1:xrCld6XM+6GWDZdvjPlLMsTU21rNxnO6UO8XsAvHr/M=
github.com/pion/transport v0.8.8/go.mod h1:lpeSM6KJFejVtZf8k0fgeN7zE73APQpTF83WvA1FVP8=
github.com/pion/transport v0.8.9 h1:3PUZULb0WZd/QNfXKKMwcUHzLR+XfNem6lF2M9UrxSU=
github.com/pion/transport v0.8.9/go.mod h1:lpeSM6KJFejVtZf8k0fgeN7zE73APQpTF83WvA1FVP8=
github.com/pion/turn v1.3.7 h1:/nyM2XrlZILD7KKfnh0oYEBTRG5JlbH21ibjluRoCeo=
github.com/pion/turn v1.3.7/go.mod h1:js0LBFqMcKAlaWAXoYqNjefGI7kfJCrkCBfHGuTToXE=
github.com/pion/turn v1.4.0 h1:7NUMRehQz4fIo53Qv9ui1kJ0Kr1CA82I81RHKHCeM80=
github.com/pion/turn v1.4.0/go.mod h1:aDSi6hWX/hd1+gKia9cExZOR0MU95O7zX9p3Gw/P2aU=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=