Fixed typo
This commit is contained in:
parent
a60e4fc5f1
commit
43de693f01
|
@ -11,7 +11,7 @@ import RNS
|
||||||
# destinations we create. Since this basic example
|
# destinations we create. Since this basic example
|
||||||
# is part of a range of example utilities, we'll put
|
# is part of a range of example utilities, we'll put
|
||||||
# them all within the app namespace "example_utilities"
|
# them all within the app namespace "example_utilities"
|
||||||
APP_NAME = "example_utilitites"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
# This initialisation is executed when the program is started
|
# This initialisation is executed when the program is started
|
||||||
def program_setup(configpath, channel=None):
|
def program_setup(configpath, channel=None):
|
||||||
|
|
|
@ -12,7 +12,7 @@ import RNS
|
||||||
# destinations we create. Since this echo example
|
# destinations we create. Since this echo example
|
||||||
# is part of a range of example utilities, we'll put
|
# is part of a range of example utilities, we'll put
|
||||||
# them all within the app namespace "example_utilities"
|
# them all within the app namespace "example_utilities"
|
||||||
APP_NAME = "example_utilitites"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
|
|
|
@ -28,7 +28,7 @@ import RNS.vendor.umsgpack as umsgpack
|
||||||
# destinations we create. Since this echo example
|
# destinations we create. Since this echo example
|
||||||
# is part of a range of example utilities, we'll put
|
# is part of a range of example utilities, we'll put
|
||||||
# them all within the app namespace "example_utilities"
|
# them all within the app namespace "example_utilities"
|
||||||
APP_NAME = "example_utilitites"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
# We'll also define a default timeout, in seconds
|
# We'll also define a default timeout, in seconds
|
||||||
APP_TIMEOUT = 45.0
|
APP_TIMEOUT = 45.0
|
||||||
|
|
|
@ -13,7 +13,7 @@ import RNS
|
||||||
# destinations we create. Since this echo example
|
# destinations we create. Since this echo example
|
||||||
# is part of a range of example utilities, we'll put
|
# is part of a range of example utilities, we'll put
|
||||||
# them all within the app namespace "example_utilities"
|
# them all within the app namespace "example_utilities"
|
||||||
APP_NAME = "example_utilitites"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
#### Server Part #########################################
|
#### Server Part #########################################
|
||||||
|
|
|
@ -11,7 +11,7 @@ import RNS
|
||||||
# destinations we create. Since this basic example
|
# destinations we create. Since this basic example
|
||||||
# is part of a range of example utilities, we'll put
|
# is part of a range of example utilities, we'll put
|
||||||
# them all within the app namespace "example_utilities"
|
# them all within the app namespace "example_utilities"
|
||||||
APP_NAME = "example_utilitites"
|
APP_NAME = "example_utilities"
|
||||||
|
|
||||||
# This initialisation is executed when the program is started
|
# This initialisation is executed when the program is started
|
||||||
def program_setup(configpath):
|
def program_setup(configpath):
|
||||||
|
|
|
@ -36,7 +36,7 @@ class Destination:
|
||||||
directions = [IN, OUT]
|
directions = [IN, OUT]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getDestinationName(app_name, *aspects):
|
def full_name(app_name, *aspects):
|
||||||
# Check input values and build name string
|
# Check input values and build name string
|
||||||
if "." in app_name: raise ValueError("Dots can't be used in app names")
|
if "." in app_name: raise ValueError("Dots can't be used in app names")
|
||||||
|
|
||||||
|
@ -49,8 +49,8 @@ class Destination:
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getDestinationHash(app_name, *aspects):
|
def hash(app_name, *aspects):
|
||||||
name = Destination.getDestinationName(app_name, *aspects)
|
name = Destination.full_name(app_name, *aspects)
|
||||||
|
|
||||||
# Create a digest for the destination
|
# Create a digest for the destination
|
||||||
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
|
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
|
||||||
|
@ -58,6 +58,16 @@ class Destination:
|
||||||
|
|
||||||
return digest.finalize()[:10]
|
return digest.finalize()[:10]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def app_and_aspects_from_name(full_name):
|
||||||
|
components = full_name.split(".")
|
||||||
|
return (components[0], components[1:])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def hash_from_name_and_identity(full_name, identity):
|
||||||
|
app_name, aspects = Destination.app_and_aspects_from_name(full_name)
|
||||||
|
aspects.append(identity.hexhash)
|
||||||
|
return Destination.hash(app_name, *aspects)
|
||||||
|
|
||||||
def __init__(self, identity, direction, type, app_name, *aspects):
|
def __init__(self, identity, direction, type, app_name, *aspects):
|
||||||
# Check input values and build name string
|
# Check input values and build name string
|
||||||
|
@ -81,8 +91,8 @@ class Destination:
|
||||||
|
|
||||||
self.identity = identity
|
self.identity = identity
|
||||||
|
|
||||||
self.name = Destination.getDestinationName(app_name, *aspects)
|
self.name = Destination.full_name(app_name, *aspects)
|
||||||
self.hash = Destination.getDestinationHash(app_name, *aspects)
|
self.hash = Destination.hash(app_name, *aspects)
|
||||||
self.hexhash = self.hash.hex()
|
self.hexhash = self.hash.hex()
|
||||||
|
|
||||||
self.callback = None
|
self.callback = None
|
||||||
|
|
|
@ -56,6 +56,7 @@ class Transport:
|
||||||
reverse_table = {} # A lookup table for storing packet hashes used to return proofs and replies
|
reverse_table = {} # A lookup table for storing packet hashes used to return proofs and replies
|
||||||
link_table = {} # A lookup table containing hops for links
|
link_table = {} # A lookup table containing hops for links
|
||||||
held_announces = {} # A table containing temporarily held announce-table entries
|
held_announces = {} # A table containing temporarily held announce-table entries
|
||||||
|
announce_handlers = [] # A table storing externally registered announce handlers
|
||||||
|
|
||||||
# Transport control destinations are used
|
# Transport control destinations are used
|
||||||
# for control purposes like path requests
|
# for control purposes like path requests
|
||||||
|
@ -750,6 +751,32 @@ class Transport:
|
||||||
Transport.destination_table[packet.destination_hash] = [now, received_from, announce_hops, expires, random_blobs, packet.receiving_interface, packet]
|
Transport.destination_table[packet.destination_hash] = [now, received_from, announce_hops, expires, random_blobs, packet.receiving_interface, packet]
|
||||||
RNS.log("Path to "+RNS.prettyhexrep(packet.destination_hash)+" is now "+str(announce_hops)+" hops away via "+RNS.prettyhexrep(received_from)+" on "+str(packet.receiving_interface), RNS.LOG_VERBOSE)
|
RNS.log("Path to "+RNS.prettyhexrep(packet.destination_hash)+" is now "+str(announce_hops)+" hops away via "+RNS.prettyhexrep(received_from)+" on "+str(packet.receiving_interface), RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
|
# Call externally registered callbacks from apps
|
||||||
|
# wanting to know when an announce arrives
|
||||||
|
for handler in Transport.announce_handlers:
|
||||||
|
try:
|
||||||
|
# Check that the announced destination matches
|
||||||
|
# the handlers aspect filter
|
||||||
|
execute_callback = False
|
||||||
|
if handler.aspect_filter == None:
|
||||||
|
# If the handlers aspect filter is set to
|
||||||
|
# None, we execute the callback in all cases
|
||||||
|
execute_callback = True
|
||||||
|
else:
|
||||||
|
announce_identity = RNS.Identity.recall(packet.destination_hash)
|
||||||
|
handler_expected_hash = RNS.Destination.hash_from_name_and_identity(handler.aspect_filter, announce_identity)
|
||||||
|
if packet.destination_hash == handler_expected_hash:
|
||||||
|
execute_callback = True
|
||||||
|
if execute_callback:
|
||||||
|
handler.received_announce(
|
||||||
|
destination_hash=packet.destination_hash,
|
||||||
|
announced_identity=announce_identity,
|
||||||
|
app_data=RNS.Identity.recall_app_data(packet.destination_hash)
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
RNS.log("Error while processing external announce callback.", RNS.LOG_ERROR)
|
||||||
|
RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
|
||||||
|
|
||||||
# Handling for linkrequests to local destinations
|
# Handling for linkrequests to local destinations
|
||||||
elif packet.packet_type == RNS.Packet.LINKREQUEST:
|
elif packet.packet_type == RNS.Packet.LINKREQUEST:
|
||||||
for destination in Transport.destinations:
|
for destination in Transport.destinations:
|
||||||
|
@ -878,6 +905,17 @@ class Transport:
|
||||||
else:
|
else:
|
||||||
RNS.log("Attempted to activate a link that was not in the pending table", RNS.LOG_ERROR)
|
RNS.log("Attempted to activate a link that was not in the pending table", RNS.LOG_ERROR)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def register_announce_handler(handler):
|
||||||
|
if hasattr(handler, "received_announce") and callable(handler.received_announce):
|
||||||
|
if hasattr(handler, "aspect_filter"):
|
||||||
|
Transport.announce_handlers.append(handler)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def deregister_announce_handler(handler):
|
||||||
|
while handler in Transport.announce_handlers:
|
||||||
|
Transport.announce_handlers.remove(handler)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def find_interface_from_hash(interface_hash):
|
def find_interface_from_hash(interface_hash):
|
||||||
for interface in Transport.interfaces:
|
for interface in Transport.interfaces:
|
||||||
|
|
Loading…
Reference in New Issue