clean-up Peer init

This commit is contained in:
SomberNight 2018-10-17 01:50:36 +02:00 committed by ThomasV
parent 25c2657680
commit 9de6028fb5
3 changed files with 16 additions and 13 deletions

View file

@ -34,6 +34,7 @@ from .lnutil import (Outpoint, LocalConfig, ChannelConfig,
get_ln_flag_pair_of_bit, privkey_to_pubkey) get_ln_flag_pair_of_bit, privkey_to_pubkey)
from .lnutil import LightningPeerConnectionClosed, HandshakeFailed from .lnutil import LightningPeerConnectionClosed, HandshakeFailed
from .lnrouter import NotFoundChanAnnouncementForUpdate, RouteEdge from .lnrouter import NotFoundChanAnnouncementForUpdate, RouteEdge
from .lntransport import LNTransport
def channel_id_from_funding_tx(funding_txid, funding_index): def channel_id_from_funding_tx(funding_txid, funding_index):
@ -190,9 +191,9 @@ def gen_msg(msg_type: str, **kwargs) -> bytes:
class Peer(PrintError): class Peer(PrintError):
def __init__(self, lnworker, peer_addr, request_initial_sync=False): def __init__(self, lnworker, peer_addr, request_initial_sync=False, transport=None):
self.initialized = asyncio.Future() self.initialized = asyncio.Future()
self.transport = None self.transport = transport
self.peer_addr = peer_addr self.peer_addr = peer_addr
self.lnworker = lnworker self.lnworker = lnworker
self.privkey = lnworker.node_keypair.privkey self.privkey = lnworker.node_keypair.privkey
@ -222,6 +223,11 @@ class Peer(PrintError):
self.transport.send_bytes(gen_msg(message_name, **kwargs)) self.transport.send_bytes(gen_msg(message_name, **kwargs))
async def initialize(self): async def initialize(self):
if not self.transport:
reader, writer = await asyncio.open_connection(self.peer_addr.host, self.peer_addr.port)
transport = LNTransport(self.privkey, self.peer_addr.pubkey, reader, writer)
await transport.handshake()
self.transport = transport
self.send_message("init", gflen=0, lflen=1, localfeatures=self.localfeatures) self.send_message("init", gflen=0, lflen=1, localfeatures=self.localfeatures)
self.initialized.set_result(True) self.initialized.set_result(True)

View file

@ -6,6 +6,7 @@ from .crypto import sha256
from .lnutil import get_ecdh, privkey_to_pubkey from .lnutil import get_ecdh, privkey_to_pubkey
from .lnutil import LightningPeerConnectionClosed, HandshakeFailed from .lnutil import LightningPeerConnectionClosed, HandshakeFailed
from . import ecc from . import ecc
from .util import bh2u
class HandshakeState(object): class HandshakeState(object):
prologue = b"lightning" prologue = b"lightning"
@ -203,7 +204,7 @@ class LNTransport(LNTransportBase):
self.writer.write(msg) self.writer.write(msg)
rspns = await self.reader.read(2**10) rspns = await self.reader.read(2**10)
if len(rspns) != 50: if len(rspns) != 50:
raise HandshakeFailed("Lightning handshake act 1 response has bad length, are you sure this is the right pubkey? " + str(bh2u(self.pubkey))) raise HandshakeFailed(f"Lightning handshake act 1 response has bad length, are you sure this is the right pubkey? {bh2u(self.remote_pubkey)}")
hver, alice_epub, tag = rspns[0], rspns[1:34], rspns[34:] hver, alice_epub, tag = rspns[0], rspns[1:34], rspns[34:]
if bytes([hver]) != hs.handshake_version: if bytes([hver]) != hs.handshake_version:
raise HandshakeFailed("unexpected handshake version: {}".format(hver)) raise HandshakeFailed("unexpected handshake version: {}".format(hver))

View file

@ -16,7 +16,7 @@ from . import bitcoin
from .keystore import BIP32_KeyStore from .keystore import BIP32_KeyStore
from .bitcoin import sha256, COIN from .bitcoin import sha256, COIN
from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address, log_exceptions from .util import bh2u, bfh, PrintError, InvoiceError, resolve_dns_srv, is_ip_address, log_exceptions
from .lntransport import LNTransport, LNResponderTransport from .lntransport import LNResponderTransport
from .lnbase import Peer from .lnbase import Peer
from .lnaddr import lnencode, LnAddr, lndecode from .lnaddr import lnencode, LnAddr, lndecode
from .ecc import der_sig_from_sig_string from .ecc import der_sig_from_sig_string
@ -116,13 +116,7 @@ class LNWorker(PrintError):
self._last_tried_peer[peer_addr] = time.time() self._last_tried_peer[peer_addr] = time.time()
self.print_error("adding peer", peer_addr) self.print_error("adding peer", peer_addr)
peer = Peer(self, peer_addr, request_initial_sync=self.config.get("request_initial_sync", True)) peer = Peer(self, peer_addr, request_initial_sync=self.config.get("request_initial_sync", True))
async def _init_peer(): await self.network.main_taskgroup.spawn(peer.main_loop())
reader, writer = await asyncio.open_connection(peer_addr.host, peer_addr.port)
transport = LNTransport(self.node_keypair.privkey, node_id, reader, writer)
await transport.handshake()
peer.transport = transport
await self.network.main_taskgroup.spawn(peer.main_loop())
asyncio.ensure_future(_init_peer())
self.peers[node_id] = peer self.peers[node_id] = peer
self.network.trigger_callback('ln_status') self.network.trigger_callback('ln_status')
return peer return peer
@ -525,8 +519,10 @@ class LNWorker(PrintError):
async def cb(reader, writer): async def cb(reader, writer):
t = LNResponderTransport(self.node_keypair.privkey, reader, writer) t = LNResponderTransport(self.node_keypair.privkey, reader, writer)
node_id = await t.handshake() node_id = await t.handshake()
peer = Peer(self, LNPeerAddr("bogus", 1337, node_id), request_initial_sync=self.config.get("request_initial_sync", True)) # FIXME extract host and port from transport
peer.transport = t peer = Peer(self, LNPeerAddr("bogus", 1337, node_id),
request_initial_sync=self.config.get("request_initial_sync", True),
transport=t)
self.peers[node_id] = peer self.peers[node_id] = peer
await self.network.main_taskgroup.spawn(peer.main_loop()) await self.network.main_taskgroup.spawn(peer.main_loop())
self.network.trigger_callback('ln_status') self.network.trigger_callback('ln_status')