mirror of
https://github.com/aler9/gortsplib
synced 2025-11-03 11:11:01 +08:00
server: check state before checking track id
This commit is contained in:
@@ -491,6 +491,22 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) {
|
|||||||
}, fmt.Errorf("transport header: %s", err)
|
}, 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 {
|
if th.Delivery != nil && *th.Delivery == base.StreamDeliveryMulticast {
|
||||||
return &base.Response{
|
return &base.Response{
|
||||||
StatusCode: base.StatusUnsupportedTransport,
|
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)
|
res, err := sc.readHandlers.OnSetup(req, th, trackID)
|
||||||
|
|
||||||
if res.StatusCode == 200 {
|
if res.StatusCode == 200 {
|
||||||
|
|||||||
Reference in New Issue
Block a user