Fault when GPVR doesn't contain expected params
This commit is contained in:
1 parent
bdad2f9a32
commit
12197f3b2a
2 files changed
+20
-2
No files matched your search
+9
-1
@@ -1228,7 +1228,15 @@ async function processRequest(
|
|||||||
} else if (rpc.cpeResponse) {
|
} else if (rpc.cpeResponse) {
|
||||||
if (sessionContext.state !== 2) return reportBadState(sessionContext);
|
if (sessionContext.state !== 2) return reportBadState(sessionContext);
|
||||||
|
|
||||||
await session.rpcResponse(sessionContext, rpc.id, rpc.cpeResponse);
|
const fault = await session.rpcResponse(
|
||||||
|
sessionContext,
|
||||||
|
rpc.id,
|
||||||
|
rpc.cpeResponse
|
||||||
|
);
|
||||||
|
if (fault) {
|
||||||
|
recordFault(sessionContext, fault);
|
||||||
|
session.clearProvisions(sessionContext);
|
||||||
|
}
|
||||||
return nextRpc(sessionContext);
|
return nextRpc(sessionContext);
|
||||||
} else if (rpc.cpeFault) {
|
} else if (rpc.cpeFault) {
|
||||||
if (sessionContext.state !== 2) return reportBadState(sessionContext);
|
if (sessionContext.state !== 2) return reportBadState(sessionContext);
|
||||||
|
|||||||
+11
-1
@@ -2419,7 +2419,7 @@ export async function rpcResponse(
|
|||||||
sessionContext: SessionContext,
|
sessionContext: SessionContext,
|
||||||
id: string,
|
id: string,
|
||||||
_rpcRes: CpeResponse
|
_rpcRes: CpeResponse
|
||||||
): Promise<void> {
|
): Promise<Fault> {
|
||||||
if (id !== generateRpcId(sessionContext))
|
if (id !== generateRpcId(sessionContext))
|
||||||
throw new Error("Request ID not recognized");
|
throw new Error("Request ID not recognized");
|
||||||
|
|
||||||
@@ -2514,6 +2514,14 @@ export async function rpcResponse(
|
|||||||
if (rpcReq.name !== "GetParameterValues")
|
if (rpcReq.name !== "GetParameterValues")
|
||||||
throw new Error("Response name does not match request name");
|
throw new Error("Response name does not match request name");
|
||||||
|
|
||||||
|
if (rpcRes.parameterList.length !== rpcReq.parameterNames.length) {
|
||||||
|
return {
|
||||||
|
code: `invalid_response`,
|
||||||
|
message:
|
||||||
|
"The list of parameters returned in the GetParameterValuesResponse message does not match the requested parameters",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
for (const p of rpcRes.parameterList) {
|
for (const p of rpcRes.parameterList) {
|
||||||
toClear = device.set(
|
toClear = device.set(
|
||||||
sessionContext.deviceData,
|
sessionContext.deviceData,
|
||||||
@@ -2813,6 +2821,8 @@ export async function rpcResponse(
|
|||||||
for (const c of toClear)
|
for (const c of toClear)
|
||||||
device.clear(sessionContext.deviceData, c[0], c[1], c[2], c[3]);
|
device.clear(sessionContext.deviceData, c[0], c[1], c[2], c[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function rpcFault(
|
export async function rpcFault(
|
||||||
|
|||||||
Reference in new issue
Block a user