Compare commits

..

No commits in common. "2439761529166b9142cffa85de28fc6e2bca26d1" and "bf40f74a4ac8757b3c54f88e8a8b946df8e4660e" have entirely different histories.

3 changed files with 40 additions and 50 deletions

View File

@ -476,8 +476,7 @@ class Resource:
if sleep_time < 0: if sleep_time < 0:
if self.retries_left > 0: if self.retries_left > 0:
ms = "" if self.outstanding_parts == 1 else "s" RNS.log("Timed out waiting for parts, requesting retry", RNS.LOG_DEBUG)
RNS.log("Timed out waiting for "+str(self.outstanding_parts)+" part"+ms+", requesting retry", RNS.LOG_DEBUG)
if self.window > self.window_min: if self.window > self.window_min:
self.window -= 1 self.window -= 1
if self.window_max > self.window_min: if self.window_max > self.window_min:

View File

@ -2047,44 +2047,40 @@ class Transport:
next_hop = Transport.destination_table[destination_hash][1] next_hop = Transport.destination_table[destination_hash][1]
received_from = Transport.destination_table[destination_hash][5] received_from = Transport.destination_table[destination_hash][5]
if attached_interface.mode == RNS.Interfaces.Interface.Interface.MODE_ROAMING and attached_interface == received_from: if requestor_transport_id != None and next_hop == requestor_transport_id:
RNS.log("Not answering path request on roaming-mode interface, since next hop is on same roaming-mode interface", RNS.LOG_DEBUG) # TODO: Find a bandwidth efficient way to invalidate our
# known path on this signal. The obvious way of signing
# path requests with transport instance keys is quite
# inefficient. There is probably a better way. Doing
# path invalidation here would decrease the network
# convergence time. Maybe just drop it?
RNS.log("Not answering path request for "+RNS.prettyhexrep(destination_hash)+interface_str+", since next hop is the requestor", RNS.LOG_DEBUG)
else: else:
if requestor_transport_id != None and next_hop == requestor_transport_id: RNS.log("Answering path request for "+RNS.prettyhexrep(destination_hash)+interface_str+", path is known", RNS.LOG_DEBUG)
# TODO: Find a bandwidth efficient way to invalidate our
# known path on this signal. The obvious way of signing now = time.time()
# path requests with transport instance keys is quite retries = Transport.PATHFINDER_R
# inefficient. There is probably a better way. Doing local_rebroadcasts = 0
# path invalidation here would decrease the network block_rebroadcasts = True
# convergence time. Maybe just drop it? announce_hops = packet.hops
RNS.log("Not answering path request for "+RNS.prettyhexrep(destination_hash)+interface_str+", since next hop is the requestor", RNS.LOG_DEBUG)
if is_from_local_client:
retransmit_timeout = now
else: else:
RNS.log("Answering path request for "+RNS.prettyhexrep(destination_hash)+interface_str+", path is known", RNS.LOG_DEBUG) # TODO: Look at this timing
retransmit_timeout = now + Transport.PATH_REQUEST_GRACE # + (RNS.rand() * Transport.PATHFINDER_RW)
now = time.time() # This handles an edge case where a peer sends a past
retries = Transport.PATHFINDER_R # request for a destination just after an announce for
local_rebroadcasts = 0 # said destination has arrived, but before it has been
block_rebroadcasts = True # rebroadcast locally. In such a case the actual announce
announce_hops = packet.hops # is temporarily held, and then reinserted when the path
# request has been served to the peer.
if packet.destination_hash in Transport.announce_table:
held_entry = Transport.announce_table[packet.destination_hash]
Transport.held_announces[packet.destination_hash] = held_entry
if is_from_local_client: Transport.announce_table[packet.destination_hash] = [now, retransmit_timeout, retries, received_from, announce_hops, packet, local_rebroadcasts, block_rebroadcasts, attached_interface]
retransmit_timeout = now
else:
# TODO: Look at this timing
retransmit_timeout = now + Transport.PATH_REQUEST_GRACE # + (RNS.rand() * Transport.PATHFINDER_RW)
# This handles an edge case where a peer sends a past
# request for a destination just after an announce for
# said destination has arrived, but before it has been
# rebroadcast locally. In such a case the actual announce
# is temporarily held, and then reinserted when the path
# request has been served to the peer.
if packet.destination_hash in Transport.announce_table:
held_entry = Transport.announce_table[packet.destination_hash]
Transport.held_announces[packet.destination_hash] = held_entry
Transport.announce_table[packet.destination_hash] = [now, retransmit_timeout, retries, received_from, announce_hops, packet, local_rebroadcasts, block_rebroadcasts, attached_interface]
elif is_from_local_client: elif is_from_local_client:
# Forward path request on all interfaces # Forward path request on all interfaces

View File

@ -187,20 +187,15 @@ def program_setup(configdir, table, rates, drop, destination_hexhash, verbosity,
if RNS.Transport.has_path(destination_hash): if RNS.Transport.has_path(destination_hash):
hops = RNS.Transport.hops_to(destination_hash) hops = RNS.Transport.hops_to(destination_hash)
next_hop_bytes = reticulum.get_next_hop(destination_hash) next_hop = RNS.prettyhexrep(reticulum.get_next_hop(destination_hash))
if next_hop_bytes == None: next_hop_interface = reticulum.get_next_hop_if_name(destination_hash)
print("\r \rError: Invalid path data returned")
sys.exit(1) if hops != 1:
ms = "s"
else: else:
next_hop = RNS.prettyhexrep(next_hop_bytes) ms = ""
next_hop_interface = reticulum.get_next_hop_if_name(destination_hash)
if hops != 1: print("\rPath found, destination "+RNS.prettyhexrep(destination_hash)+" is "+str(hops)+" hop"+ms+" away via "+next_hop+" on "+next_hop_interface)
ms = "s"
else:
ms = ""
print("\rPath found, destination "+RNS.prettyhexrep(destination_hash)+" is "+str(hops)+" hop"+ms+" away via "+next_hop+" on "+next_hop_interface)
else: else:
print("\r \rPath not found") print("\r \rPath not found")
sys.exit(1) sys.exit(1)