Added desktop multiplexor server peering support.
Ylian Saint-Hilaire committed
Jan 4, 2021 at 13:00 UTC
fe086c345b6b093af8a06919aecf32e809362048
1 file changed
+23
-1
meshdesktopmultiplex.js
+23
-1
@@ -831,13 +831,35 @@ module.exports.CreateMeshRelay = function (parent, ws, req, domain, user, cookie
831
}
832
}
833
834
+// If we are in multi-server mode, the desktop multiplexor needs to be created on the server with the agent connected to it.
835
+// So, if the agent is connected to a different server, just relay the connection to that server
836
function CreateMeshRelayEx(parent, ws, req, domain, user, cookie) {
835
- const currentTime = Date.now();
837
+ // Do validation work
838
if (cookie) {
839
if ((typeof cookie.expire == 'number') && (cookie.expire <= currentTime)) { delete req.query.nodeid; }
840
else if (typeof cookie.nid == 'string') { req.query.nodeid = cookie.nid; }
841
}
842
if ((req.query.nodeid == null) || (req.query.p != '2') || (req.query.id == null) || (domain == null)) { try { ws.close(); } catch (e) { } return; } // Not is not a valid remote desktop connection.
843
+
844
+ // Check routing if in multi-server mode
845
+ var nodeid = req.query.nodeid;
846
+ if (parent.parent.multiServer != null) {
847
+ const routing = parent.parent.GetRoutingServerIdNotSelf(nodeid, 1); // 1 = MeshAgent routing type
848
+ if (routing == null) {
849
+ // No need to relay the connection to a different server
850
+ return CreateMeshRelayEx2(parent, ws, req, domain, user, cookie);
851
+ } else {
852
+ // We must relay the connection to a different server
853
+ return parent.parent.multiServer.createPeerRelay(ws, req, routing.serverid, req.session.userid);
854
+ }
855
+ } else {
856
+ // No need to relay the connection to a different server
857
+ return CreateMeshRelayEx2(parent, ws, req, domain, user, cookie);
858
+ }
859
+}
860
+
861
+function CreateMeshRelayEx2(parent, ws, req, domain, user, cookie) {
862
+ const currentTime = Date.now();
863
var obj = {};
864
obj.ws = ws;
865
obj.ws.me = obj;