85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
/*
|
|
device.cpp
|
|
|
|
Copyright (c) 2021 Kevin Matz (kevin.matz@gmail.com)
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
*/
|
|
#include "device.h"
|
|
|
|
namespace RDMnet {
|
|
|
|
/**
|
|
* @brief Device::Device
|
|
* @param cid
|
|
* @param fctn
|
|
* @param uid
|
|
* @param rid
|
|
*/
|
|
Device::Device(UUID::uuid cid, std::string fctn, RDM::UID uid, UUID::uuid rid)
|
|
: Implementation(cid, fctn, uid)
|
|
, RPT::Device()
|
|
, rid_(rid)
|
|
{
|
|
RlpRegisterVector(VECTOR_ROOT_RPT, std::bind(&Device::rlpRptReceiver,
|
|
this, std::placeholders::_1));
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Device::rlpRptReceiver
|
|
* @param root
|
|
*/
|
|
void Device::rlpRptReceiver(ACN::PDU::Message<ACN::RLP::Pdu> root)
|
|
{
|
|
(void)root;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Device::receiveProbeRequest
|
|
* @param pdu
|
|
*/
|
|
void Device::receiveProbeRequest(ACN::PDU::Message<LLRP::ProbeRequest::Pdu> pdu)
|
|
{
|
|
/**
|
|
* > \cite RDMnet 5.4.2.1 Probe Request PDU
|
|
* > Cient TCP connection inactive. If this bit is set, an LLRP Target shall
|
|
* > only reply if its associated RPT Client is not currently connected to
|
|
* > a Broker.
|
|
*/
|
|
auto data = std::static_pointer_cast<LLRP::ProbeRequest::request_data>(pdu->data());
|
|
if (data->filter.client_tcp_inactive && RPT::Device::connectedToBroker)
|
|
return;
|
|
|
|
/**
|
|
* > \cite RDMnet 5.4.2.1 Probe Request PDU
|
|
* > Brokers only. If this bit is set, an LLRP Target shall only reply if
|
|
* > it is also associated with a Broker.
|
|
*/
|
|
if (data->filter.brokers_only)
|
|
return;
|
|
|
|
LLRP::Target::receiveProbeRequest(pdu);
|
|
}
|
|
|
|
|
|
|
|
} // namespace RDMnet
|