Fix connection timeout being set incorrectly
This commit is contained in:
1 parent
9f4b421b59
commit
62849e8081
6 files changed
+69
-43
No files matched your search
+11
-11
@@ -77,9 +77,16 @@ if (!cluster.worker) {
|
|||||||
cluster.stop();
|
cluster.stop();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const ssl = {
|
const key = config.get("CWMP_SSL_KEY") as string;
|
||||||
key: config.get("CWMP_SSL_KEY") as string,
|
const cert = config.get("CWMP_SSL_CERT") as string;
|
||||||
cert: config.get("CWMP_SSL_CERT") as string,
|
|
||||||
|
const options = {
|
||||||
|
port: SERVICE_PORT,
|
||||||
|
host: SERVICE_ADDRESS,
|
||||||
|
ssl: key && cert ? { key, cert } : null,
|
||||||
|
onConnection: cwmp.onConnection,
|
||||||
|
timeout: 30000,
|
||||||
|
keepAliveTimeout: 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
process.on("uncaughtException", (err) => {
|
process.on("uncaughtException", (err) => {
|
||||||
@@ -94,14 +101,7 @@ if (!cluster.worker) {
|
|||||||
|
|
||||||
const initPromise = Promise.all([db.connect(), cache.connect()])
|
const initPromise = Promise.all([db.connect(), cache.connect()])
|
||||||
.then(() => {
|
.then(() => {
|
||||||
server.start(
|
server.start(options, cwmp.listener);
|
||||||
SERVICE_PORT,
|
|
||||||
SERVICE_ADDRESS,
|
|
||||||
ssl,
|
|
||||||
cwmp.listener,
|
|
||||||
cwmp.onConnection,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
+8
-4
@@ -73,9 +73,13 @@ if (!cluster.worker) {
|
|||||||
cluster.stop();
|
cluster.stop();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const ssl = {
|
const key = config.get("FS_SSL_KEY") as string;
|
||||||
key: config.get("FS_SSL_KEY") as string,
|
const cert = config.get("FS_SSL_CERT") as string;
|
||||||
cert: config.get("FS_SSL_CERT") as string,
|
const options = {
|
||||||
|
port: SERVICE_PORT,
|
||||||
|
host: SERVICE_ADDRESS,
|
||||||
|
ssl: key && cert ? { key, cert } : null,
|
||||||
|
timeout: 30000,
|
||||||
};
|
};
|
||||||
|
|
||||||
let stopping = false;
|
let stopping = false;
|
||||||
@@ -98,7 +102,7 @@ if (!cluster.worker) {
|
|||||||
|
|
||||||
const initPromise = Promise.all([db.connect(), cache.connect()])
|
const initPromise = Promise.all([db.connect(), cache.connect()])
|
||||||
.then(() => {
|
.then(() => {
|
||||||
server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener);
|
server.start(options, _listener);
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
+8
-4
@@ -77,9 +77,13 @@ if (!cluster.worker) {
|
|||||||
cluster.stop();
|
cluster.stop();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const ssl = {
|
const key = config.get("NBI_SSL_KEY") as string;
|
||||||
key: config.get("NBI_SSL_KEY") as string,
|
const cert = config.get("NBI_SSL_CERT") as string;
|
||||||
cert: config.get("NBI_SSL_CERT") as string,
|
const options = {
|
||||||
|
port: SERVICE_PORT,
|
||||||
|
host: SERVICE_ADDRESS,
|
||||||
|
ssl: key && cert ? { key, cert } : null,
|
||||||
|
timeout: 30000,
|
||||||
};
|
};
|
||||||
|
|
||||||
let stopping = false;
|
let stopping = false;
|
||||||
@@ -102,7 +106,7 @@ if (!cluster.worker) {
|
|||||||
|
|
||||||
const initPromise = Promise.all([db.connect(), cache.connect()])
|
const initPromise = Promise.all([db.connect(), cache.connect()])
|
||||||
.then(() => {
|
.then(() => {
|
||||||
server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener);
|
server.start(options, _listener);
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
+8
-4
@@ -79,9 +79,13 @@ if (!cluster.worker) {
|
|||||||
cluster.stop();
|
cluster.stop();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const ssl = {
|
const key = config.get("UI_SSL_KEY") as string;
|
||||||
key: config.get("UI_SSL_KEY") as string,
|
const cert = config.get("UI_SSL_CERT") as string;
|
||||||
cert: config.get("UI_SSL_CERT") as string,
|
const options = {
|
||||||
|
port: SERVICE_PORT,
|
||||||
|
host: SERVICE_ADDRESS,
|
||||||
|
ssl: key && cert ? { key, cert } : null,
|
||||||
|
timeout: 30000,
|
||||||
};
|
};
|
||||||
|
|
||||||
let stopping = false;
|
let stopping = false;
|
||||||
@@ -106,7 +110,7 @@ if (!cluster.worker) {
|
|||||||
|
|
||||||
const initPromise = Promise.all([db2.connect(), cache.connect()])
|
const initPromise = Promise.all([db2.connect(), cache.connect()])
|
||||||
.then(() => {
|
.then(() => {
|
||||||
server.start(SERVICE_PORT, SERVICE_ADDRESS, ssl, _listener);
|
server.start(options, _listener);
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
+11
-5
@@ -840,8 +840,11 @@ async function sendAcsRequest(
|
|||||||
return writeResponse(sessionContext, res);
|
return writeResponse(sessionContext, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getSession(connection, sessionId): Promise<SessionContext> {
|
async function getSession(
|
||||||
const sessionContext = currentSessions.get(connection);
|
connection: Socket,
|
||||||
|
sessionId: string
|
||||||
|
): Promise<SessionContext> {
|
||||||
|
let sessionContext = currentSessions.get(connection);
|
||||||
if (sessionContext) {
|
if (sessionContext) {
|
||||||
currentSessions.delete(connection);
|
currentSessions.delete(connection);
|
||||||
return sessionContext;
|
return sessionContext;
|
||||||
@@ -853,7 +856,9 @@ async function getSession(connection, sessionId): Promise<SessionContext> {
|
|||||||
|
|
||||||
const sessionContextString = await cache.pop(`session_${sessionId}`);
|
const sessionContextString = await cache.pop(`session_${sessionId}`);
|
||||||
if (!sessionContextString) return null;
|
if (!sessionContextString) return null;
|
||||||
return session.deserialize(sessionContextString);
|
sessionContext = await session.deserialize(sessionContextString);
|
||||||
|
connection.setTimeout(sessionContext.timeout);
|
||||||
|
return sessionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only needed to prevent tree shaking from removing the remoteAddress
|
// Only needed to prevent tree shaking from removing the remoteAddress
|
||||||
@@ -1068,6 +1073,8 @@ async function processRequest(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sessionContext.httpRequest.socket.setTimeout(sessionContext.timeout * 1000);
|
||||||
|
|
||||||
if (sessionContext.debug) {
|
if (sessionContext.debug) {
|
||||||
debug.incomingHttpRequest(
|
debug.incomingHttpRequest(
|
||||||
sessionContext.httpRequest,
|
sessionContext.httpRequest,
|
||||||
@@ -1412,7 +1419,7 @@ async function listenerAsync(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const parseWarnings = [];
|
const parseWarnings = [];
|
||||||
let rpc;
|
let rpc: SoapMessage;
|
||||||
try {
|
try {
|
||||||
rpc = soap.request(
|
rpc = soap.request(
|
||||||
bodyStr,
|
bodyStr,
|
||||||
@@ -1517,7 +1524,6 @@ async function listenerAsync(
|
|||||||
_sessionContext.httpRequest = httpRequest;
|
_sessionContext.httpRequest = httpRequest;
|
||||||
_sessionContext.httpResponse = httpResponse;
|
_sessionContext.httpResponse = httpResponse;
|
||||||
_sessionContext.sessionId = crypto.randomBytes(8).toString("hex");
|
_sessionContext.sessionId = crypto.randomBytes(8).toString("hex");
|
||||||
httpRequest.socket.setTimeout(_sessionContext.timeout * 1000);
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
tasks: dueTasks,
|
tasks: dueTasks,
|
||||||
|
|||||||
+23
-15
@@ -52,35 +52,43 @@ function closeServer(timeout, callback): void {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ServerOptions {
|
||||||
|
port?: number;
|
||||||
|
host?: string;
|
||||||
|
ssl?: { key: string; cert: string };
|
||||||
|
timeout?: number;
|
||||||
|
keepAliveTimeout?: number;
|
||||||
|
onConnection?: (socket: Socket) => void;
|
||||||
|
}
|
||||||
|
|
||||||
export function start(
|
export function start(
|
||||||
port: number,
|
options: ServerOptions,
|
||||||
networkInterface: string,
|
_listener: http.RequestListener
|
||||||
ssl: { key: string; cert: string },
|
|
||||||
_listener: http.RequestListener,
|
|
||||||
onConnection?: (socket: Socket) => void,
|
|
||||||
keepAliveTimeout = -1
|
|
||||||
): void {
|
): void {
|
||||||
listener = _listener;
|
listener = _listener;
|
||||||
|
|
||||||
if (ssl && ssl.key && ssl.cert) {
|
if (options.ssl) {
|
||||||
const options = {
|
const opts = {
|
||||||
key: ssl.key
|
key: options.ssl.key
|
||||||
.split(":")
|
.split(":")
|
||||||
.map((f) => fs.readFileSync(path.resolve(ROOT_DIR, f.trim()))),
|
.map((f) => fs.readFileSync(path.resolve(ROOT_DIR, f.trim()))),
|
||||||
cert: ssl.cert
|
cert: options.ssl.cert
|
||||||
.split(":")
|
.split(":")
|
||||||
.map((f) => fs.readFileSync(path.resolve(ROOT_DIR, f.trim()))),
|
.map((f) => fs.readFileSync(path.resolve(ROOT_DIR, f.trim()))),
|
||||||
};
|
};
|
||||||
|
|
||||||
server = https.createServer(options, listener);
|
server = https.createServer(opts, listener);
|
||||||
if (onConnection != null) server.on("secureConnection", onConnection);
|
if (options.onConnection)
|
||||||
|
server.on("secureConnection", options.onConnection);
|
||||||
} else {
|
} else {
|
||||||
server = http.createServer(listener);
|
server = http.createServer(listener);
|
||||||
if (onConnection != null) server.on("connection", onConnection);
|
if (options.onConnection) server.on("connection", options.onConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keepAliveTimeout >= 0) server.keepAliveTimeout = keepAliveTimeout;
|
server.timeout = options.timeout || 0;
|
||||||
server.listen(port, networkInterface);
|
if (options.keepAliveTimeout != null)
|
||||||
|
server.keepAliveTimeout = options.keepAliveTimeout;
|
||||||
|
server.listen({ port: options.port, host: options.host });
|
||||||
}
|
}
|
||||||
|
|
||||||
export function stop(): Promise<void> {
|
export function stop(): Promise<void> {
|
||||||
|
|||||||
Reference in new issue
Block a user