xref: /openbmc/pldm/oem/meta/libpldmresponder/file_io.hpp (revision bca95a5aa082281ffac81bdbaf6a22a0cff60405)
1 #pragma once
2 
3 #include "common/utils.hpp"
4 #include "file_io_by_type.hpp"
5 #include "pldmd/handler.hpp"
6 
7 #include <libpldm/oem/meta/file_io.h>
8 
9 #include <phosphor-logging/lg2.hpp>
10 
11 PHOSPHOR_LOG2_USING;
12 
13 namespace pldm::responder::oem_meta
14 {
15 
16 class FileIOHandler : public CmdHandler
17 {
18   public:
19     FileIOHandler() = delete;
20     FileIOHandler(const FileIOHandler&) = delete;
21     FileIOHandler(FileIOHandler&&) = delete;
22     FileIOHandler& operator=(const FileIOHandler&) = delete;
23     FileIOHandler& operator=(FileIOHandler&&) = delete;
24     virtual ~FileIOHandler() = default;
25 
FileIOHandler(const pldm::utils::DBusHandler * dBusHandler)26     explicit FileIOHandler(const pldm::utils::DBusHandler* dBusHandler) :
27         dBusHandler(dBusHandler)
28     {
29         handlers.emplace(
30             PLDM_OEM_META_FILE_IO_CMD_WRITE_FILE,
31             [this](pldm_tid_t tid, const pldm_msg* request,
32                    size_t payloadLength) {
33                 return this->writeFileIO(tid, request, payloadLength);
34             });
35         handlers.emplace(
36             PLDM_OEM_META_FILE_IO_CMD_READ_FILE,
37             [this](pldm_tid_t tid, const pldm_msg* request,
38                    size_t payloadLength) {
39                 return this->readFileIO(tid, request, payloadLength);
40             });
41     }
42 
43   private:
44     /** @brief Handler for writeFileIO command
45      *
46      *  @param[in] tid - the device tid
47      *  @param[in] request - pointer to PLDM request payload
48      *  @param[in] payloadLength - length of the message
49      *
50      *  @return PLDM response message
51      */
52     Response writeFileIO(pldm_tid_t tid, const pldm_msg* request,
53                          size_t payloadLength);
54 
55     /** @brief Handler for readFileIO command
56      *
57      *  @param[in] tid - the device tid
58      *  @param[in] request - pointer to PLDM request payload
59      *  @param[in] payloadLength - length of the message
60      *
61      *  @return PLDM response message
62      */
63     Response readFileIO(pldm_tid_t tid, const pldm_msg* request,
64                         size_t payloadLength);
65 
66     std::unique_ptr<FileHandler> getHandlerByType(pldm_tid_t tid,
67                                                   FileIOType fileIOType);
68 
69     const pldm::utils::DBusHandler* dBusHandler;
70 };
71 
72 } // namespace pldm::responder::oem_meta
73