1d823cc0bSSampa Misra #pragma once
2d823cc0bSSampa Misra 
3d823cc0bSSampa Misra #include "file_io_by_type.hpp"
4d823cc0bSSampa Misra 
5d823cc0bSSampa Misra #include <tuple>
6d823cc0bSSampa Misra 
7d823cc0bSSampa Misra namespace pldm
8d823cc0bSSampa Misra {
9d823cc0bSSampa Misra namespace responder
10d823cc0bSSampa Misra {
11d823cc0bSSampa Misra using Fd = int;
12d823cc0bSSampa Misra using RemainingSize = uint64_t;
13d823cc0bSSampa Misra using CertDetails = std::tuple<Fd, RemainingSize>;
14d823cc0bSSampa Misra using CertType = uint16_t;
15d823cc0bSSampa Misra using CertMap = std::map<CertType, CertDetails>;
16d823cc0bSSampa Misra 
17d823cc0bSSampa Misra /** @class CertHandler
18d823cc0bSSampa Misra  *
19d823cc0bSSampa Misra  *  @brief Inherits and implements FileHandler. This class is used
20d823cc0bSSampa Misra  *  to read/write certificates and certificate signing requests
21d823cc0bSSampa Misra  */
22d823cc0bSSampa Misra class CertHandler : public FileHandler
23d823cc0bSSampa Misra {
24d823cc0bSSampa Misra   public:
25d823cc0bSSampa Misra     /** @brief CertHandler constructor
26d823cc0bSSampa Misra      */
CertHandler(uint32_t fileHandle,uint16_t fileType)27d823cc0bSSampa Misra     CertHandler(uint32_t fileHandle, uint16_t fileType) :
28d823cc0bSSampa Misra         FileHandler(fileHandle), certType(fileType)
296492f524SGeorge Liu     {}
30d823cc0bSSampa Misra 
31d823cc0bSSampa Misra     virtual int writeFromMemory(uint32_t offset, uint32_t length,
3269508503SSampa Misra                                 uint64_t address,
3369508503SSampa Misra                                 oem_platform::Handler* /*oemPlatformHandler*/);
34*56c78807SKamalkumar Patel     virtual int readIntoMemory(uint32_t offset, uint32_t length,
3569508503SSampa Misra                                uint64_t address,
3669508503SSampa Misra                                oem_platform::Handler* /*oemPlatformHandler*/);
3769508503SSampa Misra     virtual int read(uint32_t offset, uint32_t& length, Response& response,
3869508503SSampa Misra                      oem_platform::Handler* /*oemPlatformHandler*/);
39d823cc0bSSampa Misra 
4069508503SSampa Misra     virtual int write(const char* buffer, uint32_t offset, uint32_t& length,
4169508503SSampa Misra                       oem_platform::Handler* /*oemPlatformHandler*/);
42d823cc0bSSampa Misra 
fileAck(uint8_t)43d823cc0bSSampa Misra     virtual int fileAck(uint8_t /*fileStatus*/)
44d823cc0bSSampa Misra     {
45d823cc0bSSampa Misra         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
46d823cc0bSSampa Misra     }
47d823cc0bSSampa Misra 
48d823cc0bSSampa Misra     virtual int newFileAvailable(uint64_t length);
49d823cc0bSSampa Misra 
50e3b3f634SSridevi Ramesh     virtual int fileAckWithMetaData(uint8_t /*fileStatus*/,
51e3b3f634SSridevi Ramesh                                     uint32_t /*metaDataValue1*/,
52e3b3f634SSridevi Ramesh                                     uint32_t /*metaDataValue2*/,
53e3b3f634SSridevi Ramesh                                     uint32_t /*metaDataValue3*/,
54e3b3f634SSridevi Ramesh                                     uint32_t /*metaDataValue4*/);
55e3b3f634SSridevi Ramesh 
56e3b3f634SSridevi Ramesh     virtual int newFileAvailableWithMetaData(uint64_t length,
57e3b3f634SSridevi Ramesh                                              uint32_t metaDataValue1,
58e3b3f634SSridevi Ramesh                                              uint32_t /*metaDataValue2*/,
59e3b3f634SSridevi Ramesh                                              uint32_t /*metaDataValue3*/,
60e3b3f634SSridevi Ramesh                                              uint32_t /*metaDataValue4*/);
61e3b3f634SSridevi Ramesh 
62d823cc0bSSampa Misra     /** @brief CertHandler destructor
63d823cc0bSSampa Misra      */
~CertHandler()646da4f91bSPatrick Williams     ~CertHandler() {}
65d823cc0bSSampa Misra 
66d823cc0bSSampa Misra   private:
67d823cc0bSSampa Misra     uint16_t certType;      //!< type of the certificate
68d823cc0bSSampa Misra     static CertMap certMap; //!< holds the fd and remaining read/write size for
69d823cc0bSSampa Misra                             //!< each certificate
70e3b3f634SSridevi Ramesh     enum SignedCertStatus
71e3b3f634SSridevi Ramesh     {
72e3b3f634SSridevi Ramesh         PLDM_INVALID_CERT_DATA = 0X03
73e3b3f634SSridevi Ramesh     };
74d823cc0bSSampa Misra };
75d823cc0bSSampa Misra } // namespace responder
76d823cc0bSSampa Misra } // namespace pldm
77