From a61616297ef4ec3e5deb01e7a4ca1acd6056c96e Mon Sep 17 00:00:00 2001 From: Florent de Lamotte Date: Fri, 7 Nov 2025 12:59:16 +0100 Subject: [PATCH] support only_prefix flag on discover node --- pyproject.toml | 2 +- src/meshcore/commands/control_data.py | 11 ++++++++--- src/meshcore/reader.py | 9 ++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2eaf1bc..5ae991a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshcore" -version = "2.1.21" +version = "2.1.22" authors = [ { name="Florent de Lamotte", email="florent@frizoncorrea.fr" }, { name="Alex Wolden", email="awolden@gmail.com" }, diff --git a/src/meshcore/commands/control_data.py b/src/meshcore/commands/control_data.py index b63ed57..81adb66 100644 --- a/src/meshcore/commands/control_data.py +++ b/src/meshcore/commands/control_data.py @@ -10,9 +10,9 @@ logger = logging.getLogger("meshcore") class ControlDataCommandHandler(CommandHandlerBase): """Helper functions to handle binary requests through binary commands""" - async def send_control_data (self, control_type: ControlType, payload: bytes) -> Event: + async def send_control_data (self, control_type: int, payload: bytes) -> Event: data = bytearray([PacketType.SEND_CONTROL_DATA.value]) - data.extend(control_type.value.to_bytes(1, "little", signed = False)) + data.extend(control_type.to_bytes(1, "little", signed = False)) data.extend(payload) result = await self.send(data, [EventType.OK, EventType.ERROR]) @@ -21,6 +21,7 @@ class ControlDataCommandHandler(CommandHandlerBase): async def send_node_discover_req ( self, filter: int, + prefix_only: bool=True, tag: int=None, since: int=None ) -> Event: @@ -36,7 +37,11 @@ class ControlDataCommandHandler(CommandHandlerBase): logger.debug(f"sending node discover req {data.hex()}") - res = await self.send_control_data(ControlType.NODE_DISCOVER_REQ, data) + flags = 0 + flags = flags | 1 if prefix_only else flags + + res = await self.send_control_data( + ControlType.NODE_DISCOVER_REQ.value|flags, data) if res is None: return None diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index ed0a8d5..fdd878a 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -618,7 +618,14 @@ class MessageReader: ndr["node_type"] = payload_type & 0x0F ndr["SNR_in"] = int.from_bytes(pbuf.read(1), byteorder="little", signed=True)/4 ndr["tag"] = pbuf.read(4).hex() - ndr["pubkey"] = pbuf.read(32).hex() + + pubkey = pbuf.read() + if len(pubkey) < 32: + pubkey = pubkey[0:8] + else: + pubkey = pubkey[0:32] + + ndr["pubkey"] = pubkey.hex() attributes = { "node_type" : ndr["node_type"],