Recover from invalid parameter name faults

A fault can happen if a parameter no longer exists. This code attempts
to recover from the fault by refreshing the relavent parameters.
This commit is contained in:
Zaid Abdulla committed 2018-12-03 22:58:42 -08:00
1 parent dfc8928a71
commit c5efaacb79
1 file changed
+33 -3
+33 -3
View File
@@ -2552,8 +2552,39 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
}
function rpcFault(sessionContext, id, faultResponse, callback) {
// TODO Consider handling invalid parameter faults by automatically refreshing
// relevant data model portions
const rpcReq = sessionContext.rpcRequest;
delete sessionContext.syncState;
delete sessionContext.rpcRequest;
// Recover from invalid parameter name faults
if (faultResponse.detail.faultCode === "9005") {
const timestamp = sessionContext.timestamp + sessionContext.iteration;
let toClear;
if (rpcReq.name === "GetParameterNames") {
if (rpcReq.parameterPath) {
toClear = [
[rpcReq.parameterPath.replace(/\.$/, "").split("."), timestamp]
];
}
} else if (rpcReq.name === "GetParameterValues") {
toClear = rpcReq.parameterNames.map(p => [
p.replace(/\.$/, "").split("."),
timestamp
]);
} else if (rpcReq.name === "SetParameterValues") {
toClear = rpcReq.parameterList.map(p => [
p[0].replace(/\.$/, "").split("."),
timestamp
]);
} else if (rpcReq.name === "AddObject") {
toClear = [[rpcReq.objectName.replace(/\.$/, "").split("."), timestamp]];
} else if (rpcReq.name === "DeleteObject") {
toClear = [[rpcReq.objectName.replace(/\.$/, "").split("."), timestamp]];
}
if (toClear) return void clear(sessionContext, toClear, callback);
}
const fault = {
code: `cwmp.${faultResponse.detail.faultCode}`,
message: faultResponse.detail.faultString,
@@ -2561,7 +2592,6 @@ function rpcFault(sessionContext, id, faultResponse, callback) {
timestamp: sessionContext.timestamp
};
delete sessionContext.syncState;
callback(null, fault);
}