oem-ibm: Resource dump support

This commit includes the changes to support resource dump. Input
parameters to initiate resource dump are vsp string and the
password.

Resource Dump Flow:
1. PLDM waits for the resource dump create signal from
   dump manager
2. BMC sends the NewfileAvailable command to hypervisor with
   resource dump paramters
   Format: <Length of the VSP String><VSP String>
   <Length of the Password><Password>
3. Hypervisor reads and validates the data and send the File Ack
   command back to BMC
4. Once completed, BMC receives the NewfileAvailable command from
   hypervisor with resource dump details
5. User initiates the dump offload
6. BMC receives the  write file by type from memory command from
   hypervisor
7. Once this operation is completed BMC receives the File Ack
   command from hyperviosr

Tested By:
1. Initiating the resource dump using pldmtool, busctl and redfish
2. Verified that resource dump entry is updated with source id,
   length, completion time and status.
3. Dump offload is successful with initiating from redfish
4. Verified that new resource dump is generated at hypervisor level
5. Error scenarios tested are like empty vsp string, not supported
   vsp string etc.

Signed-off-by: Jayashankar Padath <jayashankar.padath@in.ibm.com>
Change-Id: Iedcdf3cf16c263a2d1749bb5251f7f6244c327ea
diff --git a/oem/ibm/requester/dbus_to_file_handler.hpp b/oem/ibm/requester/dbus_to_file_handler.hpp
new file mode 100644
index 0000000..b6e8b5d
--- /dev/null
+++ b/oem/ibm/requester/dbus_to_file_handler.hpp
@@ -0,0 +1,74 @@
+#pragma once
+
+#include "libpldm/platform.h"
+
+#include "pldmd/dbus_impl_requester.hpp"
+
+#include <filesystem>
+#include <fstream>
+#include <map>
+
+using namespace pldm::dbus_api;
+
+namespace pldm
+{
+namespace requester
+{
+namespace oem_ibm
+{
+
+/** @class DbusToFileHandler
+ *  @brief This class can process resource dump parameters and send PLDM
+ *         new file available cmd to the hypervisor. This class can be used
+ *         as a pldm requester in oem-ibm path.
+ */
+class DbusToFileHandler
+{
+  public:
+    DbusToFileHandler(const DbusToFileHandler&) = delete;
+    DbusToFileHandler(DbusToFileHandler&&) = delete;
+    DbusToFileHandler& operator=(const DbusToFileHandler&) = delete;
+    DbusToFileHandler& operator=(DbusToFileHandler&&) = delete;
+    ~DbusToFileHandler() = default;
+
+    /** @brief Constructor
+     *  @param[in] mctp_fd - fd of MCTP communications socket
+     *  @param[in] mctp_eid - MCTP EID of host firmware
+     *  @param[in] requester - pointer to a Requester object
+     *  @param[in] resDumpCurrentObjPath - resource dump current object path
+     */
+    DbusToFileHandler(int mctp_fd, uint8_t mctp_eid,
+                      dbus_api::Requester* requester,
+                      sdbusplus::message::object_path resDumpCurrentObjPath);
+
+    /** @brief Process the new resource dump request
+     *  @param[in] vspString - vsp string
+     *  @param[in] resDumpReqPass - resource dump password
+     */
+    void processNewResourceDump(const std::string& vspString,
+                                const std::string& resDumpReqPass);
+
+  private:
+    /** @brief Send the new file available command request to hypervisor
+     *  @param[in] fileSize - size of the file
+     */
+    void sendNewFileAvailableCmd(uint64_t fileSize);
+
+    /** @brief fd of MCTP communications socket */
+    int mctp_fd;
+
+    /** @brief MCTP EID of host firmware */
+    uint8_t mctp_eid;
+
+    /** @brief Pointer to a Requester object, primarily used to access API to
+     *  obtain PLDM instance id.
+     */
+    dbus_api::Requester* requester;
+
+    /** @brief Hold the current resource dump object path */
+    sdbusplus::message::object_path resDumpCurrentObjPath;
+};
+
+} // namespace oem_ibm
+} // namespace requester
+} // namespace pldm