mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2026-02-11 15:40:54 +00:00
fix: Peer ID verification during dial (#7)
This commit is contained in:
committed by
lla-dane
parent
58433f9b52
commit
2c03ac46ea
@ -193,6 +193,7 @@ class Swarm(Service, INetworkService):
|
|||||||
# Dial peer (connection to peer does not yet exist)
|
# Dial peer (connection to peer does not yet exist)
|
||||||
# Transport dials peer (gets back a raw conn)
|
# Transport dials peer (gets back a raw conn)
|
||||||
try:
|
try:
|
||||||
|
addr = Multiaddr(f"{addr}/p2p/{peer_id}")
|
||||||
raw_conn = await self.transport.dial(addr)
|
raw_conn = await self.transport.dial(addr)
|
||||||
except OpenConnectionError as error:
|
except OpenConnectionError as error:
|
||||||
logger.debug("fail to dial peer %s over base transport", peer_id)
|
logger.debug("fail to dial peer %s over base transport", peer_id)
|
||||||
|
|||||||
@ -263,9 +263,8 @@ class QUICTransport(ITransport):
|
|||||||
remote_peer_id = ID.from_base58(remote_peer_id)
|
remote_peer_id = ID.from_base58(remote_peer_id)
|
||||||
|
|
||||||
if remote_peer_id is None:
|
if remote_peer_id is None:
|
||||||
# TODO: Peer ID verification during dial
|
|
||||||
logger.error("Unable to derive peer id from multiaddr")
|
logger.error("Unable to derive peer id from multiaddr")
|
||||||
# raise QUICDialError("Unable to derive peer id from multiaddr")
|
raise QUICDialError("Unable to derive peer id from multiaddr")
|
||||||
quic_version = multiaddr_to_quic_version(maddr)
|
quic_version = multiaddr_to_quic_version(maddr)
|
||||||
|
|
||||||
# Get appropriate QUIC client configuration
|
# Get appropriate QUIC client configuration
|
||||||
|
|||||||
@ -72,9 +72,9 @@ def is_quic_multiaddr(maddr: multiaddr.Multiaddr) -> bool:
|
|||||||
has_ip = f"/{IP4_PROTOCOL}/" in addr_str or f"/{IP6_PROTOCOL}/" in addr_str
|
has_ip = f"/{IP4_PROTOCOL}/" in addr_str or f"/{IP6_PROTOCOL}/" in addr_str
|
||||||
has_udp = f"/{UDP_PROTOCOL}/" in addr_str
|
has_udp = f"/{UDP_PROTOCOL}/" in addr_str
|
||||||
has_quic = (
|
has_quic = (
|
||||||
addr_str.endswith(f"/{QUIC_V1_PROTOCOL}")
|
f"/{QUIC_V1_PROTOCOL}" in addr_str
|
||||||
or addr_str.endswith(f"/{QUIC_DRAFT29_PROTOCOL}")
|
or f"/{QUIC_DRAFT29_PROTOCOL}" in addr_str
|
||||||
or addr_str.endswith("/quic")
|
or "/quic" in addr_str
|
||||||
)
|
)
|
||||||
|
|
||||||
return has_ip and has_udp and has_quic
|
return has_ip and has_udp and has_quic
|
||||||
|
|||||||
@ -20,6 +20,7 @@ from examples.ping.ping import PING_LENGTH, PING_PROTOCOL_ID
|
|||||||
from libp2p import new_host
|
from libp2p import new_host
|
||||||
from libp2p.abc import INetStream
|
from libp2p.abc import INetStream
|
||||||
from libp2p.crypto.secp256k1 import create_new_key_pair
|
from libp2p.crypto.secp256k1 import create_new_key_pair
|
||||||
|
from libp2p.peer.id import ID
|
||||||
from libp2p.peer.peerinfo import info_from_p2p_addr
|
from libp2p.peer.peerinfo import info_from_p2p_addr
|
||||||
from libp2p.transport.quic.config import QUICTransportConfig
|
from libp2p.transport.quic.config import QUICTransportConfig
|
||||||
from libp2p.transport.quic.connection import QUICConnection
|
from libp2p.transport.quic.connection import QUICConnection
|
||||||
@ -146,7 +147,9 @@ class TestBasicQUICFlow:
|
|||||||
|
|
||||||
# Get server address
|
# Get server address
|
||||||
server_addrs = listener.get_addrs()
|
server_addrs = listener.get_addrs()
|
||||||
server_addr = server_addrs[0]
|
server_addr = multiaddr.Multiaddr(
|
||||||
|
f"{server_addrs[0]}/p2p/{ID.from_pubkey(server_key.public_key)}"
|
||||||
|
)
|
||||||
print(f"🔧 SERVER: Listening on {server_addr}")
|
print(f"🔧 SERVER: Listening on {server_addr}")
|
||||||
|
|
||||||
# Give server a moment to be ready
|
# Give server a moment to be ready
|
||||||
@ -282,7 +285,9 @@ class TestBasicQUICFlow:
|
|||||||
success = await listener.listen(listen_addr, nursery)
|
success = await listener.listen(listen_addr, nursery)
|
||||||
assert success
|
assert success
|
||||||
|
|
||||||
server_addr = listener.get_addrs()[0]
|
server_addr = multiaddr.Multiaddr(
|
||||||
|
f"{listener.get_addrs()[0]}/p2p/{ID.from_pubkey(server_key.public_key)}"
|
||||||
|
)
|
||||||
print(f"🔧 SERVER: Listening on {server_addr}")
|
print(f"🔧 SERVER: Listening on {server_addr}")
|
||||||
|
|
||||||
# Create client but DON'T open a stream
|
# Create client but DON'T open a stream
|
||||||
|
|||||||
Reference in New Issue
Block a user