1
0
Fork 0

rlp writing

This commit is contained in:
Kevin Matz 2021-08-30 10:15:39 -04:00
parent d9e42f5c2f
commit 7495897b4a
2 changed files with 96 additions and 0 deletions

View File

@ -56,6 +56,21 @@ void Component::UdpPayloadReceiver(PDU::Stream stream)
}
/**
* @brief Component::rlpSendUdp
* @param vector
* @param data
* @param ip
*/
void Component::rlpSendUdp (const uint32_t vector,
const PDU::Message< PDU::pdu_data > data,
const SDT::UDP::ipAddress& ip) const
{
RLP::UDP::transport transport(true);
rlpSend(transport, vector, data, ip);
}
/**
* @brief Component::TcpPacketReceiver
* @param stream
@ -73,6 +88,21 @@ void Component::TcpPacketReceiver(PDU::Stream stream)
}
/**
* @brief Component::rlpSendTcp
* @param vector
* @param data
* @param ip
*/
void Component::rlpSendTcp (const uint32_t vector,
const PDU::Message<PDU::pdu_data> data,
const SDT::UDP::ipAddress& ip) const
{
RLP::TCP::transport transport(true);
rlpSend(transport, vector, data, ip);
}
/**
* @brief Component::RlpReceiver
* @param root
@ -104,4 +134,59 @@ void Component::RlpRegisterVector(uint32_t vect, PDU::Handler<RLP::Pdu> handle)
rlp_vectors_[vect].push_back(handle);
}
/**
* @brief Component::rlpSend
* @param transport
* @param vector
* @param data
* @param ip
*/
void Component::rlpSend(ACN::RLP::message_transport& transport,
const uint32_t vector,
const PDU::Message<PDU::pdu_data> data,
const SDT::UDP::ipAddress& ip) const
{
// rlp header
RLP::rlp_header header;
header.cid = cid();
// rlp pdu
auto rlp = std::shared_ptr<RLP::Pdu>(new RLP::Pdu());
rlp->setVector(vector);
rlp->setHeader(&header);
rlp->setData(data.get());
// root block
PDU::Block<RLP::Pdu> block;
block.pdu->push_back(rlp);
transport.root = block;
// create an output stream
size_t length = transport.streamSize();
uint8_t buffer[length];
ACN::PDU::Stream stream(new ACN::PDU::pdu_stream(buffer, length));
// write message
*stream << transport;
rlpSend(stream, ip);
}
/**
* @brief Component::rlpSend
* @param stream
* @param ip
*
* \attention Override this method in your derived class that can write
* to the network.
*/
void Component::rlpSend(const PDU::Stream stream,
const SDT::UDP::ipAddress& ip) const
{
(void)stream;
(void)ip;
}
}; // ACN::RLP

View File

@ -26,6 +26,7 @@
#include "acn/component.h"
#include "acn/pdu.h"
#include "rlp.h"
#include "sdt/udp.h"
#include <map>
#include <memory>
@ -49,14 +50,24 @@ public:
// EPI 17 - ACN RLP on UDP
virtual void UdpPayloadReceiver(PDU::Stream);
void rlpSendUdp(const uint32_t vector, const PDU::Message<PDU::pdu_data> data,
const SDT::UDP::ipAddress&) const;
// EPI 33 - ACN RLP Operation on TCP
virtual void TcpPacketReceiver(PDU::Stream);
void rlpSendTcp(const uint32_t vector, const PDU::Message<PDU::pdu_data> data,
const SDT::UDP::ipAddress&) const;
protected:
void RlpReceiver(PDU::Message<RLP::Pdu>);
void RlpRegisterVector(uint32_t, PDU::Handler<RLP::Pdu>);
void rlpSend(ACN::RLP::message_transport&, const uint32_t vector,
const PDU::Message<PDU::pdu_data> data,
const SDT::UDP::ipAddress&) const;
virtual void rlpSend(const PDU::Stream, const SDT::UDP::ipAddress&) const;
private:
std::map<uint32_t, std::vector<PDU::Handler<RLP::Pdu>>> rlp_vectors_;
};