mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-12-26 23:25:53 -05:00
Updated tunnel idle timeout, to close the tunnel after a preset timeout if a command isn't received. Idle timeout is reset after a command is received.
This commit is contained in:
parent
a24006324d
commit
f628c57eea
@ -1885,9 +1885,12 @@ function onTunnelUpgrade(response, s, head) {
|
|||||||
s.tunnel = this;
|
s.tunnel = this;
|
||||||
s.descriptorMetadata = "MeshAgent_relayTunnel";
|
s.descriptorMetadata = "MeshAgent_relayTunnel";
|
||||||
|
|
||||||
if (require('MeshAgent').idleTimeout != null) {
|
|
||||||
|
if (this.tcpport != null || this.udpport != null)
|
||||||
|
{
|
||||||
s.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
s.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
||||||
s.on('timeout', function () {
|
s.on('timeout', function ()
|
||||||
|
{
|
||||||
this.ping();
|
this.ping();
|
||||||
this.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
this.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
||||||
});
|
});
|
||||||
@ -1895,7 +1898,8 @@ function onTunnelUpgrade(response, s, head) {
|
|||||||
|
|
||||||
//sendConsoleText('onTunnelUpgrade - ' + this.tcpport + ' - ' + this.udpport);
|
//sendConsoleText('onTunnelUpgrade - ' + this.tcpport + ' - ' + this.udpport);
|
||||||
|
|
||||||
if (this.tcpport != null) {
|
if (this.tcpport != null)
|
||||||
|
{
|
||||||
// This is a TCP relay connection, pause now and try to connect to the target.
|
// This is a TCP relay connection, pause now and try to connect to the target.
|
||||||
s.pause();
|
s.pause();
|
||||||
s.data = onTcpRelayServerTunnelData;
|
s.data = onTcpRelayServerTunnelData;
|
||||||
@ -1911,7 +1915,9 @@ function onTunnelUpgrade(response, s, head) {
|
|||||||
try { mesh.SendCommand({ action: 'sessions', type: 'tcp', value: tunnelUserCount.tcp }); } catch (ex) { }
|
try { mesh.SendCommand({ action: 'sessions', type: 'tcp', value: tunnelUserCount.tcp }); } catch (ex) { }
|
||||||
broadcastSessionsToRegisteredApps();
|
broadcastSessionsToRegisteredApps();
|
||||||
}
|
}
|
||||||
} if (this.udpport != null) {
|
}
|
||||||
|
if (this.udpport != null)
|
||||||
|
{
|
||||||
// This is a UDP relay connection, get the UDP socket setup. // TODO: ***************
|
// This is a UDP relay connection, get the UDP socket setup. // TODO: ***************
|
||||||
s.data = onUdpRelayServerTunnelData;
|
s.data = onUdpRelayServerTunnelData;
|
||||||
s.udprelay = require('dgram').createSocket({ type: 'udp4' });
|
s.udprelay = require('dgram').createSocket({ type: 'udp4' });
|
||||||
@ -1929,7 +1935,9 @@ function onTunnelUpgrade(response, s, head) {
|
|||||||
try { mesh.SendCommand({ action: 'sessions', type: 'udp', value: tunnelUserCount.tcp }); } catch (ex) { }
|
try { mesh.SendCommand({ action: 'sessions', type: 'udp', value: tunnelUserCount.tcp }); } catch (ex) { }
|
||||||
broadcastSessionsToRegisteredApps();
|
broadcastSessionsToRegisteredApps();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// This is a normal connect for KVM/Terminal/Files
|
// This is a normal connect for KVM/Terminal/Files
|
||||||
s.data = onTunnelData;
|
s.data = onTunnelData;
|
||||||
}
|
}
|
||||||
@ -2072,10 +2080,34 @@ function onTunnelData(data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.httprequest.state == 0) {
|
if (this.httprequest.state == 0)
|
||||||
|
{
|
||||||
// Check if this is a relay connection
|
// Check if this is a relay connection
|
||||||
if ((data == 'c') || (data == 'cr')) { this.httprequest.state = 1; /*sendConsoleText("Tunnel #" + this.httprequest.index + " now active", this.httprequest.sessionid);*/ }
|
if ((data == 'c') || (data == 'cr'))
|
||||||
} else {
|
{
|
||||||
|
this.httprequest.state = 1; /*sendConsoleText("Tunnel #" + this.httprequest.index + " now active", this.httprequest.sessionid);*/
|
||||||
|
this.setTimeout(global._tunnelTimeout == null ? 5000 : global._tunnelTimeout); // Once we receive 'c', we will only wait the tunnel timeout (5 seconds) before we close the tunnel
|
||||||
|
this.on('timeout', function ()
|
||||||
|
{
|
||||||
|
this.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We received some data, so we will reset the idle timeout of the websocket
|
||||||
|
this.removeAllListeners('timeout');
|
||||||
|
|
||||||
|
if (require('MeshAgent').idleTimeout != null)
|
||||||
|
{
|
||||||
|
this.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
||||||
|
this.on('timeout', function ()
|
||||||
|
{
|
||||||
|
this.ping();
|
||||||
|
this.setTimeout(require('MeshAgent').idleTimeout * 1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Handle tunnel data
|
// Handle tunnel data
|
||||||
if (this.httprequest.protocol == 0) { // 1 = Terminal (admin), 2 = Desktop, 5 = Files, 6 = PowerShell (admin), 7 = Plugin Data Exchange, 8 = Terminal (user), 9 = PowerShell (user), 10 = FileTransfer
|
if (this.httprequest.protocol == 0) { // 1 = Terminal (admin), 2 = Desktop, 5 = Files, 6 = PowerShell (admin), 7 = Plugin Data Exchange, 8 = Terminal (user), 9 = PowerShell (user), 10 = FileTransfer
|
||||||
// Take a look at the protocol
|
// Take a look at the protocol
|
||||||
|
Loading…
Reference in New Issue
Block a user