From 4cd8289a856ec2a9eef4dde6243d3673f86f3cc7 Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Sun, 19 Sep 2021 09:03:41 -0400 Subject: [PATCH] remove packed struct for portability --- protocol/rdmnet/broker-protocol.cpp | 36 +++++++++++++++++++++++++---- protocol/rdmnet/broker-protocol.h | 15 +++++++----- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/protocol/rdmnet/broker-protocol.cpp b/protocol/rdmnet/broker-protocol.cpp index 0a56b3d..0274f35 100644 --- a/protocol/rdmnet/broker-protocol.cpp +++ b/protocol/rdmnet/broker-protocol.cpp @@ -95,6 +95,34 @@ void Pdu::iStream(ACN::PDU::Stream stream) } +/** + * @brief connection_flags::iStream + * @param stream + */ +void connection_flags::iStream(ACN::PDU::Stream stream) +{ + *stream >> flags_reserved; + if (flags_reserved & 0b1) + incrementalUpdates = true; + else + incrementalUpdates = false; +} + + +/** + * @brief connection_flags::oStream + * @param stream + */ +void connection_flags::oStream(ACN::PDU::Stream stream) const +{ + uint8_t byte = flags_reserved; + if (incrementalUpdates) + byte |= 0b1; + + *stream << byte; +} + + /** * @brief client_connect_data::iStream * @param stream @@ -104,7 +132,7 @@ void client_connect_data::iStream(ACN::PDU::Stream stream) stream->readString(clientScope, 63); *stream >> version; stream->readString(searchDomain, 231); - *stream >> flags.byte; + *stream >> flags; *stream >> *pdu; } @@ -118,7 +146,7 @@ void client_connect_data::oStream(ACN::PDU::Stream stream) const stream->writeString(clientScope, 63); *stream << version; stream->writeString(searchDomain, 231); - *stream << flags.byte; + *stream << flags; *stream << pdu; } @@ -155,7 +183,7 @@ void connect_reply_data::oStream(ACN::PDU::Stream stream) const */ void client_entry_update_data::iStream(ACN::PDU::Stream stream) { - *stream >> flags.byte; + *stream >> flags; *stream >> *pdu; } @@ -166,7 +194,7 @@ void client_entry_update_data::iStream(ACN::PDU::Stream stream) */ void client_entry_update_data::oStream(ACN::PDU::Stream stream) const { - *stream << flags.byte; + *stream << flags; *stream << pdu; } diff --git a/protocol/rdmnet/broker-protocol.h b/protocol/rdmnet/broker-protocol.h index ec32414..f3b2527 100644 --- a/protocol/rdmnet/broker-protocol.h +++ b/protocol/rdmnet/broker-protocol.h @@ -117,12 +117,15 @@ public: /** * @brief The connection_flags union */ -union connection_flags { - uint8_t byte; //!< packed byte - struct { - bool incrementalUpdates : 1; //!< incremental updates - uint8_t flags_reserved : 7; //!< Brokers shall ignore. - }__attribute__((packed)); +struct connection_flags + : ACN::PDU::pdu_stream_object +{ + bool incrementalUpdates; //!< incremental updates + uint8_t flags_reserved; //!< Brokers shall ignore. + + size_t streamSize() const override { return 1; } + void iStream(ACN::PDU::Stream) override; + void oStream(ACN::PDU::Stream) const override; };