This commit is contained in:
2026-06-03 01:55:11 +08:00
parent d4143a9937
commit 2df622f8e1
2 changed files with 13 additions and 11 deletions
+5 -3
View File
@@ -9,6 +9,8 @@ import (
"syscall"
"time"
"meshtastic_mqtt_server/mqtpp"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
@@ -90,7 +92,7 @@ func parseArgs() (*config, error) {
if cfg.qos < 0 || cfg.qos > 2 {
return nil, fmt.Errorf("invalid qos %d: must be 0, 1, or 2", cfg.qos)
}
key, err := expandPSK(cfg.psk)
key, err := mqtpp.ExpandPSK(cfg.psk)
if err != nil {
return nil, err
}
@@ -139,7 +141,7 @@ func run(cfg *config) error {
// handleMessage 返回 MQTT 消息回调,把原始 payload 交给 MQTTPP 处理后按类型输出。
func handleMessage(key []byte) mqtt.MessageHandler {
return func(_ mqtt.Client, msg mqtt.Message) {
valid, _, decodedJSON := MQTTPP(msg.Topic(), msg.Payload(), key)
valid, _, decodedJSON := mqtpp.MQTTPP(msg.Topic(), msg.Payload(), key)
if !valid || len(decodedJSON) == 0 {
return
}
@@ -158,7 +160,7 @@ func handleMessage(key []byte) mqtt.MessageHandler {
// printJSON 将记录编码为 JSON 后按数据包类型着色输出。
func printJSON(record map[string]any) {
printJSONBytes(record, mustJSON(record))
printJSONBytes(record, mqtpp.MustJSON(record))
}
// printJSONBytes 使用已编码好的 JSON 文本,并根据记录 type 选择控制台颜色。
+8 -8
View File
@@ -1,4 +1,4 @@
package main
package mqtpp
import (
"crypto/aes"
@@ -89,17 +89,17 @@ func MQTTPP(topic string, raw []byte, key []byte) (bool, []byte, []byte) {
env, err := parseServiceEnvelope(raw)
if err != nil {
return true, raw, mustJSON(map[string]any{"topic": topic, "error": "protobuf decode failed: " + err.Error(), "payload_len": len(raw)})
return true, raw, MustJSON(map[string]any{"topic": topic, "error": "protobuf decode failed: " + err.Error(), "payload_len": len(raw)})
}
record, err := describePacket(topic, env, key)
if err != nil {
return true, raw, mustJSON(map[string]any{"topic": topic, "error": err.Error(), "payload_len": len(raw)})
return true, raw, MustJSON(map[string]any{"topic": topic, "error": err.Error(), "payload_len": len(raw)})
}
return true, raw, mustJSON(record)
return true, raw, MustJSON(record)
}
// expandPSK 展开 Base64 PSK,兼容 Meshtastic 默认索引 PSK 和短 key 补零规则。
func expandPSK(pskBase64 string) ([]byte, error) {
// ExpandPSK 展开 Base64 PSK,兼容 Meshtastic 默认索引 PSK 和短 key 补零规则。
func ExpandPSK(pskBase64 string) ([]byte, error) {
psk, err := base64.StdEncoding.DecodeString(pskBase64)
if err != nil {
return nil, fmt.Errorf("invalid psk: %w", err)
@@ -131,8 +131,8 @@ func isCompliantMQTTPacket(_ []byte) bool {
return true
}
// mustJSON 将记录编码成 JSON;编码失败时返回包含错误信息的 JSON。
func mustJSON(record map[string]any) []byte {
// MustJSON 将记录编码成 JSON;编码失败时返回包含错误信息的 JSON。
func MustJSON(record map[string]any) []byte {
text, err := json.Marshal(record)
if err != nil {
text, _ = json.Marshal(map[string]any{"error": err.Error()})