1
0
Fork 0

io stream ops for preamble

This commit is contained in:
Kevin Matz 2021-07-30 08:21:56 -04:00
parent 79502361fd
commit c67472a8be
3 changed files with 39 additions and 13 deletions

View File

@ -57,7 +57,8 @@ Appliance::Appliance(UUID::uuid cid)
void Appliance::UdpPayloadReceiver(PDU::Stream stream)
{
// read the EPI 17 UDP preamble
RLP::UDP::preamble_t preamble(stream);
RLP::UDP::preamble_t preamble;
preamble.iStream(stream);
// Implementations shall check the ACN Packet Identifier and preamble size.
if (!preamble)

View File

@ -30,16 +30,13 @@ namespace RLP {
namespace UDP {
/**
* @brief preamble_t::preamble_t
* @param stream
* @brief preamble_t::fill
*/
preamble_t::preamble_t(PDU::Stream stream)
void preamble_t::fill()
{
length = stream->readType<decltype(length)>();
postamble_size = stream->readType<decltype(postamble_size)>();
stream->read(acn_id, 12);
if (stream->gcount() != 12)
stream->setstate(std::ios_base::failbit);
length = sizeof(length) + sizeof(postamble_size) + sizeof(acn_id);
postamble_size = 0; //!< 3. The postamble field shall be empty.
memcpy(acn_id, ACN_PACKET_IDENTIFIER, sizeof(acn_id));
}
@ -65,6 +62,31 @@ preamble_t::operator bool ()
}
/**
* @brief preamble_t::iStream
* @param stream
*/
void preamble_t::iStream(PDU::Stream stream)
{
*stream >> length;
*stream >> postamble_size;
stream->read(acn_id, sizeof(acn_id));
if (stream->gcount() != sizeof(acn_id))
stream->setstate(std::ios_base::failbit);
}
/**
* @brief preamble_t::oStream
* @param stream
*/
void preamble_t::oStream(PDU::Stream stream) const
{
*stream << length;
*stream << postamble_size;
stream->write(acn_id, sizeof(acn_id));
}
} // UDP
} // RLP
} // ACN

View File

@ -56,12 +56,15 @@ static const uint8_t PREAMBLE_MINIMUM_SIZE = 16;
/**
* @brief 2. Preamble Format
*/
struct preamble_t {
uint16_t length;
uint16_t postamble_size;
struct preamble_t : public PDU::pdu_base_member {
uint16_t length = 0;
uint16_t postamble_size = 0;
uint8_t acn_id[12];
preamble_t(PDU::Stream);
void fill();
operator bool();
size_t streamSize() const override { return PREAMBLE_MINIMUM_SIZE; }
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override;
};