tFirst message on an interface is server.version (#4407) - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit e0a6b082d2c608e644872632705338d073d382b2 DIR parent f0daf2d37bb7043105230d32ca3b179e06b17b15 HTML Author: Neil <kyuupichan@gmail.com> Date: Tue, 5 Jun 2018 19:41:41 +0900 First message on an interface is server.version (#4407) - Use server.ping to ping (valid as of protocol version 1.2) rather than server.version (deprecated as a ping) - Ping every 5 mins rather than every 1 minute. By default servers don't consider a connection stale until 10 minutes of inactivity. - Remove unused last_request member of interface Port of https://github.com/fyookball/electrum/commit/c3f26e59db9ce6d5af6c12510f1817d2782f4928 Diffstat: M lib/interface.py | 15 ++++----------- M lib/network.py | 9 ++++----- 2 files changed, 8 insertions(+), 16 deletions(-) --- DIR diff --git a/lib/interface.py b/lib/interface.py t@@ -260,9 +260,7 @@ class Interface(util.PrintError): self.debug = False self.unsent_requests = [] self.unanswered_requests = {} - # Set last ping to zero to ensure immediate ping - self.last_request = time.time() - self.last_ping = 0 + self.last_send = time.time() self.closed_remotely = False def diagnostic_name(self): t@@ -294,6 +292,7 @@ class Interface(util.PrintError): def send_requests(self): '''Sends queued requests. Returns False on failure.''' + self.last_send = time.time() make_dict = lambda m, p, i: {'method': m, 'params': p, 'id': i} n = self.num_requests() wire_requests = self.unsent_requests[0:n] t@@ -310,14 +309,8 @@ class Interface(util.PrintError): return True def ping_required(self): - '''Maintains time since last ping. Returns True if a ping should - be sent. - ''' - now = time.time() - if now - self.last_ping > 60: - self.last_ping = now - return True - return False + '''Returns True if a ping should be sent.''' + return time.time() - self.last_send > 300 def has_timed_out(self): '''Returns True if the interface has timed out.''' DIR diff --git a/lib/network.py b/lib/network.py t@@ -307,9 +307,6 @@ class Network(util.DaemonThread): # Resend unanswered requests requests = self.unanswered_requests.values() self.unanswered_requests = {} - if self.interface.ping_required(): - params = [ELECTRUM_VERSION, PROTOCOL_VERSION] - self.queue_request('server.version', params, self.interface) for request in requests: message_id = self.queue_request(request[0], request[1]) self.unanswered_requests[message_id] = request t@@ -711,6 +708,9 @@ class Network(util.DaemonThread): interface.mode = 'default' interface.request = None self.interfaces[server] = interface + # server.version should be the first message + params = [ELECTRUM_VERSION, PROTOCOL_VERSION] + self.queue_request('server.version', params, interface) self.queue_request('blockchain.headers.subscribe', [True], interface) if server == self.default_server: self.switch_to_interface(server) t@@ -734,8 +734,7 @@ class Network(util.DaemonThread): if interface.has_timed_out(): self.connection_down(interface.server) elif interface.ping_required(): - params = [ELECTRUM_VERSION, PROTOCOL_VERSION] - self.queue_request('server.version', params, interface) + self.queue_request('server.ping', [], interface) now = time.time() # nodes