Browse Source

Put server_features() on the environment object

Fixes #302
patch-1
Neil Booth 7 years ago
parent
commit
72fce87088
  1. 17
      server/env.py
  2. 23
      server/peers.py
  3. 2
      server/session.py

17
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', ''):

23
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

2
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.

Loading…
Cancel
Save