relay over ws supossedly working
This commit is contained in:
@@ -35,13 +35,32 @@ def _get_json(url: str, timeout: float = 10.0) -> dict:
|
||||
return json.loads(r.read())
|
||||
|
||||
|
||||
def _infer_relay_url_from_tracker(tracker_url: str) -> str | None:
|
||||
"""Infer relay WebSocket URL from a public HTTPS tracker origin.
|
||||
|
||||
Public deployments colocate relay at /ws on the same host as the tracker API
|
||||
(see QUICKSTART nginx layout). Local LAN trackers use a separate relay port
|
||||
and must advertise relay_url explicitly via /v1/network/map.
|
||||
"""
|
||||
parsed = urllib.parse.urlparse(tracker_url)
|
||||
if parsed.scheme != "https":
|
||||
return None
|
||||
host = parsed.hostname
|
||||
if not host or host in ("127.0.0.1", "localhost"):
|
||||
return None
|
||||
return f"wss://{parsed.netloc}/ws"
|
||||
|
||||
|
||||
def _discover_relay_url(tracker_url: str) -> str | None:
|
||||
relay_url: str | None = None
|
||||
try:
|
||||
network_map = _get_json(f"{tracker_url}/v1/network/map", timeout=5.0)
|
||||
raw = network_map.get("relay_url")
|
||||
if isinstance(raw, str) and raw:
|
||||
relay_url = raw
|
||||
except Exception:
|
||||
return None
|
||||
relay_url = network_map.get("relay_url")
|
||||
return relay_url if isinstance(relay_url, str) and relay_url else None
|
||||
pass
|
||||
return relay_url or _infer_relay_url_from_tracker(tracker_url)
|
||||
|
||||
|
||||
def _start_relay_bridge_if_available(
|
||||
@@ -49,8 +68,9 @@ def _start_relay_bridge_if_available(
|
||||
wallet_address: str,
|
||||
local_base_url: str,
|
||||
advertised_endpoint: str,
|
||||
relay_url: str | None = None,
|
||||
) -> tuple[RelayHttpBridge | None, dict]:
|
||||
relay_url = _discover_relay_url(tracker_url)
|
||||
relay_url = relay_url or _discover_relay_url(tracker_url)
|
||||
if not relay_url:
|
||||
return None, {}
|
||||
peer_id = peer_id_from_wallet(wallet_address)
|
||||
@@ -222,7 +242,8 @@ def _warn_virtual_network_ip(ip: str | None) -> None:
|
||||
f" This range is used by Docker, WSL2, and virtual machines and is\n"
|
||||
f" NOT reachable from other physical machines on your LAN.\n"
|
||||
f" Cross-host pipeline hops WILL time out.\n"
|
||||
f" Fix: pass --advertise-host <your-LAN-ip> (e.g. 192.168.x.x).\n",
|
||||
f" Fix: use a public tracker with relay (wss://…/ws), or pass\n"
|
||||
f" --advertise-host <your-LAN-ip> (e.g. 192.168.x.x).\n",
|
||||
flush=True,
|
||||
)
|
||||
except Exception:
|
||||
@@ -260,6 +281,7 @@ def run_startup(
|
||||
"""
|
||||
|
||||
tracker_url = tracker_url.rstrip("/")
|
||||
relay_url = _discover_relay_url(tracker_url)
|
||||
|
||||
# 1. Hardware detection
|
||||
if advertise_host is None and host == "0.0.0.0":
|
||||
@@ -275,7 +297,10 @@ def run_startup(
|
||||
except Exception:
|
||||
advertise_host = socket.getfqdn()
|
||||
|
||||
_warn_virtual_network_ip(advertise_host)
|
||||
if relay_url:
|
||||
print(f"Relay advertised by tracker — using outbound tunnel {relay_url}", flush=True)
|
||||
else:
|
||||
_warn_virtual_network_ip(advertise_host)
|
||||
|
||||
print("Detecting hardware...", flush=True)
|
||||
hw = detect_hardware()
|
||||
@@ -361,6 +386,7 @@ def run_startup(
|
||||
address,
|
||||
local_base_url,
|
||||
endpoint,
|
||||
relay_url=relay_url,
|
||||
)
|
||||
_attach_relay_bridge(node, relay_bridge)
|
||||
# Register with tracker so other nodes can auto-join this model.
|
||||
@@ -451,6 +477,7 @@ def run_startup(
|
||||
address,
|
||||
local_base_url,
|
||||
endpoint,
|
||||
relay_url=relay_url,
|
||||
)
|
||||
_attach_relay_bridge(node, relay_bridge)
|
||||
auto_reg_payload = {
|
||||
@@ -548,6 +575,7 @@ def run_startup(
|
||||
address,
|
||||
local_base_url,
|
||||
endpoint,
|
||||
relay_url=relay_url,
|
||||
)
|
||||
_attach_relay_bridge(node, relay_bridge)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user