io stream ops for preamble
This commit is contained in:
parent
79502361fd
commit
c67472a8be
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue