Feat/587-circuit-relay (#611)

* feat: implemented setup of circuit relay and test cases

* chore: remove test files to be rewritten

* added 1 test suite for protocol

* added 1 test suite for discovery

* fixed protocol timeouts and message types to handle reservations and stream operations.

* Resolved merge conflict in libp2p/tools/utils.py by combining timeout approach with retry mechanism

* fix: linting issues

* docs: updated documentation with circuit-relay

* chore: added enums, improved typing, security and examples

* fix: created proper __init__ file to ensure importability

* fix: replace transport_opt with listen_addrs in examples, fixed typing and improved code

* fix type checking issues across relay module and test suite

* regenerated circuit_pb2 file protobuf version 3

* fixed circuit relay example and moved imports to top in test_security_multistream

* chore: moved imports to the top

* chore: fixed linting of test_circuit_v2_transport.py

---------

Co-authored-by: Manu Sheel Gupta <manusheel.edu@gmail.com>
This commit is contained in:
Soham Bhoir
2025-06-19 03:09:39 +05:30
committed by GitHub
parent 79094d70d3
commit 66bd027161
25 changed files with 4432 additions and 9 deletions

View File

@ -13,6 +13,8 @@ from libp2p.security.secio.transport import ID as SECIO_PROTOCOL_ID
from libp2p.security.secure_session import (
SecureSession,
)
from libp2p.stream_muxer.mplex.mplex import Mplex
from libp2p.stream_muxer.yamux.yamux import Yamux
from tests.utils.factories import (
host_pair_factory,
)
@ -47,9 +49,28 @@ async def perform_simple_test(assertion_func, security_protocol):
assert conn_0 is not None, "Failed to establish connection from host0 to host1"
assert conn_1 is not None, "Failed to establish connection from host1 to host0"
# Perform assertion
assertion_func(conn_0.muxed_conn.secured_conn)
assertion_func(conn_1.muxed_conn.secured_conn)
# Extract the secured connection from either Mplex or Yamux implementation
def get_secured_conn(conn):
muxed_conn = conn.muxed_conn
# Direct attribute access for known implementations
has_secured_conn = hasattr(muxed_conn, "secured_conn")
if isinstance(muxed_conn, (Mplex, Yamux)) and has_secured_conn:
return muxed_conn.secured_conn
# Fallback to _connection attribute if it exists
elif hasattr(muxed_conn, "_connection"):
return muxed_conn._connection
# Last resort - warn but return the muxed_conn itself for type checking
else:
print(f"Warning: Cannot find secured connection in {type(muxed_conn)}")
return muxed_conn
# Get secured connections for both peers
secured_conn_0 = get_secured_conn(conn_0)
secured_conn_1 = get_secured_conn(conn_1)
# Perform assertion on the secured connections
assertion_func(secured_conn_0)
assertion_func(secured_conn_1)
@pytest.mark.trio