#pragma once #include "crc.hpp" #include #include #include namespace blobs { using IpmiBlobHandler = std::function; /** * Validate the IPMI request and determine routing. * * @param[in] crc - a pointer to the crc interface. * @param[in] reqBuf - a pointer to the ipmi request packet buffer. * @param[in,out] replyCmdBuf - a pointer to the ipmi reply packet buffer. * @param[in,out] dataLen - initially the request length, set to reply length * on return. * @param[out] code - set to the IPMI error on failure, otherwise unset. * @return the ipmi command handler, or nullptr on failure. */ IpmiBlobHandler validateBlobCommand(CrcInterface* crc, const uint8_t* reqBuf, uint8_t* replyCmdBuf, size_t* dataLen, ipmi_ret_t* code); /** * Call the IPMI command and process the result, including running the CRC * computation for the reply message if there is one. * * @param[in] cmd - a funtion pointer to the ipmi command to process. * @param[in] mgr - a pointer to the manager interface. * @param[in] crc - a pointer to the crc interface. * @param[in] reqBuf - a pointer to the ipmi request packet buffer. * @param[in,out] replyCmdBuf - a pointer to the ipmi reply packet buffer. * @param[in,out] dataLen - initially the request length, set to reply length * on return. * @return the ipmi command result. */ ipmi_ret_t processBlobCommand(IpmiBlobHandler cmd, ManagerInterface* mgr, CrcInterface* crc, const uint8_t* reqBuf, uint8_t* replyCmdBuf, size_t* dataLen); } // namespace blobs