From 8a2c39ba8e98661efeb518a50dabfabdc998d9ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dalfors?= Date: Wed, 15 May 2024 15:24:30 +0200 Subject: [PATCH] fix: use sparkplugb decoder only for spBv1.0 topic --- backend/src/Model/sparkplugb.ts | 7 ++++--- backend/src/index.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/src/Model/sparkplugb.ts b/backend/src/Model/sparkplugb.ts index f9fc7ce..b4b460d 100644 --- a/backend/src/Model/sparkplugb.ts +++ b/backend/src/Model/sparkplugb.ts @@ -9,7 +9,7 @@ const root = protobuf.parse(protocol).root export let SparkplugPayload = root.lookupType('com.cirruslink.sparkplug.protobuf.Payload') export const SparkplugDecoder = { - decode(input: Buffer): Base64Message | undefined { + decode(input: Buffer): Base64Message { try { const message = Base64Message.fromString( JSON.stringify(SparkplugPayload.toObject(SparkplugPayload.decode(new Uint8Array(input)))) @@ -17,8 +17,9 @@ export const SparkplugDecoder = { message.decoder = Decoder.SPARKPLUG return message } catch { - // ignore + const message = Base64Message.fromString("Failed to decode sparkplugb payload") + message.decoder = Decoder.NONE + return message } - return undefined }, } diff --git a/backend/src/index.ts b/backend/src/index.ts index 4cd6a92..9f0df55 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -47,9 +47,16 @@ export class ConnectionManager { buffer = buffer.slice(0, 20000) } + let decoded_payload = null + if (topic.startsWith("spBv1.0/")) { + decoded_payload = SparkplugDecoder.decode(buffer) + } else { + decoded_payload = Base64Message.fromBuffer(buffer) + } + backendEvents.emit(messageEvent, { topic, - payload: SparkplugDecoder.decode(buffer) ?? Base64Message.fromBuffer(buffer), + payload: decoded_payload, qos: packet.qos, retain: packet.retain, messageId: packet.messageId,