Skip to content

Commit

Permalink
Partial revert of 79fbb4e
Browse files Browse the repository at this point in the history
This commit broke public API, this reverts those changes

Resolves pion#339
  • Loading branch information
Sean-Der committed Jun 27, 2023
1 parent 014956d commit 9ebb7c7
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 119 deletions.
32 changes: 28 additions & 4 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ const (

// ClientConfig is a bag of config parameters for Client.
type ClientConfig struct {
STUNServerAddr net.Addr // STUN server address
TURNServerAddr net.Addr // TURN server address
STUNServerAddr string // STUN server address (e.g. "stun.abc.com:3478")
TURNServerAddr string // TURN server address (e.g. "turn.abc.com:3478")
Username string
Password string
Realm string
Expand Down Expand Up @@ -98,10 +98,34 @@ func NewClient(config *ClientConfig) (*Client, error) {
config.Net = n
}

var (
stunServ, turnServ net.Addr
stunServStr, turnServStr string
err error
)
if len(config.STUNServerAddr) > 0 {
log.Debugf("resolving %s", config.STUNServerAddr)
stunServ, err = config.Net.ResolveUDPAddr("udp4", config.STUNServerAddr)
if err != nil {
return nil, err
}
stunServStr = stunServ.String()
log.Debugf("stunServ: %s", stunServStr)
}
if len(config.TURNServerAddr) > 0 {
log.Debugf("resolving %s", config.TURNServerAddr)
turnServ, err = config.Net.ResolveUDPAddr("udp4", config.TURNServerAddr)
if err != nil {
return nil, err
}
turnServStr = turnServ.String()
log.Debugf("turnServ: %s", turnServStr)
}

c := &Client{
conn: config.Conn,
stunServerAddr: config.STUNServerAddr,
turnServerAddr: config.TURNServerAddr,
stunServerAddr: stunServ,
turnServerAddr: turnServ,
username: stun.NewUsername(config.Username),
password: config.Password,
realm: stun.NewRealm(config.Realm),
Expand Down
15 changes: 5 additions & 10 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,7 @@ func createListeningTestClientWithSTUNServ(t *testing.T, loggerFactory logging.L
conn, err := net.ListenPacket("udp4", "0.0.0.0:0")
assert.NoError(t, err)

addr, err := net.ResolveUDPAddr("udp", "stun1.l.google.com:19302")
if err != nil {
t.Fatalf("failed to resolve: %s", err)
}
addr := "stun1.l.google.com:19302"

c, err := NewClient(&ClientConfig{
STUNServerAddr: addr,
Expand Down Expand Up @@ -164,10 +161,8 @@ func TestClientNonceExpiration(t *testing.T) {
conn, err := net.ListenPacket("udp4", "0.0.0.0:0")
assert.NoError(t, err)

addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:3478")
if err != nil {
t.Fatalf("failed to resolve: %s", err)
}
// nolint: goconst
addr := "127.0.0.1:3478"

client, err := NewClient(&ClientConfig{
Conn: conn,
Expand Down Expand Up @@ -223,7 +218,7 @@ func TestTCPClient(t *testing.T) {
conn, err := net.Dial("tcp", "127.0.0.1:13478")
require.NoError(t, err)

serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:13478")
serverAddr := "127.0.0.1:13478"
require.NoError(t, err)

client, err := NewClient(&ClientConfig{
Expand All @@ -236,7 +231,7 @@ func TestTCPClient(t *testing.T) {
require.NoError(t, err)
require.NoError(t, client.Listen())

require.Equal(t, serverAddr, client.STUNServerAddr())
require.Equal(t, serverAddr, client.STUNServerAddr().String())

allocation, err := client.AllocateTCP()
require.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions examples/turn-client/tcp-alloc/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ func main() {
// Start a new TURN Client and wrap our net.Conn in a STUNConn
// This allows us to simulate datagram based communication over a net.Conn
cfg := &turn.ClientConfig{
STUNServerAddr: turnServerAddr,
TURNServerAddr: turnServerAddr,
STUNServerAddr: turnServerAddrStr,
TURNServerAddr: turnServerAddrStr,
Conn: turn.NewSTUNConn(conn),
Username: cred[0],
Password: cred[1],
Expand Down
13 changes: 4 additions & 9 deletions examples/turn-client/tcp/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,16 @@ func main() {
flag.Parse()

if len(*host) == 0 {
log.Fatalf("Parameter 'host' is required")
log.Fatalf("'host' is required")
}

if len(*user) == 0 {
log.Fatalf("Parameter 'user' is required")
log.Fatalf("'user' is required")
}

// Dial TURN Server
hostPort := fmt.Sprintf("%s:%d", *host, *port)
turnServerAddr, err := net.ResolveTCPAddr("tcp", hostPort)
if err != nil {
log.Fatalf("Failed to resolve %s: %s", hostPort, err)
}

conn, err := net.DialTCP("tcp", nil, turnServerAddr)
turnServerAddr := fmt.Sprintf("%s:%d", *host, *port)
conn, err := net.Dial("tcp", turnServerAddr)
if err != nil {
log.Panicf("Failed to connect to TURN server: %s", err)
}
Expand Down
10 changes: 3 additions & 7 deletions examples/turn-client/udp/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,8 @@ func main() {

cred := strings.SplitN(*user, "=", 2)

hostPort := fmt.Sprintf("%s:%d", *host, *port)
turnServerAddr, err := net.ResolveUDPAddr("udp", hostPort)
if err != nil {
log.Fatalf("Failed to resolve %s: %s", hostPort, err)
}

// TURN client won't create a local listening socket by itself.
conn, err := net.ListenUDP("udp", nil)
conn, err := net.ListenPacket("udp4", "0.0.0.0:0")
if err != nil {
log.Panicf("Failed to listen: %s", err)
}
Expand All @@ -51,6 +45,8 @@ func main() {
}
}()

turnServerAddr := fmt.Sprintf("%s:%d", *host, *port)

cfg := &turn.ClientConfig{
STUNServerAddr: turnServerAddr,
TURNServerAddr: turnServerAddr,
Expand Down
5 changes: 1 addition & 4 deletions lt_cred_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,7 @@ func TestNewLongTermAuthHandler(t *testing.T) {
username, password, err := GenerateLongTermCredentials(sharedSecret, time.Minute)
assert.NoError(t, err)

addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:3478")
if err != nil {
t.Fatalf("failed to resolve: %s", err)
}
addr := "127.0.0.1:3478"

client, err := NewClient(&ClientConfig{
STUNServerAddr: addr,
Expand Down
87 changes: 4 additions & 83 deletions server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,7 @@ func TestServer(t *testing.T) {
conn, err := net.ListenPacket("udp4", "127.0.0.1:54321")
assert.NoError(t, err)

addr, err := net.ResolveUDPAddr("udp4", "127.0.0.1:3478")
assert.NoError(t, err)
addr := "127.0.0.1:3478"

client, err := NewClient(&ClientConfig{
STUNServerAddr: addr,
Expand Down Expand Up @@ -433,7 +432,7 @@ func TestServerVNet(t *testing.T) {
assert.NoError(t, lconn.Close())
}()

stunAddr, _ := net.ResolveUDPAddr("udp", "1.2.3.4:3478")
stunAddr := "1.2.3.4:3478"

log.Debug("creating a client.")
client, err := NewClient(&ClientConfig{
Expand All @@ -456,84 +455,6 @@ func TestServerVNet(t *testing.T) {
// to the LAN router.
assert.True(t, udpAddr.IP.Equal(net.IPv4(5, 6, 7, 8)), "should match")
})

t.Run("Echo via relay", func(t *testing.T) {
v, err := buildVNet()
assert.NoError(t, err)

lconn, err := v.netL0.ListenPacket("udp4", "0.0.0.0:0")
assert.NoError(t, err)

stunAddr, _ := v.netL0.ResolveUDPAddr("udp", "stun.pion.ly:3478")
turnAddr, _ := v.netL0.ResolveUDPAddr("udp", "turn.pion.ly:3478")

log.Debug("creating a client.")
client, err := NewClient(&ClientConfig{
STUNServerAddr: stunAddr,
TURNServerAddr: turnAddr,
Username: "user",
Password: "pass",
Conn: lconn,
LoggerFactory: loggerFactory,
})

assert.NoError(t, err)
assert.NoError(t, client.Listen())

log.Debug("sending a binding request.")
conn, err := client.Allocate()
assert.NoError(t, err)

log.Debugf("laddr: %s", conn.LocalAddr().String())

echoConn, err := v.net1.ListenPacket("udp4", "1.2.3.5:5678")
assert.NoError(t, err)

// Ensure allocation is counted
assert.Equal(t, 1, v.server.AllocationCount())

go func() {
buf := make([]byte, 1600)
for {
n, from, err2 := echoConn.ReadFrom(buf)
if err2 != nil {
break
}

// Verify the message was received from the relay address
assert.Equal(t, conn.LocalAddr().String(), from.String(), "should match")
assert.Equal(t, "Hello", string(buf[:n]), "should match")

// Echo the data
_, err2 = echoConn.WriteTo(buf[:n], from)
assert.NoError(t, err2)
}
}()

buf := make([]byte, 1600)

for i := 0; i < 10; i++ {
log.Debug("sending \"Hello\"..")
_, err = conn.WriteTo([]byte("Hello"), echoConn.LocalAddr())
assert.NoError(t, err)

_, from, err2 := conn.ReadFrom(buf)
assert.NoError(t, err2)

// Verify the message was received from the relay address
assert.Equal(t, echoConn.LocalAddr().String(), from.String(), "should match")

time.Sleep(100 * time.Millisecond)
}

time.Sleep(100 * time.Millisecond)
client.Close()

assert.NoError(t, conn.Close(), "should succeed")
assert.NoError(t, echoConn.Close(), "should succeed")
assert.NoError(t, lconn.Close(), "should succeed")
assert.NoError(t, v.Close(), "should succeed")
})
}

func TestConsumeSingleTURNFrame(t *testing.T) {
Expand Down Expand Up @@ -636,8 +557,8 @@ func RunBenchmarkServer(b *testing.B, clientNum int) {
defer clientConn.Close() //nolint:errcheck

client, err := NewClient(&ClientConfig{
STUNServerAddr: serverAddr,
TURNServerAddr: serverAddr,
STUNServerAddr: "127.0.0.1:3478",
TURNServerAddr: "127.0.0.1:3478",
Conn: clientConn,
Username: "user",
Password: "pass",
Expand Down

0 comments on commit 9ebb7c7

Please sign in to comment.