def network_dialog(self): if not self.network: return net_params = self.network.get_parameters() server_addr = net_params.server proxy_config, auto_connect = net_params.proxy, net_params.auto_connect srv = 'auto-connect' if auto_connect else str(self.network.default_server) out = self.run_dialog('Network', [ {'label':'server', 'type':'str', 'value':srv}, {'label':'proxy', 'type':'str', 'value':self.config.get('proxy', '')}, ], buttons = 1) if out: if out.get('server'): server_str = out.get('server') auto_connect = server_str == 'auto-connect' if not auto_connect: try: server_addr = ServerAddr.from_str(server_str) except Exception: self.show_message("Error:" + server_str + "\nIn doubt, type \"auto-connect\"") return False if out.get('server') or out.get('proxy'): proxy = electrum.network.deserialize_proxy(out.get('proxy')) if out.get('proxy') else proxy_config net_params = NetworkParameters(server=server_addr, proxy=proxy, auto_connect=auto_connect) self.network.run_from_another_thread(self.network.set_parameters(net_params))
def set_server(self): _logger.info('Configuring server to 127.0.0.1:%s', self.rpc_port) # first, remove the `server` config to allow `set_parameters()` below to update it and trigger the connection mechanism del self.config.cmdline_options['server'] network = Network.get_instance() net_params = network.get_parameters() try: # Electrum v4 server = ServerAddr('127.0.0.1', self.rpc_port, protocol='t') net_params = net_params._replace(server=server, oneserver=True) except: # Electrum v3 net_params = net_params._replace( host='127.0.0.1', port=self.rpc_port, protocol='t', oneserver=True, ) network.run_from_another_thread(network.set_parameters(net_params)) # now set the server in `cmdline_options` to lock it in self.config.cmdline_options[ 'server'] = '127.0.0.1:%s:t' % self.rpc_port
def set_server(self): net_params = self.network.get_parameters() try: server = ServerAddr.from_str_with_inference(str(self.server_e.text())) except Exception: return net_params = net_params._replace(server=server, auto_connect=self.autoconnect_cb.isChecked()) self.network.run_from_another_thread(self.network.set_parameters(net_params))
def server(self, server): net_params = self.network.get_parameters() try: server = ServerAddr.from_str_with_inference(server) if not server: raise Exception("failed to parse") except Exception: return net_params = net_params._replace(server=server) self.network.run_from_another_thread(self.network.set_parameters(net_params))
def __init__(self, config): self.config = config network = MockNetwork() network.config = config super().__init__(network=network, server=ServerAddr.from_str('mock-server:50000:t'), proxy=None) self.q = asyncio.Queue() self.blockchain = blockchain.Blockchain(config=self.config, forkpoint=0, parent=None, forkpoint_hash=constants.net.GENESIS, prev_hash=None) self.tip = 12 self.blockchain._size = self.tip + 1
def update(self, servers, use_tor): self.clear() protocol = PREFERRED_NETWORK_PROTOCOL for _host, d in sorted(servers.items()): if _host.endswith('.onion') and not use_tor: continue port = d.get(protocol) if port: x = QTreeWidgetItem([_host, port]) server = ServerAddr(_host, port, protocol=protocol) x.setData(self.Columns.HOST, self.SERVER_ADDR_ROLE, server) self.addTopLevelItem(x) h = self.header() h.setStretchLastSection(False) h.setSectionResizeMode(self.Columns.HOST, QHeaderView.Stretch) h.setSectionResizeMode(self.Columns.PORT, QHeaderView.ResizeToContents) super().update()
def update(self, *, network: Network, servers: dict, use_tor: bool): self.clear() # connected servers connected_servers_item = QTreeWidgetItem([_("Connected nodes"), '']) connected_servers_item.setData(0, self.ITEMTYPE_ROLE, self.ItemType.TOPLEVEL) chains = network.get_blockchains() n_chains = len(chains) for chain_id, interfaces in chains.items(): b = blockchain.blockchains.get(chain_id) if b is None: continue name = b.get_name() if n_chains > 1: x = QTreeWidgetItem([name + '@%d'%b.get_max_forkpoint(), '%d'%b.height()]) x.setData(0, self.ITEMTYPE_ROLE, self.ItemType.CHAIN) x.setData(0, self.CHAIN_ID_ROLE, b.get_id()) else: x = connected_servers_item for i in interfaces: star = ' *' if i == network.interface else '' item = QTreeWidgetItem([f"{i.server.to_friendly_name()}" + star, '%d'%i.tip]) item.setData(0, self.ITEMTYPE_ROLE, self.ItemType.CONNECTED_SERVER) item.setData(0, self.SERVER_ADDR_ROLE, i.server) item.setToolTip(0, str(i.server)) x.addChild(item) if n_chains > 1: connected_servers_item.addChild(x) # disconnected servers disconnected_servers_item = QTreeWidgetItem([_("Other known servers"), ""]) disconnected_servers_item.setData(0, self.ITEMTYPE_ROLE, self.ItemType.TOPLEVEL) connected_hosts = set([iface.host for ifaces in chains.values() for iface in ifaces]) protocol = PREFERRED_NETWORK_PROTOCOL for _host, d in sorted(servers.items()): if _host in connected_hosts: continue if _host.endswith('.onion') and not use_tor: continue port = d.get(protocol) if port: server = ServerAddr(_host, port, protocol=protocol) item = QTreeWidgetItem([server.net_addr_str(), ""]) item.setData(0, self.ITEMTYPE_ROLE, self.ItemType.DISCONNECTED_SERVER) item.setData(0, self.SERVER_ADDR_ROLE, server) disconnected_servers_item.addChild(item) self.addTopLevelItem(connected_servers_item) self.addTopLevelItem(disconnected_servers_item) connected_servers_item.setExpanded(True) for i in range(connected_servers_item.childCount()): connected_servers_item.child(i).setExpanded(True) disconnected_servers_item.setExpanded(True) # headers h = self.header() h.setStretchLastSection(False) h.setSectionResizeMode(0, QHeaderView.Stretch) h.setSectionResizeMode(1, QHeaderView.ResizeToContents) super().update()
def set_server(self, server: ServerAddr): self.parent.server_e.setText(server.net_addr_str()) self.parent.set_server()