Browse Source

Update peer discovery code for protocol 1.3

patch-2
Neil Booth 7 years ago
parent
commit
d2e8fe7fa1
  1. 13
      electrumx/server/peers.py

13
electrumx/server/peers.py

@ -18,7 +18,7 @@ from functools import partial
from aiorpcx import ClientSession, RPCError, SOCKSProxy, ConnectionError from aiorpcx import ClientSession, RPCError, SOCKSProxy, ConnectionError
from electrumx.lib.peer import Peer from electrumx.lib.peer import Peer
from electrumx.lib.util import ConnectionLogger, class_logger from electrumx.lib.util import ConnectionLogger, class_logger, protocol_tuple
PEER_GOOD, PEER_STALE, PEER_NEVER, PEER_BAD = range(4) PEER_GOOD, PEER_STALE, PEER_NEVER, PEER_BAD = range(4)
@ -101,20 +101,18 @@ class PeerSession(ClientSession):
def on_version(self, request): def on_version(self, request):
'''Handle the response to the version message.''' '''Handle the response to the version message.'''
if not self.is_good(request, (list, str)): if not self.is_good(request, list):
return return
result = request.result() result = request.result()
if isinstance(result, str):
version = result
else:
# Protocol version 1.1 returns a pair with the version first # Protocol version 1.1 returns a pair with the version first
if len(result) < 2 or not isinstance(result[0], str): if len(result) != 2 or not all(isinstance(x, str) for x in result):
self.fail(request, 'result array bad format') self.fail(request, 'result array bad format')
return return
version = result[0] version = result[0]
self.peer.server_version = version self.peer.server_version = version
self.peer.features['server_version'] = version self.peer.features['server_version'] = version
self.ptuple = protocol_tuple(result[1])
for method, on_done in [ for method, on_done in [
('blockchain.headers.subscribe', self.on_height), ('blockchain.headers.subscribe', self.on_height),
@ -146,7 +144,10 @@ class PeerSession(ClientSession):
result = request.result() result = request.result()
controller = self.peer_mgr.controller controller = self.peer_mgr.controller
our_height = controller.bp.db_height our_height = controller.bp.db_height
if self.ptuple < (1, 3):
their_height = result.get('block_height') their_height = result.get('block_height')
else:
their_height = result.get('height')
if not isinstance(their_height, int): if not isinstance(their_height, int):
self.bad('invalid height {}'.format(their_height)) self.bad('invalid height {}'.format(their_height))
return return

Loading…
Cancel
Save