Added drop path ability to rnpath utility
This commit is contained in:
parent
6d23da360d
commit
104b186047
@ -753,7 +753,14 @@ class Reticulum:
|
|||||||
if path == "packet_snr":
|
if path == "packet_snr":
|
||||||
rpc_connection.send(self.get_packet_snr(call["packet_hash"]))
|
rpc_connection.send(self.get_packet_snr(call["packet_hash"]))
|
||||||
|
|
||||||
|
if "drop" in call:
|
||||||
|
path = call["drop"]
|
||||||
|
|
||||||
|
if path == "path":
|
||||||
|
rpc_connection.send(self.drop_path(call["destination_hash"]))
|
||||||
|
|
||||||
rpc_connection.close()
|
rpc_connection.close()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
RNS.log("An error ocurred while handling RPC call from local client: "+str(e), RNS.LOG_ERROR)
|
RNS.log("An error ocurred while handling RPC call from local client: "+str(e), RNS.LOG_ERROR)
|
||||||
|
|
||||||
@ -834,6 +841,16 @@ class Reticulum:
|
|||||||
|
|
||||||
return path_table
|
return path_table
|
||||||
|
|
||||||
|
def drop_path(self, destination):
|
||||||
|
if self.is_connected_to_shared_instance:
|
||||||
|
rpc_connection = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key)
|
||||||
|
rpc_connection.send({"drop": "path", "destination_hash": destination})
|
||||||
|
response = rpc_connection.recv()
|
||||||
|
return response
|
||||||
|
|
||||||
|
else:
|
||||||
|
return RNS.Transport.expire_path(destination)
|
||||||
|
|
||||||
def get_next_hop_if_name(self, destination):
|
def get_next_hop_if_name(self, destination):
|
||||||
if self.is_connected_to_shared_instance:
|
if self.is_connected_to_shared_instance:
|
||||||
rpc_connection = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key)
|
rpc_connection = multiprocessing.connection.Client(self.rpc_addr, authkey=self.rpc_key)
|
||||||
|
@ -1522,6 +1522,15 @@ class Transport:
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def expire_path(destination_hash):
|
||||||
|
if destination_hash in Transport.destination_table:
|
||||||
|
Transport.destination_table[destination_hash][0] = 0
|
||||||
|
Transport.tables_last_culled = 0
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def request_path(destination_hash):
|
def request_path(destination_hash):
|
||||||
"""
|
"""
|
||||||
|
@ -30,7 +30,7 @@ import argparse
|
|||||||
from RNS._version import __version__
|
from RNS._version import __version__
|
||||||
|
|
||||||
|
|
||||||
def program_setup(configdir, table, destination_hexhash, verbosity):
|
def program_setup(configdir, table, drop, destination_hexhash, verbosity):
|
||||||
if table:
|
if table:
|
||||||
reticulum = RNS.Reticulum(configdir = configdir, loglevel = 3+verbosity)
|
reticulum = RNS.Reticulum(configdir = configdir, loglevel = 3+verbosity)
|
||||||
table = sorted(reticulum.get_path_table(), key=lambda e: (e["interface"], e["hops"]) )
|
table = sorted(reticulum.get_path_table(), key=lambda e: (e["interface"], e["hops"]) )
|
||||||
@ -39,6 +39,26 @@ def program_setup(configdir, table, destination_hexhash, verbosity):
|
|||||||
exp_str = RNS.timestamp_str(path["expires"])
|
exp_str = RNS.timestamp_str(path["expires"])
|
||||||
print(RNS.prettyhexrep(path["hash"])+" is "+str(path["hops"])+" hops away via "+RNS.prettyhexrep(path["via"])+" on "+path["interface"]+" expires "+RNS.timestamp_str(path["expires"]))
|
print(RNS.prettyhexrep(path["hash"])+" is "+str(path["hops"])+" hops away via "+RNS.prettyhexrep(path["via"])+" on "+path["interface"]+" expires "+RNS.timestamp_str(path["expires"]))
|
||||||
|
|
||||||
|
elif drop:
|
||||||
|
try:
|
||||||
|
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
|
||||||
|
if len(destination_hexhash) != dest_len:
|
||||||
|
raise ValueError("Destination length is invalid, must be {hex} hexadecimal characters ({byte} bytes).".format(hex=dest_len, byte=dest_len//2))
|
||||||
|
try:
|
||||||
|
destination_hash = bytes.fromhex(destination_hexhash)
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError("Invalid destination entered. Check your input.")
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
exit()
|
||||||
|
|
||||||
|
reticulum = RNS.Reticulum(configdir = configdir, loglevel = 3+verbosity)
|
||||||
|
|
||||||
|
if reticulum.drop_path(destination_hash):
|
||||||
|
print("Dropped path to "+RNS.prettyhexrep(destination_hash))
|
||||||
|
else:
|
||||||
|
print("Unable to drop path to "+RNS.prettyhexrep(destination_hash)+". Does it exist?")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
|
dest_len = (RNS.Reticulum.TRUNCATED_HASHLENGTH//8)*2
|
||||||
@ -104,6 +124,14 @@ def main():
|
|||||||
default=False
|
default=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"-d",
|
||||||
|
"--drop",
|
||||||
|
action="store_true",
|
||||||
|
help="remove the path to a destination",
|
||||||
|
default=False
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"destination",
|
"destination",
|
||||||
nargs="?",
|
nargs="?",
|
||||||
@ -126,7 +154,13 @@ def main():
|
|||||||
parser.print_help()
|
parser.print_help()
|
||||||
print("")
|
print("")
|
||||||
else:
|
else:
|
||||||
program_setup(configdir = configarg, table = args.table, destination_hexhash = args.destination, verbosity = args.verbose)
|
program_setup(
|
||||||
|
configdir = configarg,
|
||||||
|
table = args.table,
|
||||||
|
drop = args.drop,
|
||||||
|
destination_hexhash = args.destination,
|
||||||
|
verbosity = args.verbose
|
||||||
|
)
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print("")
|
print("")
|
||||||
|
Loading…
Reference in New Issue
Block a user