1
0
Fork 0

input stream overload operators

This commit is contained in:
Kevin Matz 2021-07-26 13:34:11 -04:00
parent 237943489f
commit 44f5992340
6 changed files with 135 additions and 27 deletions

View File

@ -27,17 +27,39 @@
namespace ACN {
namespace RLP {
/**
* @brief rlp_header::rlp_header
* @param stream
*/
rlp_header::rlp_header(PDU::Stream stream)
: PDU::pdu_header()
, cid()
{
uint8_t buf[16];
stream->read(buf, 16);
if (stream->gcount() != 16)
stream->setstate(std::ios_base::failbit);
cid = UUID::uuid(buf);
stream >> *this;
}
/**
* @brief operator >>
* @param stream
* @param h
* @return
*/
PDU::Stream& operator>> (PDU::Stream &stream, rlp_header &h)
{
uint8_t buf[16];
stream->read(buf, 16);
if (stream->gcount() != 16)
stream->setstate(std::ios_base::failbit);
h.cid = UUID::uuid(buf);
return stream;
}
/**
* @brief Pdu::Pdu
* @param stream
*/
Pdu::Pdu(PDU::Stream stream)
: ACN::PDU::Pdu(stream, 4)
{

View File

@ -37,6 +37,7 @@ namespace RLP {
struct rlp_header : PDU::pdu_header {
UUID::uuid cid;
rlp_header(PDU::Stream);
friend PDU::Stream& operator>> (PDU::Stream &stream, rlp_header &h);
};
class Pdu

View File

@ -27,17 +27,41 @@
namespace SACN {
namespace DATA {
frame_header::frame_header(PDU::Stream stream) {
stream->read(source_name, 64);
if (stream->gcount() != 64)
stream->setstate(std::ios_base::failbit);
priority = stream->readType<decltype(priority)>();
sync_address = stream->readType<decltype(sync_address)>();
sequence_number = stream->readType<decltype(sequence_number)>();
options = stream->readType<decltype(options)>();
universe = stream->readType<decltype(universe)>();
/**
* @brief frame_header::frame_header
* @param stream
*/
frame_header::frame_header(PDU::Stream stream)
{
stream >> *this;
}
/**
* @brief operator >>
* @param stream
* @param h
* @return
*/
PDU::Stream& operator>> (PDU::Stream& stream, frame_header& h)
{
stream->read(h.source_name, 64);
if (stream->gcount() != 64)
stream->setstate(std::ios_base::failbit);
*stream >> h.priority;
*stream >> h.sync_address;
*stream >> h.sequence_number;
*stream >> h.options;
*stream >> h.universe;
return stream;
}
/**
* @brief Pdu::Pdu
* @param stream
*/
Pdu::Pdu(PDU::Stream stream)
: PDU::Pdu(stream, 4) // vectors are 4 octets
{

View File

@ -40,6 +40,7 @@ struct frame_header : PDU::pdu_header {
uint8_t options;
uint16_t universe;
frame_header(PDU::Stream);
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_header &h);
};
// 6.2.6 E1.31 Data Packet: Options

View File

@ -28,22 +28,58 @@ namespace SACN {
namespace EXTENDED {
frame_sync_header::frame_sync_header(PDU::Stream stream) {
sequence_number = stream->readType<decltype(sequence_number)>();
sync_address = stream->readType<decltype(sync_address)>();
stream->read(reserved, sizeof(reserved));
if (stream->gcount() != sizeof(reserved))
stream->setstate(std::ios_base::failbit);
/**
* @brief frame_sync_header::frame_sync_header
* @param stream
*/
frame_sync_header::frame_sync_header(PDU::Stream stream)
{
stream >> *this;
}
frame_discovery_header::frame_discovery_header(PDU::Stream stream) {
stream->read(source_name, sizeof(source_name));
if (stream->gcount() != sizeof(source_name))
/**
* @brief operator >>
* @param stream
* @param h
* @return
*/
PDU::Stream& operator>> (PDU::Stream &stream, frame_sync_header &h)
{
*stream >> h.sequence_number;
*stream >> h.sync_address;
stream->read(h.reserved, sizeof(h.reserved));
if (stream->gcount() != sizeof(h.reserved))
stream->setstate(std::ios_base::failbit);
stream->read(reserved, sizeof(reserved));
if (stream->gcount() != sizeof(reserved))
return stream;
}
/**
* @brief frame_discovery_header::frame_discovery_header
* @param stream
*/
frame_discovery_header::frame_discovery_header(PDU::Stream stream)
{
stream >> *this;
}
/**
* @brief operator >>
* @param stream
* @param h
* @return
*/
PDU::Stream& operator>> (PDU::Stream &stream, frame_discovery_header &h)
{
stream->read(h.source_name, sizeof(h.source_name));
if (stream->gcount() != sizeof(h.source_name))
stream->setstate(std::ios_base::failbit);
stream->read(h.reserved, sizeof(h.reserved));
if (stream->gcount() != sizeof(h.reserved))
stream->setstate(std::ios_base::failbit);
return stream;
}
@ -68,12 +104,33 @@ Pdu::Pdu(PDU::Stream stream)
namespace DISCOVERY {
/**
* @brief discovery_list_header::discovery_list_header
* @param stream
*/
discovery_list_header::discovery_list_header(PDU::Stream stream) {
page = stream->readType<decltype(page)>();
last_page = stream->readType<decltype(last_page)>();
stream >> *this;
}
/**
* @brief operator >>
* @param stream
* @param h
* @return
*/
PDU::Stream& operator>> (PDU::Stream &stream, discovery_list_header &h)
{
*stream >> h.page;
*stream >> h.last_page;
return stream;
}
/**
* @brief Pdu::Pdu
* @param stream
*/
Pdu::Pdu(PDU::Stream stream)
: PDU::Pdu(stream, 4) // vectors are 4 octets
{

View File

@ -39,6 +39,7 @@ struct frame_sync_header : PDU::pdu_header {
uint16_t sync_address;
uint8_t reserved[2];
frame_sync_header(PDU::Stream);
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_sync_header &h);
};
@ -47,6 +48,7 @@ struct frame_discovery_header : PDU::pdu_header {
uint8_t source_name[64];
uint8_t reserved[4];
frame_discovery_header(PDU::Stream);
friend PDU::Stream& operator>> (PDU::Stream &stream, frame_discovery_header &h);
};
@ -65,6 +67,7 @@ struct discovery_list_header : PDU::pdu_header {
uint8_t page;
uint8_t last_page;
discovery_list_header(PDU::Stream);
friend PDU::Stream& operator>> (PDU::Stream &stream, discovery_list_header &h);
};
class Pdu