Warning removal.

This commit is contained in:
Adam Ierymenko 2021-04-20 18:57:19 -04:00
parent e7b7d7444e
commit fdafddafa0
No known key found for this signature in database
GPG key ID: C8877CF2D7A5D7F3
6 changed files with 174 additions and 174 deletions

View file

@ -286,7 +286,7 @@ public:
/** /**
* Set all memory to zero * Set all memory to zero
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void clear() noexcept ZT_INLINE void clear() noexcept
{ {
Utils::zero< ZT_BUF_MEM_SIZE >(unsafeData); Utils::zero< ZT_BUF_MEM_SIZE >(unsafeData);
} }
@ -297,7 +297,7 @@ public:
* @param ii Index value-result parameter (incremented by 1) * @param ii Index value-result parameter (incremented by 1)
* @return Byte (undefined on overflow) * @return Byte (undefined on overflow)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint8_t rI8(int &ii) const noexcept ZT_INLINE uint8_t rI8(int &ii) const noexcept
{ {
const int s = ii++; const int s = ii++;
return unsafeData[(unsigned int)s & ZT_BUF_MEM_MASK]; return unsafeData[(unsigned int)s & ZT_BUF_MEM_MASK];
@ -309,7 +309,7 @@ public:
* @param ii Index value-result parameter (incremented by 2) * @param ii Index value-result parameter (incremented by 2)
* @return Integer (undefined on overflow) * @return Integer (undefined on overflow)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint16_t rI16(int &ii) const noexcept ZT_INLINE uint16_t rI16(int &ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
ii += 2; ii += 2;
@ -328,7 +328,7 @@ public:
* @param ii Index value-result parameter (incremented by 4) * @param ii Index value-result parameter (incremented by 4)
* @return Integer (undefined on overflow) * @return Integer (undefined on overflow)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint32_t rI32(int &ii) const noexcept ZT_INLINE uint32_t rI32(int &ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
ii += 4; ii += 4;
@ -349,7 +349,7 @@ public:
* @param ii Index value-result parameter (incremented by 8) * @param ii Index value-result parameter (incremented by 8)
* @return Integer (undefined on overflow) * @return Integer (undefined on overflow)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint64_t rI64(int &ii) const noexcept ZT_INLINE uint64_t rI64(int &ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
ii += 8; ii += 8;
@ -384,7 +384,7 @@ public:
* @return Bytes read or a negative value on unmarshal error (passed from object) or overflow * @return Bytes read or a negative value on unmarshal error (passed from object) or overflow
*/ */
template< typename T > template< typename T >
ZT_MAYBE_UNUSED ZT_INLINE int rO(int &ii, T &obj) const noexcept ZT_INLINE int rO(int &ii, T &obj) const noexcept
{ {
if (likely(ii < ZT_BUF_MEM_SIZE)) { if (likely(ii < ZT_BUF_MEM_SIZE)) {
int ms = obj.unmarshal(unsafeData + ii, ZT_BUF_MEM_SIZE - ii); int ms = obj.unmarshal(unsafeData + ii, ZT_BUF_MEM_SIZE - ii);
@ -406,7 +406,7 @@ public:
* @param bufSize Capacity of buffer in bytes * @param bufSize Capacity of buffer in bytes
* @return Pointer to buf or NULL on overflow or error * @return Pointer to buf or NULL on overflow or error
*/ */
ZT_MAYBE_UNUSED ZT_INLINE char *rS(int &ii, char *const buf, const unsigned int bufSize) const noexcept ZT_INLINE char *rS(int &ii, char *const buf, const unsigned int bufSize) const noexcept
{ {
const char *const s = (const char *)(unsafeData + ii); const char *const s = (const char *)(unsafeData + ii);
const int sii = ii; const int sii = ii;
@ -435,7 +435,7 @@ public:
* @param ii Index value-result parameter (incremented by length of string) * @param ii Index value-result parameter (incremented by length of string)
* @return Pointer to null-terminated C-style string or NULL on overflow or error * @return Pointer to null-terminated C-style string or NULL on overflow or error
*/ */
ZT_MAYBE_UNUSED ZT_INLINE const char *rSnc(int &ii) const noexcept ZT_INLINE const char *rSnc(int &ii) const noexcept
{ {
const char *const s = (const char *)(unsafeData + ii); const char *const s = (const char *)(unsafeData + ii);
while (ii < ZT_BUF_MEM_SIZE) { while (ii < ZT_BUF_MEM_SIZE) {
@ -456,7 +456,7 @@ public:
* @param len Length of buffer * @param len Length of buffer
* @return Pointer to data or NULL on overflow or error * @return Pointer to data or NULL on overflow or error
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint8_t *rB(int &ii, void *const bytes, const unsigned int len) const noexcept ZT_INLINE uint8_t *rB(int &ii, void *const bytes, const unsigned int len) const noexcept
{ {
if (likely(((ii += (int)len) <= ZT_BUF_MEM_SIZE))) { if (likely(((ii += (int)len) <= ZT_BUF_MEM_SIZE))) {
Utils::copy(bytes, unsafeData + ii, len); Utils::copy(bytes, unsafeData + ii, len);
@ -478,7 +478,7 @@ public:
* @param len Length of data field to obtain a pointer to * @param len Length of data field to obtain a pointer to
* @return Pointer to field or NULL on overflow * @return Pointer to field or NULL on overflow
*/ */
ZT_MAYBE_UNUSED ZT_INLINE const uint8_t *rBnc(int &ii, unsigned int len) const noexcept ZT_INLINE const uint8_t *rBnc(int &ii, unsigned int len) const noexcept
{ {
const uint8_t *const b = unsafeData + ii; const uint8_t *const b = unsafeData + ii;
return ((ii += (int)len) <= ZT_BUF_MEM_SIZE) ? b : nullptr; return ((ii += (int)len) <= ZT_BUF_MEM_SIZE) ? b : nullptr;
@ -491,7 +491,7 @@ public:
* @return Value * @return Value
*/ */
template< unsigned int I > template< unsigned int I >
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI8() const noexcept ZT_INLINE uint8_t lI8() const noexcept
{ {
static_assert(I < ZT_BUF_MEM_SIZE, "overflow"); static_assert(I < ZT_BUF_MEM_SIZE, "overflow");
return unsafeData[I]; return unsafeData[I];
@ -504,7 +504,7 @@ public:
* @return Value * @return Value
*/ */
template< unsigned int I > template< unsigned int I >
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI16() const noexcept ZT_INLINE uint8_t lI16() const noexcept
{ {
static_assert((I + 1) < ZT_BUF_MEM_SIZE, "overflow"); static_assert((I + 1) < ZT_BUF_MEM_SIZE, "overflow");
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -523,7 +523,7 @@ public:
* @return Value * @return Value
*/ */
template< unsigned int I > template< unsigned int I >
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI32() const noexcept ZT_INLINE uint8_t lI32() const noexcept
{ {
static_assert((I + 3) < ZT_BUF_MEM_SIZE, "overflow"); static_assert((I + 3) < ZT_BUF_MEM_SIZE, "overflow");
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -544,7 +544,7 @@ public:
* @return Value * @return Value
*/ */
template< unsigned int I > template< unsigned int I >
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI64() const noexcept ZT_INLINE uint8_t lI64() const noexcept
{ {
static_assert((I + 7) < ZT_BUF_MEM_SIZE, "overflow"); static_assert((I + 7) < ZT_BUF_MEM_SIZE, "overflow");
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -569,7 +569,7 @@ public:
* will not necessarily result in a 'true' return from readOverflow(). It does * will not necessarily result in a 'true' return from readOverflow(). It does
* however subject 'ii' to soft bounds masking like the gI??() methods. * however subject 'ii' to soft bounds masking like the gI??() methods.
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI8(const int ii) const noexcept ZT_INLINE uint8_t lI8(const int ii) const noexcept
{ {
return unsafeData[(unsigned int)ii & ZT_BUF_MEM_MASK]; return unsafeData[(unsigned int)ii & ZT_BUF_MEM_MASK];
} }
@ -581,7 +581,7 @@ public:
* will not necessarily result in a 'true' return from readOverflow(). It does * will not necessarily result in a 'true' return from readOverflow(). It does
* however subject 'ii' to soft bounds masking like the gI??() methods. * however subject 'ii' to soft bounds masking like the gI??() methods.
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint16_t lI16(const int ii) const noexcept ZT_INLINE uint16_t lI16(const int ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -600,7 +600,7 @@ public:
* will not necessarily result in a 'true' return from readOverflow(). It does * will not necessarily result in a 'true' return from readOverflow(). It does
* however subject 'ii' to soft bounds masking like the gI??() methods. * however subject 'ii' to soft bounds masking like the gI??() methods.
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint32_t lI32(const int ii) const noexcept ZT_INLINE uint32_t lI32(const int ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -621,7 +621,7 @@ public:
* will not necessarily result in a 'true' return from readOverflow(). It does * will not necessarily result in a 'true' return from readOverflow(). It does
* however subject 'ii' to soft bounds masking like the gI??() methods. * however subject 'ii' to soft bounds masking like the gI??() methods.
*/ */
ZT_MAYBE_UNUSED ZT_INLINE uint8_t lI64(const int ii) const noexcept ZT_INLINE uint8_t lI64(const int ii) const noexcept
{ {
const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK; const unsigned int s = (unsigned int)ii & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -645,7 +645,7 @@ public:
* @param ii Index value-result parameter (incremented by 1) * @param ii Index value-result parameter (incremented by 1)
* @param n Byte * @param n Byte
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wI8(int &ii, const uint8_t n) noexcept ZT_INLINE void wI8(int &ii, const uint8_t n) noexcept
{ {
const int s = ii++; const int s = ii++;
unsafeData[(unsigned int)s & ZT_BUF_MEM_MASK] = n; unsafeData[(unsigned int)s & ZT_BUF_MEM_MASK] = n;
@ -657,7 +657,7 @@ public:
* @param ii Index value-result parameter (incremented by 2) * @param ii Index value-result parameter (incremented by 2)
* @param n Integer * @param n Integer
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wI16(int &ii, const uint16_t n) noexcept ZT_INLINE void wI16(int &ii, const uint16_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
ii += 2; ii += 2;
@ -675,7 +675,7 @@ public:
* @param ii Index value-result parameter (incremented by 4) * @param ii Index value-result parameter (incremented by 4)
* @param n Integer * @param n Integer
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wI32(int &ii, const uint32_t n) noexcept ZT_INLINE void wI32(int &ii, const uint32_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
ii += 4; ii += 4;
@ -695,7 +695,7 @@ public:
* @param ii Index value-result parameter (incremented by 8) * @param ii Index value-result parameter (incremented by 8)
* @param n Integer * @param n Integer
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wI64(int &ii, const uint64_t n) noexcept ZT_INLINE void wI64(int &ii, const uint64_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
ii += 8; ii += 8;
@ -721,7 +721,7 @@ public:
* @param t Object to write * @param t Object to write
*/ */
template< typename T > template< typename T >
ZT_MAYBE_UNUSED ZT_INLINE void wO(int &ii, T &t) noexcept ZT_INLINE void wO(int &ii, T &t) noexcept
{ {
const int s = ii; const int s = ii;
if (likely((s + T::marshalSizeMax()) <= ZT_BUF_MEM_SIZE)) { if (likely((s + T::marshalSizeMax()) <= ZT_BUF_MEM_SIZE)) {
@ -739,7 +739,7 @@ public:
* @param ii Index value-result parameter (incremented by length of string) * @param ii Index value-result parameter (incremented by length of string)
* @param s String to write (writes an empty string if this is NULL) * @param s String to write (writes an empty string if this is NULL)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wS(int &ii, const char *s) noexcept ZT_INLINE void wS(int &ii, const char *s) noexcept
{ {
if (s) { if (s) {
char c; char c;
@ -759,7 +759,7 @@ public:
* @param bytes Bytes to write * @param bytes Bytes to write
* @param len Size of data in bytes * @param len Size of data in bytes
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wB(int &ii, const void *const bytes, const unsigned int len) noexcept ZT_INLINE void wB(int &ii, const void *const bytes, const unsigned int len) noexcept
{ {
const int s = ii; const int s = ii;
if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE)) if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE))
@ -772,7 +772,7 @@ public:
* @param ii Index value-result parameter (incremented by len) * @param ii Index value-result parameter (incremented by len)
* @param len Number of zero bytes to write * @param len Number of zero bytes to write
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wZ(int &ii, const unsigned int len) noexcept ZT_INLINE void wZ(int &ii, const unsigned int len) noexcept
{ {
const int s = ii; const int s = ii;
if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE)) if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE))
@ -785,7 +785,7 @@ public:
* @param ii Index value-result parameter (incremented by len) * @param ii Index value-result parameter (incremented by len)
* @param len Number of random bytes to write * @param len Number of random bytes to write
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void wR(int &ii, const unsigned int len) noexcept ZT_INLINE void wR(int &ii, const unsigned int len) noexcept
{ {
const int s = ii; const int s = ii;
if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE)) if (likely((ii += (int)len) <= ZT_BUF_MEM_SIZE))
@ -795,7 +795,7 @@ public:
/** /**
* Store a byte without advancing the index * Store a byte without advancing the index
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void sI8(const int ii, const uint8_t n) noexcept ZT_INLINE void sI8(const int ii, const uint8_t n) noexcept
{ {
unsafeData[(unsigned int)ii & ZT_BUF_MEM_MASK] = n; unsafeData[(unsigned int)ii & ZT_BUF_MEM_MASK] = n;
} }
@ -803,7 +803,7 @@ public:
/** /**
* Store an integer without advancing the index * Store an integer without advancing the index
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void sI16(const int ii, const uint16_t n) noexcept ZT_INLINE void sI16(const int ii, const uint16_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -817,7 +817,7 @@ public:
/** /**
* Store an integer without advancing the index * Store an integer without advancing the index
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void sI32(const int ii, const uint32_t n) noexcept ZT_INLINE void sI32(const int ii, const uint32_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -833,7 +833,7 @@ public:
/** /**
* Store an integer without advancing the index * Store an integer without advancing the index
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void sI64(const int ii, const uint64_t n) noexcept ZT_INLINE void sI64(const int ii, const uint64_t n) noexcept
{ {
const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK; const unsigned int s = ((unsigned int)ii) & ZT_BUF_MEM_MASK;
#ifdef ZT_NO_UNALIGNED_ACCESS #ifdef ZT_NO_UNALIGNED_ACCESS
@ -853,7 +853,7 @@ public:
/** /**
* @return Capacity of this buffer (usable size of data.bytes) * @return Capacity of this buffer (usable size of data.bytes)
*/ */
ZT_MAYBE_UNUSED static constexpr unsigned int capacity() noexcept static constexpr unsigned int capacity() noexcept
{ return ZT_BUF_MEM_SIZE; } { return ZT_BUF_MEM_SIZE; }
private: private:

View file

@ -15,24 +15,24 @@
namespace ZeroTier { namespace ZeroTier {
ZT_MAYBE_UNUSED Vector< uint8_t > &Dictionary::operator[](const char *const k) Vector< uint8_t > &Dictionary::operator[](const char *const k)
{ return m_entries[k]; } { return m_entries[k]; }
ZT_MAYBE_UNUSED const Vector< uint8_t > &Dictionary::operator[](const char *const k) const const Vector< uint8_t > &Dictionary::operator[](const char *const k) const
{ {
static const Vector< uint8_t > s_emptyEntry; static const Vector< uint8_t > s_emptyEntry;
const SortedMap< String, Vector< uint8_t > >::const_iterator e(m_entries.find(k)); const SortedMap< String, Vector< uint8_t > >::const_iterator e(m_entries.find(k));
return (e == m_entries.end()) ? s_emptyEntry : e->second; return (e == m_entries.end()) ? s_emptyEntry : e->second;
} }
ZT_MAYBE_UNUSED void Dictionary::add(const char *k, const Address &v) void Dictionary::add(const char *k, const Address &v)
{ {
char tmp[ZT_ADDRESS_STRING_SIZE_MAX]; char tmp[ZT_ADDRESS_STRING_SIZE_MAX];
v.toString(tmp); v.toString(tmp);
add(k, tmp); add(k, tmp);
} }
ZT_MAYBE_UNUSED void Dictionary::add(const char *k, const char *v) void Dictionary::add(const char *k, const char *v)
{ {
Vector< uint8_t > &e = (*this)[k]; Vector< uint8_t > &e = (*this)[k];
e.clear(); e.clear();
@ -42,7 +42,7 @@ ZT_MAYBE_UNUSED void Dictionary::add(const char *k, const char *v)
} }
} }
ZT_MAYBE_UNUSED void Dictionary::add(const char *k, const void *data, unsigned int len) void Dictionary::add(const char *k, const void *data, unsigned int len)
{ {
Vector< uint8_t > &e = (*this)[k]; Vector< uint8_t > &e = (*this)[k];
if (likely(len != 0)) { if (likely(len != 0)) {
@ -52,7 +52,7 @@ ZT_MAYBE_UNUSED void Dictionary::add(const char *k, const void *data, unsigned i
} }
} }
ZT_MAYBE_UNUSED uint64_t Dictionary::getUI(const char *k, uint64_t dfl) const uint64_t Dictionary::getUI(const char *k, uint64_t dfl) const
{ {
char tmp[32]; char tmp[32];
getS(k, tmp, sizeof(tmp)); getS(k, tmp, sizeof(tmp));
@ -61,7 +61,7 @@ ZT_MAYBE_UNUSED uint64_t Dictionary::getUI(const char *k, uint64_t dfl) const
return dfl; return dfl;
} }
ZT_MAYBE_UNUSED char *Dictionary::getS(const char *k, char *v, const unsigned int cap) const char *Dictionary::getS(const char *k, char *v, const unsigned int cap) const
{ {
if (cap == 0) // sanity check if (cap == 0) // sanity check
return v; return v;
@ -84,10 +84,10 @@ ZT_MAYBE_UNUSED char *Dictionary::getS(const char *k, char *v, const unsigned in
return v; return v;
} }
ZT_MAYBE_UNUSED void Dictionary::clear() void Dictionary::clear()
{ m_entries.clear(); } { m_entries.clear(); }
ZT_MAYBE_UNUSED void Dictionary::encode(Vector< uint8_t > &out) const void Dictionary::encode(Vector< uint8_t > &out) const
{ {
out.clear(); out.clear();
for (SortedMap< String, Vector< uint8_t > >::const_iterator ti(m_entries.begin()); ti != m_entries.end(); ++ti) { for (SortedMap< String, Vector< uint8_t > >::const_iterator ti(m_entries.begin()); ti != m_entries.end(); ++ti) {
@ -98,7 +98,7 @@ ZT_MAYBE_UNUSED void Dictionary::encode(Vector< uint8_t > &out) const
} }
} }
ZT_MAYBE_UNUSED bool Dictionary::decode(const void *data, unsigned int len) bool Dictionary::decode(const void *data, unsigned int len)
{ {
clear(); clear();
String k; String k;
@ -151,7 +151,7 @@ ZT_MAYBE_UNUSED bool Dictionary::decode(const void *data, unsigned int len)
return true; return true;
} }
ZT_MAYBE_UNUSED char *Dictionary::arraySubscript(char *buf, unsigned int bufSize, const char *name, const unsigned long sub) noexcept char *Dictionary::arraySubscript(char *buf, unsigned int bufSize, const char *name, const unsigned long sub) noexcept
{ {
if (bufSize < 17) { // sanity check if (bufSize < 17) { // sanity check
buf[0] = 0; buf[0] = 0;

View file

@ -81,7 +81,7 @@ public:
* @param k Key to look up * @param k Key to look up
* @return Reference to value * @return Reference to value
*/ */
ZT_MAYBE_UNUSED Vector< uint8_t > &operator[](const char *k); Vector< uint8_t > &operator[](const char *k);
/** /**
* Get a const reference to a value * Get a const reference to a value
@ -89,18 +89,18 @@ public:
* @param k Key to look up * @param k Key to look up
* @return Reference to value or to empty vector if not found * @return Reference to value or to empty vector if not found
*/ */
ZT_MAYBE_UNUSED const Vector< uint8_t > &operator[](const char *k) const; const Vector< uint8_t > &operator[](const char *k) const;
/** /**
* @return Start of key->value pairs * @return Start of key->value pairs
*/ */
ZT_MAYBE_UNUSED ZT_INLINE const_iterator begin() const noexcept ZT_INLINE const_iterator begin() const noexcept
{ return m_entries.begin(); } { return m_entries.begin(); }
/** /**
* @return End of key->value pairs * @return End of key->value pairs
*/ */
ZT_MAYBE_UNUSED ZT_INLINE const_iterator end() const noexcept ZT_INLINE const_iterator end() const noexcept
{ return m_entries.end(); } { return m_entries.end(); }
/** /**
@ -109,7 +109,7 @@ public:
* @param k Key to set * @param k Key to set
* @param v Integer to set, will be cast to uint64_t and stored as hex * @param v Integer to set, will be cast to uint64_t and stored as hex
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void add(const char *const k, const uint64_t v) ZT_INLINE void add(const char *const k, const uint64_t v)
{ {
char buf[24]; char buf[24];
add(k, Utils::hex((uint64_t)(v), buf)); add(k, Utils::hex((uint64_t)(v), buf));
@ -121,7 +121,7 @@ public:
* @param k Key to set * @param k Key to set
* @param v Integer to set, will be cast to uint64_t and stored as hex * @param v Integer to set, will be cast to uint64_t and stored as hex
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void add(const char *const k, const int64_t v) ZT_INLINE void add(const char *const k, const int64_t v)
{ {
char buf[24]; char buf[24];
add(k, Utils::hex((uint64_t)(v), buf)); add(k, Utils::hex((uint64_t)(v), buf));
@ -130,17 +130,17 @@ public:
/** /**
* Add an address in 10-digit hex string format * Add an address in 10-digit hex string format
*/ */
ZT_MAYBE_UNUSED void add(const char *k, const Address &v); void add(const char *k, const Address &v);
/** /**
* Add a C string as a value * Add a C string as a value
*/ */
ZT_MAYBE_UNUSED void add(const char *k, const char *v); void add(const char *k, const char *v);
/** /**
* Add a binary blob as a value * Add a binary blob as a value
*/ */
ZT_MAYBE_UNUSED void add(const char *k, const void *data, unsigned int len); void add(const char *k, const void *data, unsigned int len);
/** /**
* Get an integer * Get an integer
@ -149,7 +149,7 @@ public:
* @param dfl Default value (default: 0) * @param dfl Default value (default: 0)
* @return Value of key or default if not found * @return Value of key or default if not found
*/ */
ZT_MAYBE_UNUSED uint64_t getUI(const char *k, uint64_t dfl = 0) const; uint64_t getUI(const char *k, uint64_t dfl = 0) const;
/** /**
* Get a C string * Get a C string
@ -161,7 +161,7 @@ public:
* @param v Buffer to hold string * @param v Buffer to hold string
* @param cap Maximum size of string (including terminating null) * @param cap Maximum size of string (including terminating null)
*/ */
ZT_MAYBE_UNUSED char *getS(const char *k, char *v, unsigned int cap) const; char *getS(const char *k, char *v, unsigned int cap) const;
/** /**
* Get an object supporting the marshal/unmarshal interface pattern * Get an object supporting the marshal/unmarshal interface pattern
@ -172,7 +172,7 @@ public:
* @return True if unmarshal was successful * @return True if unmarshal was successful
*/ */
template< typename T > template< typename T >
ZT_MAYBE_UNUSED ZT_INLINE bool getO(const char *k, T &obj) const ZT_INLINE bool getO(const char *k, T &obj) const
{ {
const Vector< uint8_t > &d = (*this)[k]; const Vector< uint8_t > &d = (*this)[k];
if (d.empty()) if (d.empty())
@ -189,7 +189,7 @@ public:
* @return True if successful * @return True if successful
*/ */
template< typename T > template< typename T >
ZT_MAYBE_UNUSED ZT_INLINE bool addO(const char *k, T &obj) ZT_INLINE bool addO(const char *k, T &obj)
{ {
Vector< uint8_t > &d = (*this)[k]; Vector< uint8_t > &d = (*this)[k];
d.resize(T::marshalSizeMax()); d.resize(T::marshalSizeMax());
@ -205,18 +205,18 @@ public:
/** /**
* Erase all entries in dictionary * Erase all entries in dictionary
*/ */
ZT_MAYBE_UNUSED void clear(); void clear();
/** /**
* @return Number of entries * @return Number of entries
*/ */
ZT_MAYBE_UNUSED ZT_INLINE unsigned int size() const noexcept ZT_INLINE unsigned int size() const noexcept
{ return (unsigned int)m_entries.size(); } { return (unsigned int)m_entries.size(); }
/** /**
* @return True if dictionary is not empty * @return True if dictionary is not empty
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool empty() const noexcept ZT_INLINE bool empty() const noexcept
{ return m_entries.empty(); } { return m_entries.empty(); }
/** /**
@ -224,7 +224,7 @@ public:
* *
* @param out String encoded dictionary * @param out String encoded dictionary
*/ */
ZT_MAYBE_UNUSED void encode(Vector< uint8_t > &out) const; void encode(Vector< uint8_t > &out) const;
/** /**
* Decode a string encoded dictionary * Decode a string encoded dictionary
@ -236,7 +236,7 @@ public:
* @param len Length of data * @param len Length of data
* @return True if dictionary was formatted correctly and valid, false on error * @return True if dictionary was formatted correctly and valid, false on error
*/ */
ZT_MAYBE_UNUSED bool decode(const void *data, unsigned int len); bool decode(const void *data, unsigned int len);
/** /**
* Append a key=value pair to a buffer (vector or FCV) * Append a key=value pair to a buffer (vector or FCV)
@ -246,7 +246,7 @@ public:
* @param v Value * @param v Value
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const bool v) ZT_INLINE static void append(V &out, const char *const k, const bool v)
{ {
s_appendKey(out, k); s_appendKey(out, k);
out.push_back((uint8_t)(v ? '1' : '0')); out.push_back((uint8_t)(v ? '1' : '0'));
@ -261,7 +261,7 @@ public:
* @param v Value * @param v Value
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const Address v) ZT_INLINE static void append(V &out, const char *const k, const Address v)
{ {
s_appendKey(out, k); s_appendKey(out, k);
const uint64_t a = v.toInt(); const uint64_t a = v.toInt();
@ -287,7 +287,7 @@ public:
* @param v Value * @param v Value
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const uint64_t v) ZT_INLINE static void append(V &out, const char *const k, const uint64_t v)
{ {
s_appendKey(out, k); s_appendKey(out, k);
char buf[17]; char buf[17];
@ -299,31 +299,31 @@ public:
} }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const int64_t v) ZT_INLINE static void append(V &out, const char *const k, const int64_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const uint32_t v) ZT_INLINE static void append(V &out, const char *const k, const uint32_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const int32_t v) ZT_INLINE static void append(V &out, const char *const k, const int32_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const uint16_t v) ZT_INLINE static void append(V &out, const char *const k, const uint16_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const int16_t v) ZT_INLINE static void append(V &out, const char *const k, const int16_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const uint8_t v) ZT_INLINE static void append(V &out, const char *const k, const uint8_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const int8_t v) ZT_INLINE static void append(V &out, const char *const k, const int8_t v)
{ append(out, k, (uint64_t)v); } { append(out, k, (uint64_t)v); }
/** /**
@ -334,7 +334,7 @@ public:
* @param v Value * @param v Value
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const char *v) ZT_INLINE static void append(V &out, const char *const k, const char *v)
{ {
if ((v) && (*v)) { if ((v) && (*v)) {
s_appendKey(out, k); s_appendKey(out, k);
@ -353,7 +353,7 @@ public:
* @param vlen Value length in bytes * @param vlen Value length in bytes
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED ZT_INLINE static void append(V &out, const char *const k, const void *const v, const unsigned int vlen) ZT_INLINE static void append(V &out, const char *const k, const void *const v, const unsigned int vlen)
{ {
s_appendKey(out, k); s_appendKey(out, k);
for (unsigned int i = 0; i < vlen; ++i) for (unsigned int i = 0; i < vlen; ++i)
@ -369,7 +369,7 @@ public:
* @param pid Packet ID * @param pid Packet ID
*/ */
template< typename V > template< typename V >
ZT_MAYBE_UNUSED static ZT_INLINE void appendPacketId(V &out, const char *const k, const uint64_t pid) static ZT_INLINE void appendPacketId(V &out, const char *const k, const uint64_t pid)
{ append(out, k, &pid, 8); } { append(out, k, &pid, 8); }
/** /**
@ -381,7 +381,7 @@ public:
* @return Bytes appended or negative on error (return value of marshal()) * @return Bytes appended or negative on error (return value of marshal())
*/ */
template< typename V, typename T > template< typename V, typename T >
ZT_MAYBE_UNUSED static ZT_INLINE int appendObject(V &out, const char *const k, const T &v) static ZT_INLINE int appendObject(V &out, const char *const k, const T &v)
{ {
uint8_t tmp[2048]; // large enough for any current object uint8_t tmp[2048]; // large enough for any current object
if (T::marshalSizeMax() > sizeof(tmp)) if (T::marshalSizeMax() > sizeof(tmp))
@ -400,7 +400,7 @@ public:
* @param sub Subscript index * @param sub Subscript index
* @return Pointer to 'buf' * @return Pointer to 'buf'
*/ */
ZT_MAYBE_UNUSED static char *arraySubscript(char *buf, unsigned int bufSize, const char *name, const unsigned long sub) noexcept; static char *arraySubscript(char *buf, unsigned int bufSize, const char *name, const unsigned long sub) noexcept;
private: private:
template< typename V > template< typename V >

View file

@ -81,7 +81,7 @@ public:
/** /**
* Clear this vector, destroying all content objects * Clear this vector, destroying all content objects
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void clear() ZT_INLINE void clear()
{ {
const unsigned int s = _s; const unsigned int s = _s;
_s = 0; _s = 0;
@ -94,51 +94,51 @@ public:
* *
* @param v Target vector * @param v Target vector
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void unsafeMoveTo(FCV &v) noexcept ZT_INLINE void unsafeMoveTo(FCV &v) noexcept
{ {
Utils::copy(v._m, _m, (v._s = _s) * sizeof(T)); Utils::copy(v._m, _m, (v._s = _s) * sizeof(T));
_s = 0; _s = 0;
} }
ZT_MAYBE_UNUSED ZT_INLINE iterator begin() noexcept ZT_INLINE iterator begin() noexcept
{ return reinterpret_cast<T *>(_m); } { return reinterpret_cast<T *>(_m); }
ZT_MAYBE_UNUSED ZT_INLINE iterator end() noexcept ZT_INLINE iterator end() noexcept
{ return reinterpret_cast<T *>(_m) + _s; } { return reinterpret_cast<T *>(_m) + _s; }
ZT_MAYBE_UNUSED ZT_INLINE const_iterator begin() const noexcept ZT_INLINE const_iterator begin() const noexcept
{ return reinterpret_cast<const T *>(_m); } { return reinterpret_cast<const T *>(_m); }
ZT_MAYBE_UNUSED ZT_INLINE const_iterator end() const noexcept ZT_INLINE const_iterator end() const noexcept
{ return reinterpret_cast<const T *>(_m) + _s; } { return reinterpret_cast<const T *>(_m) + _s; }
ZT_MAYBE_UNUSED ZT_INLINE T &operator[](const unsigned int i) ZT_INLINE T &operator[](const unsigned int i)
{ {
if (likely(i < _s)) if (likely(i < _s))
return reinterpret_cast<T *>(_m)[i]; return reinterpret_cast<T *>(_m)[i];
throw Utils::OutOfRangeException; throw Utils::OutOfRangeException;
} }
ZT_MAYBE_UNUSED ZT_INLINE const T &operator[](const unsigned int i) const ZT_INLINE const T &operator[](const unsigned int i) const
{ {
if (likely(i < _s)) if (likely(i < _s))
return reinterpret_cast<const T *>(_m)[i]; return reinterpret_cast<const T *>(_m)[i];
throw Utils::OutOfRangeException; throw Utils::OutOfRangeException;
} }
ZT_MAYBE_UNUSED static constexpr unsigned int capacity() noexcept static constexpr unsigned int capacity() noexcept
{ return C; } { return C; }
ZT_MAYBE_UNUSED ZT_INLINE unsigned int size() const noexcept ZT_INLINE unsigned int size() const noexcept
{ return _s; } { return _s; }
ZT_MAYBE_UNUSED ZT_INLINE bool empty() const noexcept ZT_INLINE bool empty() const noexcept
{ return (_s == 0); } { return (_s == 0); }
ZT_MAYBE_UNUSED ZT_INLINE T *data() noexcept ZT_INLINE T *data() noexcept
{ return reinterpret_cast<T *>(_m); } { return reinterpret_cast<T *>(_m); }
ZT_MAYBE_UNUSED ZT_INLINE const T *data() const noexcept ZT_INLINE const T *data() const noexcept
{ return reinterpret_cast<const T *>(_m); } { return reinterpret_cast<const T *>(_m); }
/** /**
@ -148,7 +148,7 @@ public:
* *
* @param v Value to push * @param v Value to push
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void push_back(const T &v) ZT_INLINE void push_back(const T &v)
{ {
if (likely(_s < C)) if (likely(_s < C))
new(reinterpret_cast<T *>(_m) + _s++) T(v); new(reinterpret_cast<T *>(_m) + _s++) T(v);
@ -160,7 +160,7 @@ public:
* *
* @return Reference to new item * @return Reference to new item
*/ */
ZT_MAYBE_UNUSED ZT_INLINE T &push() ZT_INLINE T &push()
{ {
if (likely(_s < C)) { if (likely(_s < C)) {
return *(new(reinterpret_cast<T *>(_m) + _s++) T()); return *(new(reinterpret_cast<T *>(_m) + _s++) T());
@ -174,7 +174,7 @@ public:
* *
* @return Reference to new item * @return Reference to new item
*/ */
ZT_MAYBE_UNUSED ZT_INLINE T &push(const T &v) ZT_INLINE T &push(const T &v)
{ {
if (likely(_s < C)) { if (likely(_s < C)) {
return *(new(reinterpret_cast<T *>(_m) + _s++) T(v)); return *(new(reinterpret_cast<T *>(_m) + _s++) T(v));
@ -188,7 +188,7 @@ public:
/** /**
* Remove the last element if this vector is not empty * Remove the last element if this vector is not empty
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void pop_back() ZT_INLINE void pop_back()
{ {
if (likely(_s != 0)) if (likely(_s != 0))
(reinterpret_cast<T *>(_m) + --_s)->~T(); (reinterpret_cast<T *>(_m) + --_s)->~T();
@ -199,7 +199,7 @@ public:
* *
* @param ns New size (clipped to C if larger than capacity) * @param ns New size (clipped to C if larger than capacity)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void resize(unsigned int ns) ZT_INLINE void resize(unsigned int ns)
{ {
if (unlikely(ns > C)) if (unlikely(ns > C))
throw Utils::OutOfRangeException; throw Utils::OutOfRangeException;
@ -216,7 +216,7 @@ public:
* *
* @param ns New size * @param ns New size
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void unsafeSetSize(unsigned int ns) ZT_INLINE void unsafeSetSize(unsigned int ns)
{ _s = ns; } { _s = ns; }
/** /**
@ -228,7 +228,7 @@ public:
* @param i Index to obtain as a reference, resizing if needed * @param i Index to obtain as a reference, resizing if needed
* @return Reference to value at this index * @return Reference to value at this index
*/ */
ZT_MAYBE_UNUSED ZT_INLINE T &at(unsigned int i) ZT_INLINE T &at(unsigned int i)
{ {
if (i >= _s) { if (i >= _s) {
if (unlikely(i >= C)) if (unlikely(i >= C))
@ -250,7 +250,7 @@ public:
* @param end Ending iterator (must be greater than start) * @param end Ending iterator (must be greater than start)
*/ */
template< typename X > template< typename X >
ZT_MAYBE_UNUSED ZT_INLINE void assign(X start, const X &end) ZT_INLINE void assign(X start, const X &end)
{ {
const int l = std::min((int)std::distance(start, end), (int)C); const int l = std::min((int)std::distance(start, end), (int)C);
if (l > 0) { if (l > 0) {
@ -262,7 +262,7 @@ public:
} }
} }
ZT_MAYBE_UNUSED ZT_INLINE bool operator==(const FCV &v) const noexcept ZT_INLINE bool operator==(const FCV &v) const noexcept
{ {
if (_s == v._s) { if (_s == v._s) {
for (unsigned int i = 0; i < _s; ++i) { for (unsigned int i = 0; i < _s; ++i) {
@ -274,19 +274,19 @@ public:
return false; return false;
} }
ZT_MAYBE_UNUSED ZT_INLINE bool operator!=(const FCV &v) const noexcept ZT_INLINE bool operator!=(const FCV &v) const noexcept
{ return *this != v; } { return *this != v; }
ZT_MAYBE_UNUSED ZT_INLINE bool operator<(const FCV &v) const noexcept ZT_INLINE bool operator<(const FCV &v) const noexcept
{ return std::lexicographical_compare(begin(), end(), v.begin(), v.end()); } { return std::lexicographical_compare(begin(), end(), v.begin(), v.end()); }
ZT_MAYBE_UNUSED ZT_INLINE bool operator>(const FCV &v) const noexcept ZT_INLINE bool operator>(const FCV &v) const noexcept
{ return (v < *this); } { return (v < *this); }
ZT_MAYBE_UNUSED ZT_INLINE bool operator<=(const FCV &v) const noexcept ZT_INLINE bool operator<=(const FCV &v) const noexcept
{ return v >= *this; } { return v >= *this; }
ZT_MAYBE_UNUSED ZT_INLINE bool operator>=(const FCV &v) const noexcept ZT_INLINE bool operator>=(const FCV &v) const noexcept
{ return *this >= v; } { return *this >= v; }
private: private:

View file

@ -27,7 +27,7 @@ const InetAddress InetAddress::LO4((const void *) ("\x7f\x00\x00\x01"), 4, 0);
const InetAddress InetAddress::LO6((const void *) ("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"), 16, 0); const InetAddress InetAddress::LO6((const void *) ("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"), 16, 0);
const InetAddress InetAddress::NIL; const InetAddress InetAddress::NIL;
ZT_MAYBE_UNUSED InetAddress::IpScope InetAddress::ipScope() const noexcept InetAddress::IpScope InetAddress::ipScope() const noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -112,7 +112,7 @@ ZT_MAYBE_UNUSED InetAddress::IpScope InetAddress::ipScope() const noexcept
return ZT_IP_SCOPE_NONE; return ZT_IP_SCOPE_NONE;
} }
ZT_MAYBE_UNUSED void InetAddress::set(const void *ipBytes, unsigned int ipLen, unsigned int port) noexcept void InetAddress::set(const void *ipBytes, unsigned int ipLen, unsigned int port) noexcept
{ {
memoryZero(this); memoryZero(this);
if (ipLen == 4) { if (ipLen == 4) {
@ -126,7 +126,7 @@ ZT_MAYBE_UNUSED void InetAddress::set(const void *ipBytes, unsigned int ipLen, u
} }
} }
ZT_MAYBE_UNUSED bool InetAddress::isDefaultRoute() const noexcept bool InetAddress::isDefaultRoute() const noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
case AF_INET: case AF_INET:
@ -145,7 +145,7 @@ ZT_MAYBE_UNUSED bool InetAddress::isDefaultRoute() const noexcept
} }
} }
ZT_MAYBE_UNUSED char *InetAddress::toString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept char *InetAddress::toString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept
{ {
char *p = toIpString(buf); char *p = toIpString(buf);
if (*p) { if (*p) {
@ -156,7 +156,7 @@ ZT_MAYBE_UNUSED char *InetAddress::toString(char buf[ZT_INETADDRESS_STRING_SIZE_
return buf; return buf;
} }
ZT_MAYBE_UNUSED char *InetAddress::toIpString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept char *InetAddress::toIpString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept
{ {
buf[0] = (char) 0; buf[0] = (char) 0;
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -170,7 +170,7 @@ ZT_MAYBE_UNUSED char *InetAddress::toIpString(char buf[ZT_INETADDRESS_STRING_SIZ
return buf; return buf;
} }
ZT_MAYBE_UNUSED bool InetAddress::fromString(const char *ipSlashPort) noexcept bool InetAddress::fromString(const char *ipSlashPort) noexcept
{ {
char buf[64]; char buf[64];
@ -205,7 +205,7 @@ ZT_MAYBE_UNUSED bool InetAddress::fromString(const char *ipSlashPort) noexcept
return false; return false;
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::netmask() const noexcept InetAddress InetAddress::netmask() const noexcept
{ {
InetAddress r(*this); InetAddress r(*this);
switch (r.as.ss.ss_family) { switch (r.as.ss.ss_family) {
@ -229,7 +229,7 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::netmask() const noexcept
return r; return r;
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::broadcast() const noexcept InetAddress InetAddress::broadcast() const noexcept
{ {
if (as.ss.ss_family == AF_INET) { if (as.ss.ss_family == AF_INET) {
InetAddress r(*this); InetAddress r(*this);
@ -239,7 +239,7 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::broadcast() const noexcept
return InetAddress(); return InetAddress();
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::network() const noexcept InetAddress InetAddress::network() const noexcept
{ {
InetAddress r(*this); InetAddress r(*this);
switch (r.as.ss.ss_family) { switch (r.as.ss.ss_family) {
@ -259,7 +259,7 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::network() const noexcept
return r; return r;
} }
ZT_MAYBE_UNUSED bool InetAddress::isEqualPrefix(const InetAddress &addr) const noexcept bool InetAddress::isEqualPrefix(const InetAddress &addr) const noexcept
{ {
if (addr.as.ss.ss_family == as.ss.ss_family) { if (addr.as.ss.ss_family == as.ss.ss_family) {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -281,7 +281,7 @@ ZT_MAYBE_UNUSED bool InetAddress::isEqualPrefix(const InetAddress &addr) const n
return false; return false;
} }
ZT_MAYBE_UNUSED bool InetAddress::containsAddress(const InetAddress &addr) const noexcept bool InetAddress::containsAddress(const InetAddress &addr) const noexcept
{ {
if (addr.as.ss.ss_family == as.ss.ss_family) { if (addr.as.ss.ss_family == as.ss.ss_family) {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -310,7 +310,7 @@ ZT_MAYBE_UNUSED bool InetAddress::containsAddress(const InetAddress &addr) const
return false; return false;
} }
ZT_MAYBE_UNUSED bool InetAddress::isNetwork() const noexcept bool InetAddress::isNetwork() const noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
case AF_INET: { case AF_INET: {
@ -342,7 +342,7 @@ ZT_MAYBE_UNUSED bool InetAddress::isNetwork() const noexcept
return false; return false;
} }
ZT_MAYBE_UNUSED int InetAddress::marshal(uint8_t data[ZT_INETADDRESS_MARSHAL_SIZE_MAX]) const noexcept int InetAddress::marshal(uint8_t data[ZT_INETADDRESS_MARSHAL_SIZE_MAX]) const noexcept
{ {
unsigned int port; unsigned int port;
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -369,7 +369,7 @@ ZT_MAYBE_UNUSED int InetAddress::marshal(uint8_t data[ZT_INETADDRESS_MARSHAL_SIZ
} }
} }
ZT_MAYBE_UNUSED int InetAddress::unmarshal(const uint8_t *restrict data, const int len) noexcept int InetAddress::unmarshal(const uint8_t *restrict data, const int len) noexcept
{ {
memoryZero(this); memoryZero(this);
if (unlikely(len <= 0)) if (unlikely(len <= 0))
@ -396,7 +396,7 @@ ZT_MAYBE_UNUSED int InetAddress::unmarshal(const uint8_t *restrict data, const i
} }
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv6LinkLocal(const MAC &mac) noexcept InetAddress InetAddress::makeIpv6LinkLocal(const MAC &mac) noexcept
{ {
InetAddress r; InetAddress r;
r.as.sa_in6.sin6_family = AF_INET6; r.as.sa_in6.sin6_family = AF_INET6;
@ -420,7 +420,7 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv6LinkLocal(const MAC &mac) noexc
return r; return r;
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv6rfc4193(uint64_t nwid, uint64_t zeroTierAddress) noexcept InetAddress InetAddress::makeIpv6rfc4193(uint64_t nwid, uint64_t zeroTierAddress) noexcept
{ {
InetAddress r; InetAddress r;
r.as.sa_in6.sin6_family = AF_INET6; r.as.sa_in6.sin6_family = AF_INET6;
@ -444,7 +444,7 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv6rfc4193(uint64_t nwid, uint64_t
return r; return r;
} }
ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv66plane(uint64_t nwid, uint64_t zeroTierAddress) noexcept InetAddress InetAddress::makeIpv66plane(uint64_t nwid, uint64_t zeroTierAddress) noexcept
{ {
nwid ^= (nwid >> 32U); nwid ^= (nwid >> 32U);
InetAddress r; InetAddress r;
@ -465,8 +465,8 @@ ZT_MAYBE_UNUSED InetAddress InetAddress::makeIpv66plane(uint64_t nwid, uint64_t
} }
extern "C" { extern "C" {
ZT_MAYBE_UNUSED extern const int ZT_AF_INET = (int)AF_INET; extern const int ZT_AF_INET = (int)AF_INET;
ZT_MAYBE_UNUSED extern const int ZT_AF_INET6 = (int)AF_INET6; extern const int ZT_AF_INET6 = (int)AF_INET6;
} }
} // namespace ZeroTier } // namespace ZeroTier

View file

@ -162,13 +162,13 @@ public:
return *this; return *this;
} }
ZT_MAYBE_UNUSED ZT_INLINE void clear() noexcept ZT_INLINE void clear() noexcept
{ memoryZero(this); } { memoryZero(this); }
/** /**
* @return IP scope classification (e.g. loopback, link-local, private, global) * @return IP scope classification (e.g. loopback, link-local, private, global)
*/ */
ZT_MAYBE_UNUSED IpScope ipScope() const noexcept; IpScope ipScope() const noexcept;
/** /**
* Set from a raw IP and port number * Set from a raw IP and port number
@ -177,14 +177,14 @@ public:
* @param ipLen Length of IP address: 4 or 16 * @param ipLen Length of IP address: 4 or 16
* @param port Port number or 0 for none * @param port Port number or 0 for none
*/ */
ZT_MAYBE_UNUSED void set(const void *ipBytes, unsigned int ipLen, unsigned int port) noexcept; void set(const void *ipBytes, unsigned int ipLen, unsigned int port) noexcept;
/** /**
* Set the port component * Set the port component
* *
* @param port Port, 0 to 65535 * @param port Port, 0 to 65535
*/ */
ZT_MAYBE_UNUSED ZT_INLINE void setPort(unsigned int port) noexcept ZT_INLINE void setPort(unsigned int port) noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
case AF_INET: case AF_INET:
@ -199,14 +199,14 @@ public:
/** /**
* @return True if this network/netmask route describes a default route (e.g. 0.0.0.0/0) * @return True if this network/netmask route describes a default route (e.g. 0.0.0.0/0)
*/ */
ZT_MAYBE_UNUSED bool isDefaultRoute() const noexcept; bool isDefaultRoute() const noexcept;
/** /**
* @return ASCII IP/port format representation * @return ASCII IP/port format representation
*/ */
ZT_MAYBE_UNUSED char *toString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept; char *toString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept;
ZT_MAYBE_UNUSED ZT_INLINE String toString() const ZT_INLINE String toString() const
{ {
char buf[ZT_INETADDRESS_STRING_SIZE_MAX]; char buf[ZT_INETADDRESS_STRING_SIZE_MAX];
toString(buf); toString(buf);
@ -216,9 +216,9 @@ public:
/** /**
* @return IP portion only, in ASCII string format * @return IP portion only, in ASCII string format
*/ */
ZT_MAYBE_UNUSED char *toIpString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept; char *toIpString(char buf[ZT_INETADDRESS_STRING_SIZE_MAX]) const noexcept;
ZT_MAYBE_UNUSED ZT_INLINE String toIpString() const ZT_INLINE String toIpString() const
{ {
char buf[ZT_INETADDRESS_STRING_SIZE_MAX]; char buf[ZT_INETADDRESS_STRING_SIZE_MAX];
toIpString(buf); toIpString(buf);
@ -229,12 +229,12 @@ public:
* @param ipSlashPort IP/port (port is optional, will be 0 if not included) * @param ipSlashPort IP/port (port is optional, will be 0 if not included)
* @return True if address appeared to be valid * @return True if address appeared to be valid
*/ */
ZT_MAYBE_UNUSED bool fromString(const char *ipSlashPort) noexcept; bool fromString(const char *ipSlashPort) noexcept;
/** /**
* @return Port or 0 if no port component defined * @return Port or 0 if no port component defined
*/ */
ZT_MAYBE_UNUSED ZT_INLINE unsigned int port() const noexcept ZT_INLINE unsigned int port() const noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
case AF_INET: case AF_INET:
@ -255,13 +255,13 @@ public:
* *
* @return Netmask bits * @return Netmask bits
*/ */
ZT_MAYBE_UNUSED ZT_INLINE unsigned int netmaskBits() const noexcept ZT_INLINE unsigned int netmaskBits() const noexcept
{ return port(); } { return port(); }
/** /**
* @return True if netmask bits is valid for the address type * @return True if netmask bits is valid for the address type
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool netmaskBitsValid() const noexcept ZT_INLINE bool netmaskBitsValid() const noexcept
{ {
const unsigned int n = port(); const unsigned int n = port();
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -281,7 +281,7 @@ public:
* *
* @return Gateway metric * @return Gateway metric
*/ */
ZT_MAYBE_UNUSED ZT_INLINE unsigned int metric() const noexcept ZT_INLINE unsigned int metric() const noexcept
{ return port(); } { return port(); }
/** /**
@ -289,7 +289,7 @@ public:
* *
* @return Netmask such as 255.255.255.0 if this address is /24 (port field will be unchanged) * @return Netmask such as 255.255.255.0 if this address is /24 (port field will be unchanged)
*/ */
ZT_MAYBE_UNUSED InetAddress netmask() const noexcept; InetAddress netmask() const noexcept;
/** /**
* Constructs a broadcast address from a network/netmask address * Constructs a broadcast address from a network/netmask address
@ -299,14 +299,14 @@ public:
* *
* @return Broadcast address (only IP portion is meaningful) * @return Broadcast address (only IP portion is meaningful)
*/ */
ZT_MAYBE_UNUSED InetAddress broadcast() const noexcept; InetAddress broadcast() const noexcept;
/** /**
* Return the network -- a.k.a. the IP ANDed with the netmask * Return the network -- a.k.a. the IP ANDed with the netmask
* *
* @return Network e.g. 10.0.1.0/24 from 10.0.1.200/24 * @return Network e.g. 10.0.1.0/24 from 10.0.1.200/24
*/ */
ZT_MAYBE_UNUSED InetAddress network() const noexcept; InetAddress network() const noexcept;
/** /**
* Test whether this IPv6 prefix matches the prefix of a given IPv6 address * Test whether this IPv6 prefix matches the prefix of a given IPv6 address
@ -314,7 +314,7 @@ public:
* @param addr Address to check * @param addr Address to check
* @return True if this IPv6 prefix matches the prefix of a given IPv6 address * @return True if this IPv6 prefix matches the prefix of a given IPv6 address
*/ */
ZT_MAYBE_UNUSED bool isEqualPrefix(const InetAddress &addr) const noexcept; bool isEqualPrefix(const InetAddress &addr) const noexcept;
/** /**
* Test whether this IP/netmask contains this address * Test whether this IP/netmask contains this address
@ -322,24 +322,24 @@ public:
* @param addr Address to check * @param addr Address to check
* @return True if this IP/netmask (route) contains this address * @return True if this IP/netmask (route) contains this address
*/ */
ZT_MAYBE_UNUSED bool containsAddress(const InetAddress &addr) const noexcept; bool containsAddress(const InetAddress &addr) const noexcept;
/** /**
* @return True if this is an IPv4 address * @return True if this is an IPv4 address
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool isV4() const noexcept ZT_INLINE bool isV4() const noexcept
{ return (as.ss.ss_family == AF_INET); } { return (as.ss.ss_family == AF_INET); }
/** /**
* @return True if this is an IPv6 address * @return True if this is an IPv6 address
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool isV6() const noexcept ZT_INLINE bool isV6() const noexcept
{ return (as.ss.ss_family == AF_INET6); } { return (as.ss.ss_family == AF_INET6); }
/** /**
* @return pointer to raw address bytes or NULL if not available * @return pointer to raw address bytes or NULL if not available
*/ */
ZT_MAYBE_UNUSED ZT_INLINE const void *rawIpData() const noexcept ZT_INLINE const void *rawIpData() const noexcept
{ {
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
case AF_INET: case AF_INET:
@ -354,7 +354,7 @@ public:
/** /**
* @return InetAddress containing only the IP portion of this address and a zero port, or NULL if not IPv4 or IPv6 * @return InetAddress containing only the IP portion of this address and a zero port, or NULL if not IPv4 or IPv6
*/ */
ZT_MAYBE_UNUSED ZT_INLINE InetAddress ipOnly() const noexcept ZT_INLINE InetAddress ipOnly() const noexcept
{ {
InetAddress r; InetAddress r;
switch (as.ss.ss_family) { switch (as.ss.ss_family) {
@ -376,7 +376,7 @@ public:
* @param a InetAddress to compare again * @param a InetAddress to compare again
* @return True if only IP portions are equal (false for non-IP or null addresses) * @return True if only IP portions are equal (false for non-IP or null addresses)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool ipsEqual(const InetAddress &a) const noexcept ZT_INLINE bool ipsEqual(const InetAddress &a) const noexcept
{ {
const uint8_t f = as.ss.ss_family; const uint8_t f = as.ss.ss_family;
if (f == a.as.ss.ss_family) { if (f == a.as.ss.ss_family) {
@ -397,7 +397,7 @@ public:
* @param a InetAddress to compare again * @param a InetAddress to compare again
* @return True if only IP portions are equal (false for non-IP or null addresses) * @return True if only IP portions are equal (false for non-IP or null addresses)
*/ */
ZT_MAYBE_UNUSED ZT_INLINE bool ipsEqual2(const InetAddress &a) const noexcept ZT_INLINE bool ipsEqual2(const InetAddress &a) const noexcept
{ {
const uint8_t f = as.ss.ss_family; const uint8_t f = as.ss.ss_family;
if (f == a.as.ss.ss_family) { if (f == a.as.ss.ss_family) {
@ -410,7 +410,7 @@ public:
return false; return false;
} }
ZT_MAYBE_UNUSED ZT_INLINE unsigned long hashCode() const noexcept ZT_INLINE unsigned long hashCode() const noexcept
{ {
if (as.ss.ss_family == AF_INET) { if (as.ss.ss_family == AF_INET) {
return (unsigned long)Utils::hash32(((uint32_t)as.sa_in.sin_addr.s_addr + (uint32_t)as.sa_in.sin_port) ^ (uint32_t)Utils::s_mapNonce); return (unsigned long)Utils::hash32(((uint32_t)as.sa_in.sin_addr.s_addr + (uint32_t)as.sa_in.sin_port) ^ (uint32_t)Utils::s_mapNonce);
@ -432,20 +432,20 @@ public:
* *
* @return True if everything after netmask bits is zero * @return True if everything after netmask bits is zero
*/ */
ZT_MAYBE_UNUSED bool isNetwork() const noexcept; bool isNetwork() const noexcept;
/** /**
* @return True if address family is non-zero * @return True if address family is non-zero
*/ */
ZT_MAYBE_UNUSED explicit ZT_INLINE operator bool() const noexcept explicit ZT_INLINE operator bool() const noexcept
{ return (as.ss.ss_family != 0); } { return (as.ss.ss_family != 0); }
ZT_MAYBE_UNUSED static constexpr int marshalSizeMax() noexcept static constexpr int marshalSizeMax() noexcept
{ return ZT_INETADDRESS_MARSHAL_SIZE_MAX; } { return ZT_INETADDRESS_MARSHAL_SIZE_MAX; }
ZT_MAYBE_UNUSED int marshal(uint8_t data[ZT_INETADDRESS_MARSHAL_SIZE_MAX]) const noexcept; int marshal(uint8_t data[ZT_INETADDRESS_MARSHAL_SIZE_MAX]) const noexcept;
ZT_MAYBE_UNUSED int unmarshal(const uint8_t *restrict data, int len) noexcept; int unmarshal(const uint8_t *restrict data, int len) noexcept;
ZT_INLINE bool operator==(const InetAddress &a) const noexcept ZT_INLINE bool operator==(const InetAddress &a) const noexcept
{ {
@ -499,7 +499,7 @@ public:
* @param mac MAC address seed * @param mac MAC address seed
* @return IPv6 link-local address * @return IPv6 link-local address
*/ */
ZT_MAYBE_UNUSED static InetAddress makeIpv6LinkLocal(const MAC &mac) noexcept; static InetAddress makeIpv6LinkLocal(const MAC &mac) noexcept;
/** /**
* Compute private IPv6 unicast address from network ID and ZeroTier address * Compute private IPv6 unicast address from network ID and ZeroTier address
@ -561,64 +561,64 @@ public:
} as; } as;
}; };
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress *asInetAddress(sockaddr_in *const p) noexcept static ZT_INLINE InetAddress *asInetAddress(sockaddr_in *const p) noexcept
{ return reinterpret_cast<InetAddress *>(p); } { return reinterpret_cast<InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress *asInetAddress(sockaddr_in6 *const p) noexcept static ZT_INLINE InetAddress *asInetAddress(sockaddr_in6 *const p) noexcept
{ return reinterpret_cast<InetAddress *>(p); } { return reinterpret_cast<InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress *asInetAddress(sockaddr *const p) noexcept static ZT_INLINE InetAddress *asInetAddress(sockaddr *const p) noexcept
{ return reinterpret_cast<InetAddress *>(p); } { return reinterpret_cast<InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress *asInetAddress(sockaddr_storage *const p) noexcept static ZT_INLINE InetAddress *asInetAddress(sockaddr_storage *const p) noexcept
{ return reinterpret_cast<InetAddress *>(p); } { return reinterpret_cast<InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress *asInetAddress(ZT_InetAddress *const p) noexcept static ZT_INLINE InetAddress *asInetAddress(ZT_InetAddress *const p) noexcept
{ return reinterpret_cast<InetAddress *>(p); } { return reinterpret_cast<InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in *const p) noexcept static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in *const p) noexcept
{ return reinterpret_cast<const InetAddress *>(p); } { return reinterpret_cast<const InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in6 *const p) noexcept static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_in6 *const p) noexcept
{ return reinterpret_cast<const InetAddress *>(p); } { return reinterpret_cast<const InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress *asInetAddress(const sockaddr *const p) noexcept static ZT_INLINE const InetAddress *asInetAddress(const sockaddr *const p) noexcept
{ return reinterpret_cast<const InetAddress *>(p); } { return reinterpret_cast<const InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_storage *const p) noexcept static ZT_INLINE const InetAddress *asInetAddress(const sockaddr_storage *const p) noexcept
{ return reinterpret_cast<const InetAddress *>(p); } { return reinterpret_cast<const InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress *asInetAddress(const ZT_InetAddress *const p) noexcept static ZT_INLINE const InetAddress *asInetAddress(const ZT_InetAddress *const p) noexcept
{ return reinterpret_cast<const InetAddress *>(p); } { return reinterpret_cast<const InetAddress *>(p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress &asInetAddress(sockaddr_in &p) noexcept static ZT_INLINE InetAddress &asInetAddress(sockaddr_in &p) noexcept
{ return *reinterpret_cast<InetAddress *>(&p); } { return *reinterpret_cast<InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress &asInetAddress(sockaddr_in6 &p) noexcept static ZT_INLINE InetAddress &asInetAddress(sockaddr_in6 &p) noexcept
{ return *reinterpret_cast<InetAddress *>(&p); } { return *reinterpret_cast<InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress &asInetAddress(sockaddr &p) noexcept static ZT_INLINE InetAddress &asInetAddress(sockaddr &p) noexcept
{ return *reinterpret_cast<InetAddress *>(&p); } { return *reinterpret_cast<InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress &asInetAddress(sockaddr_storage &p) noexcept static ZT_INLINE InetAddress &asInetAddress(sockaddr_storage &p) noexcept
{ return *reinterpret_cast<InetAddress *>(&p); } { return *reinterpret_cast<InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE InetAddress &asInetAddress(ZT_InetAddress &p) noexcept static ZT_INLINE InetAddress &asInetAddress(ZT_InetAddress &p) noexcept
{ return *reinterpret_cast<InetAddress *>(&p); } { return *reinterpret_cast<InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in &p) noexcept static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in &p) noexcept
{ return *reinterpret_cast<const InetAddress *>(&p); } { return *reinterpret_cast<const InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in6 &p) noexcept static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_in6 &p) noexcept
{ return *reinterpret_cast<const InetAddress *>(&p); } { return *reinterpret_cast<const InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress &asInetAddress(const sockaddr &p) noexcept static ZT_INLINE const InetAddress &asInetAddress(const sockaddr &p) noexcept
{ return *reinterpret_cast<const InetAddress *>(&p); } { return *reinterpret_cast<const InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_storage &p) noexcept static ZT_INLINE const InetAddress &asInetAddress(const sockaddr_storage &p) noexcept
{ return *reinterpret_cast<const InetAddress *>(&p); } { return *reinterpret_cast<const InetAddress *>(&p); }
ZT_MAYBE_UNUSED static ZT_INLINE const InetAddress &asInetAddress(const ZT_InetAddress &p) noexcept static ZT_INLINE const InetAddress &asInetAddress(const ZT_InetAddress &p) noexcept
{ return *reinterpret_cast<const InetAddress *>(&p); } { return *reinterpret_cast<const InetAddress *>(&p); }
} // namespace ZeroTier } // namespace ZeroTier