Skip to content

Commit 19b6bb9

Browse files
committed
vet introducer IPs
1 parent 8351468 commit 19b6bb9

File tree

1 file changed

+40
-2
lines changed

1 file changed

+40
-2
lines changed

src/introducer.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@
99
from src.server.server import ChiaServer
1010
from src.util.api_decorators import api_request
1111

12+
import asyncio
13+
14+
import logging
15+
log = logging.getLogger(__name__)
1216

1317
class Introducer:
1418
def __init__(self):
1519
config_filename = os.path.join(ROOT_DIR, "config", "config.yaml")
1620
self.config = yaml.safe_load(open(config_filename, "r"))["introducer"]
21+
self.vetted: Dict[bytes32, bool] = {}
1722

1823
def set_server(self, server: ChiaServer):
1924
self.server = server
@@ -23,8 +28,41 @@ async def request_peers(
2328
self, request: RequestPeers
2429
) -> AsyncGenerator[OutboundMessage, None]:
2530
max_peers = self.config["max_peers_to_send"]
26-
peers = self.server.global_connections.peers.get_peers(
27-
max_peers, True, self.config["recent_peer_threshold"]
31+
rawpeers = self.server.global_connections.peers.get_peers(
32+
max_peers*2, True, self.config["recent_peer_threshold"]
2833
)
34+
35+
peers = []
36+
37+
for peer in rawpeers:
38+
if peer.get_hash() not in self.vetted:
39+
try:
40+
r, w = await asyncio.open_connection(
41+
peer.host, int(peer.port)
42+
)
43+
w.close()
44+
except (
45+
ConnectionRefusedError,
46+
TimeoutError,
47+
OSError,
48+
asyncio.TimeoutError,
49+
) as e:
50+
log.warning(
51+
f"Could not vet {peer}. {type(e)}{str(e)}"
52+
)
53+
self.vetted[peer.get_hash()] = False
54+
continue
55+
56+
log.info(f"Have vetted {peer} successfully!")
57+
self.vetted[peer.get_hash()] = True
58+
59+
if self.vetted[peer.get_hash()]:
60+
peers.append(peer)
61+
62+
if len(peers)>=max_peers:
63+
break
64+
65+
log.info(f"Sending vetted {peers}")
66+
2967
msg = Message("peers", Peers(peers))
3068
yield OutboundMessage(NodeType.FULL_NODE, msg, Delivery.RESPOND)

0 commit comments

Comments
 (0)