pldm oem: implement certificate handler
This commit adds code to handle the ceritificate request and
certificate transfer between the host and bmc following pldm oem
file i/o protocol
Change-Id: I8095e0f5ad8c3c5cc796da1cfbe4bb9946af31cf
Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
diff --git a/oem/ibm/libpldmresponder/file_io_type_cert.hpp b/oem/ibm/libpldmresponder/file_io_type_cert.hpp
new file mode 100644
index 0000000..a981fab
--- /dev/null
+++ b/oem/ibm/libpldmresponder/file_io_type_cert.hpp
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "file_io_by_type.hpp"
+
+#include <tuple>
+
+namespace pldm
+{
+namespace responder
+{
+
+using Fd = int;
+using RemainingSize = uint64_t;
+using CertDetails = std::tuple<Fd, RemainingSize>;
+using CertType = uint16_t;
+using CertMap = std::map<CertType, CertDetails>;
+
+/** @class CertHandler
+ *
+ * @brief Inherits and implements FileHandler. This class is used
+ * to read/write certificates and certificate signing requests
+ */
+class CertHandler : public FileHandler
+{
+ public:
+ /** @brief CertHandler constructor
+ */
+ CertHandler(uint32_t fileHandle, uint16_t fileType) :
+ FileHandler(fileHandle), certType(fileType)
+ {
+ }
+
+ virtual int writeFromMemory(uint32_t offset, uint32_t length,
+ uint64_t address);
+ virtual int readIntoMemory(uint32_t offset, uint32_t& length,
+ uint64_t address);
+ virtual int read(uint32_t offset, uint32_t& length, Response& response);
+
+ virtual int write(const char* buffer, uint32_t offset, uint32_t& length);
+
+ virtual int fileAck(uint8_t /*fileStatus*/)
+ {
+ return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
+ }
+
+ virtual int newFileAvailable(uint64_t length);
+
+ /** @brief CertHandler destructor
+ */
+ ~CertHandler()
+ {
+ }
+
+ private:
+ uint16_t certType; //!< type of the certificate
+ static CertMap certMap; //!< holds the fd and remaining read/write size for
+ //!< each certificate
+};
+} // namespace responder
+} // namespace pldm