Compare commits

..

4 Commits

Author SHA1 Message Date
Mark Qvist fd13e20165 Updated version 2021-10-09 23:23:44 +02:00
Mark Qvist 66ce58f0f4 Implemented path updating for moving nodes 2021-10-09 22:13:27 +02:00
Mark Qvist e8ee26f78d Emission timestamp in announce. 2021-10-09 21:36:01 +02:00
Mark Qvist c0fb419fe1 Fixed Resource string representation. Added emission timestamp in announce. 2021-10-09 21:30:34 +02:00
4 changed files with 25 additions and 7 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
import base64
import math
import time
import RNS
from cryptography.fernet import Fernet
@@ -146,7 +147,7 @@ class Destination:
:param path_response: Internal flag used by :ref:`RNS.Transport<api-transport>`. Ignore.
"""
destination_hash = self.hash
random_hash = RNS.Identity.get_random_hash()
random_hash = RNS.Identity.get_random_hash()[0:5]+int(time.time()).to_bytes(5, "big")
if app_data == None and self.default_app_data != None:
if isinstance(self.default_app_data, bytes):
+1 -1
View File
@@ -804,7 +804,7 @@ class Resource:
return progress
def __str__(self):
return RNS.prettyhexrep(self.hash)+str(self.link)
return "<"+RNS.hexrep(self.hash)+"/"+RNS.hexrep(self.link.link_id)+">"
class ResourceAdvertisement:
+21 -4
View File
@@ -775,7 +775,8 @@ class Transport:
# First, check that the announce is not for a destination
# local to this system, and that hops are less than the max
if (not any(packet.destination_hash == d.hash for d in Transport.destinations) and packet.hops < Transport.PATHFINDER_M+1):
random_blob = packet.data[RNS.Identity.KEYSIZE//8+10:RNS.Identity.KEYSIZE//8+20]
random_blob = packet.data[RNS.Identity.KEYSIZE//8:RNS.Identity.KEYSIZE//8+RNS.Reticulum.TRUNCATED_HASHLENGTH//8]
announce_emitted = int.from_bytes(random_blob[5:10], "big")
random_blobs = []
if packet.destination_hash in Transport.destination_table:
random_blobs = Transport.destination_table[packet.destination_hash][4]
@@ -796,8 +797,18 @@ class Transport:
else:
# If an announce arrives with a larger hop
# count than we already have in the table,
# ignore it, unless the path is expired
if (time.time() > Transport.destination_table[packet.destination_hash][3]):
# ignore it, unless the path is expired, or
# the emission timestamp is more recent.
now = time.time()
path_expires = Transport.destination_table[packet.destination_hash][3]
path_announce_emitted = 0
for path_random_blob in random_blobs:
path_announce_emitted = max(path_announce_emitted, int.from_bytes(path_random_blob[5:10], "big"))
if path_announce_emitted >= announce_emitted:
break
if (now >= path_expires):
# We also check that the announce hash is
# different from ones we've already heard,
# to avoid loops in the network
@@ -809,7 +820,13 @@ class Transport:
else:
should_add = False
else:
should_add = False
if (announce_emitted > path_announce_emitted):
if not random_blob in random_blobs:
RNS.log("Replacing destination table entry for "+str(RNS.prettyhexrep(packet.destination_hash))+" with new announce, since it was more recently emitted", RNS.LOG_DEBUG)
should_add = True
else:
should_add = False
else:
# If this destination is unknown in our table
# we should add it
+1 -1
View File
@@ -1 +1 @@
__version__ = "0.2.7"
__version__ = "0.2.8"