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) {
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user