aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/transport/quic_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/transport/quic_server.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/transport/quic_server.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/quic_server.py b/packages/meshbay-node/src/meshbay_node/transport/quic_server.py
index 360b9ac..284b488 100644
--- a/packages/meshbay-node/src/meshbay_node/transport/quic_server.py
+++ b/packages/meshbay-node/src/meshbay_node/transport/quic_server.py
@@ -23,6 +23,7 @@ import logging
import os
import struct
import subprocess
+import uuid
from pathlib import Path
from typing import Any, Callable
@@ -207,6 +208,9 @@ class _MNPServerProtocol(QuicConnectionProtocol):
def __init__(self, *args, node_ctx: dict, **kwargs):
super().__init__(*args, **kwargs)
self._ctx = node_ctx # shared server context (keys, index, etc.)
+ # Per connection, never per account — one person may hold several
+ # devices. See webrtc_server.WebRTCPeerSession._registry_key.
+ self._registry_key: str = uuid.uuid4().hex
self._user_id: str | None = None
self._group_id: str | None = None
self._buffers: dict[int, _StreamBuffer] = {}
@@ -362,7 +366,7 @@ class _MNPServerProtocol(QuicConnectionProtocol):
self._user_id = peer.user_id
self._group_id = peer.group_id
- self._peer_registry()[self._user_id] = self
+ self._peer_registry()[self._registry_key] = self
transcript = handshake_transcript(
ROLE_NODE, peer.group_id, self._nonce_client, self._gek_challenge, binding)
@@ -507,8 +511,10 @@ class _MNPServerProtocol(QuicConnectionProtocol):
"thread_id": msg.get("thread_id"),
"group_id": self._group_id or "",
}
- for uid, proto in list(self._peer_registry().items()):
- if uid != self._user_id and proto is not self:
+ # Per connection, not per account — see the WebRTC path and
+ # docs/chat-sender-keys.md F7. A person's other devices are recipients.
+ for proto in list(self._peer_registry().values()):
+ if proto is not self:
try:
proto._send(0, broadcast)
except Exception:
@@ -518,7 +524,7 @@ class _MNPServerProtocol(QuicConnectionProtocol):
def connection_lost(self, exc) -> None:
if self._user_id:
- self._peer_registry().pop(self._user_id, None)
+ self._peer_registry().pop(self._registry_key, None)
for task in list(self._tasks):
task.cancel()
super().connection_lost(exc)