def parse_ip_port(text): """Return an IP and port from text. Parses both IPv4 and IPv6. Params: text (str): Text to be parsed for IP and port. Returns: tuple: (ip (str), port (int)) """ if '.' in text: # ipv4 ip, __, port = text.rpartition(':') elif '[' in text: # ipv6 ip, __, port = text.partition('[')[2].partition(']:') else: return None, None if ip and is_ip(ip) and port.isdigit(): return ip, int(port) else: return None, None
def add_config_values(self, conf_dict): for ipt in self.inputs: if ipt.has_input(): # Need special cases for in/out ports or proxy since they are tuples or dicts. if ipt.name == 'listen_ports_to' or ipt.name == 'listen_ports_from': conf_dict['listen_ports'] = ( self.infrom.get_value(), self.into.get_value(), ) elif ipt.name == 'out_ports_to' or ipt.name == 'out_ports_from': conf_dict['outgoing_ports'] = ( self.outfrom.get_value(), self.outto.get_value(), ) elif ipt.name == 'listen_interface': listen_interface = ipt.get_value().strip() if is_ip(listen_interface) or not listen_interface: conf_dict['listen_interface'] = listen_interface elif ipt.name == 'outgoing_interface': outgoing_interface = ipt.get_value().strip() conf_dict['outgoing_interface'] = outgoing_interface elif ipt.name.startswith('proxy_'): if ipt.name == 'proxy_type': conf_dict.setdefault('proxy', {})['type'] = ipt.get_value() elif ipt.name == 'proxy_username': conf_dict.setdefault('proxy', {})['username'] = ipt.get_value() elif ipt.name == 'proxy_password': conf_dict.setdefault('proxy', {})['password'] = ipt.get_value() elif ipt.name == 'proxy_hostname': conf_dict.setdefault('proxy', {})['hostname'] = ipt.get_value() elif ipt.name == 'proxy_port': conf_dict.setdefault('proxy', {})['port'] = ipt.get_value() elif ipt.name == 'proxy_hostnames': conf_dict.setdefault( 'proxy', {})['proxy_hostnames'] = ipt.get_value() elif ipt.name == 'proxy_peer_connections': conf_dict.setdefault( 'proxy', {})['proxy_peer_connections'] = ipt.get_value() elif ipt.name == 'proxy_tracker_connections': conf_dict.setdefault( 'proxy', {})['proxy_tracker_connections'] = ipt.get_value() elif ipt.name == 'force_proxy': conf_dict.setdefault('proxy', {})['force_proxy'] = ipt.get_value() elif ipt.name == 'anonymous_mode': conf_dict.setdefault( 'proxy', {})['anonymous_mode'] = ipt.get_value() else: conf_dict[ipt.name] = ipt.get_value() if hasattr(ipt, 'get_child'): c = ipt.get_child() conf_dict[c.name] = c.get_value()
def __init__(self, listen_interface=None, interface=None, port=None, standalone=False, read_only_config_keys=None): """ Args: listen_interface (str, optional): The IP address to listen to bittorrent connections on. interface (str, optional): The IP address the daemon will listen for UI connections on. port (int, optional): The port the daemon will listen for UI connections on. standalone (bool, optional): If True the client is in Standalone mode otherwise, if False, start the daemon as separate process. read_only_config_keys (list of str, optional): A list of config keys that will not be altered by core.set_config() RPC method. """ self.standalone = standalone self.pid_file = get_config_dir('deluged.pid') log.info('Deluge daemon %s', get_version()) if is_daemon_running(self.pid_file): raise DaemonRunningError( 'Deluge daemon already running with this config directory!') # Twisted catches signals to terminate, so just have it call the shutdown method. reactor.addSystemEventTrigger('before', 'shutdown', self._shutdown) # Catch some Windows specific signals if windows_check(): def win_handler(ctrl_type): """Handle the Windows shutdown or close events.""" log.debug('windows handler ctrl_type: %s', ctrl_type) if ctrl_type == CTRL_CLOSE_EVENT or ctrl_type == CTRL_SHUTDOWN_EVENT: self._shutdown() return 1 SetConsoleCtrlHandler(win_handler) # Start the core as a thread and join it until it's done self.core = Core(listen_interface=listen_interface, read_only_config_keys=read_only_config_keys) if port is None: port = self.core.config['daemon_port'] self.port = port if interface and not is_ip(interface): log.error('Invalid UI interface (must be IP Address): %s', interface) interface = None self.rpcserver = RPCServer( port=port, allow_remote=self.core.config['allow_remote'], listen=not standalone, interface=interface) log.debug('Listening to UI on: %s:%s and bittorrent on: %s', interface, port, listen_interface)
def __init__(self, listen_interface=None, interface=None, port=None, standalone=False, read_only_config_keys=None): """ Args: listen_interface (str, optional): The IP address to listen to bittorrent connections on. interface (str, optional): The IP address the daemon will listen for UI connections on. port (int, optional): The port the daemon will listen for UI connections on. standalone (bool, optional): If True the client is in Standalone mode otherwise, if False, start the daemon as separate process. read_only_config_keys (list of str, optional): A list of config keys that will not be altered by core.set_config() RPC method. """ self.standalone = standalone self.pid_file = get_config_dir('deluged.pid') log.info('Deluge daemon %s', get_version()) if is_daemon_running(self.pid_file): raise DaemonRunningError('Deluge daemon already running with this config directory!') # Twisted catches signals to terminate, so just have it call the shutdown method. reactor.addSystemEventTrigger('before', 'shutdown', self._shutdown) # Catch some Windows specific signals if windows_check(): def win_handler(ctrl_type): """Handle the Windows shutdown or close events.""" log.debug('windows handler ctrl_type: %s', ctrl_type) if ctrl_type == CTRL_CLOSE_EVENT or ctrl_type == CTRL_SHUTDOWN_EVENT: self._shutdown() return 1 SetConsoleCtrlHandler(win_handler) # Start the core as a thread and join it until it's done self.core = Core(listen_interface=listen_interface, read_only_config_keys=read_only_config_keys) if port is None: port = self.core.config['daemon_port'] self.port = port if interface and not is_ip(interface): log.error('Invalid UI interface (must be IP Address): %s', interface) interface = None self.rpcserver = RPCServer( port=port, allow_remote=self.core.config['allow_remote'], listen=not standalone, interface=interface ) log.debug('Listening to UI on: %s:%s and bittorrent on: %s', interface, port, listen_interface)
def add_config_values(self, conf_dict): for ipt in self.inputs: if ipt.has_input(): # Need special cases for in/out ports or proxy since they are tuples or dicts. if ipt.name == 'listen_ports_to' or ipt.name == 'listen_ports_from': conf_dict['listen_ports'] = (self.infrom.get_value(), self.into.get_value()) elif ipt.name == 'out_ports_to' or ipt.name == 'out_ports_from': conf_dict['outgoing_ports'] = (self.outfrom.get_value(), self.outto.get_value()) elif ipt.name == 'listen_interface': interface = ipt.get_value().strip() if is_ip(interface) or not interface: conf_dict['listen_interface'] = interface elif ipt.name.startswith('proxy_'): if ipt.name == 'proxy_type': conf_dict.setdefault('proxy', {})['type'] = ipt.get_value() elif ipt.name == 'proxy_username': conf_dict.setdefault('proxy', {})['username'] = ipt.get_value() elif ipt.name == 'proxy_password': conf_dict.setdefault('proxy', {})['password'] = ipt.get_value() elif ipt.name == 'proxy_hostname': conf_dict.setdefault('proxy', {})['hostname'] = ipt.get_value() elif ipt.name == 'proxy_port': conf_dict.setdefault('proxy', {})['port'] = ipt.get_value() elif ipt.name == 'proxy_hostnames': conf_dict.setdefault('proxy', {})['proxy_hostnames'] = ipt.get_value() elif ipt.name == 'proxy_peer_connections': conf_dict.setdefault('proxy', {})['proxy_peer_connections'] = ipt.get_value() elif ipt.name == 'proxy_tracker_connections': conf_dict.setdefault('proxy', {})['proxy_tracker_connections'] = ipt.get_value() elif ipt.name == 'force_proxy': conf_dict.setdefault('proxy', {})['force_proxy'] = ipt.get_value() elif ipt.name == 'anonymous_mode': conf_dict.setdefault('proxy', {})['anonymous_mode'] = ipt.get_value() else: conf_dict[ipt.name] = ipt.get_value() if hasattr(ipt, 'get_child'): c = ipt.get_child() conf_dict[c.name] = c.get_value()
def test_is_ip(self): self.assertTrue(is_ip('192.0.2.0')) self.assertFalse(is_ip('192..0.0')) self.assertTrue(is_ip('2001:db8::')) self.assertFalse(is_ip('2001:db8:'))