From 72fce8708810fc8087990b7337bece248919306c Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Thu, 16 Nov 2017 18:00:58 +0000 Subject: [PATCH] Put server_features() on the environment object Fixes #302 --- server/env.py | 17 +++++++++++++++++ server/peers.py | 23 ++++------------------- server/session.py | 2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/server/env.py b/server/env.py index 4ce80c6..c82aab2 100644 --- a/server/env.py +++ b/server/env.py @@ -15,6 +15,7 @@ from ipaddress import ip_address from lib.coins import Coin from lib.env_base import EnvBase import lib.util as lib_util +import server.version as version NetIdentity = namedtuple('NetIdentity', 'host tcp_port ssl_port nick_suffix') @@ -147,6 +148,22 @@ class Env(EnvBase): '_tor', ) + def server_features(self): + '''Return the server features dictionary.''' + hosts = {identity.host: {'tcp_port': identity.tcp_port, + 'ssl_port': identity.ssl_port} + for identity in self.identities} + + return { + 'hosts': hosts, + 'pruning': None, + 'server_version': version.VERSION, + 'protocol_min': version.PROTOCOL_MIN, + 'protocol_max': version.PROTOCOL_MAX, + 'genesis_hash': self.coin.GENESIS_HASH, + 'hash_function': 'sha256', + } + def peer_discovery_enum(self): pd = self.default('PEER_DISCOVERY', 'on').strip().lower() if pd in ('off', ''): diff --git a/server/peers.py b/server/peers.py index ccb6076..8503496 100644 --- a/server/peers.py +++ b/server/peers.py @@ -28,24 +28,6 @@ STALE_SECS = 24 * 3600 WAKEUP_SECS = 300 -def peers_from_env(env): - '''Return a list of peers from the environment settings.''' - hosts = {identity.host: {'tcp_port': identity.tcp_port, - 'ssl_port': identity.ssl_port} - for identity in env.identities} - features = { - 'hosts': hosts, - 'pruning': None, - 'server_version': version.VERSION, - 'protocol_min': version.PROTOCOL_MIN, - 'protocol_max': version.PROTOCOL_MAX, - 'genesis_hash': env.coin.GENESIS_HASH, - 'hash_function': 'sha256', - } - - return [Peer(ident.host, features, 'env') for ident in env.identities] - - class PeerSession(JSONSession): '''An outgoing session to a peer.''' @@ -250,7 +232,10 @@ class PeerManager(util.LoggedClass): self.irc = IRC(env, self) else: self.irc = None - self.myselves = peers_from_env(env) + + # Our clearnet and Tor Peers, if any + self.myselves = [Peer(ident.host, env.server_features(), 'env') + for ident in env.identities] self.retry_event = asyncio.Event() # Peers have one entry per hostname. Once connected, the # ip_addr property is either None, an onion peer, or the diff --git a/server/session.py b/server/session.py index 0e163d8..e1ccaad 100644 --- a/server/session.py +++ b/server/session.py @@ -245,7 +245,7 @@ class ElectrumX(SessionBase): def server_features(self): '''Returns a dictionary of server features.''' - return self.controller.peer_mgr.my_clearnet_peer().features + return self.env.server_features() def block_get_chunk(self, index): '''Return a chunk of block headers as a hexadecimal string.