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