From 304c38bb6031ad8fc9a696583535b07204dcf505 Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Sun, 23 Mar 2025 16:33:46 +0100 Subject: [PATCH] examples: prevent redundant checks in OnSetup when recording (#731) --- examples/server-auth/main.go | 19 ++++++++++++------- examples/server-h264-to-disk/main.go | 7 +++++++ examples/server-tls/main.go | 7 +++++++ examples/server/main.go | 7 +++++++ 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/examples/server-auth/main.go b/examples/server-auth/main.go index 077871f5..9fb8d2c2 100644 --- a/examples/server-auth/main.go +++ b/examples/server-auth/main.go @@ -136,15 +136,20 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) ( func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { 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. // 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) - if !ok { - return &base.Response{ - StatusCode: base.StatusUnauthorized, - }, nil, liberrors.ErrServerAuth{} - } + ok := ctx.Conn.VerifyCredentials(ctx.Request, readUser, readPass) + if !ok { + return &base.Response{ + StatusCode: base.StatusUnauthorized, + }, nil, liberrors.ErrServerAuth{} } sh.mutex.RLock() diff --git a/examples/server-h264-to-disk/main.go b/examples/server-h264-to-disk/main.go index 5573b8c3..3b8d8199 100644 --- a/examples/server-h264-to-disk/main.go +++ b/examples/server-h264-to-disk/main.go @@ -108,6 +108,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) ( // called when receiving a SETUP request. 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") return &base.Response{ diff --git a/examples/server-tls/main.go b/examples/server-tls/main.go index 87b75fb0..b5fe7952 100644 --- a/examples/server-tls/main.go +++ b/examples/server-tls/main.go @@ -108,6 +108,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) ( func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { 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() defer sh.mutex.RUnlock() diff --git a/examples/server/main.go b/examples/server/main.go index 3f94225b..b40fcb1c 100644 --- a/examples/server/main.go +++ b/examples/server/main.go @@ -107,6 +107,13 @@ func (sh *serverHandler) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) ( func (sh *serverHandler) OnSetup(ctx *gortsplib.ServerHandlerOnSetupCtx) (*base.Response, *gortsplib.ServerStream, error) { 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() defer sh.mutex.RUnlock()