Fix bugz
This commit is contained in:
parent
04c8630199
commit
359eee9df5
2 changed files with 30 additions and 28 deletions
55
index.js
55
index.js
|
@ -113,6 +113,9 @@ class Connection {
|
|||
/** @type {NodeJS.Timer | null} */
|
||||
idleTimeout = null;
|
||||
|
||||
/** @type {() => void} */
|
||||
idleTimeoutCallback;
|
||||
|
||||
/** @type {NodeJS.Timer | null} */
|
||||
retryTimeout = null;
|
||||
|
||||
|
@ -124,10 +127,12 @@ class Connection {
|
|||
/**
|
||||
* @param {Target} source
|
||||
* @param {Socket} writeSocket
|
||||
* @param {() => void} idleTimeoutCallback
|
||||
*/
|
||||
constructor(source, writeSocket) {
|
||||
constructor(source, writeSocket, idleTimeoutCallback) {
|
||||
this.source = source;
|
||||
this.writeSocket = writeSocket;
|
||||
this.idleTimeoutCallback = idleTimeoutCallback;
|
||||
}
|
||||
|
||||
initTargetSocket() {
|
||||
|
@ -136,8 +141,8 @@ class Connection {
|
|||
this.writeSocket.on("connect", () => {
|
||||
console.log(
|
||||
"Opened new connection to target from",
|
||||
source.address,
|
||||
source.port
|
||||
this.source.address,
|
||||
this.source.port
|
||||
);
|
||||
});
|
||||
this.writeSocket.on("message", (fromMsg) => {
|
||||
|
@ -146,17 +151,22 @@ class Connection {
|
|||
"Got",
|
||||
fromMsg.byteLength,
|
||||
"bytes from target for",
|
||||
source.address,
|
||||
source.port
|
||||
this.source.address,
|
||||
this.source.port
|
||||
);
|
||||
|
||||
READ_SOCKET.send(fromMsg, source.port, source.address);
|
||||
READ_SOCKET.send(fromMsg, this.source.port, this.source.address);
|
||||
});
|
||||
this.writeSocket.on("error", (err) => {
|
||||
this.#writeError(err);
|
||||
});
|
||||
this.writeSocket.on("close", () => {
|
||||
console.log("Socket for", source.address, source.port, "closed.");
|
||||
console.log(
|
||||
"Socket for",
|
||||
this.source.address,
|
||||
this.source.port,
|
||||
"closed."
|
||||
);
|
||||
CONNECTIONS.delete(source);
|
||||
});
|
||||
|
||||
|
@ -168,6 +178,8 @@ class Connection {
|
|||
* @param {?Buffer} msg
|
||||
*/
|
||||
send(msg) {
|
||||
this.#resetIdleTimeout();
|
||||
|
||||
if (msg && (this.writing || !this.writeSocket)) {
|
||||
this.msgBuffer.push(msg);
|
||||
return;
|
||||
|
@ -213,7 +225,10 @@ class Connection {
|
|||
|
||||
#resetIdleTimeout() {
|
||||
clearTimeout(this.idleTimeout);
|
||||
this.idleTimeout = setTimeout(() => idleTimeout(this.source), IDLE_TIMEOUT);
|
||||
this.idleTimeout = setTimeout(
|
||||
() => this.idleTimeoutCallback(),
|
||||
IDLE_TIMEOUT
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -238,14 +253,6 @@ class Connection {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Target} source
|
||||
*/
|
||||
function idleTimeout(source) {
|
||||
console.log("Idle timeout for", source.address, source.port);
|
||||
CONNECTIONS.delete(source);
|
||||
}
|
||||
|
||||
const TARGET_ADDRESS = argv[2];
|
||||
const TARGET_PORT = parseInt(argv[3], 10);
|
||||
|
||||
|
@ -274,22 +281,16 @@ READ_SOCKET.on("message", (toMsg, rinfo) => {
|
|||
let connection = CONNECTIONS.get(source);
|
||||
if (!connection) {
|
||||
const socket = createSocket(SOCKET_TYPE);
|
||||
connection = new Connection(
|
||||
source,
|
||||
socket,
|
||||
setTimeout(() => {
|
||||
idleTimeout(source);
|
||||
}, IDLE_TIMEOUT)
|
||||
);
|
||||
connection = new Connection(source, socket, () => {
|
||||
console.log("Idle timeout for", source.address, source.port);
|
||||
CONNECTIONS.delete(source);
|
||||
});
|
||||
connection.initTargetSocket();
|
||||
|
||||
CONNECTIONS.set(source, connection);
|
||||
}
|
||||
|
||||
clearTimeout(connection.idleTimeout);
|
||||
connection.idleTimeout = setTimeout(() => {
|
||||
idleTimeout(source);
|
||||
}, IDLE_TIMEOUT);
|
||||
connection.send(toMsg);
|
||||
});
|
||||
|
||||
READ_SOCKET.on("error", (err) => {
|
||||
|
|
|
@ -12,5 +12,6 @@
|
|||
},
|
||||
"author": "Mikko Ahlroth <mikko@ahlroth.fi>",
|
||||
"license": "CC0-1.0",
|
||||
"private": true
|
||||
"private": true,
|
||||
"type": "module"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue