From 206321bd6b8147b03a5013745acde79f9c1b5b47 Mon Sep 17 00:00:00 2001 From: Florent Date: Thu, 31 Jul 2025 22:10:03 +0200 Subject: [PATCH] discover_path --- pyproject.toml | 2 +- src/meshcore/commands.py | 6 ++++++ src/meshcore/events.py | 1 + src/meshcore/packets.py | 1 + src/meshcore/reader.py | 17 +++++++++++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dfd86b4..2c6fc96 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshcore" -version = "2.0.2" +version = "2.0.3" authors = [ { name="Florent de Lamotte", email="florent@frizoncorrea.fr" }, { name="Alex Wolden", email="awolden@gmail.com" }, diff --git a/src/meshcore/commands.py b/src/meshcore/commands.py index 516849c..2d5bbf1 100644 --- a/src/meshcore/commands.py +++ b/src/meshcore/commands.py @@ -399,6 +399,12 @@ class CommandHandler: logger.debug(f"Binary request to {dst_bytes.hex()}") data = b"\x32" + dst_bytes + bin_data return await self.send(data, [EventType.MSG_SENT, EventType.ERROR]) + + async def send_path_discovery(self, dst: DestinationType) -> Event : + dst_bytes = _validate_destination(dst, prefix_length=32) + logger.debug(f"Path discovery request for {dst_bytes.hex()}") + data = b"\x34\x00" + dst_bytes + return await self.send(data, [EventType.MSG_SENT, EventType.ERROR]) async def get_self_telemetry(self) -> Event : logger.debug(f"Getting self telemetry") diff --git a/src/meshcore/events.py b/src/meshcore/events.py index c5a6067..fc81f80 100644 --- a/src/meshcore/events.py +++ b/src/meshcore/events.py @@ -37,6 +37,7 @@ class EventType(Enum): BINARY_RESPONSE = "binary_response" CUSTOM_VARS = "custom_vars" CHANNEL_INFO = "channel_info" + PATH_RESPONSE = "path_response" # Command response types OK = "command_ok" diff --git a/src/meshcore/packets.py b/src/meshcore/packets.py index 1a2b92f..f8a9e0e 100644 --- a/src/meshcore/packets.py +++ b/src/meshcore/packets.py @@ -41,3 +41,4 @@ class PacketType(Enum): PUSH_CODE_NEW_ADVERT = 0x8A TELEMETRY_RESPONSE = 0x8B BINARY_RESPONSE = 0x8C + PATH_DISCOVERY_RESPONSE = 0x8D diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index bd60bad..8097f47 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -461,6 +461,23 @@ class MessageReader: await self.dispatcher.dispatch(Event(EventType.BINARY_RESPONSE, res, attributes)) + elif packet_type_value == PacketType.PATH_DISCOVERY_RESPONSE.value: + logger.debug(f"Received path discovery response: {data.hex()}") + res = {} + res["pubkey_pre"] = data[2:8].hex() + opl = data[8] + res["out_path_len"] = opl + res["out_path"] = data[9:9+opl].hex() + ipl = data[9+opl] + res["in_path_len"] = ipl + res["in_path"] = data[10+opl:10+opl+ipl].hex() + + attributes = { + "pubkey_pre" : res["pubkey_pre"] + } + + await self.dispatcher.dispatch(Event(EventType.PATH_RESPONSE, res, attributes)) + else: logger.debug(f"Unhandled data received {data}") logger.debug(f"Unhandled packet type: {packet_type_value}")