| #pragma once |
| |
| #include "handler.hpp" |
| |
| #include <libpldm/base.h> |
| |
| #include <map> |
| #include <memory> |
| |
| namespace pldm |
| { |
| |
| using Type = uint8_t; |
| |
| namespace responder |
| { |
| |
| class Invoker |
| { |
| public: |
| /** @brief Register a handler for a PLDM Type |
| * |
| * @param[in] pldmType - PLDM type code |
| * @param[in] handler - PLDM Type handler |
| */ |
| void registerHandler(Type pldmType, std::unique_ptr<CmdHandler> handler) |
| { |
| handlers.emplace(pldmType, std::move(handler)); |
| } |
| |
| /** @brief Invoke a PLDM command handler |
| * |
| * @param[in] pldmType - PLDM type code |
| * @param[in] pldmCommand - PLDM command code |
| * @param[in] request - PLDM request message |
| * @param[in] reqMsgLen - PLDM request message size |
| * @return PLDM response message |
| */ |
| Response handle(Type pldmType, Command pldmCommand, const pldm_msg* request, |
| size_t reqMsgLen) |
| { |
| return handlers.at(pldmType)->handle(pldmCommand, request, reqMsgLen); |
| } |
| |
| private: |
| std::map<Type, std::unique_ptr<CmdHandler>> handlers; |
| }; |
| |
| } // namespace responder |
| } // namespace pldm |