Load config from DB
This commit is contained in:
1 parent
4530967b6b
commit
819e8a52a3
4 files changed
+203
-65
No files matched your search
+76
-40
@@ -57,7 +57,7 @@ function writeResponse(sessionContext, res, close) {
|
||||
// Close connection after last request in session
|
||||
if (close) res.headers["Connection"] = "close";
|
||||
|
||||
if (config.get("DEBUG", sessionContext.deviceId)) {
|
||||
if (sessionContext.debug) {
|
||||
const dump =
|
||||
`# RESPONSE ${new Date(Date.now())}\n` +
|
||||
JSON.stringify(res.headers) +
|
||||
@@ -195,7 +195,12 @@ function inform(sessionContext, rpc) {
|
||||
cwmpVersion: sessionContext.cwmpVersion
|
||||
});
|
||||
|
||||
const cookiesPath = config.get("COOKIES_PATH", sessionContext.deviceId);
|
||||
const cookiesPath = localCache.getConfig(
|
||||
sessionContext.cacheSnapshot,
|
||||
"cwmp.cookiesPath",
|
||||
sessionContext.configContext
|
||||
);
|
||||
|
||||
if (cookiesPath) {
|
||||
res.headers["Set-Cookie"] = `session=${
|
||||
sessionContext.sessionId
|
||||
@@ -284,7 +289,11 @@ function applyPresets(sessionContext) {
|
||||
const blackList = {};
|
||||
let whiteList = null;
|
||||
let whiteListProvisions = null;
|
||||
const RETRY_DELAY = config.get("RETRY_DELAY", sessionContext.deviceId);
|
||||
const RETRY_DELAY = localCache.getConfig(
|
||||
sessionContext.cacheSnapshot,
|
||||
"cwmp.retryDelay",
|
||||
sessionContext.configContext
|
||||
);
|
||||
|
||||
if (sessionContext.faults) {
|
||||
for (const [channel, fault] of Object.entries(sessionContext.faults)) {
|
||||
@@ -1062,7 +1071,7 @@ function listener(httpRequest, httpResponse) {
|
||||
logger.accessWarn(w);
|
||||
}
|
||||
|
||||
if (config.get("DEBUG", sessionContext.deviceId)) {
|
||||
if (sessionContext.debug) {
|
||||
const dump =
|
||||
`# REQUEST ${new Date(Date.now())}\n` +
|
||||
JSON.stringify(httpRequest.headers) +
|
||||
@@ -1165,45 +1174,72 @@ function listener(httpRequest, httpResponse) {
|
||||
stats.initiatedSessions += 1;
|
||||
const deviceId = common.generateDeviceId(rpc.cpeRequest.deviceId);
|
||||
|
||||
session.init(
|
||||
deviceId,
|
||||
rpc.cwmpVersion,
|
||||
rpc.sessionTimeout || config.get("SESSION_TIMEOUT", deviceId),
|
||||
(err, _sessionContext) => {
|
||||
if (err) return void throwError(err, httpResponse);
|
||||
localCache.getCurrentSnapshot((err, cacheSnapshot) => {
|
||||
if (err) return void throwError(err, httpResponse);
|
||||
|
||||
_sessionContext.httpRequest = httpRequest;
|
||||
_sessionContext.httpResponse = httpResponse;
|
||||
_sessionContext.sessionId = crypto.randomBytes(8).toString("hex");
|
||||
httpRequest.connection.setTimeout(_sessionContext.timeout * 1000);
|
||||
const configContext = {
|
||||
id: deviceId,
|
||||
serialNumber: rpc.cpeRequest.deviceId["SerialNumber"],
|
||||
productClass: rpc.cpeRequest.deviceId["ProductClass"],
|
||||
oui: rpc.cpeRequest.deviceId["OUI"]
|
||||
};
|
||||
|
||||
getDueTasksAndFaultsAndOperations(
|
||||
deviceId,
|
||||
_sessionContext.timestamp,
|
||||
(err, dueTasks, faults, operations, cacheUntil) => {
|
||||
if (err) return void throwError(err, httpResponse);
|
||||
|
||||
_sessionContext.tasks = dueTasks;
|
||||
_sessionContext.operations = operations;
|
||||
_sessionContext.cacheUntil = cacheUntil;
|
||||
_sessionContext.faults = faults;
|
||||
_sessionContext.retries = {};
|
||||
for (const [k, v] of Object.entries(_sessionContext.faults)) {
|
||||
if (v.expiry >= _sessionContext.timestamp) {
|
||||
// Delete expired faults
|
||||
delete _sessionContext.faults[k];
|
||||
if (!_sessionContext.faultsTouched)
|
||||
_sessionContext.faultsTouched = {};
|
||||
_sessionContext.faultsTouched[k] = true;
|
||||
} else {
|
||||
_sessionContext.retries[k] = v.retries;
|
||||
}
|
||||
}
|
||||
parsedRpc(_sessionContext, rpc, parseWarnings);
|
||||
}
|
||||
const sessionTimeout =
|
||||
rpc.sessionTimeout ||
|
||||
localCache.getConfig(
|
||||
cacheSnapshot,
|
||||
"cwmp.sessionTimeout",
|
||||
configContext
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
session.init(
|
||||
deviceId,
|
||||
rpc.cwmpVersion,
|
||||
sessionTimeout,
|
||||
(err, _sessionContext) => {
|
||||
if (err) return void throwError(err, httpResponse);
|
||||
|
||||
_sessionContext.cacheSnapshot = cacheSnapshot;
|
||||
_sessionContext.configContext = configContext;
|
||||
_sessionContext.debug = localCache.getConfig(
|
||||
cacheSnapshot,
|
||||
"cwmp.debug",
|
||||
configContext
|
||||
);
|
||||
|
||||
_sessionContext.httpRequest = httpRequest;
|
||||
_sessionContext.httpResponse = httpResponse;
|
||||
_sessionContext.sessionId = crypto.randomBytes(8).toString("hex");
|
||||
httpRequest.connection.setTimeout(_sessionContext.timeout * 1000);
|
||||
|
||||
getDueTasksAndFaultsAndOperations(
|
||||
deviceId,
|
||||
_sessionContext.timestamp,
|
||||
(err, dueTasks, faults, operations, cacheUntil) => {
|
||||
if (err) return void throwError(err, httpResponse);
|
||||
|
||||
_sessionContext.tasks = dueTasks;
|
||||
_sessionContext.operations = operations;
|
||||
_sessionContext.cacheUntil = cacheUntil;
|
||||
_sessionContext.faults = faults;
|
||||
_sessionContext.retries = {};
|
||||
for (const [k, v] of Object.entries(_sessionContext.faults)) {
|
||||
if (v.expiry >= _sessionContext.timestamp) {
|
||||
// Delete expired faults
|
||||
delete _sessionContext.faults[k];
|
||||
if (!_sessionContext.faultsTouched)
|
||||
_sessionContext.faultsTouched = {};
|
||||
_sessionContext.faultsTouched[k] = true;
|
||||
} else {
|
||||
_sessionContext.retries[k] = v.retries;
|
||||
}
|
||||
}
|
||||
parsedRpc(_sessionContext, rpc, parseWarnings);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user