From d46d23b10371feaf3a1c2f696bd546affde60b7d Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 29 Mar 2023 21:48:46 +0000 Subject: [PATCH] network: add method init_parameters_from_config --- electrum/network.py | 54 +++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index e5242bc89..9a6fb84d5 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -294,18 +294,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): self._allowed_protocols = {PREFERRED_NETWORK_PROTOCOL} - # Server for addresses and transactions - self.default_server = self.config.get('server', None) - # Sanitize default server - if self.default_server: - try: - self.default_server = ServerAddr.from_str(self.default_server) - except: - self.logger.warning('failed to parse server-string; falling back to localhost:1:s.') - self.default_server = ServerAddr.from_str("localhost:1:s") - else: - self.default_server = pick_random_server(allowed_protocols=self._allowed_protocols) - assert isinstance(self.default_server, ServerAddr), f"invalid type for default_server: {self.default_server!r}" + self._init_parameters_from_config() self.taskgroup = None @@ -337,11 +326,6 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): self.interfaces = {} # these are the ifaces in "initialised and usable" state self._closing_ifaces = set() - self.auto_connect = self.config.get('auto_connect', True) - self.proxy = None - self.tor_proxy = False - self._maybe_set_oneserver() - # Dump network messages (all interfaces). Set at runtime from the console. self.debug = False @@ -509,6 +493,12 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): auto_connect=self.auto_connect, oneserver=self.oneserver) + def _init_parameters_from_config(self) -> None: + self.auto_connect = self.config.get('auto_connect', True) + self._set_default_server() + self._set_proxy(deserialize_proxy(self.config.get('proxy'))) + self._maybe_set_oneserver() + def get_donation_address(self): if self.is_connected(): return self.donation_address @@ -603,6 +593,20 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): return server return None + def _set_default_server(self) -> None: + # Server for addresses and transactions + server = self.config.get('server', None) + # Sanitize default server + if server: + try: + self.default_server = ServerAddr.from_str(server) + except: + self.logger.warning(f'failed to parse server-string ({server!r}); falling back to localhost:1:s.') + self.default_server = ServerAddr.from_str("localhost:1:s") + else: + self.default_server = pick_random_server(allowed_protocols=self._allowed_protocols) + assert isinstance(self.default_server, ServerAddr), f"invalid type for default_server: {self.default_server!r}" + def _set_proxy(self, proxy: Optional[dict]): self.proxy = proxy dns_hacks.configure_dns_depending_on_proxy(bool(proxy)) @@ -639,14 +643,17 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): or self.config.get('oneserver') != net_params.oneserver: return + proxy_changed = self.proxy != proxy + oneserver_changed = self.oneserver != net_params.oneserver + default_server_changed = self.default_server != server + self._init_parameters_from_config() + async with self.restart_lock: - self.auto_connect = net_params.auto_connect - if self.proxy != proxy or self.oneserver != net_params.oneserver: - # Restart the network defaulting to the given server + if proxy_changed or oneserver_changed: + # Restart the network await self.stop(full_shutdown=False) - self.default_server = server await self._start() - elif self.default_server != server: + elif default_server_changed: await self.switch_to_interface(server) else: await self.switch_lagging_interface() @@ -1236,8 +1243,7 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): assert not self._closing_ifaces self.logger.info('starting network') self._clear_addr_retry_times() - self._set_proxy(deserialize_proxy(self.config.get('proxy'))) - self._maybe_set_oneserver() + self._init_parameters_from_config() await self.taskgroup.spawn(self._run_new_interface(self.default_server)) async def main():