examples: prevent redundant checks in OnSetup when recording (#731)

This commit is contained in:
Alessandro Ros
2025-03-23 16:33:46 +01:00
committed by GitHub
parent 87d3720f48
commit 304c38bb60
4 changed files with 33 additions and 7 deletions

View File

@@ -136,16 +136,21 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) (
func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) {
log.Printf("setup request") log.Printf("setup request")
// SETUP is used by both readers and publishers. In case of publishers, just return StatusOK.
if ctx.Session.State() == gortsplib.ServerSessionStatePreRecord {
return &base.Response{
StatusCode: base.StatusOK,
}, nil, nil
}
// Verify reader credentials. // Verify reader credentials.
// In case of readers, credentials have to be verified during DESCRIBE and SETUP. // In case of readers, credentials have to be verified during DESCRIBE and SETUP.
if ctx.Session.State() == gortsplib.ServerSessionStateInitial {
ok := ctx.Conn.VerifyCredentials(ctx.Request, readUser, readPass) ok := ctx.Conn.VerifyCredentials(ctx.Request, readUser, readPass)
if !ok { if !ok {
return &base.Response{ return &base.Response{
StatusCode: base.StatusUnauthorized, StatusCode: base.StatusUnauthorized,
}, nil, liberrors.ErrServerAuth{} }, nil, liberrors.ErrServerAuth{}
} }
}
sh.mutex.RLock() sh.mutex.RLock()
defer sh.mutex.RUnlock() defer sh.mutex.RUnlock()

View File

@@ -108,6 +108,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) (
// called when receiving a SETUP request. // called when receiving a SETUP request.
func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) {
// prevent readers from using the server.
if ctx.Session.State() == gortsplib.ServerSessionStateInitial {
return &base.Response{
StatusCode: base.StatusNotImplemented,
}, nil, nil
}
log.Printf("setup request") log.Printf("setup request")
return &base.Response{ return &base.Response{

View File

@@ -108,6 +108,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) (
func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) {
log.Printf("setup request") log.Printf("setup request")
// SETUP is used by both readers and publishers. In case of publishers, just return StatusOK.
if ctx.Session.State() == gortsplib.ServerSessionStatePreRecord {
return &base.Response{
StatusCode: base.StatusOK,
}, nil, nil
}
sh.mutex.RLock() sh.mutex.RLock()
defer sh.mutex.RUnlock() defer sh.mutex.RUnlock()

View File

@@ -107,6 +107,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) (
func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) {
log.Printf("setup request") log.Printf("setup request")
// SETUP is used by both readers and publishers. In case of publishers, just return StatusOK.
if ctx.Session.State() == gortsplib.ServerSessionStatePreRecord {
return &base.Response{
StatusCode: base.StatusOK,
}, nil, nil
}
sh.mutex.RLock() sh.mutex.RLock()
defer sh.mutex.RUnlock() defer sh.mutex.RUnlock()