diff --git a/serverconn.go b/serverconn.go index 4b5a62ad..ef625a21 100644 --- a/serverconn.go +++ b/serverconn.go @@ -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 {