diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-30 22:36:56 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-30 22:36:56 +0200 |
| commit | 2d6c276734fd19f80edf84cdb95f91a929df6365 (patch) | |
| tree | 41a697eb9c048218e0d800cbcb7fa39f4ede2b1d /packages/meshbay-node/src/meshbay_node/roster.py | |
| parent | 07e6e4271ea3a45e9cd364eb6ec05801a653d9e8 (diff) | |
| download | meshbay-2d6c276734fd19f80edf84cdb95f91a929df6365.tar.gz | |
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 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/roster.py')
| -rw-r--r-- | packages/meshbay-node/src/meshbay_node/roster.py | 22 |
1 files changed, 13 insertions, 9 deletions
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, |