11521f6d1SDeepak Kodihalli #pragma once 21521f6d1SDeepak Kodihalli 31521f6d1SDeepak Kodihalli #include "handler.hpp" 41521f6d1SDeepak Kodihalli 5*c453e164SGeorge Liu #include <libpldm/base.h> 6*c453e164SGeorge Liu 71521f6d1SDeepak Kodihalli #include <map> 81521f6d1SDeepak Kodihalli #include <memory> 91521f6d1SDeepak Kodihalli 101521f6d1SDeepak Kodihalli namespace pldm 111521f6d1SDeepak Kodihalli { 121521f6d1SDeepak Kodihalli 131521f6d1SDeepak Kodihalli using Type = uint8_t; 141521f6d1SDeepak Kodihalli 151521f6d1SDeepak Kodihalli namespace responder 161521f6d1SDeepak Kodihalli { 171521f6d1SDeepak Kodihalli 181521f6d1SDeepak Kodihalli class Invoker 191521f6d1SDeepak Kodihalli { 201521f6d1SDeepak Kodihalli public: 211521f6d1SDeepak Kodihalli /** @brief Register a handler for a PLDM Type 221521f6d1SDeepak Kodihalli * 231521f6d1SDeepak Kodihalli * @param[in] pldmType - PLDM type code 241521f6d1SDeepak Kodihalli * @param[in] handler - PLDM Type handler 251521f6d1SDeepak Kodihalli */ 261521f6d1SDeepak Kodihalli void registerHandler(Type pldmType, std::unique_ptr<CmdHandler> handler) 271521f6d1SDeepak Kodihalli { 281521f6d1SDeepak Kodihalli handlers.emplace(pldmType, std::move(handler)); 291521f6d1SDeepak Kodihalli } 301521f6d1SDeepak Kodihalli 311521f6d1SDeepak Kodihalli /** @brief Invoke a PLDM command handler 321521f6d1SDeepak Kodihalli * 331521f6d1SDeepak Kodihalli * @param[in] pldmType - PLDM type code 341521f6d1SDeepak Kodihalli * @param[in] pldmCommand - PLDM command code 351521f6d1SDeepak Kodihalli * @param[in] request - PLDM request message 361521f6d1SDeepak Kodihalli * @param[in] reqMsgLen - PLDM request message size 371521f6d1SDeepak Kodihalli * @return PLDM response message 381521f6d1SDeepak Kodihalli */ 391521f6d1SDeepak Kodihalli Response handle(Type pldmType, Command pldmCommand, const pldm_msg* request, 401521f6d1SDeepak Kodihalli size_t reqMsgLen) 411521f6d1SDeepak Kodihalli { 421521f6d1SDeepak Kodihalli return handlers.at(pldmType)->handle(pldmCommand, request, reqMsgLen); 431521f6d1SDeepak Kodihalli } 441521f6d1SDeepak Kodihalli 451521f6d1SDeepak Kodihalli private: 461521f6d1SDeepak Kodihalli std::map<Type, std::unique_ptr<CmdHandler>> handlers; 471521f6d1SDeepak Kodihalli }; 481521f6d1SDeepak Kodihalli 491521f6d1SDeepak Kodihalli } // namespace responder 501521f6d1SDeepak Kodihalli } // namespace pldm 51