New config option cwmp.downloadSuccessOnTimeout
Workaround for CPEs that neglect to send TransferComplete message after a successful download.
This commit is contained in:
1 parent
1d02893692
commit
088e25cbb0
1 file changed
+40
-12
+40
-12
@@ -458,22 +458,50 @@ export async function timeoutOperations(
|
|||||||
(e) => configContextCallback(sessionContext, e)
|
(e) => configContextCallback(sessionContext, e)
|
||||||
) * 1000;
|
) * 1000;
|
||||||
|
|
||||||
if (sessionContext.timestamp > operation.timestamp + DOWNLOAD_TIMEOUT) {
|
if (sessionContext.timestamp < operation.timestamp + DOWNLOAD_TIMEOUT)
|
||||||
delete sessionContext.operations[commandKey];
|
continue;
|
||||||
if (!sessionContext.operationsTouched)
|
|
||||||
sessionContext.operationsTouched = {};
|
|
||||||
sessionContext.operationsTouched[commandKey] = 1;
|
|
||||||
|
|
||||||
faults.push({
|
logger.accessWarn({
|
||||||
code: "timeout",
|
sessionContext: sessionContext,
|
||||||
message: "Download operation timed out",
|
message: "Download operation timed out",
|
||||||
timestamp: operation.timestamp,
|
commandKey: commandKey,
|
||||||
});
|
});
|
||||||
|
|
||||||
operations.push(operation);
|
const SUCCESS_ON_TIMEOUT = +localCache.getConfig(
|
||||||
|
sessionContext.cacheSnapshot,
|
||||||
|
"cwmp.downloadSuccessOnTimeout",
|
||||||
|
{},
|
||||||
|
sessionContext.timestamp,
|
||||||
|
(e) => configContextCallback(sessionContext, e)
|
||||||
|
);
|
||||||
|
|
||||||
revertDownloadParameters(sessionContext, operation.args.instance);
|
if (SUCCESS_ON_TIMEOUT) {
|
||||||
|
const r = {
|
||||||
|
name: "TransferComplete" as const,
|
||||||
|
commandKey: commandKey,
|
||||||
|
startTime: 0,
|
||||||
|
completeTime: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Call transferComplete code and ignore the response
|
||||||
|
await transferComplete(sessionContext, r);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete sessionContext.operations[commandKey];
|
||||||
|
if (!sessionContext.operationsTouched)
|
||||||
|
sessionContext.operationsTouched = {};
|
||||||
|
sessionContext.operationsTouched[commandKey] = 1;
|
||||||
|
|
||||||
|
faults.push({
|
||||||
|
code: "timeout",
|
||||||
|
message: "Download operation timed out",
|
||||||
|
timestamp: operation.timestamp,
|
||||||
|
});
|
||||||
|
|
||||||
|
operations.push(operation);
|
||||||
|
|
||||||
|
revertDownloadParameters(sessionContext, operation.args.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { faults, operations };
|
return { faults, operations };
|
||||||
|
|||||||
Reference in new issue
Block a user