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 
12d823cc0bSSampa Misra using Fd = int;
13d823cc0bSSampa Misra using RemainingSize = uint64_t;
14d823cc0bSSampa Misra using CertDetails = std::tuple<Fd, RemainingSize>;
15d823cc0bSSampa Misra using CertType = uint16_t;
16d823cc0bSSampa Misra using CertMap = std::map<CertType, CertDetails>;
17d823cc0bSSampa Misra 
18d823cc0bSSampa Misra /** @class CertHandler
19d823cc0bSSampa Misra  *
20d823cc0bSSampa Misra  *  @brief Inherits and implements FileHandler. This class is used
21d823cc0bSSampa Misra  *  to read/write certificates and certificate signing requests
22d823cc0bSSampa Misra  */
23d823cc0bSSampa Misra class CertHandler : public FileHandler
24d823cc0bSSampa Misra {
25d823cc0bSSampa Misra   public:
26d823cc0bSSampa Misra     /** @brief CertHandler constructor
27d823cc0bSSampa Misra      */
28d823cc0bSSampa Misra     CertHandler(uint32_t fileHandle, uint16_t fileType) :
29d823cc0bSSampa Misra         FileHandler(fileHandle), certType(fileType)
306492f524SGeorge Liu     {}
31d823cc0bSSampa Misra 
32d823cc0bSSampa Misra     virtual int writeFromMemory(uint32_t offset, uint32_t length,
33*69508503SSampa Misra                                 uint64_t address,
34*69508503SSampa Misra                                 oem_platform::Handler* /*oemPlatformHandler*/);
35d823cc0bSSampa Misra     virtual int readIntoMemory(uint32_t offset, uint32_t& length,
36*69508503SSampa Misra                                uint64_t address,
37*69508503SSampa Misra                                oem_platform::Handler* /*oemPlatformHandler*/);
38*69508503SSampa Misra     virtual int read(uint32_t offset, uint32_t& length, Response& response,
39*69508503SSampa Misra                      oem_platform::Handler* /*oemPlatformHandler*/);
40d823cc0bSSampa Misra 
41*69508503SSampa Misra     virtual int write(const char* buffer, uint32_t offset, uint32_t& length,
42*69508503SSampa Misra                       oem_platform::Handler* /*oemPlatformHandler*/);
43d823cc0bSSampa Misra 
44d823cc0bSSampa Misra     virtual int fileAck(uint8_t /*fileStatus*/)
45d823cc0bSSampa Misra     {
46d823cc0bSSampa Misra         return PLDM_ERROR_UNSUPPORTED_PLDM_CMD;
47d823cc0bSSampa Misra     }
48d823cc0bSSampa Misra 
49d823cc0bSSampa Misra     virtual int newFileAvailable(uint64_t length);
50d823cc0bSSampa Misra 
51d823cc0bSSampa Misra     /** @brief CertHandler destructor
52d823cc0bSSampa Misra      */
53d823cc0bSSampa Misra     ~CertHandler()
546492f524SGeorge Liu     {}
55d823cc0bSSampa Misra 
56d823cc0bSSampa Misra   private:
57d823cc0bSSampa Misra     uint16_t certType;      //!< type of the certificate
58d823cc0bSSampa Misra     static CertMap certMap; //!< holds the fd and remaining read/write size for
59d823cc0bSSampa Misra                             //!< each certificate
60d823cc0bSSampa Misra };
61d823cc0bSSampa Misra } // namespace responder
62d823cc0bSSampa Misra } // namespace pldm
63