mirror of
https://github.com/aler9/gortsplib
synced 2025-11-03 03:03:31 +08:00
server: do not allow a client to send TCP frames after TEARDOWN
This commit is contained in:
@@ -279,10 +279,11 @@ func (ss *ServerSession) run() {
|
||||
|
||||
res, err := ss.handleRequest(req.sc, req.req)
|
||||
|
||||
if res.StatusCode == base.StatusOK {
|
||||
if err == nil || err == errSwitchReadFunc {
|
||||
if res.Header == nil {
|
||||
res.Header = make(base.Header)
|
||||
}
|
||||
|
||||
res.Header["Session"] = headers.Session{
|
||||
Session: ss.secretID,
|
||||
Timeout: func() *uint {
|
||||
@@ -292,10 +293,7 @@ func (ss *ServerSession) run() {
|
||||
}.Write()
|
||||
}
|
||||
|
||||
if _, ok := err.(liberrors.ErrServerSessionTeardown); ok {
|
||||
req.res <- sessionRequestRes{res: res, err: nil}
|
||||
return err
|
||||
}
|
||||
savedMethod := req.req.Method
|
||||
|
||||
req.res <- sessionRequestRes{
|
||||
res: res,
|
||||
@@ -303,6 +301,10 @@ func (ss *ServerSession) run() {
|
||||
ss: ss,
|
||||
}
|
||||
|
||||
if (err == nil || err == errSwitchReadFunc) && savedMethod == base.Teardown {
|
||||
return liberrors.ErrServerSessionTeardown{}
|
||||
}
|
||||
|
||||
case sc := <-ss.connRemove:
|
||||
delete(ss.conns, sc)
|
||||
|
||||
@@ -1093,9 +1095,16 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
|
||||
return res, err
|
||||
|
||||
case base.Teardown:
|
||||
var err error
|
||||
if (ss.state == ServerSessionStatePlay || ss.state == ServerSessionStateRecord) &&
|
||||
*ss.setuppedTransport == TransportTCP {
|
||||
ss.tcpConn.readFunc = ss.tcpConn.readFuncStandard
|
||||
err = errSwitchReadFunc
|
||||
}
|
||||
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
}, liberrors.ErrServerSessionTeardown{Author: sc.NetConn().RemoteAddr()}
|
||||
}, err
|
||||
|
||||
case base.GetParameter:
|
||||
if h, ok := sc.s.Handler.(ServerHandlerOnGetParameter); ok {
|
||||
|
||||
Reference in New Issue
Block a user