1
0
Fork 0

intermediate transport class for both TCP and UDP

This commit is contained in:
Kevin Matz 2021-08-30 09:55:34 -04:00
parent 8f7463b67f
commit cf9ae4c89b
6 changed files with 43 additions and 14 deletions

View File

@ -80,4 +80,25 @@ void Pdu::iStream(PDU::Stream stream)
// protocol dependent data segment // data
}
/**
* @brief message_transport::iStream
* @param stream
*/
void message_transport::iStream(PDU::Stream stream)
{
*stream >> root;
}
/**
* @brief message_transport::oStream
* @param stream
*/
void message_transport::oStream(PDU::Stream stream) const
{
for ( const auto& pdu : *root.pdu )
*stream << pdu;
}
} // ACN::RLP

View File

@ -57,4 +57,17 @@ public:
void iStream(PDU::Stream) override;
};
/**
* @brief The message_transport struct
*/
struct message_transport
: PDU::pdu_stream_object
{
PDU::Block<RLP::Pdu> root; //!< root PDU block
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override;
};
} // ACN::RLP

View File

@ -33,7 +33,7 @@ namespace ACN::RLP::TCP {
* @param filled
*/
transport::transport(bool filled)
: PDU::pdu_stream_object()
: RLP::message_transport()
{
if (!filled)
return;
@ -61,7 +61,7 @@ void transport::iStream(PDU::Stream stream)
return stream->setstate(std::ios_base::failbit);
*stream >> length;
*stream >> root;
RLP::message_transport::iStream(stream);
}
@ -73,8 +73,7 @@ void transport::oStream(PDU::Stream stream) const
{
stream->write(acn_id, sizeof(acn_id));
*stream << static_cast<uint32_t>(root.streamSize());
for ( const auto& pdu : *root.pdu )
*stream << pdu;
RLP::message_transport::oStream(stream);
}
} // ACN::RLP::TCP

View File

@ -35,15 +35,13 @@ namespace ACN::RLP::TCP {
* @brief 3. Frame Preamble Format
*/
struct transport
: public PDU::pdu_stream_object
: RLP::message_transport
{
transport(bool filled = false);
uint8_t acn_id[12]; //!< 3.1 Packet Identifier
uint32_t length; //!< 3.2 PDU Block Size
PDU::Block<RLP::Pdu> root; //!< root PDU block
size_t streamSize() const override { return sizeof(acn_id) + 4 +
root.streamSize(); }
void iStream(PDU::Stream) override;

View File

@ -33,7 +33,7 @@ namespace ACN::RLP::UDP {
* @param filled
*/
transport::transport(bool filled)
: PDU::pdu_stream_object()
: RLP::message_transport()
{
if (!filled)
return;
@ -83,7 +83,7 @@ void transport::iStream(PDU::Stream stream)
if (length > PREAMBLE_MINIMUM_SIZE)
stream->ignore((length - PREAMBLE_MINIMUM_SIZE));
*stream >> root;
RLP::message_transport::iStream(stream);
}
@ -96,8 +96,7 @@ void transport::oStream(PDU::Stream stream) const
*stream << length;
*stream << postamble_size;
stream->write(acn_id, sizeof(acn_id));
for ( const auto& pdu : *root.pdu )
*stream << pdu;
RLP::message_transport::oStream(stream);
}
} // ACN::RLP::UDP

View File

@ -50,15 +50,14 @@ static const uint8_t PREAMBLE_MINIMUM_SIZE = 16;
* @brief 2. Preamble Format
*/
struct transport
: public PDU::pdu_stream_object {
: RLP::message_transport
{
transport(bool filled = false);
uint16_t length = 0; //!< length of preamble + PDU block
uint16_t postamble_size = 0; //!< length of postamble
uint8_t acn_id[12]; //!< packet identifier
PDU::Block<RLP::Pdu> root; //!< root PDU block
size_t streamSize() const override { return PREAMBLE_MINIMUM_SIZE
+ root.streamSize(); }
void iStream(PDU::Stream) override;