From ba7f9aff25cdcb25d63070a143c0f69223945b4c Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 13 Nov 2021 10:13:54 +0100 Subject: [PATCH] client: support reading from servers that use random UDP ports (https://github.com/aler9/rtsp-simple-server/issues/691) --- client.go | 4 ++-- client_read_test.go | 10 ++++++++-- clientudpl.go | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/client.go b/client.go index 020cc8b3..787730ab 100644 --- a/client.go +++ b/client.go @@ -1425,7 +1425,7 @@ func (c *Client) doSetup( rtpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP rtpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP rtpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone - if thRes.ServerPorts != nil { + if !c.AnyPortEnable { rtpListener.remotePort = thRes.ServerPorts[0] } rtpListener.trackID = trackID @@ -1435,7 +1435,7 @@ func (c *Client) doSetup( rtcpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP rtcpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP rtcpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone - if thRes.ServerPorts != nil { + if !c.AnyPortEnable { rtcpListener.remotePort = thRes.ServerPorts[1] } rtcpListener.trackID = trackID diff --git a/client_read_test.go b/client_read_test.go index faa5a7dd..1f2f3731 100644 --- a/client_read_test.go +++ b/client_read_test.go @@ -792,6 +792,7 @@ func TestClientReadAnyPort(t *testing.T) { "zero", "zero_one", "no", + "random", } { t.Run(ca, func(t *testing.T) { l, err := net.Listen("tcp", "localhost:8554") @@ -868,8 +869,13 @@ func TestClientReadAnyPort(t *testing.T) { case "zero_one": return &[2]int{0, 1} + + case "no": + return nil + + default: // random + return &[2]int{23040, 23041} } - return nil }(), }.Write(), }, @@ -887,7 +893,7 @@ func TestClientReadAnyPort(t *testing.T) { time.Sleep(1 * time.Second) - l1, err := net.ListenPacket("udp", "localhost:0") + l1, err := net.ListenPacket("udp", "localhost:13344") require.NoError(t, err) defer l1.Close() diff --git a/clientudpl.go b/clientudpl.go index 2651b694..d08a0f41 100644 --- a/clientudpl.go +++ b/clientudpl.go @@ -170,7 +170,7 @@ func (l *clientUDPListener) run() { uaddr := addr.(*net.UDPAddr) - if !l.remoteReadIP.Equal(uaddr.IP) || (!isAnyPort(l.remotePort) && l.remotePort != uaddr.Port) { + if !l.remoteReadIP.Equal(uaddr.IP) || (l.remotePort != 0 && l.remotePort != uaddr.Port) { continue }