pldm: libpldmresponder: call ccOnlyResponse when en/decoding errors
Should return ccOnlyResponse when en/decoding process encounters an
error, to avoid redundant data in response.
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I8ae02f588740de1ffd6dde99c92046b7cc1d5c39
diff --git a/libpldmresponder/base.cpp b/libpldmresponder/base.cpp
index 4d0c4f9..1071324 100644
--- a/libpldmresponder/base.cpp
+++ b/libpldmresponder/base.cpp
@@ -56,8 +56,12 @@
Response response(sizeof(pldm_msg_hdr) + PLDM_GET_TYPES_RESP_BYTES, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
- encode_get_types_resp(request->hdr.instance_id, PLDM_SUCCESS, types.data(),
- responsePtr);
+ auto rc = encode_get_types_resp(request->hdr.instance_id, PLDM_SUCCESS,
+ types.data(), responsePtr);
+ if (rc != PLDM_SUCCESS)
+ {
+ return CmdHandler::ccOnlyResponse(request, rc);
+ }
return response;
}
@@ -74,19 +78,15 @@
if (rc != PLDM_SUCCESS)
{
- encode_get_commands_resp(request->hdr.instance_id, rc, nullptr,
- responsePtr);
- return response;
+ return CmdHandler::ccOnlyResponse(request, rc);
}
// DSP0240 has this as a bitfield8[N], where N = 0 to 31
std::array<bitfield8_t, 32> cmds{};
if (capabilities.find(type) == capabilities.end())
{
- encode_get_commands_resp(request->hdr.instance_id,
- PLDM_ERROR_INVALID_PLDM_TYPE, nullptr,
- responsePtr);
- return response;
+ return CmdHandler::ccOnlyResponse(request,
+ PLDM_ERROR_INVALID_PLDM_TYPE);
}
for (const auto& cmd : capabilities.at(type))
@@ -97,8 +97,12 @@
cmds[index].byte |= 1 << bit;
}
- encode_get_commands_resp(request->hdr.instance_id, PLDM_SUCCESS,
- cmds.data(), responsePtr);
+ rc = encode_get_commands_resp(request->hdr.instance_id, PLDM_SUCCESS,
+ cmds.data(), responsePtr);
+ if (rc != PLDM_SUCCESS)
+ {
+ return ccOnlyResponse(request, rc);
+ }
return response;
}
@@ -117,9 +121,7 @@
if (rc != PLDM_SUCCESS)
{
- encode_get_version_resp(request->hdr.instance_id, rc, 0, 0, nullptr, 4,
- responsePtr);
- return response;
+ return CmdHandler::ccOnlyResponse(request, rc);
}
ver32_t version{};
@@ -127,16 +129,18 @@
if (search == versions.end())
{
- encode_get_version_resp(request->hdr.instance_id,
- PLDM_ERROR_INVALID_PLDM_TYPE, 0, 0, nullptr, 4,
- responsePtr);
- return response;
+ return CmdHandler::ccOnlyResponse(request,
+ PLDM_ERROR_INVALID_PLDM_TYPE);
}
memcpy(&version, &(search->second), sizeof(version));
- encode_get_version_resp(request->hdr.instance_id, PLDM_SUCCESS, 0,
- PLDM_START_AND_END, &version, sizeof(pldm_version),
- responsePtr);
+ rc = encode_get_version_resp(request->hdr.instance_id, PLDM_SUCCESS, 0,
+ PLDM_START_AND_END, &version,
+ sizeof(pldm_version), responsePtr);
+ if (rc != PLDM_SUCCESS)
+ {
+ return ccOnlyResponse(request, rc);
+ }
return response;
}
@@ -148,8 +152,12 @@
Response response(sizeof(pldm_msg_hdr) + PLDM_GET_TID_RESP_BYTES, 0);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
- encode_get_tid_resp(request->hdr.instance_id, PLDM_SUCCESS, tid,
- responsePtr);
+ auto rc = encode_get_tid_resp(request->hdr.instance_id, PLDM_SUCCESS, tid,
+ responsePtr);
+ if (rc != PLDM_SUCCESS)
+ {
+ return ccOnlyResponse(request, rc);
+ }
return response;
}