From a66e19fa9db919bb44ac82d8228e11db4977a016 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Wed, 6 Jan 2021 18:32:45 +0100 Subject: [PATCH] ServerConn: check transport header mode --- serverconn.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/serverconn.go b/serverconn.go index c6f191db..69562f1f 100644 --- a/serverconn.go +++ b/serverconn.go @@ -422,6 +422,22 @@ 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") + } + } + res, err := sc.readHandlers.OnSetup(req, th) if res.StatusCode == 200 {