1db12436aSJayashankar Padath #pragma once
2db12436aSJayashankar Padath 
3db12436aSJayashankar Padath #include "pldmd/dbus_impl_requester.hpp"
4c0c79481SSampa Misra #include "requester/handler.hpp"
5db12436aSJayashankar Padath 
6*c453e164SGeorge Liu #include <libpldm/platform.h>
7*c453e164SGeorge Liu 
8db12436aSJayashankar Padath #include <filesystem>
9db12436aSJayashankar Padath #include <fstream>
10db12436aSJayashankar Padath #include <map>
11db12436aSJayashankar Padath 
12db12436aSJayashankar Padath namespace pldm
13db12436aSJayashankar Padath {
14db12436aSJayashankar Padath namespace requester
15db12436aSJayashankar Padath {
16db12436aSJayashankar Padath namespace oem_ibm
17db12436aSJayashankar Padath {
1899fa1864SJayashankar Padath using ResDumpStatus = std::string;
1999fa1864SJayashankar Padath 
20db12436aSJayashankar Padath /** @class DbusToFileHandler
21db12436aSJayashankar Padath  *  @brief This class can process resource dump parameters and send PLDM
22db12436aSJayashankar Padath  *         new file available cmd to the hypervisor. This class can be used
23db12436aSJayashankar Padath  *         as a pldm requester in oem-ibm path.
24db12436aSJayashankar Padath  */
25db12436aSJayashankar Padath class DbusToFileHandler
26db12436aSJayashankar Padath {
27db12436aSJayashankar Padath   public:
28db12436aSJayashankar Padath     DbusToFileHandler(const DbusToFileHandler&) = delete;
29db12436aSJayashankar Padath     DbusToFileHandler(DbusToFileHandler&&) = delete;
30db12436aSJayashankar Padath     DbusToFileHandler& operator=(const DbusToFileHandler&) = delete;
31db12436aSJayashankar Padath     DbusToFileHandler& operator=(DbusToFileHandler&&) = delete;
32db12436aSJayashankar Padath     ~DbusToFileHandler() = default;
33db12436aSJayashankar Padath 
34db12436aSJayashankar Padath     /** @brief Constructor
35db12436aSJayashankar Padath      *  @param[in] mctp_fd - fd of MCTP communications socket
36db12436aSJayashankar Padath      *  @param[in] mctp_eid - MCTP EID of host firmware
37db12436aSJayashankar Padath      *  @param[in] requester - pointer to a Requester object
38db12436aSJayashankar Padath      *  @param[in] resDumpCurrentObjPath - resource dump current object path
39c0c79481SSampa Misra      *  @param[in] handler - PLDM request handler
40db12436aSJayashankar Padath      */
41c0c79481SSampa Misra     DbusToFileHandler(
42c0c79481SSampa Misra         int mctp_fd, uint8_t mctp_eid, dbus_api::Requester* requester,
43c0c79481SSampa Misra         sdbusplus::message::object_path resDumpCurrentObjPath,
44c0c79481SSampa Misra         pldm::requester::Handler<pldm::requester::Request>* handler);
45db12436aSJayashankar Padath 
46db12436aSJayashankar Padath     /** @brief Process the new resource dump request
47db12436aSJayashankar Padath      *  @param[in] vspString - vsp string
48db12436aSJayashankar Padath      *  @param[in] resDumpReqPass - resource dump password
49db12436aSJayashankar Padath      */
50db12436aSJayashankar Padath     void processNewResourceDump(const std::string& vspString,
51db12436aSJayashankar Padath                                 const std::string& resDumpReqPass);
52db12436aSJayashankar Padath 
53219ace9aSVarsha Kaverappa     /** @brief Process the new CSR file available
54219ace9aSVarsha Kaverappa      *  @param[in] csr - CSR string
55219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file Handle for  new file request
56219ace9aSVarsha Kaverappa      */
57219ace9aSVarsha Kaverappa     void newCsrFileAvailable(const std::string& csr,
58219ace9aSVarsha Kaverappa                              const std::string fileHandle);
59219ace9aSVarsha Kaverappa 
60db12436aSJayashankar Padath   private:
61db12436aSJayashankar Padath     /** @brief Send the new file available command request to hypervisor
62db12436aSJayashankar Padath      *  @param[in] fileSize - size of the file
63db12436aSJayashankar Padath      */
64db12436aSJayashankar Padath     void sendNewFileAvailableCmd(uint64_t fileSize);
65db12436aSJayashankar Padath 
66219ace9aSVarsha Kaverappa     /** @brief Send the new file available command request to hypervisor
67219ace9aSVarsha Kaverappa      *  @param[in] fileSize - size of the file
68219ace9aSVarsha Kaverappa      *  @param[in] fileHandle - file handle
69219ace9aSVarsha Kaverappa      *  @param[in] type - file type
70219ace9aSVarsha Kaverappa      */
71219ace9aSVarsha Kaverappa     void newFileAvailableSendToHost(const uint32_t fileSize,
72219ace9aSVarsha Kaverappa                                     const uint32_t fileHandle,
73219ace9aSVarsha Kaverappa                                     const uint16_t type);
74219ace9aSVarsha Kaverappa 
75c0c79481SSampa Misra     /** @brief report failure that a resource dump has failed
76c0c79481SSampa Misra      */
77c0c79481SSampa Misra     void reportResourceDumpFailure();
78c0c79481SSampa Misra 
79c047f800SPavithra Barithaya     /** @brief method to get the acf file contents */
80c047f800SPavithra Barithaya     std::string getAcfFileContent();
81c047f800SPavithra Barithaya 
82db12436aSJayashankar Padath     /** @brief fd of MCTP communications socket */
83db12436aSJayashankar Padath     int mctp_fd;
84db12436aSJayashankar Padath 
85db12436aSJayashankar Padath     /** @brief MCTP EID of host firmware */
86db12436aSJayashankar Padath     uint8_t mctp_eid;
87db12436aSJayashankar Padath 
88db12436aSJayashankar Padath     /** @brief Pointer to a Requester object, primarily used to access API to
89db12436aSJayashankar Padath      *  obtain PLDM instance id.
90db12436aSJayashankar Padath      */
91db12436aSJayashankar Padath     dbus_api::Requester* requester;
92db12436aSJayashankar Padath 
93db12436aSJayashankar Padath     /** @brief Hold the current resource dump object path */
94db12436aSJayashankar Padath     sdbusplus::message::object_path resDumpCurrentObjPath;
95c0c79481SSampa Misra 
96c0c79481SSampa Misra     /** @brief PLDM request handler */
97c0c79481SSampa Misra     pldm::requester::Handler<pldm::requester::Request>* handler;
98db12436aSJayashankar Padath };
99db12436aSJayashankar Padath 
100db12436aSJayashankar Padath } // namespace oem_ibm
101db12436aSJayashankar Padath } // namespace requester
102db12436aSJayashankar Padath } // namespace pldm
103