16 changed files with 261 additions and 223 deletions
@ -0,0 +1,208 @@
@@ -0,0 +1,208 @@
|
||||
package core |
||||
|
||||
import ( |
||||
"net" |
||||
|
||||
"github.com/bluenviron/mediamtx/internal/conf" |
||||
"github.com/bluenviron/mediamtx/internal/defs" |
||||
"github.com/bluenviron/mediamtx/internal/externalcmd" |
||||
"github.com/bluenviron/mediamtx/internal/logger" |
||||
) |
||||
|
||||
func onInitHook(path *path) func() { |
||||
var onInitCmd *externalcmd.Cmd |
||||
|
||||
if path.conf.RunOnInit != "" { |
||||
path.Log(logger.Info, "runOnInit command started") |
||||
onInitCmd = externalcmd.NewCmd( |
||||
path.externalCmdPool, |
||||
path.conf.RunOnInit, |
||||
path.conf.RunOnInitRestart, |
||||
path.externalCmdEnv(), |
||||
func(err error) { |
||||
path.Log(logger.Info, "runOnInit command exited: %v", err) |
||||
}) |
||||
} |
||||
|
||||
return func() { |
||||
if onInitCmd != nil { |
||||
onInitCmd.Close() |
||||
path.Log(logger.Info, "runOnInit command stopped") |
||||
} |
||||
} |
||||
} |
||||
|
||||
func onConnectHook(c *conn, desc defs.APIPathSourceOrReader) func() { |
||||
var env externalcmd.Environment |
||||
var onConnectCmd *externalcmd.Cmd |
||||
|
||||
if c.runOnConnect != "" || c.runOnDisconnect != "" { |
||||
_, port, _ := net.SplitHostPort(c.rtspAddress) |
||||
env = externalcmd.Environment{ |
||||
"RTSP_PORT": port, |
||||
"MTX_CONN_TYPE": desc.Type, |
||||
"MTX_CONN_ID": desc.ID, |
||||
} |
||||
} |
||||
|
||||
if c.runOnConnect != "" { |
||||
c.logger.Log(logger.Info, "runOnConnect command started") |
||||
|
||||
onConnectCmd = externalcmd.NewCmd( |
||||
c.externalCmdPool, |
||||
c.runOnConnect, |
||||
c.runOnConnectRestart, |
||||
env, |
||||
func(err error) { |
||||
c.logger.Log(logger.Info, "runOnConnect command exited: %v", err) |
||||
}) |
||||
} |
||||
|
||||
return func() { |
||||
if onConnectCmd != nil { |
||||
onConnectCmd.Close() |
||||
c.logger.Log(logger.Info, "runOnConnect command stopped") |
||||
} |
||||
|
||||
if c.runOnDisconnect != "" { |
||||
c.logger.Log(logger.Info, "runOnDisconnect command launched") |
||||
externalcmd.NewCmd( |
||||
c.externalCmdPool, |
||||
c.runOnDisconnect, |
||||
false, |
||||
env, |
||||
nil) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func onDemandHook(path *path, query string) func(string) { |
||||
var env externalcmd.Environment |
||||
var onDemandCmd *externalcmd.Cmd |
||||
|
||||
if path.conf.RunOnDemand != "" || path.conf.RunOnUnDemand != "" { |
||||
env = path.externalCmdEnv() |
||||
env["MTX_QUERY"] = query |
||||
} |
||||
|
||||
if path.conf.RunOnDemand != "" { |
||||
path.Log(logger.Info, "runOnDemand command started") |
||||
|
||||
onDemandCmd = externalcmd.NewCmd( |
||||
path.externalCmdPool, |
||||
path.conf.RunOnDemand, |
||||
path.conf.RunOnDemandRestart, |
||||
env, |
||||
func(err error) { |
||||
path.Log(logger.Info, "runOnDemand command exited: %v", err) |
||||
}) |
||||
} |
||||
|
||||
return func(reason string) { |
||||
if onDemandCmd != nil { |
||||
onDemandCmd.Close() |
||||
path.Log(logger.Info, "runOnDemand command stopped: %v", reason) |
||||
} |
||||
|
||||
if path.conf.RunOnUnDemand != "" { |
||||
path.Log(logger.Info, "runOnUnDemand command launched") |
||||
externalcmd.NewCmd( |
||||
path.externalCmdPool, |
||||
path.conf.RunOnUnDemand, |
||||
false, |
||||
env, |
||||
nil) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func onReadyHook(path *path) func() { |
||||
var env externalcmd.Environment |
||||
var onReadyCmd *externalcmd.Cmd |
||||
|
||||
if path.conf.RunOnReady != "" || path.conf.RunOnNotReady != "" { |
||||
env = path.externalCmdEnv() |
||||
desc := path.source.APISourceDescribe() |
||||
env["MTX_QUERY"] = path.publisherQuery |
||||
env["MTX_SOURCE_TYPE"] = desc.Type |
||||
env["MTX_SOURCE_ID"] = desc.ID |
||||
} |
||||
|
||||
if path.conf.RunOnReady != "" { |
||||
path.Log(logger.Info, "runOnReady command started") |
||||
onReadyCmd = externalcmd.NewCmd( |
||||
path.externalCmdPool, |
||||
path.conf.RunOnReady, |
||||
path.conf.RunOnReadyRestart, |
||||
env, |
||||
func(err error) { |
||||
path.Log(logger.Info, "runOnReady command exited: %v", err) |
||||
}) |
||||
} |
||||
|
||||
return func() { |
||||
if onReadyCmd != nil { |
||||
onReadyCmd.Close() |
||||
path.Log(logger.Info, "runOnReady command stopped") |
||||
} |
||||
|
||||
if path.conf.RunOnNotReady != "" { |
||||
path.Log(logger.Info, "runOnNotReady command launched") |
||||
externalcmd.NewCmd( |
||||
path.externalCmdPool, |
||||
path.conf.RunOnNotReady, |
||||
false, |
||||
env, |
||||
nil) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func onReadHook( |
||||
externalCmdPool *externalcmd.Pool, |
||||
pathConf *conf.Path, |
||||
path *path, |
||||
reader defs.APIPathSourceOrReader, |
||||
query string, |
||||
l logger.Writer, |
||||
) func() { |
||||
var env externalcmd.Environment |
||||
var onReadCmd *externalcmd.Cmd |
||||
|
||||
if pathConf.RunOnRead != "" || pathConf.RunOnUnread != "" { |
||||
env = path.externalCmdEnv() |
||||
desc := reader |
||||
env["MTX_QUERY"] = query |
||||
env["MTX_READER_TYPE"] = desc.Type |
||||
env["MTX_READER_ID"] = desc.ID |
||||
} |
||||
|
||||
if pathConf.RunOnRead != "" { |
||||
l.Log(logger.Info, "runOnRead command started") |
||||
onReadCmd = externalcmd.NewCmd( |
||||
externalCmdPool, |
||||
pathConf.RunOnRead, |
||||
pathConf.RunOnReadRestart, |
||||
env, |
||||
func(err error) { |
||||
l.Log(logger.Info, "runOnRead command exited: %v", err) |
||||
}) |
||||
} |
||||
|
||||
return func() { |
||||
if onReadCmd != nil { |
||||
onReadCmd.Close() |
||||
l.Log(logger.Info, "runOnRead command stopped") |
||||
} |
||||
|
||||
if pathConf.RunOnUnread != "" { |
||||
l.Log(logger.Info, "runOnUnread command launched") |
||||
externalcmd.NewCmd( |
||||
externalCmdPool, |
||||
pathConf.RunOnUnread, |
||||
false, |
||||
env, |
||||
nil) |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue