1 #pragma once 2 3 #include "common/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 MCTP EID of host firmware */ 83 uint8_t mctp_eid; 84 85 /** @brief Pointer to an InstanceIdDb used to obtain PLDM instance id. */ 86 pldm::InstanceIdDb* instanceIdDb; 87 88 /** @brief Hold the current resource dump object path */ 89 sdbusplus::message::object_path resDumpCurrentObjPath; 90 91 /** @brief PLDM request handler */ 92 pldm::requester::Handler<pldm::requester::Request>* handler; 93 }; 94 95 } // namespace oem_ibm 96 } // namespace requester 97 } // namespace pldm 98