summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/meshbay-draft-v6.md12
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/node-page.js2
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/transport.js3
-rw-r--r--packages/meshbay-node/src/meshbay_node/config.py4
4 files changed, 14 insertions, 7 deletions
diff --git a/docs/meshbay-draft-v6.md b/docs/meshbay-draft-v6.md
index 2f2d5c7..180050c 100644
--- a/docs/meshbay-draft-v6.md
+++ b/docs/meshbay-draft-v6.md
@@ -63,7 +63,7 @@
| 12 | Group registry | A group name is **unique per owner account**, not globally; the group's identity is still its UUID. Listed everywhere as `name@owner` | §2.9 |
| 13 | Enrichment | **Chat link previews** — the node unfurls a pasted URL into an OpenGraph card. A new instance of the §2.7 "node on demand, asking device caches, nothing durable" rule; new SSRF surface, gated. MNP 0.12 | §2.10 |
| 14 | Node page | The Node page (D5) **exposes five `[node]` settings** — TTLs for invitations, pairing and device requests, the concurrent stream cap, and the transcode toggle. Editable from the panel, persisted in both `roster.db` and `node.toml` | §2.11 |
-| 15 | Transport | WebRTC ICE gathering uses **four public STUN servers** instead of one, configurable on the node side. ICE interface filtering is exposed on the Node page. Both follow the §2.11 persistence pattern | reliability — single-server STUN was a silent SPOF, §2.12 |
+| 15 | Transport | WebRTC ICE gathering uses **several public STUN servers** (three as of 2026-09-04) instead of one, configurable on the node side. ICE interface filtering is exposed on the Node page. Both follow the §2.11 persistence pattern | reliability — single-server STUN was a silent SPOF, §2.12 |
---
@@ -418,20 +418,24 @@ The WebRTC transport relied on a single hardcoded Google STUN server
ICE gathering waited the full 4-second timeout before completing — a silent single point
of failure that added seconds to every connection.
-**Four default servers, two providers deep.**
+**Three default servers, two providers deep.**
```
stun:stun.l.google.com:19302
stun:stun1.l.google.com:19302
stun:stun.cloudflare.com:3478
-stun:stun.services.mozilla.com:3478
```
-Both browser (`transport.js`) and node (`webrtc_server.py`) carry the same four defaults.
+Both browser (`transport.js`) and node (`config.py`) carry the same three defaults.
The two sides gather ICE candidates independently and exchange them via SDP through the
hub — they do not need to use the same STUN server, and neither learns which server the
other used.
+> **Amended 2026-09-04:** a fourth default, `stun:stun.services.mozilla.com:3478`,
+> was dropped — Mozilla retired the service and the name no longer resolves, so
+> every gather waited out its DNS timeout. Google and Cloudflare still give
+> two-provider coverage.
+
**Node-side configuration.** The node's STUN list is editable three ways: the Node page
(a dedicated section with add, remove, reorder, save and reset-to-defaults), the CLI
(`meshbay-node stun list|add|remove|reset`), and `node.toml` (`stun_servers` under
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/node-page.js b/packages/meshbay-hub/src/meshbay_hub/static/node-page.js
index 8df4c9d..a2d3e49 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/node-page.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/node-page.js
@@ -383,11 +383,11 @@ export function NodePage({ groups }) {
}, []);
const resetStunDefaults = useCallback(() => {
+ // Keep in step with meshbay_node.config.DEFAULT_STUN_SERVERS.
setEditStun([
'stun:stun.l.google.com:19302',
'stun:stun1.l.google.com:19302',
'stun:stun.cloudflare.com:3478',
- 'stun:stun.services.mozilla.com:3478',
]);
setActionMsg('');
}, []);
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/transport.js b/packages/meshbay-hub/src/meshbay_hub/static/transport.js
index 809bb83..ea1e70a 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/transport.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/transport.js
@@ -147,7 +147,8 @@ const STUN_URLS = [
'stun:stun.l.google.com:19302',
'stun:stun1.l.google.com:19302',
'stun:stun.cloudflare.com:3478',
- 'stun:stun.services.mozilla.com:3478',
+ // Mozilla retired stun.services.mozilla.com; the name no longer resolves.
+ // Google + Cloudflare still cover a single-provider outage.
];
let _iceServersPromise = null;
function iceServers() {
diff --git a/packages/meshbay-node/src/meshbay_node/config.py b/packages/meshbay-node/src/meshbay_node/config.py
index a5220cd..0e5a7de 100644
--- a/packages/meshbay-node/src/meshbay_node/config.py
+++ b/packages/meshbay-node/src/meshbay_node/config.py
@@ -24,7 +24,9 @@ DEFAULT_STUN_SERVERS: list[str] = [
"stun:stun.l.google.com:19302",
"stun:stun1.l.google.com:19302",
"stun:stun.cloudflare.com:3478",
- "stun:stun.services.mozilla.com:3478",
+ # stun.services.mozilla.com was here — Mozilla retired it, the name no
+ # longer resolves, and each gather waited out its DNS timeout. Two
+ # providers (Google, Cloudflare) still cover a single-provider outage.
]
DEFAULT_CONFIG_PATH = config_dir() / "node.toml"