aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
index 717a27a..8402633 100644
--- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
+++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
@@ -4631,6 +4631,10 @@ class WebRTCTransport:
"""
from aiortc import RTCIceServer, RTCConfiguration
+ # aiortc keeps only the first STUN entry it sees here; the actual
+ # multi-server fan-out is done by transport/stun_multi, which patches
+ # aioice. The full list is still passed so a one-server deploy and the
+ # tests that read `_stun` stay coherent.
config = RTCConfiguration(
iceServers=[RTCIceServer(urls=s) for s in self._stun] if self._stun else []
)
@@ -4666,10 +4670,17 @@ class WebRTCTransport:
offer = RTCSessionDescription(sdp=offer_sdp, type="offer")
await pc.setRemoteDescription(offer)
answer = await pc.createAnswer()
+ gather_start = time.monotonic()
await pc.setLocalDescription(answer)
- log.info("WebRTC answer ready for peer=%s", peer_id)
- return pc.localDescription.sdp, []
+ # ICE gathering runs inside setLocalDescription (non-trickle). A slow or
+ # unreachable STUN server shows up here as seconds of wait and zero
+ # srflx lines — the symptom the multi-server fan-out exists to prevent.
+ answer_sdp = pc.localDescription.sdp
+ srflx = answer_sdp.count(" typ srflx")
+ log.info("WebRTC answer ready for peer=%s (ICE gather %.2fs, %d srflx)",
+ peer_id, time.monotonic() - gather_start, srflx)
+ return answer_sdp, []
async def close_peer(self, peer_id: str) -> None:
session = self._sessions.pop(peer_id, None)