From dfba41a9092856098cc0ef75ef6ee91f28ff1362 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Sat, 28 Aug 2021 02:42:37 -0700 Subject: [PATCH] Share addrs with peer (#1090) * Share addrs with peer on connection initial sync * Add TODO comments on handling addr and getaddr * Add TODO comments on setting stop event in connection class --- squeaknode/network/connection.py | 8 +++++++- squeaknode/network/peer_message_handler.py | 17 +++++++++++++---- squeaknode/node/squeak_controller.py | 3 ++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/squeaknode/network/connection.py b/squeaknode/network/connection.py index da9eb114..713ef60b 100644 --- a/squeaknode/network/connection.py +++ b/squeaknode/network/connection.py @@ -23,6 +23,7 @@ import logging import threading from contextlib import contextmanager +from squeak.messages import msg_getaddr from squeak.messages import msg_subscribe from squeaknode.network.peer import Peer @@ -57,13 +58,14 @@ class Connection(object): logger.info("Removing peer.") connection_manager.remove_peer(self.peer) self.peer.stop() + # TODO: Set a stop event here. def handle_connection(self): self.initial_sync() self.handle_messages() def initial_sync(self): - # TODO: getaddrs from peer. + self.update_addrs() self.update_subscription() def update_subscription(self): @@ -73,6 +75,10 @@ class Connection(object): ) self.peer.send_msg(subscribe_msg) + def update_addrs(self): + getaddr_msg = msg_getaddr() + self.peer.send_msg(getaddr_msg) + def start_receiving_msgs(self): threading.Thread( target=self.peer.recv_msgs, diff --git a/squeaknode/network/peer_message_handler.py b/squeaknode/network/peer_message_handler.py index 22532760..629bb133 100644 --- a/squeaknode/network/peer_message_handler.py +++ b/squeaknode/network/peer_message_handler.py @@ -31,6 +31,7 @@ from squeak.messages import msg_squeak from squeak.net import CInv from squeaknode.core.offer import Offer +from squeaknode.core.peer_address import PeerAddress from squeaknode.node.squeak_controller import SqueakController @@ -102,13 +103,21 @@ class PeerMessageHandler: self.peer.set_pong_response(msg.nonce) def handle_addr(self, msg): + # TODO: Save new address in table rather than connecting. for addr in msg.addrs: - self.peer_server.connect_address((addr.ip, addr.port)) + peer_address = PeerAddress( + host=addr.ip, + port=addr.port, + ) + self.squeak_controller.connect_peer(peer_address) def handle_getaddr(self, msg): - peers = self.node.get_peers() - addresses = [peer.caddress for peer in peers - if peer.outgoing] + # TODO: Get known peers from table in database. + peers = self.squeak_controller.get_connected_peers() + addresses = [ + peer.remote_caddress for peer in peers + if peer.remote_caddress != self.peer.remote_caddress + ] addr_msg = msg_addr(addrs=addresses) self.peer.send_msg(addr_msg) diff --git a/squeaknode/node/squeak_controller.py b/squeaknode/node/squeak_controller.py index 72e4eab1..5b958577 100644 --- a/squeaknode/node/squeak_controller.py +++ b/squeaknode/node/squeak_controller.py @@ -49,6 +49,7 @@ from squeaknode.core.squeak_entry import SqueakEntry from squeaknode.core.squeak_peer import SqueakPeer from squeaknode.core.squeak_profile import SqueakProfile from squeaknode.core.util import is_address_valid +from squeaknode.network.peer import Peer from squeaknode.node.listener_subscription_client import EventListener from squeaknode.node.received_payments_subscription_client import ReceivedPaymentsSubscriptionClient @@ -507,7 +508,7 @@ class SqueakController: def get_connected_peer(self, peer_address: PeerAddress): return self.network_manager.get_connected_peer(peer_address) - def get_connected_peers(self): + def get_connected_peers(self) -> List[Peer]: return self.network_manager.get_connected_peers() def lookup_squeaks_for_interest(