Also receive PN path response announces, but only update peering data on live announces

This commit is contained in:
Mark Qvist 2025-10-30 15:18:09 +01:00
parent 3f91e44a6d
commit 0f2d3b06c2

View file

@ -35,53 +35,54 @@ class LXMFDeliveryAnnounceHandler:
class LXMFPropagationAnnounceHandler: class LXMFPropagationAnnounceHandler:
def __init__(self, lxmrouter): def __init__(self, lxmrouter):
self.aspect_filter = APP_NAME+".propagation" self.aspect_filter = APP_NAME+".propagation"
self.receive_path_responses = False self.receive_path_responses = True
self.lxmrouter = lxmrouter self.lxmrouter = lxmrouter
def received_announce(self, destination_hash, announced_identity, app_data): def received_announce(self, destination_hash, announced_identity, app_data, announce_packet_hash, is_path_response):
try: if not is_path_response:
if type(app_data) == bytes: try:
if self.lxmrouter.propagation_node: if type(app_data) == bytes:
data = msgpack.unpackb(app_data) if self.lxmrouter.propagation_node:
if pn_announce_data_is_valid(data): data = msgpack.unpackb(app_data)
node_timebase = data[1] if pn_announce_data_is_valid(data):
propagation_transfer_limit = None node_timebase = data[1]
propagation_sync_limit = None propagation_transfer_limit = None
wanted_inbound_peers = None propagation_sync_limit = None
if len(data) >= 5: wanted_inbound_peers = None
try: propagation_sync_limit = int(data[4]) if len(data) >= 5:
except Exception as e: propagation_sync_limit = None try: propagation_sync_limit = int(data[4])
except Exception as e: propagation_sync_limit = None
if len(data) >= 4: if len(data) >= 4:
# TODO: Rethink, probably not necessary anymore # TODO: Rethink, probably not necessary anymore
# try: wanted_inbound_peers = int(data[3]) # try: wanted_inbound_peers = int(data[3])
# except: wanted_inbound_peers = None # except: wanted_inbound_peers = None
pass pass
if len(data) >= 3: if len(data) >= 3:
try: propagation_transfer_limit = float(data[2]) try: propagation_transfer_limit = float(data[2])
except: propagation_transfer_limit = None except: propagation_transfer_limit = None
if destination_hash in self.lxmrouter.static_peers: if destination_hash in self.lxmrouter.static_peers:
self.lxmrouter.peer(destination_hash=destination_hash, self.lxmrouter.peer(destination_hash=destination_hash,
timestamp=node_timebase, timestamp=node_timebase,
propagation_transfer_limit=propagation_transfer_limit, propagation_transfer_limit=propagation_transfer_limit,
propagation_sync_limit=propagation_sync_limit, propagation_sync_limit=propagation_sync_limit,
wanted_inbound_peers=wanted_inbound_peers) wanted_inbound_peers=wanted_inbound_peers)
else: else:
if self.lxmrouter.autopeer: if self.lxmrouter.autopeer:
if data[0] == True: if data[0] == True:
if RNS.Transport.hops_to(destination_hash) <= self.lxmrouter.autopeer_maxdepth: if RNS.Transport.hops_to(destination_hash) <= self.lxmrouter.autopeer_maxdepth:
self.lxmrouter.peer(destination_hash=destination_hash, self.lxmrouter.peer(destination_hash=destination_hash,
timestamp=node_timebase, timestamp=node_timebase,
propagation_transfer_limit=propagation_transfer_limit, propagation_transfer_limit=propagation_transfer_limit,
propagation_sync_limit=propagation_sync_limit, propagation_sync_limit=propagation_sync_limit,
wanted_inbound_peers=wanted_inbound_peers) wanted_inbound_peers=wanted_inbound_peers)
elif data[0] == False: elif data[0] == False:
self.lxmrouter.unpeer(destination_hash, node_timebase) self.lxmrouter.unpeer(destination_hash, node_timebase)
except Exception as e: except Exception as e:
RNS.log("Error while evaluating propagation node announce, ignoring announce.", RNS.LOG_DEBUG) RNS.log("Error while evaluating propagation node announce, ignoring announce.", RNS.LOG_DEBUG)
RNS.log("The contained exception was: "+str(e), RNS.LOG_DEBUG) RNS.log("The contained exception was: "+str(e), RNS.LOG_DEBUG)