Terminate unhandshaked peer on shutdown (#995)

* Fix connect to saved peers with autoconnect set

* Show peer address for saved peer page

* Update frontend build
This commit is contained in:
Jonathan Zernik 2021-08-20 16:52:16 -07:00 committed by GitHub
parent f9197f7035
commit eb622a8aee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 56 additions and 18 deletions

View file

@ -74,6 +74,9 @@ export default function PeerPage() {
<p>
Peer name: {peer.getPeerName()}
</p>
<p>
Address: {peer.getHost()}:{peer.getPort()}
</p>
{PeerSettingsForm()}
{DeletePeerButton()}
</>

View file

@ -1,14 +1,14 @@
{
"files": {
"main.js": "/static/js/main.427ae680.chunk.js",
"main.js.map": "/static/js/main.427ae680.chunk.js.map",
"main.js": "/static/js/main.5cce494a.chunk.js",
"main.js.map": "/static/js/main.5cce494a.chunk.js.map",
"runtime-main.js": "/static/js/runtime-main.9f0ba400.js",
"runtime-main.js.map": "/static/js/runtime-main.9f0ba400.js.map",
"static/css/2.ea4ba2f0.chunk.css": "/static/css/2.ea4ba2f0.chunk.css",
"static/js/2.b3fb8142.chunk.js": "/static/js/2.b3fb8142.chunk.js",
"static/js/2.b3fb8142.chunk.js.map": "/static/js/2.b3fb8142.chunk.js.map",
"index.html": "/index.html",
"precache-manifest.812686f3a667bf80d6e0b05b510a28d1.js": "/precache-manifest.812686f3a667bf80d6e0b05b510a28d1.js",
"precache-manifest.cab9cc2aaea84a2ad853e179cb382e52.js": "/precache-manifest.cab9cc2aaea84a2ad853e179cb382e52.js",
"service-worker.js": "/service-worker.js",
"static/css/2.ea4ba2f0.chunk.css.map": "/static/css/2.ea4ba2f0.chunk.css.map",
"static/js/2.b3fb8142.chunk.js.LICENSE.txt": "/static/js/2.b3fb8142.chunk.js.LICENSE.txt",
@ -20,6 +20,6 @@
"static/js/runtime-main.9f0ba400.js",
"static/css/2.ea4ba2f0.chunk.css",
"static/js/2.b3fb8142.chunk.js",
"static/js/main.427ae680.chunk.js"
"static/js/main.5cce494a.chunk.js"
]
}

View file

@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>Squeak Node</title><meta name="description" content="Squeak Node is a frontend for accessing a squeak node"><meta name="keywords" content="squeak, bitcoin, lightning"><meta name="author" content="Flatlogic LLC."><link href="/static/css/2.ea4ba2f0.chunk.css" rel="stylesheet"></head><body style="font-family:Roboto,sans-serif"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,f,l=r[0],a=r[1],i=r[2],c=0,s=[];c<l.length;c++)f=l[c],Object.prototype.hasOwnProperty.call(o,f)&&o[f]&&s.push(o[f][0]),o[f]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var a=t[l];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={1:0},u=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var l=this["webpackJsonpsqueak-node-frontend"]=this["webpackJsonpsqueak-node-frontend"]||[],a=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var p=a;t()}([])</script><script src="/static/js/2.b3fb8142.chunk.js"></script><script src="/static/js/main.427ae680.chunk.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><link rel="manifest" href="/manifest.json"/><title>Squeak Node</title><meta name="description" content="Squeak Node is a frontend for accessing a squeak node"><meta name="keywords" content="squeak, bitcoin, lightning"><meta name="author" content="Flatlogic LLC."><link href="/static/css/2.ea4ba2f0.chunk.css" rel="stylesheet"></head><body style="font-family:Roboto,sans-serif"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,f,l=r[0],a=r[1],i=r[2],c=0,s=[];c<l.length;c++)f=l[c],Object.prototype.hasOwnProperty.call(o,f)&&o[f]&&s.push(o[f][0]),o[f]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(p&&p(r);s.length;)s.shift()();return u.push.apply(u,i||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,l=1;l<t.length;l++){var a=t[l];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=f(f.s=t[0]))}return e}var n={},o={1:0},u=[];function f(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.m=e,f.c=n,f.d=function(e,r,t){f.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},f.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,r){if(1&r&&(e=f(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)f.d(t,n,function(r){return e[r]}.bind(null,n));return t},f.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return f.d(r,"a",r),r},f.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},f.p="/";var l=this["webpackJsonpsqueak-node-frontend"]=this["webpackJsonpsqueak-node-frontend"]||[],a=l.push.bind(l);l.push=r,l=l.slice();for(var i=0;i<l.length;i++)r(l[i]);var p=a;t()}([])</script><script src="/static/js/2.b3fb8142.chunk.js"></script><script src="/static/js/main.5cce494a.chunk.js"></script></body></html>

View file

@ -1,6 +1,6 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
"revision": "58bdd3136e8c6152c4ce9738bb528d42",
"revision": "579e63de63d137fb6b61f54fa54db635",
"url": "/index.html"
},
{
@ -16,8 +16,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/static/js/2.b3fb8142.chunk.js.LICENSE.txt"
},
{
"revision": "c061a2c142a218042eed",
"url": "/static/js/main.427ae680.chunk.js"
"revision": "e66cf0295b76115db33f",
"url": "/static/js/main.5cce494a.chunk.js"
},
{
"revision": "cc9816de5a8639d377ea",

View file

@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
"/precache-manifest.812686f3a667bf80d6e0b05b510a28d1.js"
"/precache-manifest.cab9cc2aaea84a2ad853e179cb382e52.js"
);
self.addEventListener('message', (event) => {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -23,7 +23,7 @@ LAST_MESSAGE_TIMEOUT = 600
PING_TIMEOUT = 10
PING_INTERVAL = 60
HANDSHAKE_TIMEOUT = 30
HANDSHAKE_TIMEOUT = 5
UPDATE_TIME_INTERVAL = 10
HANDSHAKE_VERSION = 70002
@ -180,6 +180,12 @@ class Peer(object):
self.close()
def handshake(self, squeak_controller):
timer = HandshakeTimer(
self.close,
str(self),
)
timer.start_timer()
if self.outgoing:
local_version = self.version_pkt(squeak_controller)
self.local_version = local_version
@ -203,7 +209,8 @@ class Peer(object):
if not isinstance(verack, msg_verack):
raise Exception('Wrong message type for verack response.')
return
logger.info("HANDSHAKE COMPLETE-----------")
timer.stop_timer()
def version_pkt(self, squeak_controller):
"""Get the version message for this peer."""
@ -309,3 +316,32 @@ class MessageReceiver:
except Exception:
logger.info('Failed to receive msg from {}'.format(self))
self.stopped_event.set()
class HandshakeTimer:
"""Close the peer if handshake is not complete before timeout.
"""
def __init__(self,
close_fn,
peer_name,
):
self.close_fn = close_fn
self.peer_name = peer_name
self.timer = None
def start_timer(self):
self.timer = threading.Timer(
HANDSHAKE_TIMEOUT,
self.stop_peer,
)
self.timer.name = "handshake_timere_thread_{}".format(self.peer_name)
self.timer.start()
def stop_timer(self):
logger.info("Canceling handshake timer.")
self.timer.cancel()
def stop_peer(self):
logger.info("Closing peer from handshake timer.")
self.close_fn()

View file

@ -3,9 +3,7 @@ import socket
import threading
MIN_PEERS = 5
MAX_PEERS = 10
UPDATE_THREAD_SLEEP_TIME = 10
SOCKET_CONNECT_TIMEOUT = 5
logger = logging.getLogger(__name__)
@ -24,6 +22,7 @@ class PeerClient(object):
try:
peer_socket = socket.socket()
logger.info('Got socket to {}'.format(address))
peer_socket.settimeout(SOCKET_CONNECT_TIMEOUT)
peer_socket.connect(address)
peer_socket.setblocking(True)
self.peer_handler.handle_connection(

View file

@ -469,7 +469,7 @@ class SqueakController:
self.network_manager.connect_peer(host, port)
def connect_saved_peers(self) -> None:
peers = self.squeak_db.get_peers()
peers = self.get_autoconnect_peers()
for peer in peers:
self.network_manager.connect_peer(
peer.address.host,