/**
 * This file is derived from the upstream implementation of send and recv
 * With an extra network id parameter
 */
#pragma once

#ifndef BMC_PLDM_HPP
#define BMC_PLDM_HPP

#include "libpldm/base.h"
#include "libpldm/pldm.h"
#include "mctp.h"

/**
 * @brief Sends the PLDM message to a specific network and eid
 *
 * @param[in] eid - Destination Eid
 * @param[in] networkId - Network id for the device
 * @param[in] mctpFd - Socket address
 * @param[in] pldmReqMsg - Pointer to the request message
 * @param[in] reqMsgLen - Length of the request message
 *
 * @return pldm_requester_rc_t
 */
pldm_requester_rc_t pldmSendAtNetwork(mctp_eid_t eid, int networkId, int mctpFd,
                                      const uint8_t* pldmReqMsg,
                                      size_t reqMsgLen);

/**
 * @brief Receives the PLDM message from a specific network and eid
 *
 * @param[in] eid - Destination Eid
 * @param[in] networkId - Network id for the device
 * @param[in] mctpFd - Socket address
 * @param[in] instanceId - Instance id for the req/resp
 * @param[out] pldmRespMsg - Pointer to the response message
 * @param[out] respMsgLen - Length of the response message
 *
 * @return pldm_requester_rc_t
 */
pldm_requester_rc_t pldmRecvAtNetwork(mctp_eid_t eid, int networkId, int mctpFd,
                                      uint8_t instanceId, uint8_t** pldmRespMsg,
                                      size_t* respMsgLen);

#endif // BMC_PLDM_HPP
