Updated filtering rules. Fixes #18.
This commit is contained in:
parent
550dfd44cb
commit
3051b6897d
@ -118,6 +118,9 @@ class Destination:
|
|||||||
identity = RNS.Identity()
|
identity = RNS.Identity()
|
||||||
aspects = aspects+(identity.hexhash,)
|
aspects = aspects+(identity.hexhash,)
|
||||||
|
|
||||||
|
if identity != None and self.type == Destination.PLAIN:
|
||||||
|
raise TypeError("Selected destination type PLAIN cannot hold an identity")
|
||||||
|
|
||||||
self.identity = identity
|
self.identity = identity
|
||||||
|
|
||||||
self.name = Destination.full_name(app_name, *aspects)
|
self.name = Destination.full_name(app_name, *aspects)
|
||||||
@ -146,6 +149,9 @@ class Destination:
|
|||||||
:param app_data: *bytes* containing the app_data.
|
:param app_data: *bytes* containing the app_data.
|
||||||
: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.
|
||||||
"""
|
"""
|
||||||
|
if self.type != Destination.SINGLE:
|
||||||
|
raise TypeError("Only SINGLE destination types can be announced")
|
||||||
|
|
||||||
destination_hash = self.hash
|
destination_hash = self.hash
|
||||||
random_hash = RNS.Identity.get_random_hash()[0:5]+int(time.time()).to_bytes(5, "big")
|
random_hash = RNS.Identity.get_random_hash()[0:5]+int(time.time()).to_bytes(5, "big")
|
||||||
|
|
||||||
|
@ -457,7 +457,7 @@ class Transport:
|
|||||||
sent = False
|
sent = False
|
||||||
|
|
||||||
# Check if we have a known path for the destination in the path table
|
# Check if we have a known path for the destination in the path table
|
||||||
if packet.packet_type != RNS.Packet.ANNOUNCE and packet.destination_hash in Transport.destination_table:
|
if packet.packet_type != RNS.Packet.ANNOUNCE and packet.destination.type != RNS.Destination.PLAIN and packet.destination.type != RNS.Destination.GROUP and packet.destination_hash in Transport.destination_table:
|
||||||
outbound_interface = Transport.destination_table[packet.destination_hash][5]
|
outbound_interface = Transport.destination_table[packet.destination_hash][5]
|
||||||
|
|
||||||
# If there's more than one hop to the destination, and we know
|
# If there's more than one hop to the destination, and we know
|
||||||
@ -572,14 +572,38 @@ class Transport:
|
|||||||
return True
|
return True
|
||||||
if packet.context == RNS.Packet.CACHE_REQUEST:
|
if packet.context == RNS.Packet.CACHE_REQUEST:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if packet.destination_type == RNS.Destination.PLAIN:
|
if packet.destination_type == RNS.Destination.PLAIN:
|
||||||
|
if packet.packet_type != RNS.Packet.ANNOUNCE:
|
||||||
|
if packet.hops > 1:
|
||||||
|
RNS.log("Dropped PLAIN packet "+RNS.prettyhexrep(packet.hash)+" with "+str(packet.hops)+" hops", RNS.LOG_DEBUG)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
return True
|
return True
|
||||||
|
else:
|
||||||
|
RNS.log("Dropped invalid PLAIN announce packet", RNS.LOG_DEBUG)
|
||||||
|
return False
|
||||||
|
|
||||||
|
if packet.destination_type == RNS.Destination.GROUP:
|
||||||
|
if packet.packet_type != RNS.Packet.ANNOUNCE:
|
||||||
|
if packet.hops > 1:
|
||||||
|
RNS.log("Dropped GROUP packet "+RNS.prettyhexrep(packet.hash)+" with "+str(packet.hops)+" hops", RNS.LOG_DEBUG)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
RNS.log("Dropped invalid GROUP announce packet", RNS.LOG_DEBUG)
|
||||||
|
return False
|
||||||
|
|
||||||
if not packet.packet_hash in Transport.packet_hashlist:
|
if not packet.packet_hash in Transport.packet_hashlist:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
if packet.packet_type == RNS.Packet.ANNOUNCE:
|
||||||
|
if packet.destination_type == RNS.Destination.SINGLE:
|
||||||
return True
|
return True
|
||||||
|
else:
|
||||||
|
RNS.log("Dropped invalid announce packet", RNS.LOG_DEBUG)
|
||||||
|
return False
|
||||||
|
|
||||||
RNS.log("Filtered packet with hash "+RNS.prettyhexrep(packet.packet_hash), RNS.LOG_DEBUG)
|
RNS.log("Filtered packet with hash "+RNS.prettyhexrep(packet.packet_hash), RNS.LOG_DEBUG)
|
||||||
return False
|
return False
|
||||||
|
Loading…
Reference in New Issue
Block a user