From 2d6c276734fd19f80edf84cdb95f91a929df6365 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Sun, 30 Aug 2026 22:36:56 +0200 Subject: feat(ui): configurable ICE interfaces in the Node page The ice_interfaces setting (auto-exclude vs explicit whitelist) is now editable from the Node page, persisted via the settings API and roster, and hot-swapped at runtime by re-installing the aioice filter. Co-Authored-By: Claude Opus 4.6 --- packages/meshbay-node/src/meshbay_node/roster.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'packages/meshbay-node/src/meshbay_node/roster.py') diff --git a/packages/meshbay-node/src/meshbay_node/roster.py b/packages/meshbay-node/src/meshbay_node/roster.py index 5bdb5ee..5af2b55 100644 --- a/packages/meshbay-node/src/meshbay_node/roster.py +++ b/packages/meshbay-node/src/meshbay_node/roster.py @@ -765,6 +765,7 @@ class Roster: SETTING_MAX_STREAMS = "max_concurrent_streams" SETTING_TRANSCODE = "transcode_incompatible_video" SETTING_STUN_SERVERS = "stun_servers" + SETTING_ICE_INTERFACES = "ice_interfaces" async def node_settings(self, defaults: dict) -> dict: """Current effective settings: roster override if present, else config default.""" @@ -785,15 +786,18 @@ class Roster: result[key] = int(stored) else: result[key] = defaults.get(key) - stored = await self.get_setting(self.NODE_WIDE_GROUP_ID, - self.SETTING_STUN_SERVERS) - if stored is not None: - try: - result["stun_servers"] = _json.loads(stored) - except (ValueError, TypeError): - result["stun_servers"] = defaults.get("stun_servers", []) - else: - result["stun_servers"] = defaults.get("stun_servers", []) + for list_key, setting in [ + ("stun_servers", self.SETTING_STUN_SERVERS), + ("ice_interfaces", self.SETTING_ICE_INTERFACES), + ]: + stored = await self.get_setting(self.NODE_WIDE_GROUP_ID, setting) + if stored is not None: + try: + result[list_key] = _json.loads(stored) + except (ValueError, TypeError): + result[list_key] = defaults.get(list_key, []) + else: + result[list_key] = defaults.get(list_key, []) return result async def set_node_setting(self, key: str, value: str, -- cgit v1.2.3