def stop_proxy(self): from ss.ioloop import IOLoop, TIMEOUT_PRECISION IOLoop.current().stop() self.btn_startop["state"] = tk.DISABLED def cb(): self.btn_startop["text"] = "启动代理" self.btn_startop["state"] = tk.NORMAL self._proxy_started = False messagebox.showinfo("通知", "代理已停止") self.conframe.after( (TIMEOUT_PRECISION+1)*1000, cb )
def run_local(io_loop): if not io_loop: io_loop = IOLoop.current() try: sa = settings['local_address'], settings['local_port'] logging.info("starting local at %s:%d" % sa) dns_resolver = DNSResolver(io_loop) tcp_server = tcphandler.ListenHandler(io_loop, sa, tcphandler.LocalConnHandler, dns_resolver) udp_server = udphandler.ListenHandler(io_loop, sa, udphandler.ConnHandler, 1, dns_resolver) # 1 means local servers = [dns_resolver, tcp_server, udp_server] if settings.get("local_http_port"): http_sa = settings['local_address'], settings['local_http_port'] logging.info("starting local http tunnel at %s:%d" % http_sa) http_tunnel = tcphandler.ListenHandler( io_loop, http_sa, tcphandler.HttpLocalConnHandler, dns_resolver) servers.append(http_tunnel) for server in servers: server.register() wrapper.onexit(server.destroy) wrapper.register(['SIGQUIT', 'SIGINT', 'SIGTERM'], wrapper.exec_exitfuncs) wrapper.exec_startfuncs(None, None) io_loop.run() except Exception as e: logging.error(e, exc_info=True) sys.exit(1)
def register(self): if self._registered: raise Exception('already add to loop') # TODO when dns server is IPv6 if not self.io_loop: self.io_loop = IOLoop.current() self.io_loop.add(self._sock, IOLoop.READ, self) self.io_loop.add_periodic(self.handle_periodic) self._registered = True
def start(): try: for server in servers: server.register() wrapper.onexit(server.destroy) io_loop = IOLoop.current() io_loop.run() except Exception as e: logging.error(e, exc_info=True) sys.exit(1)
def register(self): if self._registered: logging.warn("udp listen socket has been already registered!") return if self._closed: raise Exception('already closed') if not self.io_loop: self.io_loop = IOLoop.current() self.io_loop.register(self._sock, IOLoop.READ | IOLoop.ERROR, self) self._events = IOLoop.READ | IOLoop.ERROR self._registered = True
def register(self): if self._registered: logging.warning(" already registered!") return if self._closed: raise RuntimeError("register a closed fd to ioloop") if not self.io_loop: self.io_loop = IOLoop.current() self.io_loop.register(self._sock, IOLoop.READ | IOLoop.ERROR, self) self._events = IOLoop.READ | IOLoop.ERROR self._registered = True
def start(): try: for server in servers: server.register() wrapper.onexit(server.destroy) wrapper.register(['SIGQUIT', 'SIGINT', 'SIGTERM'], wrapper.exec_exitfuncs) io_loop = IOLoop.current() io_loop.run() except Exception as e: logging.error(e, exc_info=True) sys.exit(1)
def register(self, event=None): if self._registered: logging.warning(" already registered!") return if self.closed: raise RuntimeError("service %s has been shut down!" % \ self.__class__.__name__) if not self.io_loop: self.io_loop = IOLoop.current() if event is not None: events = IOLoop.READ | IOLoop.ERROR | event else: events = IOLoop.READ | IOLoop.ERROR self.io_loop.register(self._sock, events, self) self._events = events self._registered = True
def run_local(io_loop, config): from ss.core import tcphandler, udphandler from ss.core.asyncdns import DNSResolver from ss.ioloop import IOLoop from ss.watcher import Scheduler, Pac if not io_loop: io_loop = IOLoop.current() try: sa = config['local_address'], config['local_port'] logging.info("starting local at %s:%d" % sa) dns_resolver = DNSResolver(io_loop, **config) tcp_server = tcphandler.ListenHandler(io_loop, sa, tcphandler.LocalConnHandler, dns_resolver, **config) udp_server = udphandler.ListenHandler(io_loop, sa, udphandler.ConnHandler, 1, dns_resolver, **config) # 1 means local servers = [dns_resolver, tcp_server, udp_server] if config.get("local_http_port"): http_sa = config['local_address'], config['local_http_port'] logging.info("starting local http tunnel at %s:%d" % http_sa) http_tunnel = tcphandler.ListenHandler( io_loop, http_sa, tcphandler.HttpLocalConnHandler, dns_resolver, **config) servers.append(http_tunnel) for server in servers: server.register() wrapper.onexit(server.destroy) wrapper.register(['SIGQUIT', 'SIGINT', 'SIGTERM'], wrapper.exec_exitfuncs) schd = Scheduler(**config) schd.register(Pac(15, 1, config)) schd.start() set_proxy_mode(config) io_loop.run() except Exception as e: logging.error(e, exc_info=True) sys.exit(1)