refactor method names + doc updates
This commit is contained in:
parent
4702ac333d
commit
51fb16455d
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue