From 34d44a99ee238b69b12829ba1295bd19166db139 Mon Sep 17 00:00:00 2001 From: Lorenzo Delgado Date: Wed, 1 Mar 2023 10:11:29 +0100 Subject: [PATCH] feat(message): added meta attribute to waku message --- waku/v2/protocol/waku_message/codec.nim | 11 +++++++++++ waku/v2/protocol/waku_message/message.nim | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/waku/v2/protocol/waku_message/codec.nim b/waku/v2/protocol/waku_message/codec.nim index a11718414..7f47dae47 100644 --- a/waku/v2/protocol/waku_message/codec.nim +++ b/waku/v2/protocol/waku_message/codec.nim @@ -21,6 +21,7 @@ proc encode*(message: WakuMessage): ProtoBuffer = buf.write3(2, message.contentTopic) buf.write3(3, message.version) buf.write3(10, zint64(message.timestamp)) + buf.write3(11, message.meta) when defined(rln): buf.write3(21, message.proof) buf.write3(31, message.ephemeral) @@ -62,6 +63,16 @@ proc decode*(T: type WakuMessage, buffer: seq[byte]): ProtobufResult[T] = msg.timestamp = Timestamp(timestamp) + var meta: seq[byte] + if not ?pb.getField(11, meta): + msg.meta = @[] + else: + if meta.len > MaxMetaAttrLength: + return err(ProtobufError.invalidLengthField("meta")) + + msg.meta = meta + + # Experimental: this is part of https://rfc.vac.dev/spec/17/ spec when defined(rln): var proof: seq[byte] diff --git a/waku/v2/protocol/waku_message/message.nim b/waku/v2/protocol/waku_message/message.nim index dbb11bc8b..56a62207a 100644 --- a/waku/v2/protocol/waku_message/message.nim +++ b/waku/v2/protocol/waku_message/message.nim @@ -13,6 +13,8 @@ import ../../utils/time const + MaxMetaAttrLength* = 32 # 32 bytes + MaxWakuMessageSize* = 1024 * 1024 # 1 Mibytes. Corresponds to PubSub default @@ -30,6 +32,8 @@ type WakuMessage* = object payload*: seq[byte] # String identifier that can be used for content-based filtering. contentTopic*: ContentTopic + # Application specific metadata. + meta*: seq[byte] # Number to discriminate different types of payload encryption. # Compatibility with Whisper/WakuV1. version*: uint32