1 #pragma once
2 
3 #include "pldmd/instance_id.hpp"
4 #include "requester/handler.hpp"
5 
6 #include <libpldm/platform.h>
7 
8 #include <filesystem>
9 #include <fstream>
10 #include <map>
11 
12 namespace pldm
13 {
14 namespace requester
15 {
16 namespace oem_ibm
17 {
18 using ResDumpStatus = std::string;
19 
20 /** @class DbusToFileHandler
21  *  @brief This class can process resource dump parameters and send PLDM
22  *         new file available cmd to the hypervisor. This class can be used
23  *         as a pldm requester in oem-ibm path.
24  */
25 class DbusToFileHandler
26 {
27   public:
28     DbusToFileHandler(const DbusToFileHandler&) = delete;
29     DbusToFileHandler(DbusToFileHandler&&) = delete;
30     DbusToFileHandler& operator=(const DbusToFileHandler&) = delete;
31     DbusToFileHandler& operator=(DbusToFileHandler&&) = delete;
32     ~DbusToFileHandler() = default;
33 
34     /** @brief Constructor
35      *  @param[in] mctp_fd - fd of MCTP communications socket
36      *  @param[in] mctp_eid - MCTP EID of host firmware
37      *  @param[in] instanceIdDb - pointer to a InstanceIdDb object
38      *  @param[in] resDumpCurrentObjPath - resource dump current object path
39      *  @param[in] handler - PLDM request handler
40      */
41     DbusToFileHandler(
42         int mctp_fd, uint8_t mctp_eid, pldm::InstanceIdDb* instanceIdDb,
43         sdbusplus::message::object_path resDumpCurrentObjPath,
44         pldm::requester::Handler<pldm::requester::Request>* handler);
45 
46     /** @brief Process the new resource dump request
47      *  @param[in] vspString - vsp string
48      *  @param[in] resDumpReqPass - resource dump password
49      */
50     void processNewResourceDump(const std::string& vspString,
51                                 const std::string& resDumpReqPass);
52 
53     /** @brief Process the new CSR file available
54      *  @param[in] csr - CSR string
55      *  @param[in] fileHandle - file Handle for  new file request
56      */
57     void newCsrFileAvailable(const std::string& csr,
58                              const std::string fileHandle);
59 
60   private:
61     /** @brief Send the new file available command request to hypervisor
62      *  @param[in] fileSize - size of the file
63      */
64     void sendNewFileAvailableCmd(uint64_t fileSize);
65 
66     /** @brief Send the new file available command request to hypervisor
67      *  @param[in] fileSize - size of the file
68      *  @param[in] fileHandle - file handle
69      *  @param[in] type - file type
70      */
71     void newFileAvailableSendToHost(const uint32_t fileSize,
72                                     const uint32_t fileHandle,
73                                     const uint16_t type);
74 
75     /** @brief report failure that a resource dump has failed
76      */
77     void reportResourceDumpFailure();
78 
79     /** @brief method to get the acf file contents */
80     std::string getAcfFileContent();
81 
82     /** @brief fd of MCTP communications socket */
83     int mctp_fd;
84 
85     /** @brief MCTP EID of host firmware */
86     uint8_t mctp_eid;
87 
88     /** @brief Pointer to an InstanceIdDb used to obtain PLDM instance id. */
89     pldm::InstanceIdDb* instanceIdDb;
90 
91     /** @brief Hold the current resource dump object path */
92     sdbusplus::message::object_path resDumpCurrentObjPath;
93 
94     /** @brief PLDM request handler */
95     pldm::requester::Handler<pldm::requester::Request>* handler;
96 };
97 
98 } // namespace oem_ibm
99 } // namespace requester
100 } // namespace pldm
101