server: check state before checking track id

This commit is contained in:
aler9
2021-02-15 18:09:52 +01:00
parent e5c4b64dec
commit 6ce21a7841

View File

@@ -491,6 +491,22 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) {
}, fmt.Errorf("transport header: %s", err)
}
switch sc.state {
case ServerConnStateInitial, ServerConnStatePrePlay: // play
if th.Mode != nil && *th.Mode != headers.TransportModePlay {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("transport header must contain mode=play or not contain a mode")
}
default: // record
if th.Mode == nil || *th.Mode != headers.TransportModeRecord {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("transport header does not contain mode=record")
}
}
if th.Delivery != nil && *th.Delivery == base.StreamDeliveryMulticast {
return &base.Response{
StatusCode: base.StatusUnsupportedTransport,
@@ -563,28 +579,6 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) {
}
}
switch sc.state {
case ServerConnStateInitial, ServerConnStatePrePlay: // play
if th.Mode != nil && *th.Mode != headers.TransportModePlay {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("transport header must contain mode=play or not contain a mode")
}
default: // record
if th.Mode == nil || *th.Mode != headers.TransportModeRecord {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("transport header does not contain mode=record")
}
if trackID >= len(sc.announcedTracks) {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, fmt.Errorf("unable to setup track %d", trackID)
}
}
res, err := sc.readHandlers.OnSetup(req, th, trackID)
if res.StatusCode == 200 {