tkeep connection open with a manually selected server, even if they fail passing the checkpoint - electrum - Electrum Bitcoin wallet
HTML git clone https://git.parazyd.org/electrum
DIR Log
DIR Files
DIR Refs
DIR Submodules
---
DIR commit 31fc9b78af8e0c3f849fc0d4e631d0739bf07ebd
DIR parent 23e51e7c9e74960642a9c34f8896372b9710e84d
HTML Author: ThomasV <thomasv@electrum.org>
Date: Fri, 31 Mar 2017 12:04:29 +0200
keep connection open with a manually selected server, even if they fail passing the checkpoint
Diffstat:
M lib/network.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
---
DIR diff --git a/lib/network.py b/lib/network.py
t@@ -693,6 +693,7 @@ class Network(util.DaemonThread):
def new_interface(self, server, socket):
self.add_recent_server(server)
self.interfaces[server] = interface = Interface(server, socket)
+ interface.failed_checkpoint = False
self.queue_request('blockchain.block.get_header', [self.blockchain.checkpoint_height], interface)
self.queue_request('blockchain.headers.subscribe', [], interface)
if server == self.default_server:
t@@ -764,6 +765,7 @@ class Network(util.DaemonThread):
self.notify('updated')
else:
self.request_chunk(interface, data, idx)
+ self.notify('updated')
def request_header(self, interface, data, height):
interface.print_error("requesting header %d" % height)
t@@ -777,8 +779,11 @@ class Network(util.DaemonThread):
'''Handle receiving a single block header'''
# close connection if header does not pass checkpoint
if not self.blockchain.pass_checkpoint(response['result']):
- interface.print_error("header did not pass checkpoint, dismissing interface", interface.host)
- self.connection_down(interface.server)
+ if interface == self.interface and not auto_connect:
+ interface.failed_checkpoint = True
+ else:
+ interface.print_error("header did not pass checkpoint, dismissing interface")
+ self.connection_down(interface.server)
return
if self.blockchain.downloading_headers:
return
t@@ -787,6 +792,9 @@ class Network(util.DaemonThread):
req_height = data.get('header_height', -1)
# Ignore unsolicited headers
if req_if == interface and req_height == response['params'][0]:
+ if interface.failed_checkpoint:
+ self.bc_requests.popleft()
+ return
next_height = self.blockchain.connect_header(data['chain'], response['result'])
# If not finished, get the next header
if next_height in [True, False]: