todo: parse listen_addrs to set transport in SwarmBuilder (#616)

This commit is contained in:
Abhinav Agarwalla
2025-05-26 06:27:30 +05:30
committed by GitHub
parent 386f0a2299
commit 481be5d63d
4 changed files with 43 additions and 3 deletions

View File

@ -1,5 +1,6 @@
from collections.abc import (
Mapping,
Sequence,
)
from importlib.metadata import version as __version
from typing import (
@ -9,6 +10,8 @@ from typing import (
cast,
)
import multiaddr
from libp2p.abc import (
IHost,
IMuxedConn,
@ -154,6 +157,7 @@ def new_swarm(
sec_opt: Optional[TSecurityOptions] = None,
peerstore_opt: Optional[IPeerStore] = None,
muxer_preference: Optional[Literal["YAMUX", "MPLEX"]] = None,
listen_addrs: Optional[Sequence[multiaddr.Multiaddr]] = None,
) -> INetworkService:
"""
Create a swarm instance based on the parameters.
@ -163,6 +167,7 @@ def new_swarm(
:param sec_opt: optional choice of security upgrade
:param peerstore_opt: optional peerstore
:param muxer_preference: optional explicit muxer preference
:param listen_addrs: optional list of multiaddrs to listen on
:return: return a default swarm instance
Note: Yamux (/yamux/1.0.0) is the preferred stream multiplexer
@ -175,8 +180,16 @@ def new_swarm(
id_opt = generate_peer_id_from(key_pair)
# TODO: Parse `listen_addrs` to determine transport
transport = TCP()
if listen_addrs is None:
transport = TCP()
else:
addr = listen_addrs[0]
if addr.__contains__("tcp"):
transport = TCP()
elif addr.__contains__("quic"):
raise ValueError("QUIC not yet supported")
else:
raise ValueError(f"Unknown transport in listen_addrs: {listen_addrs}")
# Generate X25519 keypair for Noise
noise_key_pair = create_new_x25519_key_pair()
@ -229,6 +242,7 @@ def new_host(
peerstore_opt: Optional[IPeerStore] = None,
disc_opt: Optional[IPeerRouting] = None,
muxer_preference: Optional[Literal["YAMUX", "MPLEX"]] = None,
listen_addrs: Sequence[multiaddr.Multiaddr] = None,
) -> IHost:
"""
Create a new libp2p host based on the given parameters.
@ -239,6 +253,7 @@ def new_host(
:param peerstore_opt: optional peerstore
:param disc_opt: optional discovery
:param muxer_preference: optional explicit muxer preference
:param listen_addrs: optional list of multiaddrs to listen on
:return: return a host instance
"""
swarm = new_swarm(
@ -247,6 +262,7 @@ def new_host(
sec_opt=sec_opt,
peerstore_opt=peerstore_opt,
muxer_preference=muxer_preference,
listen_addrs=listen_addrs,
)
if disc_opt is not None: