From fdb34e7d25837902a38cea6b149d00f1f1dec30d Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Tue, 17 Jul 2018 08:11:17 +0800 Subject: [PATCH] Store session's protocol version as a tuple, not string --- electrumx/server/controller.py | 2 +- electrumx/server/session.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/electrumx/server/controller.py b/electrumx/server/controller.py index a688b35..5327724 100644 --- a/electrumx/server/controller.py +++ b/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(), diff --git a/electrumx/server/session.py b/electrumx/server/session.py index e262fb5..af60975 100644 --- a/electrumx/server/session.py +++ b/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.'''