1
0
Fork 0

cleanup EPI18 PDU i/o

This commit is contained in:
Kevin Matz 2021-08-18 15:51:47 -04:00
parent 68020b0213
commit a746cb9022
2 changed files with 63 additions and 25 deletions

View File

@ -22,36 +22,79 @@
SOFTWARE.
*/
#include "sdt.h"
#include "sdt-udp.h"
namespace ACN {
namespace SDT {
namespace UDP {
/**
* @brief ipAddress::streamSize
* @return
*/
size_t ipAddress::streamSize() const
{
switch (type)
{
case SDT_ADDR_IPV4:
return 7;
case SDT_ADDR_IPV6:
return 19;
case SDT_ADDR_NULL:
default:
return 1;
}
}
/**
* @brief address_t::iStream
* @param stream
*/
void address_t::iStream(PDU::Stream stream)
void ipAddress::iStream(PDU::Stream stream)
{
if (!stream->good())
*stream >> type;
if (type == SDT_ADDR_NULL)
return;
*stream >> type;
if (type != SDT_ADDR_NULL)
*stream >> port;
*stream >> port;
switch (type) {
switch (type)
{
case SDT_ADDR_IPV4:
for (unsigned int i = 0; i < sizeof(ipv4); i++)
for (size_t i = 0; i < sizeof(ipv4); i++)
*stream >> ipv4[i];
break;
case SDT_ADDR_IPV6:
for (unsigned int i = 0; i < sizeof(ipv6); i++)
for (size_t i = 0; i < sizeof(ipv6); i++)
*stream >> ipv6[i];
break;
case SDT_ADDR_NULL:
default:
}
}
/**
* @brief ipAddress::oStream
* @param stream
*/
void ipAddress::oStream(PDU::Stream stream) const
{
*stream << type;
if (type == SDT_ADDR_NULL)
return;
*stream << port;
switch (type)
{
case SDT_ADDR_IPV4:
for (size_t i = 0; i < sizeof(ipv4); i++)
*stream << ipv4[i];
break;
case SDT_ADDR_IPV6:
for (size_t i = 0; i < sizeof(ipv6); i++)
*stream << ipv6[i];
break;
}
}

View File

@ -42,31 +42,26 @@ static const float NAK_TIMEOUT_FACTOR = 0.1;
static const uint8_t NAK_MAX_RETRIES = 2; // (3 tries total)
static const uint8_t NAK_HOLDOFF_INTERVAL = 2; // ms
static const uint8_t NAK_MAX_TIME = 10 * NAK_HOLDOFF_INTERVAL;
static const uint8_t NAK_BLANKTIME = 3 * NAK_HOLDOFF_INTERVAL;
static const uint8_t NAK_BLANKTIME = 3 * NAK_HOLDOFF_INTERVAL;
static const uint16_t SDT_MULTICAST_PORT = 5568; // IANA registered “sdt”
/**
* @brief The ip_addr_spec_t enum
* defined in SDT, but needed here without including that header
*/
enum ip_addr_spec_t {
SDT_ADDR_NULL = 0, //!< Address is not present (0 octets).
SDT_ADDR_IPV4 = 1, //!< Address specified is in IP v4 format
SDT_ADDR_IPV6 = 2 //!< Address specified is in IP v6 format
};
/**
* @brief 3 Address Specification
*/
struct address_t {
uint8_t type = SDT_ADDR_NULL;
uint16_t port = SDT_MULTICAST_PORT;
struct ipAddress
: PDU::pdu_stream_object
{
uint8_t type = 0;
uint16_t port = SDT_MULTICAST_PORT;
union {
uint8_t ipv4[4];
uint8_t ipv6[16] = {0};
};
void iStream(PDU::Stream);
size_t streamSize() const override;
void iStream(PDU::Stream) override;
void oStream(PDU::Stream) const override;
};
} // UDP