return error in OnDecodeError when there are oversized UDP packets

This commit is contained in:
aler9
2022-10-31 15:38:23 +01:00
parent 5a5f454814
commit b1f72f9392
8 changed files with 93 additions and 20 deletions

View File

@@ -169,7 +169,7 @@ func (u *serverUDPListener) runReader() {
}
for {
buf := make([]byte, maxPacketSize)
buf := make([]byte, maxPacketSize+1)
n, addr, err := u.pc.ReadFromUDP(buf)
if err != nil {
break
@@ -192,6 +192,16 @@ func (u *serverUDPListener) runReader() {
}
func (u *serverUDPListener) processRTP(clientData *clientData, payload []byte) {
if len(payload) == (maxPacketSize + 1) {
if h, ok := clientData.ss.s.Handler.(ServerHandlerOnDecodeError); ok {
h.OnDecodeError(&ServerHandlerOnDecodeErrorCtx{
Session: clientData.ss,
Error: fmt.Errorf("RTP packet is too big to be read with UDP"),
})
}
return
}
pkt := u.s.udpRTPPacketBuffer.next()
err := pkt.Unmarshal(payload)
if err != nil {
@@ -248,6 +258,16 @@ func (u *serverUDPListener) processRTP(clientData *clientData, payload []byte) {
}
func (u *serverUDPListener) processRTCP(clientData *clientData, payload []byte) {
if len(payload) == (maxPacketSize + 1) {
if h, ok := clientData.ss.s.Handler.(ServerHandlerOnDecodeError); ok {
h.OnDecodeError(&ServerHandlerOnDecodeErrorCtx{
Session: clientData.ss,
Error: fmt.Errorf("RTCP packet is too big to be read with UDP"),
})
}
return
}
packets, err := rtcp.Unmarshal(payload)
if err != nil {
if h, ok := clientData.ss.s.Handler.(ServerHandlerOnDecodeError); ok {