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:
1 parent
dfc8928a71
commit
c5efaacb79
1 file changed
+33
-3
+33
-3
@@ -2552,8 +2552,39 @@ function rpcResponse(sessionContext, id, rpcRes, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function rpcFault(sessionContext, id, faultResponse, callback) {
|
function rpcFault(sessionContext, id, faultResponse, callback) {
|
||||||
// TODO Consider handling invalid parameter faults by automatically refreshing
|
const rpcReq = sessionContext.rpcRequest;
|
||||||
// relevant data model portions
|
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 = {
|
const fault = {
|
||||||
code: `cwmp.${faultResponse.detail.faultCode}`,
|
code: `cwmp.${faultResponse.detail.faultCode}`,
|
||||||
message: faultResponse.detail.faultString,
|
message: faultResponse.detail.faultString,
|
||||||
@@ -2561,7 +2592,6 @@ function rpcFault(sessionContext, id, faultResponse, callback) {
|
|||||||
timestamp: sessionContext.timestamp
|
timestamp: sessionContext.timestamp
|
||||||
};
|
};
|
||||||
|
|
||||||
delete sessionContext.syncState;
|
|
||||||
callback(null, fault);
|
callback(null, fault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user