Multicast mode can be turned off (it does not really work, so...
This commit is contained in:
parent
f8fa48f274
commit
7e1323dc74
|
@ -101,14 +101,15 @@ class User(Peer):
|
||||||
# Bind the socket
|
# Bind the socket
|
||||||
self.socket.bind(self.main_address)
|
self.socket.bind(self.main_address)
|
||||||
|
|
||||||
# Create multicast socket
|
|
||||||
self.multicast_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|
||||||
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)
|
|
||||||
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.squinnondation = instance
|
self.squinnondation = instance
|
||||||
|
|
||||||
|
if self.squinnondation.multicast:
|
||||||
|
# Create multicast socket
|
||||||
|
self.multicast_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||||
|
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)
|
||||||
|
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.input_buffer = ""
|
self.input_buffer = ""
|
||||||
self.input_index = 0
|
self.input_index = 0
|
||||||
|
@ -140,7 +141,8 @@ class User(Peer):
|
||||||
self.listener = Listener(self)
|
self.listener = Listener(self)
|
||||||
self.neighbour_manager = PeerManager(self)
|
self.neighbour_manager = PeerManager(self)
|
||||||
self.inondator = Inondator(self)
|
self.inondator = Inondator(self)
|
||||||
self.multicastlistener = Multicastlistener(self)
|
if self.squinnondation.multicast:
|
||||||
|
self.multicastlistener = Multicastlistener(self)
|
||||||
|
|
||||||
self.add_system_message(f"Listening on {self.main_address[0]}:{self.main_address[1]}", ignore_debug=True)
|
self.add_system_message(f"Listening on {self.main_address[0]}:{self.main_address[1]}", ignore_debug=True)
|
||||||
self.add_system_message(f"I am {self.id}")
|
self.add_system_message(f"I am {self.id}")
|
||||||
|
@ -255,12 +257,14 @@ class User(Peer):
|
||||||
self.listener.setDaemon(True)
|
self.listener.setDaemon(True)
|
||||||
self.neighbour_manager.setDaemon(True)
|
self.neighbour_manager.setDaemon(True)
|
||||||
self.inondator.setDaemon(True)
|
self.inondator.setDaemon(True)
|
||||||
self.multicastlistener.setDaemon(True)
|
|
||||||
|
|
||||||
self.listener.start()
|
self.listener.start()
|
||||||
self.neighbour_manager.start()
|
self.neighbour_manager.start()
|
||||||
self.inondator.start()
|
self.inondator.start()
|
||||||
self.multicastlistener.start()
|
|
||||||
|
if self.squinnondation.multicast:
|
||||||
|
self.multicastlistener.setDaemon(True)
|
||||||
|
self.multicastlistener.start()
|
||||||
|
|
||||||
def wait_for_key(self) -> None:
|
def wait_for_key(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -1146,10 +1150,11 @@ class PeerManager(Thread):
|
||||||
self.user.send_neighbours()
|
self.user.send_neighbours()
|
||||||
self.last_neighbour = time.time()
|
self.last_neighbour = time.time()
|
||||||
|
|
||||||
# For the multicast discovery : send a hello every minute.
|
if self.user.squinnondation.multicast:
|
||||||
if time.time() - self.last_multicast > 10: #60:
|
# For the multicast discovery : send a hello every minute.
|
||||||
self.user.send_hello_multicast()
|
if time.time() - self.last_multicast > 60:
|
||||||
self.last_multicast = time.time()
|
self.user.send_hello_multicast()
|
||||||
|
self.last_multicast = time.time()
|
||||||
|
|
||||||
# Avoid infinite loops
|
# Avoid infinite loops
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Squinnondation:
|
||||||
no_emoji: bool
|
no_emoji: bool
|
||||||
no_markdown: bool
|
no_markdown: bool
|
||||||
debug: bool
|
debug: bool
|
||||||
|
multicast: bool
|
||||||
screen: Any
|
screen: Any
|
||||||
|
|
||||||
def parse_arguments(self) -> None:
|
def parse_arguments(self) -> None:
|
||||||
|
@ -34,6 +35,7 @@ class Squinnondation:
|
||||||
parser.add_argument('--no-markdown', '-nm', action='store_true',
|
parser.add_argument('--no-markdown', '-nm', action='store_true',
|
||||||
help="Don't replace emojis.")
|
help="Don't replace emojis.")
|
||||||
parser.add_argument('--debug', '-d', action='store_true', help="Debug mode.")
|
parser.add_argument('--debug', '-d', action='store_true', help="Debug mode.")
|
||||||
|
parser.add_argument('--multicast', '-mc', action='store_true', help="Use multicast?")
|
||||||
self.args = parser.parse_args()
|
self.args = parser.parse_args()
|
||||||
|
|
||||||
if not (1024 <= self.args.bind_port <= 65535) or\
|
if not (1024 <= self.args.bind_port <= 65535) or\
|
||||||
|
@ -45,6 +47,7 @@ class Squinnondation:
|
||||||
self.no_emoji = self.args.no_emoji
|
self.no_emoji = self.args.no_emoji
|
||||||
self.no_markdown = self.args.no_markdown
|
self.no_markdown = self.args.no_markdown
|
||||||
self.debug = self.args.debug
|
self.debug = self.args.debug
|
||||||
|
self.multicast = self.args.multicast
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def main() -> None: # pragma: no cover
|
def main() -> None: # pragma: no cover
|
||||||
|
|
Loading…
Reference in New Issue