|
@ -46,7 +46,6 @@ class ServerPool(object): |
|
|
shell.print_shadowsocks() |
|
|
shell.print_shadowsocks() |
|
|
self.dns_resolver = asyncdns.DNSResolver() |
|
|
self.dns_resolver = asyncdns.DNSResolver() |
|
|
self.mgr = asyncmgr.ServerMgr() |
|
|
self.mgr = asyncmgr.ServerMgr() |
|
|
self.udp_on = True ### UDP switch ===================================== |
|
|
|
|
|
|
|
|
|
|
|
self.tcp_servers_pool = {} |
|
|
self.tcp_servers_pool = {} |
|
|
self.tcp_ipv6_servers_pool = {} |
|
|
self.tcp_ipv6_servers_pool = {} |
|
@ -110,19 +109,21 @@ class ServerPool(object): |
|
|
a_config['password'] = password |
|
|
a_config['password'] = password |
|
|
try: |
|
|
try: |
|
|
logging.info("starting server at [%s]:%d" % (a_config['server'], port)) |
|
|
logging.info("starting server at [%s]:%d" % (a_config['server'], port)) |
|
|
|
|
|
|
|
|
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False) |
|
|
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False) |
|
|
tcp_server.add_to_loop(self.loop) |
|
|
tcp_server.add_to_loop(self.loop) |
|
|
self.tcp_ipv6_servers_pool.update({port: tcp_server}) |
|
|
self.tcp_ipv6_servers_pool.update({port: tcp_server}) |
|
|
if self.udp_on: |
|
|
|
|
|
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False) |
|
|
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False) |
|
|
udp_server.add_to_loop(self.loop) |
|
|
udp_server.add_to_loop(self.loop) |
|
|
self.udp_ipv6_servers_pool.update({port: udp_server}) |
|
|
self.udp_ipv6_servers_pool.update({port: udp_server}) |
|
|
|
|
|
|
|
|
if a_config['server_ipv6'] == "::": |
|
|
if a_config['server_ipv6'] == "::": |
|
|
ipv6_ok = True |
|
|
ipv6_ok = True |
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn("IPV6 %s " % (e,)) |
|
|
logging.warn("IPV6 %s " % (e,)) |
|
|
|
|
|
|
|
|
if not ipv6_ok and 'server' in self.config: |
|
|
if 'server' in self.config: |
|
|
if port in self.tcp_servers_pool: |
|
|
if port in self.tcp_servers_pool: |
|
|
logging.info("server already at %s:%d" % (self.config['server'], port)) |
|
|
logging.info("server already at %s:%d" % (self.config['server'], port)) |
|
|
return 'this port server is already running' |
|
|
return 'this port server is already running' |
|
@ -132,13 +133,16 @@ class ServerPool(object): |
|
|
a_config['password'] = password |
|
|
a_config['password'] = password |
|
|
try: |
|
|
try: |
|
|
logging.info("starting server at %s:%d" % (a_config['server'], port)) |
|
|
logging.info("starting server at %s:%d" % (a_config['server'], port)) |
|
|
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False) |
|
|
|
|
|
tcp_server.add_to_loop(self.loop) |
|
|
if not ipv6_ok: |
|
|
self.tcp_servers_pool.update({port: tcp_server}) |
|
|
tcp_server = tcprelay.TCPRelay(a_config, self.dns_resolver, False) |
|
|
if self.udp_on: |
|
|
tcp_server.add_to_loop(self.loop) |
|
|
|
|
|
self.tcp_servers_pool.update({port: tcp_server}) |
|
|
|
|
|
|
|
|
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False) |
|
|
udp_server = udprelay.UDPRelay(a_config, self.dns_resolver, False) |
|
|
udp_server.add_to_loop(self.loop) |
|
|
udp_server.add_to_loop(self.loop) |
|
|
self.udp_servers_pool.update({port: udp_server}) |
|
|
self.udp_servers_pool.update({port: udp_server}) |
|
|
|
|
|
|
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn("IPV4 %s " % (e,)) |
|
|
logging.warn("IPV4 %s " % (e,)) |
|
|
|
|
|
|
|
@ -167,12 +171,11 @@ class ServerPool(object): |
|
|
del self.tcp_servers_pool[port] |
|
|
del self.tcp_servers_pool[port] |
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn(e) |
|
|
logging.warn(e) |
|
|
if self.udp_on: |
|
|
try: |
|
|
try: |
|
|
self.udp_servers_pool[port].close(True) |
|
|
self.udp_servers_pool[port].close(True) |
|
|
del self.udp_servers_pool[port] |
|
|
del self.udp_servers_pool[port] |
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn(e) |
|
|
logging.warn(e) |
|
|
|
|
|
|
|
|
|
|
|
if 'server_ipv6' in self.config: |
|
|
if 'server_ipv6' in self.config: |
|
|
if port not in self.tcp_ipv6_servers_pool: |
|
|
if port not in self.tcp_ipv6_servers_pool: |
|
@ -184,12 +187,11 @@ class ServerPool(object): |
|
|
del self.tcp_ipv6_servers_pool[port] |
|
|
del self.tcp_ipv6_servers_pool[port] |
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn(e) |
|
|
logging.warn(e) |
|
|
if self.udp_on: |
|
|
try: |
|
|
try: |
|
|
self.udp_ipv6_servers_pool[port].close(True) |
|
|
self.udp_ipv6_servers_pool[port].close(True) |
|
|
del self.udp_ipv6_servers_pool[port] |
|
|
del self.udp_ipv6_servers_pool[port] |
|
|
except Exception, e: |
|
|
except Exception, e: |
|
|
logging.warn(e) |
|
|
logging.warn(e) |
|
|
|
|
|
|
|
|
|
|
|
return True |
|
|
return True |
|
|
|
|
|
|
|
|