From 9b28e339e741bbf2807d9b4e1de0cb3834849f4c Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:37:24 +0200 Subject: [PATCH] server: check RTP and RTCP ports --- server.go | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 106dfed6..c02d4bff 100644 --- a/server.go +++ b/server.go @@ -3,9 +3,24 @@ package gortsplib import ( "fmt" "net" + "strconv" "time" ) +func extractPort(address string) (int, error) { + _, tmp, err := net.SplitHostPort(address) + if err != nil { + return 0, err + } + + tmp2, err := strconv.ParseInt(tmp, 10, 64) + if err != nil { + return 0, err + } + + return int(tmp2), nil +} + // Server is a RTSP server. type Server struct { conf ServerConf @@ -50,7 +65,24 @@ func newServer(conf ServerConf, address string) (*Server, error) { } if conf.UDPRTPAddress != "" { - var err error + rtpPort, err := extractPort(conf.UDPRTPAddress) + if err != nil { + return nil, err + } + + rtcpPort, err := extractPort(conf.UDPRTCPAddress) + if err != nil { + return nil, err + } + + if (rtpPort % 2) != 0 { + return nil, fmt.Errorf("RTP port must be even") + } + + if rtcpPort != (rtpPort + 1) { + return nil, fmt.Errorf("RTCP and RTP ports must be consecutive") + } + s.udpRTPListener, err = newServerUDPListener(conf, conf.UDPRTPAddress, StreamTypeRTP) if err != nil { return nil, err