From 3f561904232c4c3263d2aac921e00f2f859bc54f Mon Sep 17 00:00:00 2001 From: Florent Date: Wed, 18 Feb 2026 06:50:44 -0400 Subject: [PATCH] Revert PR 45 --- pyproject.toml | 2 +- src/meshcore/commands/control_data.py | 45 ------------------- src/meshcore/events.py | 1 - src/meshcore/packets.py | 2 +- src/meshcore/reader.py | 63 --------------------------- 5 files changed, 2 insertions(+), 111 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6a66322..44a47a0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "meshcore" -version = "2.2.12" +version = "2.2.13" 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 133361e..235492b 100644 --- a/src/meshcore/commands/control_data.py +++ b/src/meshcore/commands/control_data.py @@ -7,9 +7,6 @@ from ..packets import ControlType, CommandType logger = logging.getLogger("meshcore") -# Command codes -CMD_REQUEST_ADVERT = 57 # 0x39 - class ControlDataCommandHandler(CommandHandlerBase): """Helper functions to handle binary requests through binary commands""" @@ -52,45 +49,3 @@ class ControlDataCommandHandler(CommandHandlerBase): res.payload["tag"] = tag return res - async def request_advert(self, prefix: bytes, path: bytes) -> Event: - """ - Request advertisement from a node via pull-based system. - - Args: - prefix: First byte of target node's public key (PATH_HASH_SIZE = 1) - path: Path to reach the node (1-64 bytes) - - Returns: - Event with type OK on success, ERROR on failure. - The actual response arrives asynchronously as ADVERT_RESPONSE event. - - Raises: - ValueError: If prefix is not 1 byte or path is empty/too long - - Example: - # Get repeater from contacts - contacts = (await mc.commands.get_contacts()).payload - repeater = next(c for c in contacts.values() if c['adv_type'] == 2) - - # Extract prefix and path - prefix = bytes.fromhex(repeater['public_key'])[:1] - path = bytes(repeater.get('out_path', [])) or prefix - - # Send request - result = await mc.commands.request_advert(prefix, path) - if result.type == EventType.ERROR: - print(f"Failed: {result.payload}") - return - - # Wait for response - response = await mc.wait_for_event(EventType.ADVERT_RESPONSE, timeout=30) - if response: - print(f"Node: {response.payload['node_name']}") - """ - if len(prefix) != 1: - raise ValueError("Prefix must be exactly 1 byte (PATH_HASH_SIZE)") - if not path or len(path) > 64: - raise ValueError("Path must be 1-64 bytes") - - cmd = bytes([CMD_REQUEST_ADVERT]) + prefix + bytes([len(path)]) + path - return await self.send(cmd, [EventType.OK, EventType.ERROR]) diff --git a/src/meshcore/events.py b/src/meshcore/events.py index 0de7ac2..d9d0e9b 100644 --- a/src/meshcore/events.py +++ b/src/meshcore/events.py @@ -53,7 +53,6 @@ class EventType(Enum): NEIGHBOURS_RESPONSE = "neighbours_response" SIGN_START = "sign_start" SIGNATURE = "signature" - ADVERT_RESPONSE = "advert_response" ALLOWED_REPEAT_FREQ = "allowed_repeat_freq" # Command response types diff --git a/src/meshcore/packets.py b/src/meshcore/packets.py index 4246041..0a7dacf 100644 --- a/src/meshcore/packets.py +++ b/src/meshcore/packets.py @@ -116,4 +116,4 @@ class PacketType(Enum): BINARY_RESPONSE = 0x8C PATH_DISCOVERY_RESPONSE = 0x8D CONTROL_DATA = 0x8E - ADVERT_RESPONSE = 0x8F + CONTACT_DELETED = 0x8F diff --git a/src/meshcore/reader.py b/src/meshcore/reader.py index 2f69f9f..caefbc2 100644 --- a/src/meshcore/reader.py +++ b/src/meshcore/reader.py @@ -771,69 +771,6 @@ class MessageReader: res = {"reason": "private_key_export_disabled"} await self.dispatcher.dispatch(Event(EventType.DISABLED, res)) - elif packet_type_value == PacketType.ADVERT_RESPONSE.value: - logger.debug(f"Received advert response: {data.hex()}") - # PUSH_CODE_ADVERT_RESPONSE (0x8F) format: - # Byte 0: 0x8F (push code) - # Bytes 1-4: tag (uint32) - # Bytes 5-36: pubkey (32 bytes) - # Byte 37: adv_type - # Bytes 38-69: node_name (32 bytes) - # Bytes 70-73: timestamp (uint32) - # Byte 74: flags - # [Optional fields based on flags] - - if len(data) < 75: - logger.error(f"Advert response too short: {len(data)} bytes, need at least 75") - return - - res = {} - offset = 1 # Skip push code - - res["tag"] = struct.unpack('