oem-ibm: Add support for fileAckWithMetaData command
The commit adds handler support for the oem-ibm File I/O
fileAckWithMetaData command.
Tested: A fileAckWithMetaData command was honored.
Change-Id: Ief2cf7185ad47837a408124586e15895ef60e95b
Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
diff --git a/oem/ibm/libpldmresponder/file_io.cpp b/oem/ibm/libpldmresponder/file_io.cpp
index f223819..0ce4b1c 100644
--- a/oem/ibm/libpldmresponder/file_io.cpp
+++ b/oem/ibm/libpldmresponder/file_io.cpp
@@ -1145,6 +1145,54 @@
return response;
}
+Response Handler::fileAckWithMetaData(const pldm_msg* request,
+ size_t payloadLength)
+{
+ Response response(
+ sizeof(pldm_msg_hdr) + PLDM_FILE_ACK_WITH_META_DATA_RESP_BYTES);
+
+ if (payloadLength != PLDM_FILE_ACK_WITH_META_DATA_REQ_BYTES)
+ {
+ return CmdHandler::ccOnlyResponse(request, PLDM_ERROR_INVALID_LENGTH);
+ }
+ uint16_t fileType{};
+ uint32_t fileHandle{};
+ uint8_t fileStatus{};
+ uint32_t fileMetaData1{};
+ uint32_t fileMetaData2{};
+ uint32_t fileMetaData3{};
+ uint32_t fileMetaData4{};
+
+ auto rc = decode_file_ack_with_meta_data_req(
+ request, payloadLength, &fileType, &fileHandle, &fileStatus,
+ &fileMetaData1, &fileMetaData2, &fileMetaData3, &fileMetaData4);
+
+ if (rc != PLDM_SUCCESS)
+ {
+ return CmdHandler::ccOnlyResponse(request, rc);
+ }
+
+ std::unique_ptr<FileHandler> handler{};
+ try
+ {
+ handler = getHandlerByType(fileType, fileHandle);
+ }
+ catch (const InternalFailure& e)
+ {
+ error(
+ "Unknown file type, '{TYPE}' in fileAckWithMetaData and error - {ERROR}",
+ "TYPE", fileType, "ERROR", e);
+ return CmdHandler::ccOnlyResponse(request, PLDM_INVALID_FILE_TYPE);
+ }
+
+ rc = handler->fileAckWithMetaData(fileStatus, fileMetaData1, fileMetaData2,
+ fileMetaData3, fileMetaData4);
+ auto responsePtr = new (response.data()) pldm_msg;
+ encode_file_ack_with_meta_data_resp(request->hdr.instance_id, rc,
+ responsePtr);
+ return response;
+}
+
} // namespace oem_ibm
} // namespace responder
} // namespace pldm