Fixed Resource string representation. Added emission timestamp in announce.

This commit is contained in:
Mark Qvist 2021-10-09 21:30:34 +02:00
parent 4ef369cdd8
commit c0fb419fe1
3 changed files with 23 additions and 4 deletions

View File

@ -1,5 +1,6 @@
import base64 import base64
import math import math
import time
import RNS import RNS
from cryptography.fernet import Fernet from cryptography.fernet import Fernet
@ -146,7 +147,7 @@ class Destination:
:param path_response: Internal flag used by :ref:`RNS.Transport<api-transport>`. Ignore. :param path_response: Internal flag used by :ref:`RNS.Transport<api-transport>`. Ignore.
""" """
destination_hash = self.hash 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 app_data == None and self.default_app_data != None:
if isinstance(self.default_app_data, bytes): if isinstance(self.default_app_data, bytes):

View File

@ -804,7 +804,7 @@ class Resource:
return progress return progress
def __str__(self): def __str__(self):
return RNS.prettyhexrep(self.hash)+str(self.link) return "<"+RNS.hexrep(self.hash)+"/"+RNS.hexrep(self.link.link_id)+">"
class ResourceAdvertisement: class ResourceAdvertisement:

View File

@ -776,6 +776,9 @@ class Transport:
# local to this system, and that hops are less than the max # 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): 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+10:RNS.Identity.KEYSIZE//8+20]
announce_emitted = int.from_bytes(random_blob[5:10], "big")
# TODO: Remove
RNS.log("Announce timestamp is: "+str(announce_emitted))
random_blobs = [] random_blobs = []
if packet.destination_hash in Transport.destination_table: if packet.destination_hash in Transport.destination_table:
random_blobs = Transport.destination_table[packet.destination_hash][4] random_blobs = Transport.destination_table[packet.destination_hash][4]
@ -796,8 +799,23 @@ class Transport:
else: else:
# If an announce arrives with a larger hop # If an announce arrives with a larger hop
# count than we already have in the table, # count than we already have in the table,
# ignore it, unless the path is expired # ignore it, unless the path is expired, or
if (time.time() > Transport.destination_table[packet.destination_hash][3]): # the emission timestamp is more recent.
now = time.time()
path_expires = Transport.destination_table[packet.destination_hash][3]
path_announce_emitted = 0
for random_blob in random_blobs:
path_announce_emitted = max(path_announce_emitted, int.from_bytes(random_blob[5:10], "big"))
if path_announce_emitted > announce_emitted:
break
# TODO: Remove
RNS.log("PA e: "+str(path_announce_emitted))
RNS.log("A e: "+str(announce_emitted))
##############
if (now >= path_expires or announce_emitted >= path_announce_emitted):
# We also check that the announce hash is # We also check that the announce hash is
# different from ones we've already heard, # different from ones we've already heard,
# to avoid loops in the network # to avoid loops in the network