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 1/3] 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 f9fc7ce1..b4b460da 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 4cd6a920..9f0df55c 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, From a346c48d3e32a62422bd56939963ebe9740178f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dalfors?= Date: Fri, 17 May 2024 09:08:34 +0200 Subject: [PATCH 2/3] refine sparkplug detection --- backend/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index 9f0df55c..0502ae3b 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -48,7 +48,8 @@ export class ConnectionManager { } let decoded_payload = null - if (topic.startsWith("spBv1.0/")) { + // spell-checker: disable-next-line + if (topic.match(/spBv1\.0\/[^/]+\/(DDATA|NDATA|NCMD|DCMD|NBIRTH|DBIRTH|NDEATH|DDEATH\/[^/]+\/)/u)) { decoded_payload = SparkplugDecoder.decode(buffer) } else { decoded_payload = Base64Message.fromBuffer(buffer) From 7617430a3ff6b9f037930662b3157b60f1af3919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Dalfors?= Date: Sat, 18 May 2024 21:42:25 +0200 Subject: [PATCH 3/3] fix regex --- backend/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index 0502ae3b..7e597e3d 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -49,7 +49,7 @@ export class ConnectionManager { let decoded_payload = null // spell-checker: disable-next-line - if (topic.match(/spBv1\.0\/[^/]+\/(DDATA|NDATA|NCMD|DCMD|NBIRTH|DBIRTH|NDEATH|DDEATH\/[^/]+\/)/u)) { + if (topic.match(/^spBv1\.0\/[^/]+\/[ND](DATA|CMD|DEATH|BIRTH)\/[^/]+(\/[^/]+)?$/u)) { decoded_payload = SparkplugDecoder.decode(buffer) } else { decoded_payload = Base64Message.fromBuffer(buffer)