|
|
|
|
@ -78,6 +78,7 @@ def parse_servers(result):
|
|
|
|
|
servers[host] = out |
|
|
|
|
return servers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def filter_version(servers): |
|
|
|
|
def is_recent(version): |
|
|
|
|
try: |
|
|
|
|
@ -97,12 +98,14 @@ def filter_protocol(hostmap, protocol = 's'):
|
|
|
|
|
eligible.append(serialize_server(host, port, protocol)) |
|
|
|
|
return eligible |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pick_random_server(hostmap = None, protocol = 's', exclude_set = set()): |
|
|
|
|
if hostmap is None: |
|
|
|
|
hostmap = constants.net.DEFAULT_SERVERS |
|
|
|
|
eligible = list(set(filter_protocol(hostmap, protocol)) - exclude_set) |
|
|
|
|
return random.choice(eligible) if eligible else None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from .simple_config import SimpleConfig |
|
|
|
|
|
|
|
|
|
proxy_modes = ['socks4', 'socks5', 'http'] |
|
|
|
|
@ -416,7 +419,7 @@ class Network(util.DaemonThread):
|
|
|
|
|
self.print_error("connecting to %s as new interface" % server) |
|
|
|
|
self.set_status('connecting') |
|
|
|
|
self.connecting.add(server) |
|
|
|
|
c = Connection(server, self.socket_queue, self.config.path) |
|
|
|
|
Connection(server, self.socket_queue, self.config.path) |
|
|
|
|
|
|
|
|
|
def start_random_interface(self): |
|
|
|
|
with self.interface_lock: |
|
|
|
|
@ -569,6 +572,7 @@ class Network(util.DaemonThread):
|
|
|
|
|
self.interface = None |
|
|
|
|
self.start_interface(server) |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
i = self.interfaces[server] |
|
|
|
|
if self.interface != i: |
|
|
|
|
self.print_error("switching to", server) |
|
|
|
|
@ -798,6 +802,7 @@ class Network(util.DaemonThread):
|
|
|
|
|
server, socket = self.socket_queue.get() |
|
|
|
|
if server in self.connecting: |
|
|
|
|
self.connecting.remove(server) |
|
|
|
|
|
|
|
|
|
if socket: |
|
|
|
|
self.new_interface(server, socket) |
|
|
|
|
else: |
|
|
|
|
|