1
0
Fork 0

refactor method names + doc updates

This commit is contained in:
Kevin Matz 2021-07-28 10:43:43 -04:00
parent 4702ac333d
commit 51fb16455d
8 changed files with 137 additions and 116 deletions

View File

@ -39,31 +39,31 @@ namespace ACN {
Appliance::Appliance(UUID::uuid cid)
: Component(cid)
{
registerRlpVectorHandler(SDT::SDT_PROTOCOL_ID,
std::bind(&Appliance::rootSdtHandler, this,
RlpRegisterVectorHandler(SDT::SDT_PROTOCOL_ID,
std::bind(&Appliance::SdtReceiver, this,
std::placeholders::_1));
registerRlpVectorHandler(DMP::DMP_PROTOCOL_ID,
std::bind(&Appliance::rootDmpHandler, this,
RlpRegisterVectorHandler(DMP::DMP_PROTOCOL_ID,
std::bind(&Appliance::DmpReceiver, this,
std::placeholders::_1));
};
/**
* @brief Appliance::UdpStreamHandler
* @brief Appliance::UdpPayloadReceiver
* @param stream
*
* EPI 17
*/
void Appliance::UdpStreamHandler(PDU::Stream stream)
void Appliance::UdpPayloadReceiver(PDU::Stream stream)
{
// verify the UDP preamble
// read the EPI 17 UDP preamble
RLP::UDP::preamble_t preamble(stream);
// Implementations shall check the ACN Packet Identifier and preamble size.
if (!preamble)
stream->setstate(std::ios_base::failbit);
// implementations shall compute the size and position of the PDU block from
// Implementations shall compute the size and position of the PDU block from
// the preamble size and postamble size provided. ... ignoring any extra
// octets in the preamble or postamble.
for(int i = RLP::UDP::PREAMBLE_MINIMUM_SIZE; i < preamble.length; i++)
@ -82,12 +82,12 @@ void Appliance::UdpStreamHandler(PDU::Stream stream)
/**
* @brief Appliance::TcpStreamHandler
* @brief Appliance::TcpPacketReceiver
* @param stream
*
* EPI 33
*/
void Appliance::TcpStreamHandler(PDU::Stream stream)
void Appliance::TcpPacketReceiver(PDU::Stream stream)
{
// verify the TCP preamble
RLP::TCP::preamble_t preamble(stream);
@ -116,21 +116,20 @@ void Appliance::TcpStreamHandler(PDU::Stream stream)
*/
void Appliance::RlpReceiver(std::shared_ptr<RLP::Pdu> root)
{
if (!rlp_vectors_.count(root->vector()))
return;
for(auto const &handler : rlp_vectors_[root->vector()])
handler(root);
if (rlp_vectors_.count(root->vector()))
for(auto const &handler : rlp_vectors_[root->vector()])
handler(root);
}
/**
* @brief Appliance::registerRlpVectorHandler
* @brief Appliance::RlpRegisterVectorHandler
* @param vect
* @param handle
*
* Add callback handler for a given RLP vector.
*/
void Appliance::registerRlpVectorHandler(uint32_t vect,
void Appliance::RlpRegisterVectorHandler(uint32_t vect,
PDU::Handler<RLP::Pdu> handle)
{
rlp_vectors_[vect].push_back(handle);
@ -138,43 +137,43 @@ void Appliance::registerRlpVectorHandler(uint32_t vect,
/**
* @brief Appliance::deregisterRlpVector
* @brief Appliance::RlpDerigsterVector
* @param vect
*
* Deregister RLP protocol handlers for the given vector.
*/
void Appliance::deregisterRlpVector(uint32_t vect)
void Appliance::RlpDerigsterVector(uint32_t vect)
{
rlp_vectors_.erase(vect);
}
/**
* @brief Appliance::deregisterRlpVector
* @brief Appliance::RlpDerigsterVector
*
* Deregister _ALL_ RLP protocol handlers.
*/
void Appliance::deregisterRlpVector()
void Appliance::RlpDerigsterVector()
{
rlp_vectors_.clear();
}
/**
* @brief Appliance::rootSdtHandler
* @brief Appliance::SdtReceiver
* @param rlp
*/
void Appliance::rootSdtHandler(std::shared_ptr<RLP::Pdu> rlp)
void Appliance::SdtReceiver(std::shared_ptr<RLP::Pdu> rlp)
{
/// TODO: handle SDT
}
/**
* @brief Appliance::rootDmpHandler
* @brief Appliance::DmpReceiver
* @param rlp
*/
void Appliance::rootDmpHandler(std::shared_ptr<RLP::Pdu> rlp)
void Appliance::DmpReceiver(std::shared_ptr<RLP::Pdu> rlp)
{
/// TODO: DMP in root
}

View File

@ -55,32 +55,34 @@ public:
Appliance(UUID::uuid = UUID::uuid());
protected:
// EPI 17
virtual void UdpStreamHandler(PDU::Stream);
// EPI 33
virtual void TcpStreamHandler(PDU::Stream);
// EPI 17 - ACN RLP on UDP
virtual void UdpPayloadReceiver(PDU::Stream);
// EPI 33 - ACN RLP Operation on TCP
virtual void TcpPacketReceiver(PDU::Stream);
// RLP
void RlpReceiver(std::shared_ptr<RLP::Pdu>);
void registerRlpVectorHandler(uint32_t, PDU::Handler<RLP::Pdu>);
void deregisterRlpVector(uint32_t);
void deregisterRlpVector();
void RlpRegisterVectorHandler(uint32_t, PDU::Handler<RLP::Pdu>);
void RlpDerigsterVector(uint32_t);
void RlpDerigsterVector();
// process SDT frames
virtual void rootSdtHandler(std::shared_ptr<RLP::Pdu>);
// RLP->SDT frames
virtual void SdtReceiver(std::shared_ptr<RLP::Pdu>);
// SDT 4.4 SDT Base Layer Messages
// Join, Get Sessions, and Sessions are ad-hoc messages, that is, they are
// not sent within channels. These messages identify their intended recipient
// by CID.
virtual void JoinSession() {};
virtual void GetSessions() {};
virtual void Sessions() {};
virtual void SdtJoinSession() {};
virtual void SdtGetSessions() {};
virtual void SdtSessions() {};
// process DMP frames
virtual void rootDmpHandler(std::shared_ptr<RLP::Pdu>);
// RLP->DMP frames
virtual void DmpReceiver(std::shared_ptr<RLP::Pdu>);
private:
std::map<uint32_t, std::vector<PDU::Handler<RLP::Pdu>>> rlp_vectors_;
std::vector<std::shared_ptr<SDT::Session>> sessions_;
std::vector<std::shared_ptr<SDT::Session>> sdt_sessions_;
};
}; // ACN

View File

@ -58,7 +58,7 @@ preamble_t::operator bool ()
// 2. Preamble Format: The ACN Packet Identifier shall be the text string
// “ASC-E1.17\0\0\0” encoded in [ASCII].
if (memcmp(acn_id, ACN_PACKET_IDENTIFIER, 12))
if (memcmp(acn_id, ACN_PACKET_IDENTIFIER, 12)) // memcmp returns 0 if matched
return false;
return true;

View File

@ -8,11 +8,12 @@ namespace SACN {
QSacnNode::QSacnNode(QObject *parent, QUuid cid)
: Appliance(UUID::uuid(cid.toString().toStdString()))
, QUdpSocket(parent)
, multiverse_(new MultiverseModel(this))
{
bind(QHostAddress::AnyIPv4, ACN_SDT_MULTICAST_PORT);
connect(this, &QUdpSocket::readyRead,
this, &QSacnNode::UdpStreamHandler);
this, &QSacnNode::UdpPayloadReceiver);
onDiscovered(std::bind(&QSacnNode::emitFound, this,
std::placeholders::_1));
@ -43,7 +44,7 @@ void QSacnNode::unsubscribe(const uint16_t num)
}
void QSacnNode::UdpStreamHandler()
void QSacnNode::UdpPayloadReceiver()
{
while (hasPendingDatagrams()) {
qDebug() << "processing UDP datagram...";
@ -56,7 +57,7 @@ void QSacnNode::UdpStreamHandler()
PDU::Stream stream(new PDU::pdu_stream(
(uint8_t*)datagram.data().constData(),
datagram.data().length()));
Appliance::UdpStreamHandler(stream);
Receiver::UdpPayloadReceiver(stream);
}
}

View File

@ -43,7 +43,7 @@ signals:
void foundUniverse(std::shared_ptr<EXTENDED::DISCOVERY::DiscoveredUniverse>);
private:
void UdpStreamHandler();
void UdpPayloadReceiver();
void emitFound(std::shared_ptr<EXTENDED::DISCOVERY::DiscoveredUniverse>);
QHash<uint16_t, QSacnUniverseWrapper*> wrappers_;

View File

@ -35,10 +35,10 @@ namespace SACN {
Receiver::Receiver(UUID::uuid cid)
: Appliance(cid)
{
registerRlpVectorHandler(VECTOR_ROOT_E131_DATA,
std::bind(&Receiver::rootDataHandler, this, std::placeholders::_1));
registerRlpVectorHandler(VECTOR_ROOT_E131_EXTENDED,
std::bind(&Receiver::rootExtendedHandler, this, std::placeholders::_1));
RlpRegisterVectorHandler(VECTOR_ROOT_E131_DATA,
std::bind(&Receiver::dataReceiver, this, std::placeholders::_1));
RlpRegisterVectorHandler(VECTOR_ROOT_E131_EXTENDED,
std::bind(&Receiver::extendedReceiver, this, std::placeholders::_1));
}
@ -103,12 +103,12 @@ void Receiver::onDiscovered(const EXTENDED::DISCOVERY::Watcher cb) {
/**
* @brief Receiver::rootDataHandler
* @brief Receiver::dataReceiver - dispatcher of RLP DATA PDU
* @param root a shared pointer to the PDU
*
* Receive VECTOR_ROOT_E131_DATA vector'd packets.
*/
void Receiver::rootDataHandler(std::shared_ptr<RLP::Pdu> root) {
void Receiver::dataReceiver(std::shared_ptr<RLP::Pdu> root) {
auto block = PDU::readBlock<DATA::Pdu>(root->stream(), root);
if (root->stream()->fail())
return;
@ -119,7 +119,7 @@ void Receiver::rootDataHandler(std::shared_ptr<RLP::Pdu> root) {
// layer is wrapping a DMP PDU.
switch(frame->vector()) {
case VECTOR_E131_DATA_PACKET:
dataPacketHandler(frame);
dataFrameHandler(frame);
break;
default:
break;
@ -129,12 +129,12 @@ void Receiver::rootDataHandler(std::shared_ptr<RLP::Pdu> root) {
/**
* @brief Receiver::rootExtendedHandler
* @brief Receiver::extendedReceiver - dispatcher of RLP EXTENDED PDU
* @param root a shared pointer to the PDU
*
* Receive VECTOR_ROOT_E131_EXTENDED vector'd packets.
*/
void Receiver::rootExtendedHandler(std::shared_ptr<RLP::Pdu> root) {
void Receiver::extendedReceiver(std::shared_ptr<RLP::Pdu> root) {
auto block = PDU::readBlock<EXTENDED::Pdu>(root->stream(), root);
if (root->stream()->fail())
return;
@ -142,11 +142,11 @@ void Receiver::rootExtendedHandler(std::shared_ptr<RLP::Pdu> root) {
switch(frame->vector()) {
// 6.3 E1.31 Synchronization Packet Framing Layer
case VECTOR_E131_EXTENDED_SYNCHRONIZATION:
syncPacketHandler(frame);
syncFrameHandler(frame);
break;
// 6.4 E1.31 Universe Discovery Packet Framing Layer
case VECTOR_E131_EXTENDED_DISCOVERY:
discoveryPacketHandler(frame);
discoveryFrameHandler(frame);
break;
default:
break;
@ -156,53 +156,7 @@ void Receiver::rootExtendedHandler(std::shared_ptr<RLP::Pdu> root) {
/**
* @brief Receiver::discoveryPacketHandler
* @param frame
*/
void Receiver::discoveryPacketHandler(std::shared_ptr<EXTENDED::Pdu> frame) {
auto block = PDU::readBlock<EXTENDED::DISCOVERY::Pdu>(frame->stream(), frame);
if (frame->stream()->fail())
return;
for(auto const &pdu : *block) {
// 8 Universe Discovery Layer
// Universe Discovery data only appears in E1.31 Universe Discovery
// Packets and shall not be included in E1.31 Data Packets or E1.31
// Synchronization Packets.
switch(pdu->vector()) {
case VECTOR_UNIVERSE_DISCOVERY_UNIVERSE_LIST:
discoveryListHanlder(pdu);
break;
default:
break;
}
}
}
/**
* @brief Receiver::discoveryListHanlder
* @param pdu
*/
void Receiver::discoveryListHanlder(std::shared_ptr<EXTENDED::DISCOVERY::Pdu> pdu) {
// header may be inherited. check that one exists
if (!pdu->header())
return;
while(pdu->stream()->good()) {
auto found = std::shared_ptr<EXTENDED::DISCOVERY::DiscoveredUniverse>
(new EXTENDED::DISCOVERY::DiscoveredUniverse(pdu));
if (pdu->stream()->fail()) break;
if (!pdu->stream()->good()) break;
for (const auto &cb : discoveryCallbacks_)
cb(found);
}
}
/**
* @brief Receiver::dataPacketHandler
* @brief Receiver::dataFrameHandler
* @param frame
*
* Receive `VECTOR_ROOT_E131_DATA -> VECTOR_E131_DATA_PACKET` vector'd packets.
@ -211,13 +165,13 @@ void Receiver::discoveryListHanlder(std::shared_ptr<EXTENDED::DISCOVERY::Pdu> pd
* DMP PDUs and passed to the universe.
*
*/
void Receiver::dataPacketHandler(std::shared_ptr<DATA::Pdu> frame) {
void Receiver::dataFrameHandler(std::shared_ptr<DATA::Pdu> frame) {
// header may be inherited. check that one exists
if (!frame->header())
return;
auto source = std::shared_ptr<UniverseSource>(new UniverseSource(frame));
if (universes_.count(source->universe()) == 0)
if (!universes_.count(source->universe()))
return;
Universe * universe = universes_.at(source->universe());
@ -263,11 +217,11 @@ void Receiver::dataPacketHandler(std::shared_ptr<DATA::Pdu> frame) {
// a value of 0 in the Synchronization Address indicates that the universe
// data is not synchronized.
if (source->syncAddress() != 0) {
// TODO: do somthing to engage synchronization
/// TODO: do somthing to engage synchronization
}
// If a receiver is presented with an E1.31 Data Packet containing a Synchronization Address of 0, it shall discard any data waiting to be processed and immediately act on that Data Packet.
if (source->syncAddress() == 0 && universe->isSyncronized()) {
// TODO:: do something to break synchronization
/// TODO:: do something to break synchronization
}
// 6.2.3.1 Multiple Sources at Highest Priority
@ -275,7 +229,7 @@ void Receiver::dataPacketHandler(std::shared_ptr<DATA::Pdu> frame) {
// the highest currently active priority for a given universe. When this
// occurs, receivers must handle these sources in some way.
// TODO: do something with merging and arbitration
/// TODO: do something with merging and arbitration
// PDU data will be a block of DMP
auto block = PDU::readBlock<DMP::Pdu>(frame->stream(), frame);
@ -296,4 +250,61 @@ void Receiver::dataPacketHandler(std::shared_ptr<DATA::Pdu> frame) {
}
}
/**
* @brief Receiver::syncFrameHandler
* @param frame
*/
void Receiver::syncFrameHandler(std::shared_ptr<EXTENDED::Pdu> frame)
{
/// TODO: Universe sync
}
/**
* @brief Receiver::discoveryFrameHandler
* @param frame
*/
void Receiver::discoveryFrameHandler(std::shared_ptr<EXTENDED::Pdu> frame) {
auto block = PDU::readBlock<EXTENDED::DISCOVERY::Pdu>(frame->stream(), frame);
if (frame->stream()->fail())
return;
for(auto const &pdu : *block) {
// 8 Universe Discovery Layer
// Universe Discovery data only appears in E1.31 Universe Discovery
// Packets and shall not be included in E1.31 Data Packets or E1.31
// Synchronization Packets.
switch(pdu->vector()) {
case VECTOR_UNIVERSE_DISCOVERY_UNIVERSE_LIST:
discoveryListHanlder(pdu);
break;
default:
break;
}
}
}
/**
* @brief Receiver::discoveryListHanlder
* @param pdu
*/
void Receiver::discoveryListHanlder(std::shared_ptr<EXTENDED::DISCOVERY::Pdu> pdu) {
// header may be inherited. check that one exists
if (!pdu->header())
return;
while(pdu->stream()->good()) {
auto found = std::shared_ptr<EXTENDED::DISCOVERY::DiscoveredUniverse>
(new EXTENDED::DISCOVERY::DiscoveredUniverse(pdu));
if (pdu->stream()->fail()) break;
if (!pdu->stream()->good()) break;
for (const auto &cb : discoveryCallbacks_)
cb(found);
}
}
}; // SACN

View File

@ -46,14 +46,19 @@ public:
void onDiscovered(const EXTENDED::DISCOVERY::Watcher);
protected:
// process data frames
void rootDataHandler(std::shared_ptr<RLP::Pdu>);
void dataPacketHandler(std::shared_ptr<DATA::Pdu>);
// 5 - E1.31 use of the ACN Root Layer Protocol
void dataReceiver(std::shared_ptr<RLP::Pdu>);
void extendedReceiver(std::shared_ptr<RLP::Pdu>);
// process extended frames
void rootExtendedHandler(std::shared_ptr<RLP::Pdu>);
void syncPacketHandler(std::shared_ptr<EXTENDED::Pdu>) {};
void discoveryPacketHandler(std::shared_ptr<EXTENDED::Pdu>);
// 6.2 E1.31 Data Packet Framing Layer
void dataFrameHandler(std::shared_ptr<DATA::Pdu>);
// 6.3 E1.31 Synchronization Packet Framing Layer
void syncFrameHandler(std::shared_ptr<EXTENDED::Pdu>);
// 6.4 E1.31 Universe Discovery Packet Framing Layer
void discoveryFrameHandler(std::shared_ptr<EXTENDED::Pdu>);
// 8 Universe Discovery Layer
void discoveryListHanlder(std::shared_ptr<EXTENDED::DISCOVERY::Pdu>);
private:

View File

@ -41,8 +41,11 @@ UniverseSource::UniverseSource()
/**
Construct a Universe Source from an sACN frame PDU
*/
* @brief UniverseSource::UniverseSource
* @param pdu
*
* Construct a Universe Source from an sACN frame PDU
*/
UniverseSource::UniverseSource(std::shared_ptr<DATA::Pdu> pdu)
{
#if defined(RTTI_ENABLED)