增加转发开关

This commit is contained in:
2026-06-05 20:03:52 +08:00
parent bfdf57cd72
commit fb1971da72
15 changed files with 615 additions and 16 deletions
+10 -5
View File
@@ -39,6 +39,7 @@ type meshtasticFilterHook struct {
dbQueue *dbWriteQueue
stats *meshtasticMessageStats
blocking *blockingCache
settings *runtimeSettingsCache
}
// ID 返回用于识别 Meshtastic payload 过滤器的 hook 名称。
@@ -63,7 +64,7 @@ func (h *meshtasticFilterHook) OnConnect(cl *mqtt.Client, pk packets.Packet) err
// OnPublish 在 broker 转发消息前校验 payload;无效消息会被拒绝并丢弃。
func (h *meshtasticFilterHook) OnPublish(cl *mqtt.Client, pk packets.Packet) (packets.Packet, error) {
valid, _, record := mqtpp.MQTTPP(pk.TopicName, pk.Payload, h.key)
valid, _, record := mqtpp.MQTTPP(pk.TopicName, pk.Payload, h.key, mqtpp.Options{AllowEncryptedForwarding: h.settings.AllowEncryptedForwarding()})
if !valid {
h.rejectPublish(cl, pk, record)
return pk, packets.ErrRejectPacket
@@ -213,9 +214,13 @@ func run(cfg *config) error {
if err != nil {
return err
}
settings, err := newRuntimeSettingsCache(store)
if err != nil {
return err
}
messageStats := &meshtasticMessageStats{}
server, mqttAddr, err := startMQTTServer(cfg, dbQueue, messageStats, blocking)
server, mqttAddr, err := startMQTTServer(cfg, dbQueue, messageStats, blocking, settings)
if err != nil {
return err
}
@@ -234,7 +239,7 @@ func run(cfg *config) error {
return err
}
mqttStatus := mqttRuntimeStatus{server: server, address: mqttAddr, tls: cfg.MQTT.TLS.Enabled, stats: messageStats, dbQueue: dbQueue}
httpServer = newHTTPServer(cfg.Web, store, sessions, mqttStatus, blocking, forwardManager)
httpServer = newHTTPServer(cfg.Web, store, sessions, mqttStatus, blocking, forwardManager, settings)
webAddress := httpServer.Addr
go func() {
if cfg.Web.SocketPath != "" {
@@ -275,12 +280,12 @@ func run(cfg *config) error {
return runErr
}
func startMQTTServer(cfg *config, dbQueue *dbWriteQueue, stats *meshtasticMessageStats, blocking *blockingCache) (*mqtt.Server, string, error) {
func startMQTTServer(cfg *config, dbQueue *dbWriteQueue, stats *meshtasticMessageStats, blocking *blockingCache, settings *runtimeSettingsCache) (*mqtt.Server, string, error) {
server := mqtt.New(nil)
if err := server.AddHook(new(auth.AllowHook), nil); err != nil {
return nil, "", err
}
if err := server.AddHook(&meshtasticFilterHook{key: cfg.key, dbQueue: dbQueue, stats: stats, blocking: blocking}, nil); err != nil {
if err := server.AddHook(&meshtasticFilterHook{key: cfg.key, dbQueue: dbQueue, stats: stats, blocking: blocking, settings: settings}, nil); err != nil {
return nil, "", err
}