New config option cwmp.downloadSuccessOnTimeout

Workaround for CPEs that neglect to send TransferComplete message after
a successful download.
This commit is contained in:
Zaid Abdulla committed 2021-08-11 12:27:51 -07:00
1 parent 1d02893692
commit 088e25cbb0
1 file changed
+30 -2
+30 -2
View File
@@ -458,7 +458,36 @@ 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)
continue;
logger.accessWarn({
sessionContext: sessionContext,
message: "Download operation timed out",
commandKey: commandKey,
});
const SUCCESS_ON_TIMEOUT = +localCache.getConfig(
sessionContext.cacheSnapshot,
"cwmp.downloadSuccessOnTimeout",
{},
sessionContext.timestamp,
(e) => configContextCallback(sessionContext, e)
);
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]; delete sessionContext.operations[commandKey];
if (!sessionContext.operationsTouched) if (!sessionContext.operationsTouched)
sessionContext.operationsTouched = {}; sessionContext.operationsTouched = {};
@@ -474,7 +503,6 @@ export async function timeoutOperations(
revertDownloadParameters(sessionContext, operation.args.instance); revertDownloadParameters(sessionContext, operation.args.instance);
} }
}
return { faults, operations }; return { faults, operations };
} }