11521f6d1SDeepak Kodihalli #pragma once 21521f6d1SDeepak Kodihalli 31521f6d1SDeepak Kodihalli #include "handler.hpp" 41521f6d1SDeepak Kodihalli 5c453e164SGeorge Liu #include <libpldm/base.h> 6c453e164SGeorge 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 */ registerHandler(Type pldmType,std::unique_ptr<CmdHandler> handler)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 * 33*d2e48991SDelphine CC Chiu * @param[in] tid - PLDM request TID 341521f6d1SDeepak Kodihalli * @param[in] pldmType - PLDM type code 351521f6d1SDeepak Kodihalli * @param[in] pldmCommand - PLDM command code 361521f6d1SDeepak Kodihalli * @param[in] request - PLDM request message 371521f6d1SDeepak Kodihalli * @param[in] reqMsgLen - PLDM request message size 381521f6d1SDeepak Kodihalli * @return PLDM response message 391521f6d1SDeepak Kodihalli */ handle(pldm_tid_t tid,Type pldmType,Command pldmCommand,const pldm_msg * request,size_t reqMsgLen)40*d2e48991SDelphine CC Chiu Response handle(pldm_tid_t tid, Type pldmType, Command pldmCommand, 41*d2e48991SDelphine CC Chiu const pldm_msg* request, size_t reqMsgLen) 421521f6d1SDeepak Kodihalli { 43*d2e48991SDelphine CC Chiu return handlers.at(pldmType)->handle(tid, pldmCommand, request, 44*d2e48991SDelphine CC Chiu reqMsgLen); 451521f6d1SDeepak Kodihalli } 461521f6d1SDeepak Kodihalli 471521f6d1SDeepak Kodihalli private: 481521f6d1SDeepak Kodihalli std::map<Type, std::unique_ptr<CmdHandler>> handlers; 491521f6d1SDeepak Kodihalli }; 501521f6d1SDeepak Kodihalli 511521f6d1SDeepak Kodihalli } // namespace responder 521521f6d1SDeepak Kodihalli } // namespace pldm 53