From 81a6d503a3d897550d0ae78d05e11a87e71f99d7 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Thu, 30 Oct 2025 16:55:44 +0100 Subject: [PATCH] Automatic legacy PN de-peering --- LXMF/Handlers.py | 6 +++--- LXMF/LXMF.py | 8 ++++---- LXMF/LXMRouter.py | 15 +++++++-------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/LXMF/Handlers.py b/LXMF/Handlers.py index 40c416d..5daedd1 100644 --- a/LXMF/Handlers.py +++ b/LXMF/Handlers.py @@ -45,13 +45,13 @@ class LXMFPropagationAnnounceHandler: if self.lxmrouter.propagation_node: data = msgpack.unpackb(app_data) if pn_announce_data_is_valid(data): - metadata = data[0] - propagation_enabled = data[1] - node_timebase = int(data[2]) + node_timebase = int(data[1]) + propagation_enabled = data[2] propagation_transfer_limit = int(data[3]) propagation_sync_limit = int(data[4]) propagation_stamp_cost = int(data[5][0]) propagation_stamp_cost_flexibility = int(data[5][1]) + metadata = data[6] if destination_hash in self.lxmrouter.static_peers: self.lxmrouter.peer(destination_hash=destination_hash, diff --git a/LXMF/LXMF.py b/LXMF/LXMF.py index a57e31a..6369d69 100644 --- a/LXMF/LXMF.py +++ b/LXMF/LXMF.py @@ -150,12 +150,11 @@ def stamp_cost_from_app_data(app_data=None): def pn_announce_data_is_valid(data): try: if type(data) == bytes: data = msgpack.unpackb(data) - if len(data) < 6: raise ValueError("Invalid announce data: Insufficient peer data") + if len(data) < 7: raise ValueError("Invalid announce data: Insufficient peer data") else: - if type(data[0]) != dict: raise ValueError("Invalid announce data: Could not decode peer metadata") - if data[1] != True and data[1] != False: raise ValueError("Invalid announce data: Indeterminate propagation node status") - try: int(data[2]) + try: int(data[1]) except: raise ValueError("Invalid announce data: Could not decode peer timebase") + if data[2] != True and data[2] != False: raise ValueError("Invalid announce data: Indeterminate propagation node status") try: int(data[3]) except: raise ValueError("Invalid announce data: Could not decode peer propagation transfer limit") try: int(data[4]) @@ -165,6 +164,7 @@ def pn_announce_data_is_valid(data): except: raise ValueError("Invalid announce data: Could not decode peer target stamp cost") try: int(data[5][1]) except: raise ValueError("Invalid announce data: Could not decode peer stamp cost flexibility") + if type(data[6]) != dict: raise ValueError("Invalid announce data: Could not decode peer metadata") except Exception as e: RNS.log(f"Could not validate propagation node announce data: {e}", RNS.LOG_DEBUG) diff --git a/LXMF/LXMRouter.py b/LXMF/LXMRouter.py index 4f31920..816d949 100644 --- a/LXMF/LXMRouter.py +++ b/LXMF/LXMRouter.py @@ -285,14 +285,13 @@ class LXMRouter: node_state = self.propagation_node and not self.from_static_only stamp_cost = [self.propagation_stamp_cost, self.propagation_stamp_cost_flexibility] metadata = {} - announce_data = [ - metadata, # Node metadata - node_state, # Boolean flag signalling propagation node state - int(time.time()), # Current node timebase - self.propagation_per_transfer_limit, # Per-transfer limit for message propagation in kilobytes - self.propagation_per_sync_limit, # Limit for incoming propagation node syncs - stamp_cost, # Propagation stamp cost for this node - ] + announce_data = [ False, # Legacy LXMF PN support + int(time.time()), # Current node timebase + node_state, # Boolean flag signalling propagation node state + self.propagation_per_transfer_limit, # Per-transfer limit for message propagation in kilobytes + self.propagation_per_sync_limit, # Limit for incoming propagation node syncs + stamp_cost, # Propagation stamp cost for this node + metadata ] # Node metadata data = msgpack.packb(announce_data) self.propagation_destination.announce(app_data=data)