Code refactoring for RTSP transport header processing

This commit is contained in:
Alex X
2025-02-18 12:49:33 +03:00
parent 6fa352f407
commit 637e65e5a0

View File

@@ -141,17 +141,14 @@ func (c *Conn) Accept() error {
}
case MethodSetup:
tr := req.Header.Get("Transport")
res := &tcp.Response{
Header: map[string][]string{},
Request: req,
}
// Test if client requests TCP transport, otherwise return 461 Transport not supported
// This allows smart clients who initially requested UDP to fall back on TCP transport.
if strings.HasPrefix(tr, "RTP/AVP/TCP") {
// This allows smart clients who initially requested UDP to fall back on TCP transport
if tr := req.Header.Get("Transport"); strings.HasPrefix(tr, "RTP/AVP/TCP") {
c.session = core.RandString(8, 10)
c.state = StateSetup
@@ -159,16 +156,8 @@ func (c *Conn) Accept() error {
if i := reqTrackID(req); i >= 0 && i < len(c.Senders) {
// mark sender as SETUP
c.Senders[i].Media.ID = MethodSetup
interleaved := fmt.Sprintf("%d-%d", i*2, i*2+1)
// Check if tr already contains the 'interleaved' parameter
if strings.Contains(tr, "interleaved=") {
// If so, just update the interleaved value
res.Header.Set("Transport", strings.Replace(tr, "interleaved=[^;]*", "interleaved="+interleaved, 1))
} else {
// Otherwise, append the interleaved parameter
res.Header.Set("Transport", tr+";interleaved="+interleaved)
}
tr = fmt.Sprintf("RTP/AVP/TCP;unicast;interleaved=%d-%d", i*2, i*2+1)
res.Header.Set("Transport", tr)
} else {
res.Status = "400 Bad Request"
}