mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2025-12-31 20:36:24 +00:00
- Implemented full WSS support with TLS configuration - Added handshake timeout and connection state tracking - Created comprehensive test suite with 13+ WSS unit tests - Added Python-to-Python WebSocket peer-to-peer tests - Implemented multiaddr parsing for /ws, /wss, /tls/ws formats - Added connection state tracking and concurrent close handling - Created standalone WebSocket client for testing - Fixed circular import issues with multiaddr utilities - Added debug tools for WebSocket URL testing All WebSocket transport functionality is complete and working. Tests demonstrate WebSocket transport works correctly at the transport layer. Higher-level libp2p protocol compatibility issues remain (same as JS interop).
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Debug script to test WebSocket URL construction and basic connection.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from multiaddr import Multiaddr
|
|
|
|
from libp2p.transport.websocket.multiaddr_utils import parse_websocket_multiaddr
|
|
|
|
# Configure logging
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def test_websocket_url():
|
|
"""Test WebSocket URL construction."""
|
|
# Test multiaddr from your JS node
|
|
maddr_str = "/ip4/127.0.0.1/tcp/35391/ws/p2p/12D3KooWQh7p5xP2ppr3CrhUFsawmsKNe9jgDbacQdWCYpuGfMVN"
|
|
maddr = Multiaddr(maddr_str)
|
|
|
|
logger.info(f"Testing multiaddr: {maddr}")
|
|
|
|
# Parse WebSocket multiaddr
|
|
parsed = parse_websocket_multiaddr(maddr)
|
|
logger.info(
|
|
f"Parsed: is_wss={parsed.is_wss}, sni={parsed.sni}, rest_multiaddr={parsed.rest_multiaddr}"
|
|
)
|
|
|
|
# Construct WebSocket URL
|
|
if parsed.is_wss:
|
|
protocol = "wss"
|
|
else:
|
|
protocol = "ws"
|
|
|
|
# Extract host and port from rest_multiaddr
|
|
host = parsed.rest_multiaddr.value_for_protocol("ip4")
|
|
port = parsed.rest_multiaddr.value_for_protocol("tcp")
|
|
|
|
websocket_url = f"{protocol}://{host}:{port}/"
|
|
logger.info(f"WebSocket URL: {websocket_url}")
|
|
|
|
# Test basic WebSocket connection
|
|
try:
|
|
from trio_websocket import open_websocket_url
|
|
|
|
logger.info("Testing basic WebSocket connection...")
|
|
async with open_websocket_url(websocket_url) as ws:
|
|
logger.info("✅ WebSocket connection successful!")
|
|
# Send a simple message
|
|
await ws.send_message(b"test")
|
|
logger.info("✅ Message sent successfully!")
|
|
|
|
except Exception as e:
|
|
logger.error(f"❌ WebSocket connection failed: {e}")
|
|
import traceback
|
|
|
|
logger.error(f"Traceback: {traceback.format_exc()}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import trio
|
|
|
|
trio.run(test_websocket_url)
|