Added debug code for #2892

Ylian Saint-Hilaire committed Jul 13, 2021 at 11:20 UTC 11d1fea93555ff8af4206f32532bd9661acbcf7e
2 files changed +34 -14
meshuser.js
+33 -13
@@ -118,27 +118,41 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
118
119 // Disconnect this user
120 obj.close = function (arg) {
121 - if ((arg == 1) || (arg == null)) { try { ws.close(); parent.parent.debug('user', 'Soft disconnect'); } catch (e) { console.log(e); } } // Soft close, close the websocket
122 - if (arg == 2) { try { ws._socket._parent.end(); parent.parent.debug('user', 'Hard disconnect'); } catch (e) { console.log(e); } } // Hard close, close the TCP socket
121 + obj.ws.xclosed = 1; // This is for testing. Will be displayed when running "usersessions" server console command.
122 +
123 + if ((arg == 1) || (arg == null)) { try { obj.ws.close(); parent.parent.debug('user', 'Soft disconnect'); } catch (e) { console.log(e); } } // Soft close, close the websocket
124 + if (arg == 2) { try { obj.ws._socket._parent.end(); parent.parent.debug('user', 'Hard disconnect'); } catch (e) { console.log(e); } } // Hard close, close the TCP socket
125 +
126 + obj.ws.xclosed = 2; // DEBUG
127
128 // Perform timer cleanup
129 if (obj.pingtimer) { clearInterval(obj.pingtimer); delete obj.pingtimer; }
130 if (obj.pongtimer) { clearInterval(obj.pongtimer); delete obj.pongtimer; }
131
132 + obj.ws.xclosed = 3; // DEBUG
133 +
134 // Clear expire timeout
135 if (obj.expireTimer != null) { clearTimeout(obj.expireTimer); delete obj.expireTimer; }
136
137 + obj.ws.xclosed = 4; // DEBUG
138 +
139 // Perform cleanup
132 - parent.parent.RemoveAllEventDispatch(ws);
140 + parent.parent.RemoveAllEventDispatch(obj.ws);
141 if (obj.serverStatsTimer != null) { clearInterval(obj.serverStatsTimer); delete obj.serverStatsTimer; }
134 - if (req.session && req.session.ws && req.session.ws == ws) { delete req.session.ws; }
142 + if (req.session && req.session.ws && req.session.ws == obj.ws) { delete req.session.ws; }
143 if (parent.wssessions2[ws.sessionId]) { delete parent.wssessions2[ws.sessionId]; }
144 +
145 + obj.ws.xclosed = 5; // DEBUG
146 +
147 if ((obj.user != null) && (parent.wssessions[obj.user._id])) {
137 - var i = parent.wssessions[obj.user._id].indexOf(ws);
148 + obj.ws.xclosed = 6; // DEBUG
149 + var i = parent.wssessions[obj.user._id].indexOf(obj.ws);
150 if (i >= 0) {
151 + obj.ws.xclosed = 7; // DEBUG
152 parent.wssessions[obj.user._id].splice(i, 1);
153 var user = parent.users[obj.user._id];
154 if (user) {
155 + obj.ws.xclosed = 8; // DEBUG
156 if (parent.parent.multiServer == null) {
157 var targets = ['*', 'server-users'];
158 if (obj.user.groups) { for (var i in obj.user.groups) { targets.push('server-users:' + i); } }
@@ -151,18 +165,24 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
165 }
166 }
167
168 + obj.ws.xclosed = 9; // DEBUG
169 +
170 // If we have peer servers, inform them of the disconnected session
171 if (parent.parent.multiServer != null) { parent.parent.multiServer.DispatchMessage({ action: 'sessionEnd', sessionid: ws.sessionId }); }
172
173 + obj.ws.xclosed = 10; // DEBUG
174 +
175 // Aggressive cleanup
176 delete obj.user;
177 delete obj.domain;
160 - delete ws.userid;
161 - delete ws.domainid;
162 - delete ws.clientIp;
163 - delete ws.sessionId;
164 - delete ws.HandleEvent;
165 - ws.removeAllListeners(['message', 'close', 'error']);
178 + delete obj.ws.userid;
179 + delete obj.ws.domainid;
180 + delete obj.ws.clientIp;
181 + delete obj.ws.sessionId;
182 + delete obj.ws.HandleEvent;
183 + obj.ws.removeAllListeners(['message', 'close', 'error']);
184 +
185 + obj.ws.xclosed = 11; // DEBUG
186 };
187
188 // Convert a mesh path array into a real path on the server side
@@ -359,7 +379,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
379 // If the user is a cross domain administrator, allow some select messages from different domains.
380 if ((event.domain == null) || (event.domain == domain.id) || ((obj.crossDomain === true) && (allowedCrossDomainMessages.indexOf(event.action) >= 0))) {
381 try {
362 - if (event == 'close') { try { delete req.session; } catch (ex) { } obj.close(); }
382 + if (event == 'close') { try { delete req.session; } catch (ex) { } obj.close(); return; }
383 else if (event == 'resubscribe') { user.subscriptions = parent.subscribe(user._id, ws); }
384 else if (event == 'updatefiles') { updateUserFiles(user, ws, domain); }
385 else {
@@ -6018,7 +6038,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6038 userSessionCount++;
6039 cmdData.result += (i + ', ' + parent.wssessions[i].length + ' session' + ((parent.wssessions[i].length > 1) ? 's' : '') + '.\r\n');
6040 for (var j in parent.wssessions[i]) {
6021 - cmdData.result += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + '\r\n';
6041 + cmdData.result += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + ((parent.wssessions[i][j].xclosed) ? (', CLOSED-' + parent.wssessions[i][j].xclosed):'') + '\r\n';
6042 }
6043 }
6044 }
public/scripts/agent-desktop-0.0.2.js
+1 -1
@@ -276,7 +276,7 @@ var CreateAgentRemoteDesktop = function (canvasid, scrolldiv) {
276 if ((cmdsize < 4) || (((cmdsize - 4) % 10) != 0)) break;
277 var screenCount = ((cmdsize - 4) / 10), screenInfo = {}, ptr = 4;
278 for (var i = 0; i < screenCount; i++) { screenInfo[(view[ptr + 0] << 8) + view[ptr + 1]] = { x: ((view[ptr + 2] << 8) + view[ptr + 3]), y: ((view[ptr + 4] << 8) + view[ptr + 5]), w: ((view[ptr + 6] << 8) + view[ptr + 7]), h: ((view[ptr + 8] << 8) + view[ptr + 9]) }; ptr += 10; }
279 - console.log('ScreenInfo', JSON.stringify(screenInfo, null, 2));
279 + //console.log('ScreenInfo', JSON.stringify(screenInfo, null, 2));
280 break;
281 case 87: // MNG_KVM_INPUT_LOCK
282 if (cmdsize != 5) break;