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
This commit is contained in:
Jonathan Zernik 2021-08-28 02:42:37 -07:00 committed by GitHub
parent 40aa8e16dd
commit dfba41a909
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 6 deletions

View file

@ -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,

View file

@ -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)

View file

@ -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(