mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-14 12:43:24 +02:00
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:
parent
f9197f7035
commit
eb622a8aee
12 changed files with 56 additions and 18 deletions
|
|
@ -74,6 +74,9 @@ export default function PeerPage() {
|
|||
<p>
|
||||
Peer name: {peer.getPeerName()}
|
||||
</p>
|
||||
<p>
|
||||
Address: {peer.getHost()}:{peer.getPort()}
|
||||
</p>
|
||||
{PeerSettingsForm()}
|
||||
{DeletePeerButton()}
|
||||
</>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
@ -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",
|
||||
|
|
@ -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
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue