Browse Source

network.NetworkParameters: merge host+port+protocol into "server" field

ssl-fingerprint-check
SomberNight 5 years ago
parent
commit
b2cfaddff2
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/commands.py
  2. 19
      electrum/gui/kivy/main_window.py
  3. 10
      electrum/gui/kivy/uix/ui_screens/server.kv
  4. 2
      electrum/gui/qt/main_window.py
  5. 15
      electrum/gui/qt/network_dialog.py
  6. 9
      electrum/gui/text.py
  7. 23
      electrum/network.py

2
electrum/commands.py

@ -187,7 +187,7 @@ class Commands:
net_params = self.network.get_parameters() net_params = self.network.get_parameters()
response = { response = {
'path': self.network.config.path, 'path': self.network.config.path,
'server': net_params.host, 'server': net_params.server.host,
'blockchain_height': self.network.get_local_height(), 'blockchain_height': self.network.get_local_height(),
'server_height': self.network.get_server_height(), 'server_height': self.network.get_server_height(),
'spv_nodes': len(self.network.get_interfaces()), 'spv_nodes': len(self.network.get_interfaces()),

19
electrum/gui/kivy/main_window.py

@ -145,6 +145,19 @@ class ElectrumWindow(App):
servers = self.network.get_servers() servers = self.network.get_servers()
ChoiceDialog(_('Choose a server'), sorted(servers), popup.ids.host.text, cb2).open() ChoiceDialog(_('Choose a server'), sorted(servers), popup.ids.host.text, cb2).open()
def maybe_switch_to_server(self, *, host: str, port: str):
from electrum.interface import ServerAddr
net_params = self.network.get_parameters()
try:
server = ServerAddr(host=host,
port=port,
protocol=net_params.server.protocol)
except Exception as e:
self.show_error(_("Invalid server details: {}").format(repr(e)))
return
net_params = net_params._replace(server=server)
self.network.run_from_another_thread(self.network.set_parameters(net_params))
def choose_blockchain_dialog(self, dt): def choose_blockchain_dialog(self, dt):
from .uix.dialogs.choice_dialog import ChoiceDialog from .uix.dialogs.choice_dialog import ChoiceDialog
chains = self.network.get_blockchains() chains = self.network.get_blockchains()
@ -348,8 +361,8 @@ class ElectrumWindow(App):
self.num_blocks = self.network.get_local_height() self.num_blocks = self.network.get_local_height()
self.num_nodes = len(self.network.get_interfaces()) self.num_nodes = len(self.network.get_interfaces())
net_params = self.network.get_parameters() net_params = self.network.get_parameters()
self.server_host = net_params.host self.server_host = net_params.server.host
self.server_port = net_params.port self.server_port = str(net_params.server.port)
self.auto_connect = net_params.auto_connect self.auto_connect = net_params.auto_connect
self.oneserver = net_params.oneserver self.oneserver = net_params.oneserver
self.proxy_config = net_params.proxy if net_params.proxy else {} self.proxy_config = net_params.proxy if net_params.proxy else {}
@ -814,7 +827,7 @@ class ElectrumWindow(App):
if interface: if interface:
self.server_host = interface.host self.server_host = interface.host
else: else:
self.server_host = str(net_params.host) + ' (connecting...)' self.server_host = str(net_params.server.host) + ' (connecting...)'
self.proxy_config = net_params.proxy or {} self.proxy_config = net_params.proxy or {}
self.update_proxy_str(self.proxy_config) self.update_proxy_str(self.proxy_config)

10
electrum/gui/kivy/uix/ui_screens/server.kv

@ -1,3 +1,5 @@
#:import ServerAddr electrum.interface.ServerAddr
Popup: Popup:
id: nd id: nd
title: _('Server') title: _('Server')
@ -23,7 +25,7 @@ Popup:
height: '36dp' height: '36dp'
size_hint_x: 3 size_hint_x: 3
size_hint_y: None size_hint_y: None
text: app.network.get_parameters().host text: app.network.get_parameters().server.host
Label: Label:
height: '36dp' height: '36dp'
size_hint_x: 1 size_hint_x: 1
@ -36,7 +38,7 @@ Popup:
height: '36dp' height: '36dp'
size_hint_x: 3 size_hint_x: 3
size_hint_y: None size_hint_y: None
text: app.network.get_parameters().port text: str(app.network.get_parameters().server.port)
Widget Widget
Button: Button:
id: chooser id: chooser
@ -56,7 +58,5 @@ Popup:
height: '48dp' height: '48dp'
text: _('OK') text: _('OK')
on_release: on_release:
net_params = app.network.get_parameters() app.maybe_switch_to_server(host=str(root.ids.host.text), port=str(root.ids.port.text))
net_params = net_params._replace(host=str(root.ids.host.text), port=str(root.ids.port.text))
app.network.run_from_another_thread(app.network.set_parameters(net_params))
nd.dismiss() nd.dismiss()

2
electrum/gui/qt/main_window.py

@ -738,7 +738,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
def donate_to_server(self): def donate_to_server(self):
d = self.network.get_donation_address() d = self.network.get_donation_address()
if d: if d:
host = self.network.get_parameters().host host = self.network.get_parameters().server.host
self.pay_to_URI('bitcoin:%s?message=donation for %s'%(d, host)) self.pay_to_URI('bitcoin:%s?message=donation for %s'%(d, host))
else: else:
self.show_error(_('No donation address for this server')) self.show_error(_('No donation address for this server'))

15
electrum/gui/qt/network_dialog.py

@ -364,11 +364,11 @@ class NetworkChoiceLayout(object):
def update(self): def update(self):
net_params = self.network.get_parameters() net_params = self.network.get_parameters()
host, port, protocol = net_params.host, net_params.port, net_params.protocol server = net_params.server
proxy_config, auto_connect = net_params.proxy, net_params.auto_connect proxy_config, auto_connect = net_params.proxy, net_params.auto_connect
if not self.server_host.hasFocus() and not self.server_port.hasFocus(): if not self.server_host.hasFocus() and not self.server_port.hasFocus():
self.server_host.setText(host) self.server_host.setText(server.host)
self.server_port.setText(str(port)) self.server_port.setText(str(server.port))
self.autoconnect_cb.setChecked(auto_connect) self.autoconnect_cb.setChecked(auto_connect)
interface = self.network.interface interface = self.network.interface
@ -448,8 +448,13 @@ class NetworkChoiceLayout(object):
def set_server(self): def set_server(self):
net_params = self.network.get_parameters() net_params = self.network.get_parameters()
net_params = net_params._replace(host=str(self.server_host.text()), try:
port=str(self.server_port.text()), server = ServerAddr(host=str(self.server_host.text()),
port=str(self.server_port.text()),
protocol=net_params.server.protocol)
except Exception:
return
net_params = net_params._replace(server=server,
auto_connect=self.autoconnect_cb.isChecked()) auto_connect=self.autoconnect_cb.isChecked())
self.network.run_from_another_thread(self.network.set_parameters(net_params)) self.network.run_from_another_thread(self.network.set_parameters(net_params))

9
electrum/gui/text.py

@ -409,7 +409,7 @@ class ElectrumGui:
if not self.network: if not self.network:
return return
net_params = self.network.get_parameters() net_params = self.network.get_parameters()
host, port, protocol = net_params.host, net_params.port, net_params.protocol server_addr = net_params.server
proxy_config, auto_connect = net_params.proxy, net_params.auto_connect proxy_config, auto_connect = net_params.proxy, net_params.auto_connect
srv = 'auto-connect' if auto_connect else str(self.network.default_server) srv = 'auto-connect' if auto_connect else str(self.network.default_server)
out = self.run_dialog('Network', [ out = self.run_dialog('Network', [
@ -426,12 +426,11 @@ class ElectrumGui:
except Exception: except Exception:
self.show_message("Error:" + server_str + "\nIn doubt, type \"auto-connect\"") self.show_message("Error:" + server_str + "\nIn doubt, type \"auto-connect\"")
return False return False
host = server_addr.host
port = str(server_addr.port)
protocol = server_addr.protocol
if out.get('server') or out.get('proxy'): if out.get('server') or out.get('proxy'):
proxy = electrum.network.deserialize_proxy(out.get('proxy')) if out.get('proxy') else proxy_config proxy = electrum.network.deserialize_proxy(out.get('proxy')) if out.get('proxy') else proxy_config
net_params = NetworkParameters(host, port, protocol, proxy, auto_connect) net_params = NetworkParameters(server=server_addr,
proxy=proxy,
auto_connect=auto_connect)
self.network.run_from_another_thread(self.network.set_parameters(net_params)) self.network.run_from_another_thread(self.network.set_parameters(net_params))
def settings_dialog(self): def settings_dialog(self):

23
electrum/network.py

@ -144,9 +144,7 @@ def pick_random_server(hostmap=None, *, allowed_protocols: Iterable[str],
class NetworkParameters(NamedTuple): class NetworkParameters(NamedTuple):
host: str server: ServerAddr
port: str
protocol: str
proxy: Optional[dict] proxy: Optional[dict]
auto_connect: bool auto_connect: bool
oneserver: bool = False oneserver: bool = False
@ -483,10 +481,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
util.trigger_callback(key, self.get_status_value(key)) util.trigger_callback(key, self.get_status_value(key))
def get_parameters(self) -> NetworkParameters: def get_parameters(self) -> NetworkParameters:
server = self.default_server return NetworkParameters(server=self.default_server,
return NetworkParameters(host=server.host,
port=str(server.port),
protocol=server.protocol,
proxy=self.proxy, proxy=self.proxy,
auto_connect=self.auto_connect, auto_connect=self.auto_connect,
oneserver=self.oneserver) oneserver=self.oneserver)
@ -585,13 +580,12 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
util.trigger_callback('proxy_set', self.proxy) util.trigger_callback('proxy_set', self.proxy)
@log_exceptions @log_exceptions
async def set_parameters(self, net_params: NetworkParameters): # TODO async def set_parameters(self, net_params: NetworkParameters):
proxy = net_params.proxy proxy = net_params.proxy
proxy_str = serialize_proxy(proxy) proxy_str = serialize_proxy(proxy)
host, port, protocol = net_params.host, net_params.port, net_params.protocol server = net_params.server
# sanitize parameters # sanitize parameters
try: try:
server = ServerAddr(host, port, protocol=protocol)
if proxy: if proxy:
proxy_modes.index(proxy['mode']) + 1 proxy_modes.index(proxy['mode']) + 1
int(proxy['port']) int(proxy['port'])
@ -1112,10 +1106,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
chosen_iface = random.choice(interfaces_on_selected_chain) # type: Interface chosen_iface = random.choice(interfaces_on_selected_chain) # type: Interface
# switch to server (and save to config) # switch to server (and save to config)
net_params = self.get_parameters() net_params = self.get_parameters()
server = chosen_iface.server net_params = net_params._replace(server=chosen_iface.server)
net_params = net_params._replace(host=server.host,
port=str(server.port),
protocol=server.protocol)
await self.set_parameters(net_params) await self.set_parameters(net_params)
async def follow_chain_given_server(self, server: ServerAddr) -> None: async def follow_chain_given_server(self, server: ServerAddr) -> None:
@ -1126,9 +1117,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]):
self._set_preferred_chain(iface.blockchain) self._set_preferred_chain(iface.blockchain)
# switch to server (and save to config) # switch to server (and save to config)
net_params = self.get_parameters() net_params = self.get_parameters()
net_params = net_params._replace(host=server.host, net_params = net_params._replace(server=server)
port=str(server.port),
protocol=server.protocol)
await self.set_parameters(net_params) await self.set_parameters(net_params)
def get_local_height(self): def get_local_height(self):

Loading…
Cancel
Save