diff --git a/find_by_ip.py b/find_by_ip.py new file mode 100644 index 0000000000000000000000000000000000000000..c86b26ff2105bc1daa2dc60ece2ca148d811ca19 --- /dev/null +++ b/find_by_ip.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python3 +import re + +import sys +from teeworlds import query_masters_serverlist, create_masters, EventSocket + +e = EventSocket() +m = create_masters(e) +query_masters_serverlist(m) +e.run() + +servers = [] +ip_filter = re.compile("^" + sys.argv[1].replace(".", "\\.")) + +for master in m: + servers.extend(filter(lambda s: ip_filter.search(str(s.address)), master.serverlist)) + +servers.sort(key=lambda s: s.address) + +for server in servers: + print("{address: <15} on {master}".format(address=str(server.address), master=server._master.name)) diff --git a/teeworlds/master.py b/teeworlds/master.py index 344fc96e921d29966cf596350f7d3b1868a15c35..3aacb65a36bba1d568b1a298ab32377c8575a2cf 100644 --- a/teeworlds/master.py +++ b/teeworlds/master.py @@ -37,6 +37,7 @@ class MasterServer(object): packet_list_request = 10*b'\xff' + b'req2' packet_list_response = 10*b'\xff' + b'lis2' serveraddr_size = 18 + max_servers_per_packet = 75 def __init__(self, address, data_cb): self.address = address @@ -51,12 +52,14 @@ class MasterServer(object): self.time_sent = time() def response_received(self, data): - if len(data) <= len(self.packet_list_response) or not data.startswith(self.packet_list_response): - return True # that's not it, wait for more + if not data.startswith(self.packet_list_response): + return True # that's not our packet, wait for more self.latency = time() - self.time_sent L.debug("received list response from {} in {} seconds".format(self.address, self.latency)) - self.data_cb(data[len(self.packet_list_response):]) - return False + list_data = data[len(self.packet_list_response):] + self.data_cb(list_data) + if len(list_data) / self.serveraddr_size >= self.max_servers_per_packet: + return True # this is not the last packet def __init__(self, socket, address, name=None, server_factory=None): if server_factory: