Repository navigation
Desktop multiplexer: recordings the OpenFrame uploader accepts, orphan multiplexers disposed - #218
Merged
Merged
Conversation
Author
🦩 Flamingo Code Review✅ No findings on the current head. Advisory: findings do not block the merge. 2 possible problems checked and ruled out, 1 after reading more of the repository
Review again. New commits are not reviewed until you ask:
Or comment Started 2026-10-08 10:21 UTC · updated 2026-10-08 10:23 UTC · workflow run |
…s, orphan multiplexers disposed With settings.desktopMultiplex on, the multiplexer wrote desktopSession-<ts>-<nodeHash>.mcrec with no sessionid/userid, so the OpenFrame uploader skipped every file and nothing registered. The file is now relaysession-<domain>-<UTC>-<user>-<device>-<relayId>.mcrec and the header carries sessionid (the relay id of the peer that created the multiplexer, i.e. the technician's <requestId>.2.<nonce>), userid and username, so the upload key, the per-request bucket listing and the player work unchanged. A multiplexer whose session never starts no longer outlives it: the last viewer leaving disposes it even when no agent arrived, a viewer-less one that never started is replaced when a relay under another id reaches the device, and its header-only recording is deleted instead of published. Before, such a leftover caught the next session on the device and recorded it under the stale id. Also: a viewer's cmd 82 request is answered from the cache to that viewer instead of being sent back to the agent; a viewer's cmd 11 (display list) request is forwarded to the agent as on a plain relay; a second agent tunnel on the same device is closed instead of staying attached to nothing.
mikhailm-coder
force-pushed
the
hotfix/mesh-desktop-multiplex
branch
from
October 8, 2026 13:09
15e6cdf to
89ad24e
Compare
danylo-babenko-flamingo
approved these changes
Oct 8, 2026
denys-gif
approved these changes
Oct 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes the desktop multiplexer's recordings first-class OpenFrame recordings, so
settings.desktopMultiplex: truecan be rolled out: one agent stream and one recording per device however many browsers join a session (Phase 3 live watching builds on it).CU-17tkuw5v5zv
Change-Set: hotfix-mesh-desktop-multiplex
What changes
desktopSession-<domain>-<ts>-<nodeHash>.mcrecwith nosessionid/userid, soplugins/openframe.jsskipped every file and registration (which lists by request id) never saw them: with the flag alone nothing uploads. It now writesrelaysession-<domain>-<UTC stamp>-<user>-<device>-<relayId>.mcrecand a header withsessionid(the relay id of the peer that created the multiplexer, i.e. the technician's<requestId>.2.<nonce>),useridandusername, exactly likemeshrelay.js. The upload key<domain>/recordings/<nodeHash>/<relayId>/<file>, the backend's<requestId>.prefix listing, saas-lib's filename timestamp parser and the player's stitching work unchanged.addPeerrefuses a second agent butperformRelayignored the result and left that socket attached to nothing; it is closed instead. Reachable when a browser redials while its previous socket is still half-open on the server.Flag off: unchanged,
webserver.jsonly routesp=2relays here whensettings.desktopmultiplex(or the domain flag) is true.Verified
node --check, plus a smoke test against the patched module with a stubbed webserver and the realplugins/openframe.jshelpers: one filerelaysession-tenant-uuid-2026-10-08-09-56-03-gateway-svc-DESKTOP-ABC1-01ARZ3NDEKTSV4RRFFQ69G5FAV.2.k7x9q1.mcrec; headersessionid/userid/username/protocol: 2;recordingObjectKey→tenant-uuid/recordings/HASH123/<relayId>/<file>; saas-libMeshFilenameTimestampregex matches the stamp; a viewer's cmd 82 request is answered to that viewer only; cmd 11 reaches the agent; a second agent is refused; the last viewer leaving closes the agent and fires therecordingevent with the file name; a viewer-only multiplexer is disposed when the viewer leaves and its header-only file deleted with no event; an agent-only one is abandoned the same way; a traversal-shaped relay id stays inside the recordings directory and is skipped by the uploader.Live verification on dev (after the openframe-saas-tenant PR of this change set turns the flag on)
Change set
flamingo-stack/meshcentral#218: these pull requests are one change, reviewed together.Linked work
Linked by the
Depends-On/Change-Setlines in these descriptions; this block is maintained by the hub.