From 5f578f93b308309a79d51c6875962565e2a39f36 Mon Sep 17 00:00:00 2001
From: Mark Qvist <mark@unsigned.io>
Date: Mon, 17 May 2021 21:54:28 +0200
Subject: [PATCH] Added automatic path requests. Bumped version to 0.0.4.

---
 LXMF/LXMF.py | 17 +++++++++++------
 setup.py     |  4 ++--
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/LXMF/LXMF.py b/LXMF/LXMF.py
index c86e195..3275f09 100644
--- a/LXMF/LXMF.py
+++ b/LXMF/LXMF.py
@@ -455,7 +455,7 @@ class LXMRouter:
 	MAX_DELIVERY_ATTEMPTS = 3
 	PROCESSING_INTERVAL   = 5
 	DELIVERY_RETRY_WAIT   = 15
-	LINK_MAX_INACTIVITY   = 30
+	LINK_MAX_INACTIVITY   = 10*60
 
 	def __init__(self):
 		self.pending_inbound       = []
@@ -597,7 +597,8 @@ class LXMRouter:
 				closed_links.append(link_hash)
 
 		for link_hash in closed_links:
-			self.direct_links.pop(link_hash)
+			cleaned_link = self.direct_links.pop(link_hash)
+			RNS.log("Cleaned link "+str(cleaned_link), RNS.LOG_DEBUG)
 
 	def fail_message(self, lxmessage):
 		RNS.log(str(lxmessage)+" failed to send", RNS.LOG_DEBUG)
@@ -665,10 +666,14 @@ class LXMRouter:
 								lxmessage.delivery_attempts += 1
 								lxmessage.next_delivery_attempt = time.time() + LXMRouter.DELIVERY_RETRY_WAIT
 								if lxmessage.delivery_attempts < LXMRouter.MAX_DELIVERY_ATTEMPTS:
-									RNS.log("Establishing link to "+RNS.prettyhexrep(lxmessage.get_destination().hash)+" for delivery attempt "+str(lxmessage.delivery_attempts)+" to "+RNS.prettyhexrep(lxmessage.get_destination().hash), RNS.LOG_DEBUG)
-									delivery_link = RNS.Link(lxmessage.get_destination())
-									delivery_link.link_established_callback(self.process_outbound)
-									self.direct_links[delivery_destination_hash] = delivery_link
+									if RNS.Transport.has_path(lxmessage.get_destination().hash):
+										RNS.log("Establishing link to "+RNS.prettyhexrep(lxmessage.get_destination().hash)+" for delivery attempt "+str(lxmessage.delivery_attempts)+" to "+RNS.prettyhexrep(lxmessage.get_destination().hash), RNS.LOG_DEBUG)
+										delivery_link = RNS.Link(lxmessage.get_destination())
+										delivery_link.link_established_callback(self.process_outbound)
+										self.direct_links[delivery_destination_hash] = delivery_link
+									else:
+										RNS.log("No path known for delivery attempt "+str(lxmessage.delivery_attempts)+" to "+RNS.prettyhexrep(lxmessage.get_destination().hash)+". Requesting path...", RNS.LOG_DEBUG)
+										RNS.Transport.request_path(lxmessage.get_destination().hash)
 					else:
 						RNS.log("Max delivery attempts reached for direct "+str(lxmessage)+" to "+RNS.prettyhexrep(lxmessage.get_destination().hash), RNS.LOG_DEBUG)
 						self.fail_message(lxmessage)
diff --git a/setup.py b/setup.py
index 3ba27d2..7a47b64 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
 
 setuptools.setup(
     name="lxmf",
-    version="0.0.2",
+    version="0.0.4",
     author="Mark Qvist",
     author_email="mark@unsigned.io",
     description="Lightweight Extensible Message Format for Reticulum",
@@ -18,6 +18,6 @@ setuptools.setup(
         "License :: OSI Approved :: MIT License",
         "Operating System :: OS Independent",
     ],
-    install_requires=['rns'],
+    install_requires=['rns>=0.2.0'],
     python_requires='>=3.6',
 )
\ No newline at end of file