cleanup EPI18 PDU i/o
This commit is contained in:
parent
68020b0213
commit
a746cb9022
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue