diff --git a/nomadnet/Conversation.py b/nomadnet/Conversation.py index f97c7d0..6d66219 100644 --- a/nomadnet/Conversation.py +++ b/nomadnet/Conversation.py @@ -14,20 +14,25 @@ class Conversation: @staticmethod def received_announce(destination_hash, announced_identity, app_data): app = nomadnet.NomadNetworkApp.get_shared_instance() - destination_hash_text = RNS.hexrep(destination_hash, delimit=False) - # Check if the announced destination is in - # our list of conversations - if destination_hash_text in [e[0] for e in Conversation.conversation_list(app)]: - if app.directory.find(destination_hash): - if Conversation.created_callback != None: - Conversation.created_callback() - else: - if Conversation.created_callback != None: - Conversation.created_callback() - # Add the announce to the directory announce - # stream logger - app.directory.lxmf_announce_received(destination_hash, app_data) + if not destination_hash in app.ignored_list: + destination_hash_text = RNS.hexrep(destination_hash, delimit=False) + # Check if the announced destination is in + # our list of conversations + if destination_hash_text in [e[0] for e in Conversation.conversation_list(app)]: + if app.directory.find(destination_hash): + if Conversation.created_callback != None: + Conversation.created_callback() + else: + if Conversation.created_callback != None: + Conversation.created_callback() + + # Add the announce to the directory announce + # stream logger + app.directory.lxmf_announce_received(destination_hash, app_data) + + else: + RNS.log("Ignored announce from "+RNS.prettyhexrep(destination_hash), RNS.LOG_DEBUG) @staticmethod def query_for_peer(source_hash): diff --git a/nomadnet/Directory.py b/nomadnet/Directory.py index 0f10e24..9d3029b 100644 --- a/nomadnet/Directory.py +++ b/nomadnet/Directory.py @@ -12,12 +12,17 @@ class Directory: @staticmethod def received_announce(destination_hash, announced_identity, app_data): app = nomadnet.NomadNetworkApp.get_shared_instance() - destination_hash_text = RNS.hexrep(destination_hash, delimit=False) - associated_peer = RNS.Destination.hash_from_name_and_identity("lxmf.delivery", announced_identity) + if not destination_hash in app.ignored_list: + destination_hash_text = RNS.hexrep(destination_hash, delimit=False) - app.directory.node_announce_received(destination_hash, app_data, associated_peer) - app.autoselect_propagation_node() + associated_peer = RNS.Destination.hash_from_name_and_identity("lxmf.delivery", announced_identity) + + app.directory.node_announce_received(destination_hash, app_data, associated_peer) + app.autoselect_propagation_node() + + else: + RNS.log("Ignored announce from "+RNS.prettyhexrep(destination_hash), RNS.LOG_DEBUG) def __init__(self, app): diff --git a/nomadnet/NomadNetworkApp.py b/nomadnet/NomadNetworkApp.py index a441703..62b4865 100644 --- a/nomadnet/NomadNetworkApp.py +++ b/nomadnet/NomadNetworkApp.py @@ -65,6 +65,7 @@ class NomadNetworkApp: self.rns = RNS.Reticulum(configdir = rnsconfigdir) self.configpath = self.configdir+"/config" + self.ignoredpath = self.configdir+"/ignored" self.logfilepath = self.configdir+"/logfile" self.errorfilepath = self.configdir+"/errors" self.storagepath = self.configdir+"/storage" @@ -202,12 +203,36 @@ class NomadNetworkApp: RNS.log("The contained exception was: %s" % (str(e)), RNS.LOG_ERROR) nomadnet.panic() + self.ignored_list = [] + if os.path.isfile(self.ignoredpath): + try: + fh = open(self.ignoredpath, "rb") + ignored_input = fh.read() + fh.close() + + ignored_hash_strs = ignored_input.splitlines() + + for hash_str in ignored_hash_strs: + if len(hash_str) == RNS.Identity.TRUNCATED_HASHLENGTH//8*2: + try: + ignored_hash = bytes.fromhex(hash_str.decode("utf-8")) + self.ignored_list.append(ignored_hash) + + except Exception as e: + RNS.log("Could not decode RNS Identity hash from: "+str(hash_str), RNS.LOG_DEBUG) + RNS.log("The contained exception was: "+str(e), RNS.LOG_DEBUG) + + except Exception as e: + RNS.log("Error while fetching loading list of ignored destinations: "+str(e), RNS.LOG_ERROR) self.directory = nomadnet.Directory(self) self.message_router = LXMF.LXMRouter(identity = self.identity, storagepath = self.storagepath, autopeer = True) self.message_router.register_delivery_callback(self.lxmf_delivery) + for destination_hash in self.ignored_list: + self.message_router.ignore_destination(destination_hash) + self.lxmf_destination = self.message_router.register_delivery_identity(self.identity, display_name=self.peer_settings["display_name"]) self.lxmf_destination.set_default_app_data(self.get_display_name_bytes)