Apply consistent-return lint rule
This commit is contained in:
1 parent
d7f0b91bf0
commit
d85afcd2b5
12 files changed
+264
-231
No files matched your search
+2
-1
@@ -12,6 +12,7 @@
|
|||||||
"no-shadow": ["error", { "allow": ["err"] }],
|
"no-shadow": ["error", { "allow": ["err"] }],
|
||||||
"handle-callback-err": "error",
|
"handle-callback-err": "error",
|
||||||
"prefer-arrow-callback": "error",
|
"prefer-arrow-callback": "error",
|
||||||
"curly": ["error", "multi-or-nest", "consistent"]
|
"curly": ["error", "multi-or-nest", "consistent"],
|
||||||
|
"consistent-return": ["error", {"treatUndefinedAsUnspecified": true}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+23
-17
@@ -68,7 +68,7 @@ function udpConReq(address, un, key, callback) {
|
|||||||
const func = err => {
|
const func = err => {
|
||||||
if (err || --count <= 0) {
|
if (err || --count <= 0) {
|
||||||
client.close();
|
client.close();
|
||||||
return callback(err);
|
return void callback(err);
|
||||||
}
|
}
|
||||||
client.send(message, 0, message.length, port, host, func);
|
client.send(message, 0, message.length, port, host, func);
|
||||||
};
|
};
|
||||||
@@ -85,8 +85,11 @@ function httpConReq(
|
|||||||
callback
|
callback
|
||||||
) {
|
) {
|
||||||
const options = URL.parse(url);
|
const options = URL.parse(url);
|
||||||
if (options.protocol !== "http:")
|
if (options.protocol !== "http:") {
|
||||||
return callback(new Error("Invalid connection request URL or protocol"));
|
return void callback(
|
||||||
|
new Error("Invalid connection request URL or protocol")
|
||||||
|
);
|
||||||
|
}
|
||||||
options.agent = new http.Agent({ maxSockets: 1 });
|
options.agent = new http.Agent({ maxSockets: 1 });
|
||||||
|
|
||||||
function statusToError(statusCode) {
|
function statusToError(statusCode) {
|
||||||
@@ -112,7 +115,9 @@ function httpConReq(
|
|||||||
if (authHeader.method === "Basic") {
|
if (authHeader.method === "Basic") {
|
||||||
if (!allowBasicAuth) {
|
if (!allowBasicAuth) {
|
||||||
request.abort();
|
request.abort();
|
||||||
return callback(new Error("Basic HTTP authentication not allowed"));
|
return void callback(
|
||||||
|
new Error("Basic HTTP authentication not allowed")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
options.headers = {
|
options.headers = {
|
||||||
Authorization: auth.basic(username || "", password || "")
|
Authorization: auth.basic(username || "", password || "")
|
||||||
@@ -205,7 +210,7 @@ function connectionRequest(deviceId, callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
db.devicesCollection.findOne({ _id: deviceId }, proj, (err, device) => {
|
db.devicesCollection.findOne({ _id: deviceId }, proj, (err, device) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
let managementServer,
|
let managementServer,
|
||||||
connectionRequestUrl,
|
connectionRequestUrl,
|
||||||
@@ -245,7 +250,7 @@ function connectionRequest(deviceId, callback) {
|
|||||||
CONNECTION_REQUEST_ALLOW_BASIC_AUTH,
|
CONNECTION_REQUEST_ALLOW_BASIC_AUTH,
|
||||||
CONNECTION_REQUEST_TIMEOUT,
|
CONNECTION_REQUEST_TIMEOUT,
|
||||||
err => {
|
err => {
|
||||||
if (udpSent) return callback();
|
if (udpSent) return void callback();
|
||||||
callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -254,7 +259,7 @@ function connectionRequest(deviceId, callback) {
|
|||||||
if (config.auth && config.auth.connectionRequest) {
|
if (config.auth && config.auth.connectionRequest) {
|
||||||
// Callback is optional for backward compatibility
|
// Callback is optional for backward compatibility
|
||||||
if (config.auth.connectionRequest.length > 4) {
|
if (config.auth.connectionRequest.length > 4) {
|
||||||
return config.auth.connectionRequest(
|
return void config.auth.connectionRequest(
|
||||||
deviceId,
|
deviceId,
|
||||||
connectionRequestUrl,
|
connectionRequestUrl,
|
||||||
username,
|
username,
|
||||||
@@ -280,17 +285,17 @@ function connectionRequest(deviceId, callback) {
|
|||||||
function watchTask(deviceId, taskId, timeout, callback) {
|
function watchTask(deviceId, taskId, timeout, callback) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
db.tasksCollection.findOne({ _id: taskId }, { _id: 1 }, (err, task) => {
|
db.tasksCollection.findOne({ _id: taskId }, { _id: 1 }, (err, task) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (!task) return callback(null, "completed");
|
if (!task) return void callback(null, "completed");
|
||||||
|
|
||||||
const q = { _id: `${deviceId}:task_${taskId}` };
|
const q = { _id: `${deviceId}:task_${taskId}` };
|
||||||
db.faultsCollection.findOne(q, { _id: 1 }, (err, fault) => {
|
db.faultsCollection.findOne(q, { _id: 1 }, (err, fault) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (fault) return callback(null, "fault");
|
if (fault) return void callback(null, "fault");
|
||||||
|
|
||||||
if ((timeout -= 500) <= 0) return callback(null, "timeout");
|
if ((timeout -= 500) <= 0) return void callback(null, "timeout");
|
||||||
|
|
||||||
watchTask(deviceId, taskId, timeout, callback);
|
watchTask(deviceId, taskId, timeout, callback);
|
||||||
});
|
});
|
||||||
@@ -311,7 +316,8 @@ function sanitizeTask(task, callback) {
|
|||||||
|
|
||||||
function insertTasks(tasks, callback) {
|
function insertTasks(tasks, callback) {
|
||||||
if (tasks && common.typeOf(tasks) !== common.ARRAY_TYPE) tasks = [tasks];
|
if (tasks && common.typeOf(tasks) !== common.ARRAY_TYPE) tasks = [tasks];
|
||||||
else if (!tasks || tasks.length === 0) return callback(null, tasks || []);
|
else if (!tasks || tasks.length === 0)
|
||||||
|
return void callback(null, tasks || []);
|
||||||
|
|
||||||
let counter = tasks.length;
|
let counter = tasks.length;
|
||||||
for (let task of tasks) {
|
for (let task of tasks) {
|
||||||
@@ -330,9 +336,9 @@ function insertTasks(tasks, callback) {
|
|||||||
|
|
||||||
function deleteDevice(deviceId, callback) {
|
function deleteDevice(deviceId, callback) {
|
||||||
db.tasksCollection.remove({ device: deviceId }, err => {
|
db.tasksCollection.remove({ device: deviceId }, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
db.devicesCollection.remove({ _id: deviceId }, err => {
|
db.devicesCollection.remove({ _id: deviceId }, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
db.faultsCollection.remove(
|
db.faultsCollection.remove(
|
||||||
{
|
{
|
||||||
_id: {
|
_id: {
|
||||||
@@ -340,7 +346,7 @@ function deleteDevice(deviceId, callback) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
db.operationsCollection.remove(
|
db.operationsCollection.remove(
|
||||||
{
|
{
|
||||||
_id: {
|
_id: {
|
||||||
@@ -348,7 +354,7 @@ function deleteDevice(deviceId, callback) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, callback);
|
cache.del(`${deviceId}_tasks_faults_operations`, callback);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
+8
-8
@@ -50,7 +50,7 @@ function connect(callback) {
|
|||||||
mongodb.MongoClient.connect(
|
mongodb.MongoClient.connect(
|
||||||
MONGODB_CONNECTION_URL,
|
MONGODB_CONNECTION_URL,
|
||||||
(err, db) => {
|
(err, db) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
mongoDb = db;
|
mongoDb = db;
|
||||||
mongoCollection = db.collection("cache");
|
mongoCollection = db.collection("cache");
|
||||||
@@ -58,7 +58,7 @@ function connect(callback) {
|
|||||||
|
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
mongoDb.command({ hostInfo: 1 }, (err, res) => {
|
mongoDb.command({ hostInfo: 1 }, (err, res) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
mongoTimeOffset = res.system.currentTime.getTime() - now;
|
mongoTimeOffset = res.system.currentTime.getTime() - now;
|
||||||
exports.get = mongoGet;
|
exports.get = mongoGet;
|
||||||
exports.set = mongoSet;
|
exports.set = mongoSet;
|
||||||
@@ -133,7 +133,7 @@ function redisLock(lockName, ttl, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
redisClient.set(lockName, token, "NX", "EX", ttl, (err, res) => {
|
redisClient.set(lockName, token, "NX", "EX", ttl, (err, res) => {
|
||||||
if (err || res) return callback(err, unlockOrExtend);
|
if (err || res) return void callback(err, unlockOrExtend);
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
redisLock(lockName, ttl, callback);
|
redisLock(lockName, ttl, callback);
|
||||||
@@ -145,7 +145,7 @@ function mongoGet(key, callback) {
|
|||||||
let expire = new Date(Date.now() - mongoTimeOffset);
|
let expire = new Date(Date.now() - mongoTimeOffset);
|
||||||
if (Array.isArray(key)) {
|
if (Array.isArray(key)) {
|
||||||
mongoCollection.find({ _id: { $in: key } }).toArray((err, res) => {
|
mongoCollection.find({ _id: { $in: key } }).toArray((err, res) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
let indices = {};
|
let indices = {};
|
||||||
key.forEach((v, i) => {
|
key.forEach((v, i) => {
|
||||||
@@ -160,9 +160,9 @@ function mongoGet(key, callback) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
mongoCollection.findOne({ _id: { $in: [key] } }, (err, res) => {
|
mongoCollection.findOne({ _id: { $in: [key] } }, (err, res) => {
|
||||||
if (err || !res) return callback(err);
|
if (err || !res) return void callback(err);
|
||||||
|
|
||||||
if (res["expire"] > expire) return callback(null, res["value"]);
|
if (res["expire"] > expire) return void callback(null, res["value"]);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
@@ -194,10 +194,10 @@ function mongoPop(key, callback) {
|
|||||||
null,
|
null,
|
||||||
{ remove: true },
|
{ remove: true },
|
||||||
(err, res) => {
|
(err, res) => {
|
||||||
if (err || !res["value"]) return callback(err);
|
if (err || !res["value"]) return void callback(err);
|
||||||
|
|
||||||
if (res["value"]["expire"] > new Date(Date.now() - mongoTimeOffset))
|
if (res["value"]["expire"] > new Date(Date.now() - mongoTimeOffset))
|
||||||
return callback(null, res["value"]["value"]);
|
return void callback(null, res["value"]["value"]);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-55
@@ -65,7 +65,7 @@ function writeResponse(sessionContext, res, close) {
|
|||||||
res.data +
|
res.data +
|
||||||
"\n\n";
|
"\n\n";
|
||||||
fs.appendFile(`./debug/${sessionContext.deviceId}.dump`, dump, err => {
|
fs.appendFile(`./debug/${sessionContext.deviceId}.dump`, dump, err => {
|
||||||
if (err) return throwError(err);
|
if (err) throwError(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ function writeResponse(sessionContext, res, close) {
|
|||||||
});
|
});
|
||||||
} else if (close) {
|
} else if (close) {
|
||||||
endSession(sessionContext, (err, isNew) => {
|
endSession(sessionContext, (err, isNew) => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
|
|
||||||
if (isNew) {
|
if (isNew) {
|
||||||
logger.accessInfo({
|
logger.accessInfo({
|
||||||
@@ -115,7 +115,7 @@ function writeResponse(sessionContext, res, close) {
|
|||||||
|
|
||||||
if (compress) {
|
if (compress) {
|
||||||
compress(res.data, (err, data) => {
|
compress(res.data, (err, data) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
res.headers["Content-Length"] = data.length;
|
res.headers["Content-Length"] = data.length;
|
||||||
sessionContext.httpResponse.writeHead(res.code, res.headers);
|
sessionContext.httpResponse.writeHead(res.code, res.headers);
|
||||||
@@ -187,7 +187,7 @@ function recordFault(sessionContext, fault, provisions, channels) {
|
|||||||
|
|
||||||
function inform(sessionContext, rpc) {
|
function inform(sessionContext, rpc) {
|
||||||
session.inform(sessionContext, rpc.cpeRequest, (err, acsResponse) => {
|
session.inform(sessionContext, rpc.cpeRequest, (err, acsResponse) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
const res = soap.response({
|
const res = soap.response({
|
||||||
id: rpc.id,
|
id: rpc.id,
|
||||||
@@ -213,7 +213,7 @@ function transferComplete(sessionContext, rpc) {
|
|||||||
sessionContext,
|
sessionContext,
|
||||||
rpc.cpeRequest,
|
rpc.cpeRequest,
|
||||||
(err, acsResponse, operation, fault) => {
|
(err, acsResponse, operation, fault) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
if (!operation) {
|
if (!operation) {
|
||||||
logger.accessWarn({
|
logger.accessWarn({
|
||||||
@@ -279,7 +279,7 @@ function appendProvisions(original, toAppend) {
|
|||||||
function applyPresets(sessionContext) {
|
function applyPresets(sessionContext) {
|
||||||
const deviceData = sessionContext.deviceData;
|
const deviceData = sessionContext.deviceData;
|
||||||
localCache.getPresets((err, presetsHash, presets) => {
|
localCache.getPresets((err, presetsHash, presets) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
// Filter presets based on existing faults
|
// Filter presets based on existing faults
|
||||||
const blackList = {};
|
const blackList = {};
|
||||||
@@ -361,15 +361,15 @@ function applyPresets(sessionContext) {
|
|||||||
sessionContext,
|
sessionContext,
|
||||||
declarations,
|
declarations,
|
||||||
(err, flt, reqId, acsReq) => {
|
(err, flt, reqId, acsReq) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
if (flt) {
|
if (flt) {
|
||||||
recordFault(sessionContext, flt);
|
recordFault(sessionContext, flt);
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
return applyPresets(sessionContext);
|
return void applyPresets(sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (acsReq) return sendAcsRequest(sessionContext, reqId, acsReq);
|
if (acsReq) return void sendAcsRequest(sessionContext, reqId, acsReq);
|
||||||
|
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
|
|
||||||
@@ -428,7 +428,7 @@ function applyPresets(sessionContext) {
|
|||||||
for (const f of Object.values(sessionContext.faults))
|
for (const f of Object.values(sessionContext.faults))
|
||||||
delete f.retryNow;
|
delete f.retryNow;
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
return sendAcsRequest(sessionContext);
|
return void sendAcsRequest(sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceData.timestamps.dirty = 0;
|
deviceData.timestamps.dirty = 0;
|
||||||
@@ -437,12 +437,12 @@ function applyPresets(sessionContext) {
|
|||||||
sessionContext,
|
sessionContext,
|
||||||
null,
|
null,
|
||||||
(err, fault, id, acsRequest) => {
|
(err, fault, id, acsRequest) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
if (fault) {
|
if (fault) {
|
||||||
recordFault(sessionContext, fault);
|
recordFault(sessionContext, fault);
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
return applyPresets(sessionContext);
|
return void applyPresets(sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!acsRequest) {
|
if (!acsRequest) {
|
||||||
@@ -455,13 +455,13 @@ function applyPresets(sessionContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (whiteList != null) return applyPresets(sessionContext);
|
if (whiteList != null) return void applyPresets(sessionContext);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
sessionContext.deviceData.timestamps.dirty > 1 ||
|
sessionContext.deviceData.timestamps.dirty > 1 ||
|
||||||
sessionContext.deviceData.attributes.dirty > 1
|
sessionContext.deviceData.attributes.dirty > 1
|
||||||
)
|
)
|
||||||
return applyPresets(sessionContext);
|
return void applyPresets(sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendAcsRequest(sessionContext, id, acsRequest);
|
sendAcsRequest(sessionContext, id, acsRequest);
|
||||||
@@ -474,15 +474,15 @@ function applyPresets(sessionContext) {
|
|||||||
|
|
||||||
function nextRpc(sessionContext) {
|
function nextRpc(sessionContext) {
|
||||||
session.rpcRequest(sessionContext, null, (err, fault, id, acsRequest) => {
|
session.rpcRequest(sessionContext, null, (err, fault, id, acsRequest) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
if (fault) {
|
if (fault) {
|
||||||
recordFault(sessionContext, fault);
|
recordFault(sessionContext, fault);
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
return nextRpc(sessionContext);
|
return void nextRpc(sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (acsRequest) return sendAcsRequest(sessionContext, id, acsRequest);
|
if (acsRequest) return void sendAcsRequest(sessionContext, id, acsRequest);
|
||||||
|
|
||||||
for (let [channel, flags] of Object.entries(sessionContext.channels)) {
|
for (let [channel, flags] of Object.entries(sessionContext.channels)) {
|
||||||
if (flags && sessionContext.faults[channel]) {
|
if (flags && sessionContext.faults[channel]) {
|
||||||
@@ -534,7 +534,7 @@ function nextRpc(sessionContext) {
|
|||||||
t => !sessionContext.faults[`task_${t._id}`]
|
t => !sessionContext.faults[`task_${t._id}`]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!task) return applyPresets(sessionContext);
|
if (!task) return void applyPresets(sessionContext);
|
||||||
|
|
||||||
let alias;
|
let alias;
|
||||||
|
|
||||||
@@ -589,7 +589,7 @@ function nextRpc(sessionContext) {
|
|||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return throwError(
|
return void throwError(
|
||||||
new Error("Task name not recognized"),
|
new Error("Task name not recognized"),
|
||||||
sessionContext.httpResponse
|
sessionContext.httpResponse
|
||||||
);
|
);
|
||||||
@@ -611,9 +611,9 @@ function endSession(sessionContext, callback) {
|
|||||||
err => {
|
err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) return callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -629,7 +629,7 @@ function endSession(sessionContext, callback) {
|
|||||||
err => {
|
err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
}
|
}
|
||||||
@@ -638,7 +638,7 @@ function endSession(sessionContext, callback) {
|
|||||||
db.deleteOperation(sessionContext.deviceId, k, err => {
|
db.deleteOperation(sessionContext.deviceId, k, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
});
|
});
|
||||||
@@ -652,7 +652,7 @@ function endSession(sessionContext, callback) {
|
|||||||
db.clearTasks(sessionContext.deviceId, sessionContext.doneTasks, err => {
|
db.clearTasks(sessionContext.deviceId, sessionContext.doneTasks, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
});
|
});
|
||||||
@@ -671,7 +671,7 @@ function endSession(sessionContext, callback) {
|
|||||||
err => {
|
err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
}
|
}
|
||||||
@@ -680,7 +680,7 @@ function endSession(sessionContext, callback) {
|
|||||||
db.deleteFault(sessionContext.deviceId, k, err => {
|
db.deleteFault(sessionContext.deviceId, k, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
});
|
});
|
||||||
@@ -699,9 +699,9 @@ function endSession(sessionContext, callback) {
|
|||||||
err => {
|
err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) return callback(null, sessionContext.new);
|
if ((counter -= 2) === 1) callback(null, sessionContext.new);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -710,7 +710,7 @@ function endSession(sessionContext, callback) {
|
|||||||
|
|
||||||
function sendAcsRequest(sessionContext, id, acsRequest) {
|
function sendAcsRequest(sessionContext, id, acsRequest) {
|
||||||
if (!acsRequest)
|
if (!acsRequest)
|
||||||
return writeResponse(sessionContext, soap.response(null), true);
|
return void writeResponse(sessionContext, soap.response(null), true);
|
||||||
|
|
||||||
if (acsRequest.name === "Download") {
|
if (acsRequest.name === "Download") {
|
||||||
if (!acsRequest.url) {
|
if (!acsRequest.url) {
|
||||||
@@ -724,14 +724,14 @@ function sendAcsRequest(sessionContext, id, acsRequest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (acsRequest.fileSize == null) {
|
if (acsRequest.fileSize == null) {
|
||||||
return localCache.getFiles((err, hash, files) => {
|
return void localCache.getFiles((err, hash, files) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
if (files[acsRequest.fileName])
|
if (files[acsRequest.fileName])
|
||||||
acsRequest.fileSize = files[acsRequest.fileName].length;
|
acsRequest.fileSize = files[acsRequest.fileName].length;
|
||||||
else acsRequest.fileSize = 0;
|
else acsRequest.fileSize = 0;
|
||||||
|
|
||||||
return sendAcsRequest(sessionContext, id, acsRequest);
|
sendAcsRequest(sessionContext, id, acsRequest);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -756,14 +756,14 @@ function getSession(connection, sessionId, callback) {
|
|||||||
const sessionContext = currentSessions.get(connection);
|
const sessionContext = currentSessions.get(connection);
|
||||||
if (sessionContext) {
|
if (sessionContext) {
|
||||||
currentSessions.delete(connection);
|
currentSessions.delete(connection);
|
||||||
return callback(null, sessionContext);
|
return void callback(null, sessionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sessionId) return callback();
|
if (!sessionId) return void callback();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
cache.pop(`session_${sessionId}`, (err, sessionContextString) => {
|
cache.pop(`session_${sessionId}`, (err, sessionContextString) => {
|
||||||
if (err || !sessionContextString) return callback(err);
|
if (err || !sessionContextString) return void callback(err);
|
||||||
session.deserialize(sessionContextString, callback);
|
session.deserialize(sessionContextString, callback);
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
@@ -792,18 +792,18 @@ function onConnection(socket) {
|
|||||||
|
|
||||||
const timeout =
|
const timeout =
|
||||||
sessionContext.lastActivity + sessionContext.timeout * 1000 - now;
|
sessionContext.lastActivity + sessionContext.timeout * 1000 - now;
|
||||||
if (timeout <= 0) return logger.accessError(timeoutMsg);
|
if (timeout <= 0) return void logger.accessError(timeoutMsg);
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
return cache.get(
|
cache.get(
|
||||||
`session_${sessionContext.sessionId}`,
|
`session_${sessionContext.sessionId}`,
|
||||||
(err, sessionContextString) => {
|
(err, sessionContextString) => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
|
|
||||||
if (!sessionContextString) return;
|
if (!sessionContextString) return;
|
||||||
|
|
||||||
session.deserialize(sessionContextString, (err, _sessionContext) => {
|
session.deserialize(sessionContextString, (err, _sessionContext) => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
if (_sessionContext.lastActivity === lastActivity)
|
if (_sessionContext.lastActivity === lastActivity)
|
||||||
logger.accessError(timeoutMsg);
|
logger.accessError(timeoutMsg);
|
||||||
});
|
});
|
||||||
@@ -812,13 +812,13 @@ function onConnection(socket) {
|
|||||||
}, timeout + 1000).unref();
|
}, timeout + 1000).unref();
|
||||||
|
|
||||||
session.serialize(sessionContext, (err, sessionContextString) => {
|
session.serialize(sessionContext, (err, sessionContextString) => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
cache.set(
|
cache.set(
|
||||||
`session_${sessionContext.sessionId}`,
|
`session_${sessionContext.sessionId}`,
|
||||||
sessionContextString,
|
sessionContextString,
|
||||||
Math.ceil(timeout / 1000) + 3,
|
Math.ceil(timeout / 1000) + 3,
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -843,11 +843,11 @@ setInterval(() => {
|
|||||||
|
|
||||||
function getDueTasksAndFaultsAndOperations(deviceId, timestamp, callback) {
|
function getDueTasksAndFaultsAndOperations(deviceId, timestamp, callback) {
|
||||||
cache.get(`${deviceId}_tasks_faults_operations`, (err, res) => {
|
cache.get(`${deviceId}_tasks_faults_operations`, (err, res) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
res = JSON.parse(res);
|
res = JSON.parse(res);
|
||||||
return callback(
|
return void callback(
|
||||||
null,
|
null,
|
||||||
res.tasks || [],
|
res.tasks || [],
|
||||||
res.faults || {},
|
res.faults || {},
|
||||||
@@ -860,7 +860,7 @@ function getDueTasksAndFaultsAndOperations(deviceId, timestamp, callback) {
|
|||||||
db.getFaults(deviceId, (err, _faults) => {
|
db.getFaults(deviceId, (err, _faults) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (callback) callback(err);
|
if (callback) callback(err);
|
||||||
return (callback = null);
|
return void (callback = null);
|
||||||
}
|
}
|
||||||
faults = _faults;
|
faults = _faults;
|
||||||
if (tasks && operations)
|
if (tasks && operations)
|
||||||
@@ -870,7 +870,7 @@ function getDueTasksAndFaultsAndOperations(deviceId, timestamp, callback) {
|
|||||||
db.getDueTasks(deviceId, timestamp, (err, dueTasks, nextTimestamp) => {
|
db.getDueTasks(deviceId, timestamp, (err, dueTasks, nextTimestamp) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (callback) callback(err);
|
if (callback) callback(err);
|
||||||
return (callback = null);
|
return void (callback = null);
|
||||||
}
|
}
|
||||||
tasks = dueTasks;
|
tasks = dueTasks;
|
||||||
cacheUntil = nextTimestamp || 0;
|
cacheUntil = nextTimestamp || 0;
|
||||||
@@ -881,7 +881,7 @@ function getDueTasksAndFaultsAndOperations(deviceId, timestamp, callback) {
|
|||||||
db.getOperations(deviceId, (err, _operations) => {
|
db.getOperations(deviceId, (err, _operations) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (callback) callback(err);
|
if (callback) callback(err);
|
||||||
return (callback = null);
|
return void (callback = null);
|
||||||
}
|
}
|
||||||
operations = _operations;
|
operations = _operations;
|
||||||
if (faults && tasks)
|
if (faults && tasks)
|
||||||
@@ -950,14 +950,14 @@ function processRequest(sessionContext, rpc) {
|
|||||||
});
|
});
|
||||||
writeResponse(sessionContext, res);
|
writeResponse(sessionContext, res);
|
||||||
} else {
|
} else {
|
||||||
return throwError(
|
return void throwError(
|
||||||
new Error("ACS method not supported"),
|
new Error("ACS method not supported"),
|
||||||
sessionContext.httpResponse
|
sessionContext.httpResponse
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (rpc.cpeResponse) {
|
} else if (rpc.cpeResponse) {
|
||||||
session.rpcResponse(sessionContext, rpc.id, rpc.cpeResponse, err => {
|
session.rpcResponse(sessionContext, rpc.id, rpc.cpeResponse, err => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
nextRpc(sessionContext);
|
nextRpc(sessionContext);
|
||||||
});
|
});
|
||||||
} else if (rpc.cpeFault) {
|
} else if (rpc.cpeFault) {
|
||||||
@@ -968,7 +968,7 @@ function processRequest(sessionContext, rpc) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
session.rpcFault(sessionContext, rpc.id, rpc.cpeFault, (err, fault) => {
|
session.rpcFault(sessionContext, rpc.id, rpc.cpeFault, (err, fault) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
if (fault) {
|
if (fault) {
|
||||||
recordFault(sessionContext, fault);
|
recordFault(sessionContext, fault);
|
||||||
session.clearProvisions(sessionContext);
|
session.clearProvisions(sessionContext);
|
||||||
@@ -978,7 +978,7 @@ function processRequest(sessionContext, rpc) {
|
|||||||
} else {
|
} else {
|
||||||
// CPE sent empty response
|
// CPE sent empty response
|
||||||
session.timeoutOperations(sessionContext, (err, faults, operations) => {
|
session.timeoutOperations(sessionContext, (err, faults, operations) => {
|
||||||
if (err) return throwError(err, sessionContext.httpResponse);
|
if (err) return void throwError(err, sessionContext.httpResponse);
|
||||||
|
|
||||||
for (let i of faults) {
|
for (let i of faults) {
|
||||||
for (let [k, v] of Object.entries(operations[i].retries))
|
for (let [k, v] of Object.entries(operations[i].retries))
|
||||||
@@ -1080,7 +1080,7 @@ function listener(httpRequest, httpResponse) {
|
|||||||
body +
|
body +
|
||||||
"\n\n";
|
"\n\n";
|
||||||
fs.appendFile(`./debug/${sessionContext.deviceId}.dump`, dump, err => {
|
fs.appendFile(`./debug/${sessionContext.deviceId}.dump`, dump, err => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1088,7 +1088,7 @@ function listener(httpRequest, httpResponse) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSession(httpRequest.connection, sessionId, (err, sessionContext) => {
|
getSession(httpRequest.connection, sessionId, (err, sessionContext) => {
|
||||||
if (err) return throwError(err, httpResponse);
|
if (err) return void throwError(err, httpResponse);
|
||||||
|
|
||||||
if (sessionContext) {
|
if (sessionContext) {
|
||||||
sessionContext.httpRequest = httpRequest;
|
sessionContext.httpRequest = httpRequest;
|
||||||
@@ -1155,7 +1155,7 @@ function listener(httpRequest, httpResponse) {
|
|||||||
stats.concurrentRequests -= 1;
|
stats.concurrentRequests -= 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return parsedRpc(sessionContext, rpc, parseWarnings);
|
return void parsedRpc(sessionContext, rpc, parseWarnings);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(rpc.cpeRequest && rpc.cpeRequest.name === "Inform")) {
|
if (!(rpc.cpeRequest && rpc.cpeRequest.name === "Inform")) {
|
||||||
@@ -1180,7 +1180,7 @@ function listener(httpRequest, httpResponse) {
|
|||||||
rpc.cwmpVersion,
|
rpc.cwmpVersion,
|
||||||
rpc.sessionTimeout || config.get("SESSION_TIMEOUT", deviceId),
|
rpc.sessionTimeout || config.get("SESSION_TIMEOUT", deviceId),
|
||||||
(err, _sessionContext) => {
|
(err, _sessionContext) => {
|
||||||
if (err) return throwError(err, httpResponse);
|
if (err) return void throwError(err, httpResponse);
|
||||||
|
|
||||||
_sessionContext.httpRequest = httpRequest;
|
_sessionContext.httpRequest = httpRequest;
|
||||||
_sessionContext.httpResponse = httpResponse;
|
_sessionContext.httpResponse = httpResponse;
|
||||||
@@ -1191,7 +1191,7 @@ function listener(httpRequest, httpResponse) {
|
|||||||
deviceId,
|
deviceId,
|
||||||
_sessionContext.timestamp,
|
_sessionContext.timestamp,
|
||||||
(err, dueTasks, faults, operations, cacheUntil) => {
|
(err, dueTasks, faults, operations, cacheUntil) => {
|
||||||
if (err) return throwError(err, httpResponse);
|
if (err) return void throwError(err, httpResponse);
|
||||||
|
|
||||||
_sessionContext.tasks = dueTasks;
|
_sessionContext.tasks = dueTasks;
|
||||||
_sessionContext.operations = operations;
|
_sessionContext.operations = operations;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function connect(callback) {
|
|||||||
mongodb.MongoClient.connect(
|
mongodb.MongoClient.connect(
|
||||||
config.get("MONGODB_CONNECTION_URL"),
|
config.get("MONGODB_CONNECTION_URL"),
|
||||||
(err, db) => {
|
(err, db) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
exports.mongoDb = db;
|
exports.mongoDb = db;
|
||||||
db.collection("tasks", (err, collection) => {
|
db.collection("tasks", (err, collection) => {
|
||||||
@@ -47,63 +47,63 @@ function connect(callback) {
|
|||||||
|
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("devices", (err, collection) => {
|
db.collection("devices", (err, collection) => {
|
||||||
exports.devicesCollection = devicesCollection = collection;
|
exports.devicesCollection = devicesCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("presets", (err, collection) => {
|
db.collection("presets", (err, collection) => {
|
||||||
exports.presetsCollection = presetsCollection = collection;
|
exports.presetsCollection = presetsCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("objects", (err, collection) => {
|
db.collection("objects", (err, collection) => {
|
||||||
exports.objectsCollection = objectsCollection = collection;
|
exports.objectsCollection = objectsCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("fs.files", (err, collection) => {
|
db.collection("fs.files", (err, collection) => {
|
||||||
exports.filesCollection = filesCollection = collection;
|
exports.filesCollection = filesCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("provisions", (err, collection) => {
|
db.collection("provisions", (err, collection) => {
|
||||||
exports.provisionsCollection = provisionsCollection = collection;
|
exports.provisionsCollection = provisionsCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("virtualParameters", (err, collection) => {
|
db.collection("virtualParameters", (err, collection) => {
|
||||||
exports.virtualParametersCollection = virtualParametersCollection = collection;
|
exports.virtualParametersCollection = virtualParametersCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
db.collection("faults", (err, collection) => {
|
db.collection("faults", (err, collection) => {
|
||||||
exports.faultsCollection = faultsCollection = collection;
|
exports.faultsCollection = faultsCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return db.collection("operations", (err, collection) => {
|
db.collection("operations", (err, collection) => {
|
||||||
exports.operationsCollection = operationsCollection = collection;
|
exports.operationsCollection = operationsCollection = collection;
|
||||||
if (--callbackCounter === 0 || err) {
|
if (--callbackCounter === 0 || err) {
|
||||||
callbackCounter = 0;
|
callbackCounter = 0;
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -285,7 +285,7 @@ function fetchDevice(id, timestamp, patterns, callback) {
|
|||||||
else proj = projection;
|
else proj = projection;
|
||||||
|
|
||||||
devicesCollection.findOne({ _id: id }, proj, (err, device) => {
|
devicesCollection.findOne({ _id: id }, proj, (err, device) => {
|
||||||
if (err || !device) return callback(err);
|
if (err || !device) return void callback(err);
|
||||||
|
|
||||||
function storeParams(obj, path, ts, descendantsFetched, projTree) {
|
function storeParams(obj, path, ts, descendantsFetched, projTree) {
|
||||||
let thisFetched = false;
|
let thisFetched = false;
|
||||||
@@ -731,7 +731,7 @@ function saveDevice(deviceId, deviceData, isNew, sessionTimestamp, callback) {
|
|||||||
if (!Object.keys(v).length) delete update[k];
|
if (!Object.keys(v).length) delete update[k];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Object.keys(update).length) return callback();
|
if (!Object.keys(update).length) return void callback();
|
||||||
|
|
||||||
// Mongo doesn't allow $addToSet and $pull at the same time
|
// Mongo doesn't allow $addToSet and $pull at the same time
|
||||||
let update2;
|
let update2;
|
||||||
@@ -745,13 +745,21 @@ function saveDevice(deviceId, deviceData, isNew, sessionTimestamp, callback) {
|
|||||||
update,
|
update,
|
||||||
{ upsert: isNew },
|
{ upsert: isNew },
|
||||||
(err, result) => {
|
(err, result) => {
|
||||||
if (!err && result.result.n !== 1)
|
if (!err && result.result.n !== 1) {
|
||||||
return callback(new Error(`Device ${deviceId} not found in database`));
|
return void callback(
|
||||||
|
new Error(`Device ${deviceId} not found in database`)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (update2)
|
if (update2) {
|
||||||
return devicesCollection.update({ _id: deviceId }, update2, callback);
|
return void devicesCollection.update(
|
||||||
|
{ _id: deviceId },
|
||||||
|
update2,
|
||||||
|
callback
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return callback(err);
|
callback(err);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -798,14 +806,14 @@ function getDueTasks(deviceId, timestamp, callback) {
|
|||||||
let f;
|
let f;
|
||||||
cur.nextObject(
|
cur.nextObject(
|
||||||
(f = (err, task) => {
|
(f = (err, task) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (!task) return callback(null, tasks, null);
|
if (!task) return void callback(null, tasks, null);
|
||||||
|
|
||||||
if (task.timestamp) task.timestamp = +task.timestamp;
|
if (task.timestamp) task.timestamp = +task.timestamp;
|
||||||
if (task.expiry) task.expiry = +task.expiry;
|
if (task.expiry) task.expiry = +task.expiry;
|
||||||
if (task.timestamp >= timestamp)
|
if (task.timestamp >= timestamp)
|
||||||
return callback(null, tasks, +task.timestamp);
|
return void callback(null, tasks, +task.timestamp);
|
||||||
task._id = String(task._id);
|
task._id = String(task._id);
|
||||||
|
|
||||||
tasks.push(task);
|
tasks.push(task);
|
||||||
@@ -818,7 +826,7 @@ function getDueTasks(deviceId, timestamp, callback) {
|
|||||||
else q = { _id: task.file };
|
else q = { _id: task.file };
|
||||||
|
|
||||||
filesCollection.find(q).toArray((err, res) => {
|
filesCollection.find(q).toArray((err, res) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (res[0]) {
|
if (res[0]) {
|
||||||
if (!task.fileType) task.fileType = res[0].metadata.fileType;
|
if (!task.fileType) task.fileType = res[0].metadata.fileType;
|
||||||
@@ -847,7 +855,7 @@ function getOperations(deviceId, callback) {
|
|||||||
operationsCollection
|
operationsCollection
|
||||||
.find({ _id: { $regex: `^${common.escapeRegExp(deviceId)}\\:` } })
|
.find({ _id: { $regex: `^${common.escapeRegExp(deviceId)}\\:` } })
|
||||||
.toArray((err, res) => {
|
.toArray((err, res) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
const operations = {};
|
const operations = {};
|
||||||
for (const r of res) {
|
for (const r of res) {
|
||||||
|
|||||||
+1
-4
@@ -65,10 +65,7 @@ function run(args, callback) {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (id in jobs) {
|
if (id in jobs) {
|
||||||
delete jobs[id];
|
delete jobs[id];
|
||||||
return callback(null, {
|
callback(null, { code: "timeout", message: "Extension timed out" });
|
||||||
code: "timeout",
|
|
||||||
message: "Extension timed out"
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}, TIMEOUT);
|
}, TIMEOUT);
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -70,7 +70,7 @@ function flattenObject(src, prefix = "", dst = {}) {
|
|||||||
|
|
||||||
function refresh(callback) {
|
function refresh(callback) {
|
||||||
if (!nextRefresh) {
|
if (!nextRefresh) {
|
||||||
return setTimeout(() => {
|
return void setTimeout(() => {
|
||||||
refresh(callback);
|
refresh(callback);
|
||||||
}, 20);
|
}, 20);
|
||||||
}
|
}
|
||||||
@@ -79,15 +79,15 @@ function refresh(callback) {
|
|||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
|
|
||||||
cache.get("presets_hash", (err, dbHash) => {
|
cache.get("presets_hash", (err, dbHash) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (hash && dbHash === hash) {
|
if (hash && dbHash === hash) {
|
||||||
nextRefresh = now + (REFRESH - (now % REFRESH));
|
nextRefresh = now + (REFRESH - (now % REFRESH));
|
||||||
return callback();
|
return void callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
cache.lock("presets_hash_lock", 3, (err, unlockOrExtend) => {
|
cache.lock("presets_hash_lock", 3, (err, unlockOrExtend) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
let counter = 3;
|
let counter = 3;
|
||||||
|
|
||||||
@@ -95,13 +95,13 @@ function refresh(callback) {
|
|||||||
db.getPresets((err, res) => {
|
db.getPresets((err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
db.getObjects((err, objects) => {
|
db.getObjects((err, objects) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
objects = objects.map(obj => {
|
objects = objects.map(obj => {
|
||||||
@@ -212,7 +212,7 @@ function refresh(callback) {
|
|||||||
default:
|
default:
|
||||||
if (counter & 1)
|
if (counter & 1)
|
||||||
callback(new Error(`Unknown configuration type ${c.type}`));
|
callback(new Error(`Unknown configuration type ${c.type}`));
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,7 +241,7 @@ function refresh(callback) {
|
|||||||
db.getProvisions((err, res) => {
|
db.getProvisions((err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
provisions = {};
|
provisions = {};
|
||||||
@@ -271,7 +271,7 @@ function refresh(callback) {
|
|||||||
db.getVirtualParameters((err, res) => {
|
db.getVirtualParameters((err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtualParameters = {};
|
virtualParameters = {};
|
||||||
@@ -301,7 +301,7 @@ function refresh(callback) {
|
|||||||
db.getFiles((err, res) => {
|
db.getFiles((err, res) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
files = {};
|
files = {};
|
||||||
@@ -336,7 +336,7 @@ function refresh(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getPresets(callback) {
|
function getPresets(callback) {
|
||||||
if (Date.now() < nextRefresh) return callback(null, hash, presets);
|
if (Date.now() < nextRefresh) return void callback(null, hash, presets);
|
||||||
|
|
||||||
refresh(err => {
|
refresh(err => {
|
||||||
callback(err, hash, presets);
|
callback(err, hash, presets);
|
||||||
@@ -344,7 +344,7 @@ function getPresets(callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getFiles(callback) {
|
function getFiles(callback) {
|
||||||
if (Date.now() < nextRefresh) return callback(null, hash, files);
|
if (Date.now() < nextRefresh) return void callback(null, hash, files);
|
||||||
|
|
||||||
refresh(err => {
|
refresh(err => {
|
||||||
callback(err, hash, files);
|
callback(err, hash, files);
|
||||||
@@ -353,7 +353,7 @@ function getFiles(callback) {
|
|||||||
|
|
||||||
function getProvisionsAndVirtualParameters(callback) {
|
function getProvisionsAndVirtualParameters(callback) {
|
||||||
if (Date.now() < nextRefresh)
|
if (Date.now() < nextRefresh)
|
||||||
return callback(null, hash, provisions, virtualParameters);
|
return void callback(null, hash, provisions, virtualParameters);
|
||||||
|
|
||||||
refresh(err => {
|
refresh(err => {
|
||||||
callback(err, hash, provisions, virtualParameters);
|
callback(err, hash, provisions, virtualParameters);
|
||||||
|
|||||||
+42
-40
@@ -84,10 +84,10 @@ function listener(request, response) {
|
|||||||
const preset = JSON.parse(body);
|
const preset = JSON.parse(body);
|
||||||
preset._id = presetName;
|
preset._id = presetName;
|
||||||
db.presetsCollection.save(preset, err => {
|
db.presetsCollection.save(preset, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -95,10 +95,10 @@ function listener(request, response) {
|
|||||||
});
|
});
|
||||||
} else if (request.method === "DELETE") {
|
} else if (request.method === "DELETE") {
|
||||||
db.presetsCollection.remove({ _id: presetName }, err => {
|
db.presetsCollection.remove({ _id: presetName }, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -116,10 +116,10 @@ function listener(request, response) {
|
|||||||
const object = JSON.parse(body);
|
const object = JSON.parse(body);
|
||||||
object._id = objectName;
|
object._id = objectName;
|
||||||
db.objectsCollection.save(object, err => {
|
db.objectsCollection.save(object, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -127,10 +127,10 @@ function listener(request, response) {
|
|||||||
});
|
});
|
||||||
} else if (request.method === "DELETE") {
|
} else if (request.method === "DELETE") {
|
||||||
db.objectsCollection.remove({ _id: objectName }, err => {
|
db.objectsCollection.remove({ _id: objectName }, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -159,10 +159,10 @@ function listener(request, response) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
db.provisionsCollection.save(object, err => {
|
db.provisionsCollection.save(object, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -170,10 +170,10 @@ function listener(request, response) {
|
|||||||
});
|
});
|
||||||
} else if (request.method === "DELETE") {
|
} else if (request.method === "DELETE") {
|
||||||
db.provisionsCollection.remove({ _id: provisionName }, err => {
|
db.provisionsCollection.remove({ _id: provisionName }, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -202,10 +202,10 @@ function listener(request, response) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
db.virtualParametersCollection.save(object, err => {
|
db.virtualParametersCollection.save(object, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -215,10 +215,10 @@ function listener(request, response) {
|
|||||||
db.virtualParametersCollection.remove(
|
db.virtualParametersCollection.remove(
|
||||||
{ _id: virtualParameterName },
|
{ _id: virtualParameterName },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del("presets_hash", err => {
|
cache.del("presets_hash", err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -239,7 +239,7 @@ function listener(request, response) {
|
|||||||
{ $addToSet: { _tags: tag } },
|
{ $addToSet: { _tags: tag } },
|
||||||
{ safe: true },
|
{ safe: true },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
}
|
}
|
||||||
@@ -250,7 +250,7 @@ function listener(request, response) {
|
|||||||
{ $pull: { _tags: tag } },
|
{ $pull: { _tags: tag } },
|
||||||
{ safe: true },
|
{ safe: true },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -268,15 +268,15 @@ function listener(request, response) {
|
|||||||
const deviceId = faultId.split(":", 1)[0];
|
const deviceId = faultId.split(":", 1)[0];
|
||||||
const channel = faultId.slice(deviceId.length + 1);
|
const channel = faultId.slice(deviceId.length + 1);
|
||||||
db.faultsCollection.remove({ _id: faultId }, err => {
|
db.faultsCollection.remove({ _id: faultId }, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
if (channel.startsWith("task_")) {
|
if (channel.startsWith("task_")) {
|
||||||
const objId = new mongodb.ObjectID(channel.slice(5));
|
const objId = new mongodb.ObjectID(channel.slice(5));
|
||||||
return db.tasksCollection.remove({ _id: objId }, err => {
|
return void db.tasksCollection.remove({ _id: objId }, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -285,7 +285,7 @@ function listener(request, response) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -304,10 +304,10 @@ function listener(request, response) {
|
|||||||
const task = JSON.parse(body);
|
const task = JSON.parse(body);
|
||||||
task.device = deviceId;
|
task.device = deviceId;
|
||||||
apiFunctions.insertTasks(task, err => {
|
apiFunctions.insertTasks(task, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
if (urlParts.query.connection_request != null) {
|
if (urlParts.query.connection_request != null) {
|
||||||
apiFunctions.connectionRequest(deviceId, err => {
|
apiFunctions.connectionRequest(deviceId, err => {
|
||||||
@@ -328,7 +328,7 @@ function listener(request, response) {
|
|||||||
task._id,
|
task._id,
|
||||||
DEVICE_ONLINE_THRESHOLD,
|
DEVICE_ONLINE_THRESHOLD,
|
||||||
(err, status) => {
|
(err, status) => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
if (status === "timeout") {
|
if (status === "timeout") {
|
||||||
response.writeHead(
|
response.writeHead(
|
||||||
@@ -343,7 +343,7 @@ function listener(request, response) {
|
|||||||
db.tasksCollection.findOne(
|
db.tasksCollection.findOne(
|
||||||
{ _id: task._id },
|
{ _id: task._id },
|
||||||
(err, task2) => {
|
(err, task2) => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(202, "Task faulted", {
|
response.writeHead(202, "Task faulted", {
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
@@ -397,7 +397,7 @@ function listener(request, response) {
|
|||||||
{ _id: new mongodb.ObjectID(taskId) },
|
{ _id: new mongodb.ObjectID(taskId) },
|
||||||
{ device: 1 },
|
{ device: 1 },
|
||||||
(err, task) => {
|
(err, task) => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
if (!task) {
|
if (!task) {
|
||||||
response.writeHead(404);
|
response.writeHead(404);
|
||||||
@@ -409,15 +409,15 @@ function listener(request, response) {
|
|||||||
db.tasksCollection.remove(
|
db.tasksCollection.remove(
|
||||||
{ _id: new mongodb.ObjectID(taskId) },
|
{ _id: new mongodb.ObjectID(taskId) },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
db.faultsCollection.remove(
|
db.faultsCollection.remove(
|
||||||
{ _id: `${deviceId}:task_${taskId}` },
|
{ _id: `${deviceId}:task_${taskId}` },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -438,16 +438,16 @@ function listener(request, response) {
|
|||||||
{ _id: new mongodb.ObjectID(taskId) },
|
{ _id: new mongodb.ObjectID(taskId) },
|
||||||
{ device: 1 },
|
{ device: 1 },
|
||||||
(err, task) => {
|
(err, task) => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
const deviceId = task.device;
|
const deviceId = task.device;
|
||||||
db.faultsCollection.remove(
|
db.faultsCollection.remove(
|
||||||
{ _id: `${deviceId}:task_${taskId}` },
|
{ _id: `${deviceId}:task_${taskId}` },
|
||||||
err => {
|
err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
cache.del(`${deviceId}_tasks_faults_operations`, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -479,13 +479,13 @@ function listener(request, response) {
|
|||||||
metadata: metadata
|
metadata: metadata
|
||||||
});
|
});
|
||||||
gs.open(err => {
|
gs.open(err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
gs.write(body, err => {
|
gs.write(body, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
gs.close(err => {
|
gs.close(err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(201);
|
response.writeHead(201);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -494,7 +494,7 @@ function listener(request, response) {
|
|||||||
});
|
});
|
||||||
} else if (request.method === "DELETE") {
|
} else if (request.method === "DELETE") {
|
||||||
mongodb.GridStore.unlink(db.mongoDb, filename, err => {
|
mongodb.GridStore.unlink(db.mongoDb, filename, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -529,7 +529,7 @@ function listener(request, response) {
|
|||||||
DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1]
|
DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1]
|
||||||
);
|
);
|
||||||
apiFunctions.deleteDevice(deviceId, err => {
|
apiFunctions.deleteDevice(deviceId, err => {
|
||||||
if (err) return throwError(err, response);
|
if (err) return void throwError(err, response);
|
||||||
|
|
||||||
response.writeHead(200);
|
response.writeHead(200);
|
||||||
response.end();
|
response.end();
|
||||||
@@ -617,7 +617,7 @@ function listener(request, response) {
|
|||||||
cur.limit((limit = parseInt(urlParts.query.limit)));
|
cur.limit((limit = parseInt(urlParts.query.limit)));
|
||||||
|
|
||||||
cur.count(false, (err, total) => {
|
cur.count(false, (err, total) => {
|
||||||
if (err) return throwError(err);
|
if (err) return void throwError(err);
|
||||||
|
|
||||||
response.writeHead(200, {
|
response.writeHead(200, {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -646,6 +646,8 @@ function listener(request, response) {
|
|||||||
response.end("\n]");
|
response.end("\n]");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+12
-10
@@ -34,6 +34,8 @@ const COMMIT = Symbol();
|
|||||||
// Used to execute extensions and restart
|
// Used to execute extensions and restart
|
||||||
const EXT = Symbol();
|
const EXT = Symbol();
|
||||||
|
|
||||||
|
const UNDEFINED = undefined;
|
||||||
|
|
||||||
const context = vm.createContext();
|
const context = vm.createContext();
|
||||||
|
|
||||||
let state;
|
let state;
|
||||||
@@ -117,14 +119,14 @@ class ParameterWrapper {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!unpacked.length) return undefined;
|
if (!unpacked.length) return UNDEFINED;
|
||||||
|
|
||||||
let attr = state.sessionContext.deviceData.attributes.get(
|
let attr = state.sessionContext.deviceData.attributes.get(
|
||||||
unpacked[0],
|
unpacked[0],
|
||||||
state.revision
|
state.revision
|
||||||
)[attrName];
|
)[attrName];
|
||||||
|
|
||||||
if (!attr) return undefined;
|
if (!attr) return UNDEFINED;
|
||||||
|
|
||||||
return attr[1];
|
return attr[1];
|
||||||
}
|
}
|
||||||
@@ -144,7 +146,7 @@ class ParameterWrapper {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!unpacked.length) return undefined;
|
if (!unpacked.length) return UNDEFINED;
|
||||||
|
|
||||||
return unpacked[0].join(".");
|
return unpacked[0].join(".");
|
||||||
}
|
}
|
||||||
@@ -163,7 +165,7 @@ class ParameterWrapper {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!unpacked.length) return undefined;
|
if (!unpacked.length) return UNDEFINED;
|
||||||
|
|
||||||
return unpacked.length;
|
return unpacked.length;
|
||||||
}
|
}
|
||||||
@@ -349,7 +351,7 @@ function run(
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err === COMMIT) status = 1;
|
if (err === COMMIT) status = 1;
|
||||||
else if (err === EXT) status = 2;
|
else if (err === EXT) status = 2;
|
||||||
else return callback(null, errorToFault(err));
|
else return void callback(null, errorToFault(err));
|
||||||
}
|
}
|
||||||
|
|
||||||
let _state = state;
|
let _state = state;
|
||||||
@@ -370,13 +372,13 @@ function run(
|
|||||||
(err, fault) => {
|
(err, fault) => {
|
||||||
if (err || fault) {
|
if (err || fault) {
|
||||||
if (counter & 1) callback(err, fault);
|
if (counter & 1) callback(err, fault);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) {
|
if ((counter -= 2) === 1) {
|
||||||
if (status === 2) {
|
if (status === 2) {
|
||||||
return run.apply(null, args);
|
return void run.apply(null, args);
|
||||||
} else {
|
} else {
|
||||||
return callback(
|
return void callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
_state.clear,
|
_state.clear,
|
||||||
@@ -392,9 +394,9 @@ function run(
|
|||||||
|
|
||||||
if ((counter -= 2) === 1) {
|
if ((counter -= 2) === 1) {
|
||||||
if (status === 2) {
|
if (status === 2) {
|
||||||
return run.apply(null, args);
|
run.apply(null, args);
|
||||||
} else {
|
} else {
|
||||||
return callback(
|
callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
_state.clear,
|
_state.clear,
|
||||||
|
|||||||
+1
-1
@@ -43,7 +43,7 @@ const { listener, onConnection } = require(`./${service}`);
|
|||||||
let server;
|
let server;
|
||||||
|
|
||||||
function closeServer(timeout, callback) {
|
function closeServer(timeout, callback) {
|
||||||
if (!server) return callback();
|
if (!server) return void callback();
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!callback) return;
|
if (!callback) return;
|
||||||
|
|||||||
+70
-56
@@ -69,7 +69,7 @@ function init(deviceId, cwmpVersion, timeout, callback) {
|
|||||||
|
|
||||||
localCache.getProvisionsAndVirtualParameters(
|
localCache.getProvisionsAndVirtualParameters(
|
||||||
(err, hash, provisions, virtualParameters) => {
|
(err, hash, provisions, virtualParameters) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
sessionContext.presetsHash = hash;
|
sessionContext.presetsHash = hash;
|
||||||
provisionsCache.set(sessionContext, provisions);
|
provisionsCache.set(sessionContext, provisions);
|
||||||
@@ -80,7 +80,8 @@ function init(deviceId, cwmpVersion, timeout, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function loadParameters(sessionContext, callback) {
|
function loadParameters(sessionContext, callback) {
|
||||||
if (!sessionContext.toLoad || !sessionContext.toLoad.size) return callback();
|
if (!sessionContext.toLoad || !sessionContext.toLoad.size)
|
||||||
|
return void callback();
|
||||||
|
|
||||||
const toLoad = Array.from(sessionContext.toLoad.entries());
|
const toLoad = Array.from(sessionContext.toLoad.entries());
|
||||||
db.fetchDevice(
|
db.fetchDevice(
|
||||||
@@ -88,7 +89,7 @@ function loadParameters(sessionContext, callback) {
|
|||||||
sessionContext.timestamp,
|
sessionContext.timestamp,
|
||||||
toLoad,
|
toLoad,
|
||||||
(err, parameters, loaded) => {
|
(err, parameters, loaded) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (!parameters) {
|
if (!parameters) {
|
||||||
// Device not available in database, mark as new
|
// Device not available in database, mark as new
|
||||||
@@ -211,7 +212,7 @@ function inform(sessionContext, rpcReq, callback) {
|
|||||||
for (const p of params) loadPath(sessionContext, p[0]);
|
for (const p of params) loadPath(sessionContext, p[0]);
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (sessionContext.new) {
|
if (sessionContext.new) {
|
||||||
params.push([
|
params.push([
|
||||||
@@ -267,7 +268,8 @@ function transferComplete(sessionContext, rpcReq, callback) {
|
|||||||
const commandKey = rpcReq.commandKey;
|
const commandKey = rpcReq.commandKey;
|
||||||
const operation = sessionContext.operations[commandKey];
|
const operation = sessionContext.operations[commandKey];
|
||||||
|
|
||||||
if (!operation) return callback(null, { name: "TransferCompleteResponse" });
|
if (!operation)
|
||||||
|
return void callback(null, { name: "TransferCompleteResponse" });
|
||||||
|
|
||||||
const instance = operation.args.instance;
|
const instance = operation.args.instance;
|
||||||
|
|
||||||
@@ -276,7 +278,7 @@ function transferComplete(sessionContext, rpcReq, callback) {
|
|||||||
sessionContext.operationsTouched[commandKey] = 1;
|
sessionContext.operationsTouched[commandKey] = 1;
|
||||||
|
|
||||||
if (rpcReq.faultStruct && rpcReq.faultStruct.faultCode !== "0") {
|
if (rpcReq.faultStruct && rpcReq.faultStruct.faultCode !== "0") {
|
||||||
return revertDownloadParameters(
|
return void revertDownloadParameters(
|
||||||
sessionContext,
|
sessionContext,
|
||||||
operation.args.instance,
|
operation.args.instance,
|
||||||
err => {
|
err => {
|
||||||
@@ -295,7 +297,7 @@ function transferComplete(sessionContext, rpcReq, callback) {
|
|||||||
loadPath(sessionContext, ["Downloads", instance, "*"]);
|
loadPath(sessionContext, ["Downloads", instance, "*"]);
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
let toClear = null;
|
let toClear = null;
|
||||||
const timestamp = sessionContext.timestamp + sessionContext.iteration + 1;
|
const timestamp = sessionContext.timestamp + sessionContext.iteration + 1;
|
||||||
@@ -390,7 +392,7 @@ function revertDownloadParameters(sessionContext, instance, callback) {
|
|||||||
loadPath(sessionContext, ["Downloads", instance, "*"]);
|
loadPath(sessionContext, ["Downloads", instance, "*"]);
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
const timestamp = sessionContext.timestamp + sessionContext.iteration + 1;
|
const timestamp = sessionContext.timestamp + sessionContext.iteration + 1;
|
||||||
|
|
||||||
@@ -434,8 +436,11 @@ function timeoutOperations(sessionContext, callback) {
|
|||||||
let counter = 3;
|
let counter = 3;
|
||||||
|
|
||||||
for (const [commandKey, operation] of Object.entries(operations)) {
|
for (const [commandKey, operation] of Object.entries(operations)) {
|
||||||
if (operation.name !== "Download")
|
if (operation.name !== "Download") {
|
||||||
return callback(new Error(`Unknown operation name ${operation.name}`));
|
return void callback(
|
||||||
|
new Error(`Unknown operation name ${operation.name}`)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const DOWNLOAD_TIMEOUT =
|
const DOWNLOAD_TIMEOUT =
|
||||||
config.get("DOWNLOAD_TIMEOUT", sessionContext.deviceId) * 1000;
|
config.get("DOWNLOAD_TIMEOUT", sessionContext.deviceId) * 1000;
|
||||||
@@ -458,7 +463,7 @@ function timeoutOperations(sessionContext, callback) {
|
|||||||
revertDownloadParameters(sessionContext, operation.args.instance, err => {
|
revertDownloadParameters(sessionContext, operation.args.instance, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (counter & 1) callback(err);
|
if (counter & 1) callback(err);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
if ((counter -= 2) === 1) callback(null, faults, operations);
|
if ((counter -= 2) === 1) callback(null, faults, operations);
|
||||||
});
|
});
|
||||||
@@ -575,7 +580,7 @@ function runProvisions(
|
|||||||
(err, _fault, _clear, _declarations, _done) => {
|
(err, _fault, _clear, _declarations, _done) => {
|
||||||
if (err || _fault) {
|
if (err || _fault) {
|
||||||
if (counter & 1) callback(err, _fault);
|
if (counter & 1) callback(err, _fault);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
done = done && _done;
|
done = done && _done;
|
||||||
allDeclarations[j] = _declarations || [];
|
allDeclarations[j] = _declarations || [];
|
||||||
@@ -626,7 +631,7 @@ function runVirtualParameters(
|
|||||||
(err, _fault, _clear, _declarations, _done, _returnValue) => {
|
(err, _fault, _clear, _declarations, _done, _returnValue) => {
|
||||||
if (err || _fault) {
|
if (err || _fault) {
|
||||||
if (counter & 1) callback(err, _fault);
|
if (counter & 1) callback(err, _fault);
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
done = done && _done;
|
done = done && _done;
|
||||||
@@ -642,7 +647,7 @@ function runVirtualParameters(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ret = {};
|
const ret = {};
|
||||||
@@ -659,7 +664,7 @@ function runVirtualParameters(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_returnValue.value != null) {
|
if (_returnValue.value != null) {
|
||||||
@@ -697,7 +702,7 @@ function runVirtualParameters(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
ret.value = device.sanitizeParameterValue(_returnValue.value);
|
ret.value = device.sanitizeParameterValue(_returnValue.value);
|
||||||
} else if (provision[1].value != null || provision[2].value != null) {
|
} else if (provision[1].value != null || provision[2].value != null) {
|
||||||
@@ -708,7 +713,7 @@ function runVirtualParameters(
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return (counter = 0);
|
return void (counter = 0);
|
||||||
}
|
}
|
||||||
virtualParameterUpdates[j] = ret;
|
virtualParameterUpdates[j] = ret;
|
||||||
}
|
}
|
||||||
@@ -716,7 +721,7 @@ function runVirtualParameters(
|
|||||||
if ((counter -= 2) === 1) {
|
if ((counter -= 2) === 1) {
|
||||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations);
|
allDeclarations = Array.prototype.concat.apply([], allDeclarations);
|
||||||
allClear = Array.prototype.concat.apply([], allClear);
|
allClear = Array.prototype.concat.apply([], allClear);
|
||||||
return callback(
|
callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
done ? virtualParameterUpdates : null,
|
done ? virtualParameterUpdates : null,
|
||||||
@@ -731,7 +736,7 @@ function runVirtualParameters(
|
|||||||
if ((counter -= 2) === 1) {
|
if ((counter -= 2) === 1) {
|
||||||
allDeclarations = Array.prototype.concat.apply([], allDeclarations);
|
allDeclarations = Array.prototype.concat.apply([], allDeclarations);
|
||||||
allClear = Array.prototype.concat.apply([], allClear);
|
allClear = Array.prototype.concat.apply([], allClear);
|
||||||
return callback(
|
callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
done ? virtualParameterUpdates : null,
|
done ? virtualParameterUpdates : null,
|
||||||
@@ -933,7 +938,7 @@ function runDeclarations(sessionContext, declarations) {
|
|||||||
|
|
||||||
function rpcRequest(sessionContext, _declarations, callback) {
|
function rpcRequest(sessionContext, _declarations, callback) {
|
||||||
if (sessionContext.rpcRequest != null) {
|
if (sessionContext.rpcRequest != null) {
|
||||||
return callback(
|
return void callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
generateRpcId(sessionContext),
|
generateRpcId(sessionContext),
|
||||||
@@ -947,7 +952,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
!(_declarations && _declarations.length) &&
|
!(_declarations && _declarations.length) &&
|
||||||
!sessionContext.provisions.length
|
!sessionContext.provisions.length
|
||||||
)
|
)
|
||||||
return callback();
|
return void callback();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
sessionContext.declarations.length <=
|
sessionContext.declarations.length <=
|
||||||
@@ -967,17 +972,17 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
provisions = sessionContext.virtualParameters[inception - 1];
|
provisions = sessionContext.virtualParameters[inception - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return run(
|
return void run(
|
||||||
sessionContext,
|
sessionContext,
|
||||||
provisions,
|
provisions,
|
||||||
sessionContext.revisions[inception - 1] || 0,
|
sessionContext.revisions[inception - 1] || 0,
|
||||||
sessionContext.revisions[inception],
|
sessionContext.revisions[inception],
|
||||||
(err, fault, ret, decs, toClear) => {
|
(err, fault, ret, decs, toClear) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (fault) {
|
if (fault) {
|
||||||
fault.timestamp = sessionContext.timestamp;
|
fault.timestamp = sessionContext.timestamp;
|
||||||
return callback(null, fault);
|
return void callback(null, fault);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enforce max clear timestamp
|
// Enforce max clear timestamp
|
||||||
@@ -1006,10 +1011,10 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clear(sessionContext, toClear, err => {
|
clear(sessionContext, toClear, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
rpcRequest(sessionContext, _declarations, callback);
|
rpcRequest(sessionContext, _declarations, callback);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -1029,15 +1034,15 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
loadPath(sessionContext, ad[0]);
|
loadPath(sessionContext, ad[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return loadParameters(sessionContext, err => {
|
return void loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
rpcRequest(sessionContext, null, callback);
|
rpcRequest(sessionContext, null, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sessionContext.rpcCount >= 255) {
|
if (sessionContext.rpcCount >= 255) {
|
||||||
return callback(null, {
|
return void callback(null, {
|
||||||
code: "too_many_rpcs",
|
code: "too_many_rpcs",
|
||||||
message: "Too many RPC requests",
|
message: "Too many RPC requests",
|
||||||
timestamp: sessionContext.timestamp
|
timestamp: sessionContext.timestamp
|
||||||
@@ -1045,7 +1050,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sessionContext.revisions.length >= 8) {
|
if (sessionContext.revisions.length >= 8) {
|
||||||
return callback(null, {
|
return void callback(null, {
|
||||||
code: "deeply_nested_vparams",
|
code: "deeply_nested_vparams",
|
||||||
message:
|
message:
|
||||||
"Virtual parameters are referencing other virtual parameters in a deeply nested manner",
|
"Virtual parameters are referencing other virtual parameters in a deeply nested manner",
|
||||||
@@ -1054,7 +1059,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sessionContext.cycle >= 255) {
|
if (sessionContext.cycle >= 255) {
|
||||||
return callback(null, {
|
return void callback(null, {
|
||||||
code: "too_many_cycles",
|
code: "too_many_cycles",
|
||||||
message: "Too many provision cycles",
|
message: "Too many provision cycles",
|
||||||
timestamp: sessionContext.timestamp
|
timestamp: sessionContext.timestamp
|
||||||
@@ -1062,7 +1067,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sessionContext.iteration >= MAX_ITERATIONS * (sessionContext.cycle + 1)) {
|
if (sessionContext.iteration >= MAX_ITERATIONS * (sessionContext.cycle + 1)) {
|
||||||
return callback(null, {
|
return void callback(null, {
|
||||||
code: "too_many_commits",
|
code: "too_many_commits",
|
||||||
message: "Too many commit iterations",
|
message: "Too many commit iterations",
|
||||||
timestamp: sessionContext.timestamp
|
timestamp: sessionContext.timestamp
|
||||||
@@ -1166,14 +1171,14 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
return clear(sessionContext, toClear, err => {
|
return void clear(sessionContext, toClear, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
sessionContext.syncState.virtualParameterDeclarations[inception] = vpd;
|
sessionContext.syncState.virtualParameterDeclarations[inception] = vpd;
|
||||||
rpcRequest(sessionContext, null, callback);
|
rpcRequest(sessionContext, null, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sessionContext.syncState) return callback();
|
if (!sessionContext.syncState) return void callback();
|
||||||
|
|
||||||
const inception = sessionContext.declarations.length - 1;
|
const inception = sessionContext.declarations.length - 1;
|
||||||
|
|
||||||
@@ -1190,7 +1195,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
if (sessionContext.deviceData.changes.has("prerequisite")) {
|
if (sessionContext.deviceData.changes.has("prerequisite")) {
|
||||||
delete sessionContext.syncState;
|
delete sessionContext.syncState;
|
||||||
device.clearTrackers(sessionContext.deviceData, "prerequisite");
|
device.clearTrackers(sessionContext.deviceData, "prerequisite");
|
||||||
return rpcRequest(sessionContext, null, callback);
|
return void rpcRequest(sessionContext, null, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
let toClear;
|
let toClear;
|
||||||
@@ -1340,8 +1345,8 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (toClear || sessionContext.deviceData.changes.has("prerequisite")) {
|
if (toClear || sessionContext.deviceData.changes.has("prerequisite")) {
|
||||||
return clear(sessionContext, toClear, err => {
|
return void clear(sessionContext, toClear, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
rpcRequest(sessionContext, null, callback);
|
rpcRequest(sessionContext, null, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1358,11 +1363,11 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
if (provisions) {
|
if (provisions) {
|
||||||
sessionContext.virtualParameters.push(provisions);
|
sessionContext.virtualParameters.push(provisions);
|
||||||
sessionContext.revisions.push(sessionContext.revisions[inception]);
|
sessionContext.revisions.push(sessionContext.revisions[inception]);
|
||||||
return rpcRequest(sessionContext, null, callback);
|
return void rpcRequest(sessionContext, null, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sessionContext.rpcRequest) {
|
if (sessionContext.rpcRequest) {
|
||||||
return callback(
|
return void callback(
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
generateRpcId(sessionContext),
|
generateRpcId(sessionContext),
|
||||||
@@ -1375,7 +1380,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
sessionContext.syncState.virtualParameterDeclarations.pop();
|
sessionContext.syncState.virtualParameterDeclarations.pop();
|
||||||
|
|
||||||
const ret = sessionContext.provisionsRet.splice(inception)[0];
|
const ret = sessionContext.provisionsRet.splice(inception)[0];
|
||||||
if (!ret) return rpcRequest(sessionContext, null, callback);
|
if (!ret) return void rpcRequest(sessionContext, null, callback);
|
||||||
|
|
||||||
sessionContext.revisions.pop();
|
sessionContext.revisions.pop();
|
||||||
const rev =
|
const rev =
|
||||||
@@ -1391,7 +1396,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const vparams = sessionContext.virtualParameters.pop();
|
const vparams = sessionContext.virtualParameters.pop();
|
||||||
if (!vparams) return callback();
|
if (!vparams) return void callback();
|
||||||
|
|
||||||
const timestamp = sessionContext.timestamp + sessionContext.iteration;
|
const timestamp = sessionContext.timestamp + sessionContext.iteration;
|
||||||
let toClear;
|
let toClear;
|
||||||
@@ -1409,7 +1414,7 @@ function rpcRequest(sessionContext, _declarations, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clear(sessionContext, toClear, err => {
|
clear(sessionContext, toClear, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
rpcRequest(sessionContext, null, callback);
|
rpcRequest(sessionContext, null, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -2154,7 +2159,7 @@ function processInstances(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function clear(sessionContext, toClear, callback) {
|
function clear(sessionContext, toClear, callback) {
|
||||||
if (!toClear || !toClear.length) return callback();
|
if (!toClear || !toClear.length) return void callback();
|
||||||
|
|
||||||
const MAX_DEPTH = config.get("MAX_DEPTH", sessionContext.deviceId);
|
const MAX_DEPTH = config.get("MAX_DEPTH", sessionContext.deviceId);
|
||||||
|
|
||||||
@@ -2178,7 +2183,7 @@ function clear(sessionContext, toClear, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
for (const c of toClear)
|
for (const c of toClear)
|
||||||
device.clear(sessionContext.deviceData, c[0], c[1], c[2], c[3]);
|
device.clear(sessionContext.deviceData, c[0], c[1], c[2], c[3]);
|
||||||
|
|
||||||
@@ -2188,7 +2193,7 @@ function clear(sessionContext, toClear, callback) {
|
|||||||
|
|
||||||
function rpcResponse(sessionContext, id, rpcRes, callback) {
|
function rpcResponse(sessionContext, id, rpcRes, callback) {
|
||||||
if (id !== generateRpcId(sessionContext))
|
if (id !== generateRpcId(sessionContext))
|
||||||
return callback(new Error("Request ID not recognized"));
|
return void callback(new Error("Request ID not recognized"));
|
||||||
|
|
||||||
++sessionContext.rpcCount;
|
++sessionContext.rpcCount;
|
||||||
|
|
||||||
@@ -2248,8 +2253,11 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
|
|
||||||
switch (rpcRes.name) {
|
switch (rpcRes.name) {
|
||||||
case "GetParameterValuesResponse":
|
case "GetParameterValuesResponse":
|
||||||
if (rpcReq.name !== "GetParameterValues")
|
if (rpcReq.name !== "GetParameterValues") {
|
||||||
return callback(new Error("Response name does not match request name"));
|
return void callback(
|
||||||
|
new Error("Response name does not match request name")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
for (const p of rpcRes.parameterList) {
|
for (const p of rpcRes.parameterList) {
|
||||||
toClear = device.set(
|
toClear = device.set(
|
||||||
@@ -2263,8 +2271,11 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case "GetParameterNamesResponse":
|
case "GetParameterNamesResponse":
|
||||||
if (rpcReq.name !== "GetParameterNames")
|
if (rpcReq.name !== "GetParameterNames") {
|
||||||
return callback(new Error("Response name does not match request name"));
|
return void callback(
|
||||||
|
new Error("Response name does not match request name")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (rpcReq.parameterPath.endsWith("."))
|
if (rpcReq.parameterPath.endsWith("."))
|
||||||
root = common.parsePath(rpcReq.parameterPath.slice(0, -1));
|
root = common.parsePath(rpcReq.parameterPath.slice(0, -1));
|
||||||
@@ -2333,7 +2344,7 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadParameters(sessionContext, err => {
|
loadParameters(sessionContext, err => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
if (!root.length) {
|
if (!root.length) {
|
||||||
for (const n of [
|
for (const n of [
|
||||||
@@ -2365,8 +2376,11 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
case "SetParameterValuesResponse":
|
case "SetParameterValuesResponse":
|
||||||
if (rpcReq.name !== "SetParameterValues")
|
if (rpcReq.name !== "SetParameterValues") {
|
||||||
return callback(new Error("Response name does not match request name"));
|
return void callback(
|
||||||
|
new Error("Response name does not match request name")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
for (const p of rpcReq.parameterList) {
|
for (const p of rpcReq.parameterList) {
|
||||||
toClear = device.set(
|
toClear = device.set(
|
||||||
@@ -2505,7 +2519,7 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return callback(new Error("Response name not recognized"));
|
return void callback(new Error("Response name not recognized"));
|
||||||
}
|
}
|
||||||
clear(sessionContext, toClear, callback);
|
clear(sessionContext, toClear, callback);
|
||||||
}
|
}
|
||||||
@@ -2527,12 +2541,12 @@ function rpcFault(sessionContext, id, faultResponse, callback) {
|
|||||||
function deserialize(sessionContextString, callback) {
|
function deserialize(sessionContextString, callback) {
|
||||||
localCache.getProvisionsAndVirtualParameters(
|
localCache.getProvisionsAndVirtualParameters(
|
||||||
(err, hash, provisions, virtualParameters) => {
|
(err, hash, provisions, virtualParameters) => {
|
||||||
if (err) return callback(err);
|
if (err) return void callback(err);
|
||||||
|
|
||||||
const sessionContext = JSON.parse(sessionContextString);
|
const sessionContext = JSON.parse(sessionContextString);
|
||||||
|
|
||||||
if (sessionContext.presetsHash && sessionContext.presetsHash !== hash)
|
if (sessionContext.presetsHash && sessionContext.presetsHash !== hash)
|
||||||
return callback(new Error("Preset hash mismatch"));
|
return void callback(new Error("Preset hash mismatch"));
|
||||||
|
|
||||||
provisionsCache.set(sessionContext, provisions);
|
provisionsCache.set(sessionContext, provisions);
|
||||||
virtualParametersCache.set(sessionContext, virtualParameters);
|
virtualParametersCache.set(sessionContext, virtualParameters);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const NONEXISTENT = new Object();
|
const NONEXISTENT = new Object();
|
||||||
|
const UNDEFINED = undefined;
|
||||||
|
|
||||||
function compareEquality(a, b) {
|
function compareEquality(a, b) {
|
||||||
var t = typeof a;
|
var t = typeof a;
|
||||||
@@ -61,14 +62,16 @@ class VersionedMap {
|
|||||||
if (rev == null) rev = this._revision;
|
if (rev == null) rev = this._revision;
|
||||||
|
|
||||||
var v = this.map.get(key);
|
var v = this.map.get(key);
|
||||||
if (!v) return;
|
if (!v) return UNDEFINED;
|
||||||
|
|
||||||
for (let i = Math.min(v.length - 1, rev); i >= 0; --i) {
|
for (let i = Math.min(v.length - 1, rev); i >= 0; --i) {
|
||||||
if (i in v) {
|
if (i in v) {
|
||||||
if (v[i] === NONEXISTENT) return undefined;
|
if (v[i] === NONEXISTENT) return UNDEFINED;
|
||||||
else return v[i];
|
else return v[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
has(key, rev) {
|
has(key, rev) {
|
||||||
@@ -99,7 +102,7 @@ class VersionedMap {
|
|||||||
v = [];
|
v = [];
|
||||||
v[rev] = value;
|
v[rev] = value;
|
||||||
this.map.set(key, v);
|
this.map.set(key, v);
|
||||||
return this;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var old = v[Math.min(rev, v.length - 1)];
|
var old = v[Math.min(rev, v.length - 1)];
|
||||||
|
|||||||
Reference in new issue
Block a user