示例#1
0
    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
        )
示例#2
0
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)
示例#3
0
    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
示例#4
0
 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)
示例#5
0
 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
示例#6
0
 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
示例#7
0
 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)
示例#8
0
 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
示例#9
0
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)