mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: send receiver reports to server even with AnyPortEnable (https://github.com/aler9/rtsp-simple-server/issues/698)
This commit is contained in:
@@ -1418,7 +1418,7 @@ func (c *Client) doSetup(
|
|||||||
rtpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
rtpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
||||||
rtpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
rtpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
||||||
rtpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone
|
rtpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone
|
||||||
if !c.AnyPortEnable {
|
if thRes.ServerPorts != nil {
|
||||||
rtpListener.remotePort = thRes.ServerPorts[0]
|
rtpListener.remotePort = thRes.ServerPorts[0]
|
||||||
}
|
}
|
||||||
rtpListener.trackID = trackID
|
rtpListener.trackID = trackID
|
||||||
@@ -1428,7 +1428,7 @@ func (c *Client) doSetup(
|
|||||||
rtcpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
rtcpListener.remoteReadIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
||||||
rtcpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
rtcpListener.remoteWriteIP = c.nconn.RemoteAddr().(*net.TCPAddr).IP
|
||||||
rtcpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone
|
rtcpListener.remoteZone = c.nconn.RemoteAddr().(*net.TCPAddr).Zone
|
||||||
if !c.AnyPortEnable {
|
if thRes.ServerPorts != nil {
|
||||||
rtcpListener.remotePort = thRes.ServerPorts[1]
|
rtcpListener.remotePort = thRes.ServerPorts[1]
|
||||||
}
|
}
|
||||||
rtcpListener.trackID = trackID
|
rtcpListener.trackID = trackID
|
||||||
|
@@ -799,6 +799,8 @@ func TestClientReadAnyPort(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer l.Close()
|
defer l.Close()
|
||||||
|
|
||||||
|
serverRecv := make(chan struct{})
|
||||||
|
|
||||||
serverDone := make(chan struct{})
|
serverDone := make(chan struct{})
|
||||||
defer func() { <-serverDone }()
|
defer func() { <-serverDone }()
|
||||||
go func() {
|
go func() {
|
||||||
@@ -852,6 +854,14 @@ func TestClientReadAnyPort(t *testing.T) {
|
|||||||
err = th.Read(req.Header["Transport"])
|
err = th.Read(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
l1a, err := net.ListenPacket("udp", "localhost:13344")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer l1a.Close()
|
||||||
|
|
||||||
|
l1b, err := net.ListenPacket("udp", "localhost:23041")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer l1b.Close()
|
||||||
|
|
||||||
err = base.Response{
|
err = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
@@ -893,14 +903,23 @@ func TestClientReadAnyPort(t *testing.T) {
|
|||||||
|
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
|
||||||
l1, err := net.ListenPacket("udp", "localhost:13344")
|
l1a.WriteTo([]byte{0x01, 0x02, 0x03, 0x04}, &net.UDPAddr{
|
||||||
require.NoError(t, err)
|
|
||||||
defer l1.Close()
|
|
||||||
|
|
||||||
l1.WriteTo([]byte("\x00\x00\x00\x00"), &net.UDPAddr{
|
|
||||||
IP: net.ParseIP("127.0.0.1"),
|
IP: net.ParseIP("127.0.0.1"),
|
||||||
Port: th.ClientPorts[0],
|
Port: th.ClientPorts[0],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if ca == "random" {
|
||||||
|
// skip firewall opening
|
||||||
|
buf := make([]byte, 2048)
|
||||||
|
_, _, err := l1b.ReadFrom(buf)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
buf = make([]byte, 2048)
|
||||||
|
n, _, err := l1b.ReadFrom(buf)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, buf[:n], []byte{0x05, 0x06, 0x07, 0x08})
|
||||||
|
close(serverRecv)
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
frameRecv := make(chan struct{})
|
frameRecv := make(chan struct{})
|
||||||
@@ -908,6 +927,7 @@ func TestClientReadAnyPort(t *testing.T) {
|
|||||||
c := &Client{
|
c := &Client{
|
||||||
AnyPortEnable: true,
|
AnyPortEnable: true,
|
||||||
OnPacketRTP: func(trackID int, payload []byte) {
|
OnPacketRTP: func(trackID int, payload []byte) {
|
||||||
|
require.Equal(t, payload, []byte{0x01, 0x02, 0x03, 0x04})
|
||||||
close(frameRecv)
|
close(frameRecv)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -917,6 +937,11 @@ func TestClientReadAnyPort(t *testing.T) {
|
|||||||
defer c.Close()
|
defer c.Close()
|
||||||
|
|
||||||
<-frameRecv
|
<-frameRecv
|
||||||
|
|
||||||
|
if ca == "random" {
|
||||||
|
c.WritePacketRTCP(0, []byte{0x05, 0x06, 0x07, 0x08})
|
||||||
|
<-serverRecv
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -165,7 +165,7 @@ func (l *clientUDPListener) run() {
|
|||||||
|
|
||||||
uaddr := addr.(*net.UDPAddr)
|
uaddr := addr.(*net.UDPAddr)
|
||||||
|
|
||||||
if !l.remoteReadIP.Equal(uaddr.IP) || (l.remotePort != 0 && l.remotePort != uaddr.Port) {
|
if !l.remoteReadIP.Equal(uaddr.IP) || (!l.c.AnyPortEnable && l.remotePort != uaddr.Port) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user