Exemple #1
0
 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))
Exemple #2
0
    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
Exemple #3
0
 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))
Exemple #4
0
 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))
Exemple #5
0
 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
Exemple #6
0
    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()
Exemple #7
0
    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()
Exemple #8
0
 def set_server(self, server: ServerAddr):
     self.parent.server_e.setText(server.net_addr_str())
     self.parent.set_server()