Refactor the responder functions for file I/O
The ReadFileIntoMemory and WriteFileFromMemory command's responder
function is refactored to return the PLDM response message. The caller
cannot know the space for the response buffer if the responder has a
variable length of response.
Change-Id: I81f649098a7711772b35ae3d0d8d23c7cd24e7e7
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/libpldmresponder/file_io.hpp b/libpldmresponder/file_io.hpp
index ea3a932..17a6fe2 100644
--- a/libpldmresponder/file_io.hpp
+++ b/libpldmresponder/file_io.hpp
@@ -14,6 +14,8 @@
namespace responder
{
+using Response = std::vector<uint8_t>;
+
namespace utils
{
@@ -104,15 +106,17 @@
* @param[in] address - DMA address on the host
* @param[in] upstream - indicates direction of the transfer; true indicates
* transfer to the host
- * @param[out] response - response message location
+ * @return PLDM response message
*/
template <class DMAInterface>
-void transferAll(DMAInterface* intf, uint8_t command, fs::path& path,
- uint32_t offset, uint32_t length, uint64_t address,
- bool upstream, pldm_msg* response)
+Response transferAll(DMAInterface* intf, uint8_t command, fs::path& path,
+ uint32_t offset, uint32_t length, uint64_t address,
+ bool upstream)
{
uint32_t origLength = length;
+ Response response(sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_RESP_BYTES, 0);
+ auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
while (length > dma::maxSize)
{
@@ -120,8 +124,8 @@
upstream);
if (rc < 0)
{
- encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
- return;
+ encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, responsePtr);
+ return response;
}
offset += dma::maxSize;
@@ -132,12 +136,13 @@
auto rc = intf->transferDataHost(path, offset, length, address, upstream);
if (rc < 0)
{
- encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, response);
- return;
+ encode_rw_file_memory_resp(0, command, PLDM_ERROR, 0, responsePtr);
+ return response;
}
- encode_rw_file_memory_resp(0, command, PLDM_SUCCESS, origLength, response);
- return;
+ encode_rw_file_memory_resp(0, command, PLDM_SUCCESS, origLength,
+ responsePtr);
+ return response;
}
} // namespace dma
@@ -146,19 +151,18 @@
*
* @param[in] request - pointer to PLDM request payload
* @param[in] payloadLength - length of the message payload
- * @param[out] response - response message location
+ *
+ * @return PLDM response message
*/
-void readFileIntoMemory(const uint8_t* request, size_t payloadLength,
- pldm_msg* response);
+Response readFileIntoMemory(const uint8_t* request, size_t payloadLength);
/** @brief Handler for writeFileIntoMemory command
*
* @param[in] request - pointer to PLDM request payload
* @param[in] payloadLength - length of the message payload
- * @param[out] response - response message location
+ *
+ * @return PLDM response message
*/
-void writeFileFromMemory(const uint8_t* request, size_t payloadLength,
- pldm_msg* response);
-
+Response writeFileFromMemory(const uint8_t* request, size_t payloadLength);
} // namespace responder
} // namespace pldm