def main(): try: cfg = LocalConfigManager.get_config() logging_init(cfg) daemon = MiserableDaemon(cfg['daemon'], cfg['pid-file'], cfg['user']) daemon.execute() INFO('starting local at %s:%d' % (cfg['local_address'].ipaddr, cfg['local_address'].port)) loop = MainLoop() dns_resolver = DNSResolver(loop) tcp_proxy = TCPProxy(dns_resolver, loop) udp_proxy = UDPProxy(dns_resolver, loop) def sigint_handler(signum, _): DEBUG('received SIGINT, doing graceful shutting down..') tcp_proxy.close() udp_proxy.close() loop.stop() signal.signal(signal.SIGINT, sigint_handler) loop.run() except OSError as e: ERROR(e) except Exception as e: import traceback traceback.print_exc()
def __init__(self, dns_resolver, loop): cfg = LocalConfigManager.get_config() laddr = cfg['local_address'] sock = socket.socket(laddr.family, socket.SOCK_STREAM, socket.SOL_TCP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((laddr.compressed, laddr.port)) sock.setblocking(False) if cfg['fast_open']: try: sock.setsockopt(socket.SOL_SOCKET, socket.TCP_FASTOPEN, 5) except (OSError, AttributeError) as e: raise UnsupportFeatureException('TCP Fast Open') VERBOSE('fast open enabled!') sock.listen(1024) self._dns_resolver = dns_resolver self._laddr = laddr self._socket = sock self._loop = loop self._timeout = cfg['timeout'] self._transfers = [] self._register_to_loop()
def __init__(self, loop, sock, addr, dns_resolver): cfg = LocalConfigManager.get_config() self._encryptor = Encryptor(cfg['password'], cfg['method']) self._loop = loop self._client = Client(sock, addr, loop, self._encryptor) self._remote = None self._dns_resolver = dns_resolver self._last_active = time.time() self._raddr = cfg['remote_address'] self._laddr = cfg['local_address'] self._saddr = None
def __init__(self, loop, caddr, saddr, dns_resolver): cfg = LocalConfigManager.get_config() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.SOL_UDP) self._socket = sock self._loop = loop self._caddr = caddr self._saddr = saddr self._dns_resolver = dns_resolver self._last_active = time.time() self._raddr = cfg['remote_address'] self._password = cfg['password'] self._method = cfg['method'] self._pending = []
def __init__(self, dns_resolver, loop): cfg = LocalConfigManager.get_config() laddr = cfg['local_address'] sock = socket.socket(laddr.family, socket.SOCK_DGRAM, socket.SOL_UDP) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((laddr.compressed, laddr.port)) sock.setblocking(False) self._loop = loop self._closed = False self._laddr = laddr self._dns_resolver = dns_resolver self._socket = sock self._timeout = cfg['timeout'] self._transfers = set() self._register_to_loop()