💩 code

This commit is contained in:
Yohann D'ANELLO 2021-01-08 18:50:10 +01:00
parent 380f808e50
commit 369befcd79
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
2 changed files with 20 additions and 18 deletions

View File

@ -176,9 +176,6 @@ class HelloTLV(TLV):
f"the id {self.source_id}.") f"the id {self.source_id}.")
sender.id = self.source_id sender.id = self.source_id
if self.source_id == user.id:
sender.marked_as_banned = True
if not sender.active: if not sender.active:
sender.id = self.source_id # The sender we are given misses an id sender.id = self.source_id # The sender we are given misses an id
time_hl = time.time() time_hl = time.time()

View File

@ -27,7 +27,6 @@ class Peer:
self.symmetric = False self.symmetric = False
self.active = False self.active = False
self.errors = 0 self.errors = 0
self.marked_as_banned = False
try: try:
# Resolve DNS as an IPv6 # Resolve DNS as an IPv6
@ -44,7 +43,7 @@ class Peer:
@property @property
def potential(self) -> bool: def potential(self) -> bool:
return not self.active and not self.banned return not self.active and not self.banned and not isinstance(self, User)
@potential.setter @potential.setter
def potential(self, value: bool) -> None: def potential(self, value: bool) -> None:
@ -55,7 +54,7 @@ class Peer:
""" """
If a client send more than 5 invalid packets, we don't trust it anymore. If a client send more than 5 invalid packets, we don't trust it anymore.
""" """
return self.errors >= 5 or self.marked_as_banned return self.errors >= 5 or isinstance(self, User)
def __repr__(self): def __repr__(self):
return self.nickname or str(self.id) or str(self.main_address) return self.nickname or str(self.id) or str(self.main_address)
@ -78,7 +77,6 @@ class Peer:
elif other.main_address[1] == 1212: elif other.main_address[1] == 1212:
other.main_address = self.main_address other.main_address = self.main_address
self.id = self.id if self.id > 0 else other.id self.id = self.id if self.id > 0 else other.id
self.marked_as_banned = other.marked_as_banned
return self return self
@ -106,8 +104,11 @@ class User(Peer):
# Allows address to be reused # Allows address to be reused
self.multicast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.multicast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.multicast_socket.bind(('', 1212)) # listen on all interfaces? self.multicast_socket.bind(('', 1212)) # listen on all interfaces?
# To join the group, we need to give setsockopt a binary packed representation of the multicast group's address and on what interfaces we will listen (here all) # To join the group, we need to give setsockopt a binary packed representation of the multicast
mreq = struct.pack("16s15s", socket.inet_pton(socket.AF_INET6, "ff02::4242:4242"), bytes(socket.INADDR_ANY)) #The string "16s15s" corresponds to the packing options: here it packs the arguments into a 16-byte string and a 15-byte string. # group's address and on what interfaces we will listen (here all)
mreq = struct.pack("16s15s", socket.inet_pton(socket.AF_INET6, "ff02::4242:4242"), bytes(socket.INADDR_ANY))
# The string "16s15s" corresponds to the packing options: here it packs the arguments into a 16-byte
# string and a 15-byte string.
self.multicast_socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq) self.multicast_socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
self.input_buffer = "" self.input_buffer = ""
@ -133,7 +134,7 @@ class User(Peer):
curses.init_pair(i + 1, i, curses.COLOR_BLACK) curses.init_pair(i + 1, i, curses.COLOR_BLACK)
# dictionnaries of neighbours # dictionnaries of neighbours
self.neighbours = dict() self.neighbours = {self.main_address: self}
self.nbNS = 0 self.nbNS = 0
self.minNS = 3 # minimal number of symmetric neighbours a user needs to have. self.minNS = 3 # minimal number of symmetric neighbours a user needs to have.
@ -166,14 +167,14 @@ class User(Peer):
Translate an address into a peer. If this peer does not exist, Translate an address into a peer. If this peer does not exist,
creates a new peer. creates a new peer.
""" """
self.data_lock.acquire()
if (address, port) in self.neighbours: if (address, port) in self.neighbours:
return self.neighbours[(address, port)] return self.neighbours[(address, port)]
self.data_lock.acquire()
peer = Peer(address=address, port=port) peer = Peer(address=address, port=port)
self.neighbours[(address, port)] = peer self.neighbours[(address, port)] = peer
self.data_lock.release() self.data_lock.release()
return peer return peer
def find_peer_by_id(self, peer_id: int) -> Peer: def find_peer_by_id(self, peer_id: int) -> Peer:
@ -936,12 +937,16 @@ class User(Peer):
if addr in self.neighbours: if addr in self.neighbours:
# Merge with the previous peer # Merge with the previous peer
old_peer = self.neighbours[addr] old_peer = self.neighbours[addr]
if isinstance(old_peer, User):
peer, old_peer = old_peer, peer
peer.merge(old_peer) peer.merge(old_peer)
self.neighbours[addr] = peer self.neighbours[addr] = peer
for other_peer in list(self.neighbours.values()): for other_peer in list(self.neighbours.values()):
if other_peer.id == peer.id > 0 and other_peer != peer: if other_peer.id == peer.id > 0 and other_peer != peer:
# The peer with the same id is known as a different address. We merge everything # The peer with the same id is known as a different address. We merge everything
if isinstance(other_peer, User):
peer, old_peer = other_peer, peer
peer.merge(other_peer) peer.merge(other_peer)
for other_addr in peer.addresses: for other_addr in peer.addresses:
self.neighbours[other_addr] = peer self.neighbours[other_addr] = peer