Browse Source

Store session's protocol version as a tuple, not string

patch-2
Neil Booth 7 years ago
parent
commit
fdb34e7d25
  1. 2
      electrumx/server/controller.py
  2. 20
      electrumx/server/session.py

2
electrumx/server/controller.py

@ -533,7 +533,7 @@ class Controller(ServerBase):
session.flags(),
session.peer_address_str(for_log=for_log),
session.client,
session.protocol_version,
session.protocol_version_string(),
session.count_pending_items(),
session.txs_sent,
session.sub_count(),

20
electrumx/server/session.py

@ -143,8 +143,11 @@ class ElectrumX(SessionBase):
self.hashX_subs = {}
self.sv_seen = False
self.mempool_statuses = {}
self.protocol_version = None
self.set_protocol_handlers((1, 1))
self.set_protocol_handlers(util.protocol_tuple(
self.controller.PROTOCOL_MIN))
def protocol_version_string(self):
return util.version_string(self.protocol_tuple)
def sub_count(self):
return len(self.hashX_subs)
@ -438,15 +441,13 @@ class ElectrumX(SessionBase):
# Find the highest common protocol version. Disconnect if
# that protocol version in unsupported.
ptuple = self.controller.protocol_tuple(protocol_version)
if ptuple is None:
self.close_after_send = True
raise RPCError(BAD_REQUEST,
f'unsupported protocol version: {protocol_version}')
self.set_protocol_handlers(ptuple)
return (electrumx.version, self.protocol_version)
return (electrumx.version, self.protocol_version_string())
async def transaction_broadcast(self, raw_tx):
'''Broadcast a raw transaction to the network.
@ -467,10 +468,7 @@ class ElectrumX(SessionBase):
f'network rules.\n\n{message}\n[{raw_tx}]')
def set_protocol_handlers(self, ptuple):
protocol_version = '.'.join(str(part) for part in ptuple)
if protocol_version == self.protocol_version:
return
self.protocol_version = protocol_version
self.protocol_tuple = ptuple
controller = self.controller
handlers = {
@ -547,7 +545,9 @@ class LocalRPC(SessionBase):
super().__init__(*args, **kwargs)
self.client = 'RPC'
self.max_response_size = 0
self.protocol_version = 'RPC'
def protocol_version_string(self):
return 'RPC'
def request_handler(self, method):
'''Return the async handler for the given request method.'''

Loading…
Cancel
Save