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;