better?
This commit is contained in:
parent
eae4f13066
commit
a8d38faa62
|
@ -199,22 +199,6 @@ class HelloTLV(TLV):
|
||||||
if not self.is_long:
|
if not self.is_long:
|
||||||
user.send_packet(sender, Packet.construct(HelloTLV.construct(16, user, sender)))
|
user.send_packet(sender, Packet.construct(HelloTLV.construct(16, user, sender)))
|
||||||
|
|
||||||
def handle_multicast(self, user: Any, sender: Any) -> None:
|
|
||||||
if sender.id > 0 and sender.id != self.source_id:
|
|
||||||
user.add_system_message(f"A client known as the id {sender.id} declared that it uses "
|
|
||||||
f"the id {self.source_id}.")
|
|
||||||
sender.id = self.source_id
|
|
||||||
|
|
||||||
if self.source_id == user.id:
|
|
||||||
sender.marked_as_banned = True
|
|
||||||
|
|
||||||
if not sender.active:
|
|
||||||
sender.id = self.source_id # The sender we are given misses an id
|
|
||||||
|
|
||||||
# Add entry to/actualize the active peers dictionnary
|
|
||||||
user.update_peer_table(sender)
|
|
||||||
user.add_system_message(f"{self.source_id} sent me a Hello on multicast")
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_long(self) -> bool:
|
def is_long(self) -> bool:
|
||||||
return self.length == 16
|
return self.length == 16
|
||||||
|
|
|
@ -106,6 +106,8 @@ class User(Peer):
|
||||||
if self.squinnondation.multicast:
|
if self.squinnondation.multicast:
|
||||||
# Create multicast socket
|
# Create multicast socket
|
||||||
self.multicast_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
self.multicast_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||||
|
# Allows address to be reused
|
||||||
|
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 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.
|
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.
|
||||||
|
@ -1061,6 +1063,7 @@ class Multicastlistener(Thread):
|
||||||
self.user = user
|
self.user = user
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
|
self.user.add_system_message("running")
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
pkt, peer = self.user.receive_hello_multicast()
|
pkt, peer = self.user.receive_hello_multicast()
|
||||||
|
@ -1074,8 +1077,9 @@ class Multicastlistener(Thread):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for tlv in pkt.body:
|
for tlv in pkt.body:
|
||||||
if tlv.type==2 and tlv.length==8: # Only short hello TLVs allowed
|
# We are only supposed to receive HelloTlVs via this communication mean
|
||||||
tlv.handle_multicast(self.user, peer)
|
self.user.add_system_message("Via multicast :")
|
||||||
|
tlv.handle(self.user, peer)
|
||||||
self.user.refresh_history()
|
self.user.refresh_history()
|
||||||
self.user.refresh_input()
|
self.user.refresh_input()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue