#include <C4NetIO.h>
|
union { |
sockaddr | gen |
|
sockaddr_in | v4 |
|
sockaddr_in6 | v6 |
|
}; | |
|
Definition at line 68 of file C4NetIO.h.
◆ AddressFamily
Enumerator |
---|
IPv6 | |
IPv4 | |
UnknownFamily | |
Definition at line 70 of file C4NetIO.h.
◆ SpecialAddress
Enumerator |
---|
Loopback | |
Any | |
AnyIPv4 | |
Definition at line 76 of file C4NetIO.h.
◆ ToStringFlags
Enumerator |
---|
TSF_SkipZoneId | |
TSF_SkipPort | |
Definition at line 83 of file C4NetIO.h.
◆ HostAddress() [1/6]
C4NetIO::HostAddress::HostAddress |
( |
| ) |
|
|
inline |
◆ HostAddress() [2/6]
C4NetIO::HostAddress::HostAddress |
( |
const HostAddress & |
other | ) |
|
|
inline |
◆ HostAddress() [3/6]
◆ HostAddress() [4/6]
C4NetIO::HostAddress::HostAddress |
( |
uint32_t |
addr | ) |
|
|
inlineexplicit |
◆ HostAddress() [5/6]
C4NetIO::HostAddress::HostAddress |
( |
const StdStrBuf & |
addr | ) |
|
|
inline |
◆ HostAddress() [6/6]
C4NetIO::HostAddress::HostAddress |
( |
const sockaddr * |
addr | ) |
|
|
inline |
◆ AsIPv4()
Definition at line 325 of file C4NetIO.cpp.
328 if (gen.sa_family == AF_INET6 && IN6_IS_ADDR_V4MAPPED(&v6.sin6_addr))
330 nrv.v4.sin_family = AF_INET;
331 memcpy((
char*) &nrv.v4.sin_addr, (
char*) &v6.sin6_addr.s6_addr[12],
sizeof(v4.sin_addr));
Referenced by C4NetIO::EndpointAddress::AsIPv4().
◆ AsIPv6()
Definition at line 303 of file C4NetIO.cpp.
305 static const uint8_t v6_mapped_v4_prefix[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff };
308 switch (gen.sa_family)
314 memmove(((
char*)&nrv.v6.sin6_addr) +
sizeof(v6_mapped_v4_prefix), &v4.sin_addr,
sizeof(v4.sin_addr));
315 nrv.v6.sin6_family = AF_INET6;
316 memcpy(&nrv.v6.sin6_addr, v6_mapped_v4_prefix,
sizeof(v6_mapped_v4_prefix));
317 nrv.v6.sin6_flowinfo = 0;
318 nrv.v6.sin6_scope_id = 0;
320 default: assert(!
"Shouldn't reach this");
break;
Referenced by C4NetIO::EndpointAddress::AsIPv6(), and operator==().
◆ Clear()
void C4NetIO::HostAddress::Clear |
( |
| ) |
|
◆ GetAddrLen()
size_t C4NetIO::HostAddress::GetAddrLen |
( |
| ) |
const |
◆ GetFamily()
◆ GetScopeId()
int C4NetIO::HostAddress::GetScopeId |
( |
| ) |
const |
◆ IsLocal()
bool C4NetIO::HostAddress::IsLocal |
( |
| ) |
const |
Definition at line 260 of file C4NetIO.cpp.
262 if (gen.sa_family == AF_INET6)
263 return IN6_IS_ADDR_LINKLOCAL(&v6.sin6_addr) != 0;
◆ IsLoopback()
bool C4NetIO::HostAddress::IsLoopback |
( |
| ) |
const |
Definition at line 251 of file C4NetIO.cpp.
253 if (gen.sa_family == AF_INET6)
254 return IN6_IS_ADDR_LOOPBACK(&v6.sin6_addr) != 0;
255 if (gen.sa_family == AF_INET)
256 return (ntohl(v4.sin_addr.s_addr) >> 24) == 127;
Referenced by C4NetIO::GetLocalAddresses().
◆ IsMulticast()
bool C4NetIO::HostAddress::IsMulticast |
( |
| ) |
const |
◆ IsNull()
bool C4NetIO::HostAddress::IsNull |
( |
| ) |
const |
Definition at line 508 of file C4NetIO.cpp.
510 switch (gen.sa_family)
512 case AF_INET:
return v4.sin_addr.s_addr == 0;
514 return !!IN6_IS_ADDR_UNSPECIFIED(&v6.sin6_addr);
516 assert(!
"Shouldn't reach this");
Referenced by C4NetIO::EndpointAddress::IsNullHost().
◆ IsPrivate()
bool C4NetIO::HostAddress::IsPrivate |
( |
| ) |
const |
Definition at line 270 of file C4NetIO.cpp.
273 if (gen.sa_family == AF_INET6)
274 return (v6.sin6_addr.s6_addr[0] & 0xfe) == 0xfc;
275 if (gen.sa_family == AF_INET)
277 uint32_t addr = ntohl(v4.sin_addr.s_addr);
278 uint32_t
s = (addr >> 16) & 0xff;
281 case 10:
return true;
282 case 172:
return s >= 16 &&
s <= 31;
283 case 192:
return s == 168;
References s.
◆ operator!=()
bool C4NetIO::HostAddress::operator!= |
( |
const HostAddress & |
rhs | ) |
const |
|
inline |
Definition at line 123 of file C4NetIO.h.
123 {
return !(*
this == rhs); }
◆ operator==()
bool C4NetIO::HostAddress::operator== |
( |
const HostAddress & |
rhs | ) |
const |
Definition at line 558 of file C4NetIO.cpp.
561 if (gen.sa_family != rhs.gen.sa_family)
563 if (gen.sa_family == AF_INET)
564 return v4.sin_addr.s_addr == rhs.v4.sin_addr.s_addr;
565 if (gen.sa_family == AF_INET6)
566 return memcmp(&v6.sin6_addr, &rhs.v6.sin6_addr,
sizeof(v6.sin6_addr)) == 0 &&
567 v6.sin6_scope_id == rhs.v6.sin6_scope_id;
568 assert(!
"Shouldn't reach this");
C4NetIO::HostAddress AsIPv6() const
References AsIPv6().
◆ SetHost() [1/5]
void C4NetIO::HostAddress::SetHost |
( |
const HostAddress & |
host | ) |
|
◆ SetHost() [2/5]
void C4NetIO::HostAddress::SetHost |
( |
const sockaddr * |
addr | ) |
|
Definition at line 346 of file C4NetIO.cpp.
349 if (addr->sa_family == AF_INET6)
351 v6.sin6_family = ((
const sockaddr_in6*)addr)->sin6_family;
352 v6.sin6_flowinfo = ((
const sockaddr_in6*)addr)->sin6_flowinfo;
353 memcpy(&v6.sin6_addr, &((
const sockaddr_in6*)addr)->sin6_addr,
sizeof(v6.sin6_addr));
354 v6.sin6_scope_id = ((
const sockaddr_in6*)addr)->sin6_scope_id;
356 else if (addr->sa_family == AF_INET)
358 v4.sin_family = ((
const sockaddr_in*)addr)->sin_family;
359 v4.sin_addr.s_addr = ((
const sockaddr_in*)addr)->sin_addr.s_addr;
360 memset(&v4.sin_zero, 0,
sizeof(v4.sin_zero));
Referenced by C4HTTPClient::Execute(), C4NetIO::GetLocalAddresses(), and HostAddress().
◆ SetHost() [3/5]
Definition at line 407 of file C4NetIO.cpp.
409 addrinfo hints = addrinfo();
410 hints.ai_family = family;
411 addrinfo *addresses =
nullptr;
412 if (getaddrinfo(addr.getData(),
nullptr, &hints, &addresses) != 0)
416 freeaddrinfo(addresses);
References StdStrBuf::getData().
◆ SetHost() [4/5]
Definition at line 376 of file C4NetIO.cpp.
381 v6.sin6_family = AF_INET6;
382 memset(&v6.sin6_addr, 0,
sizeof(v6.sin6_addr));
383 v6.sin6_flowinfo = 0;
384 v6.sin6_scope_id = 0;
387 v4.sin_family = AF_INET;
388 v4.sin_addr.s_addr = 0;
389 memset(&v4.sin_zero, 0,
sizeof(v4.sin_zero));
392 v6.sin6_family = AF_INET6;
393 memset(&v6.sin6_addr, 0,
sizeof(v6.sin6_addr)); v6.sin6_addr.s6_addr[15] = 1;
394 v6.sin6_flowinfo = 0;
395 v6.sin6_scope_id = 0;
References ControllerKeys::Any().
◆ SetHost() [5/5]
void C4NetIO::HostAddress::SetHost |
( |
uint32_t |
host | ) |
|
Definition at line 400 of file C4NetIO.cpp.
402 v4.sin_family = AF_INET;
403 v4.sin_addr.s_addr = v4addr;
404 memset(&v4.sin_zero, 0,
sizeof(v4.sin_zero));
◆ SetScopeId()
void C4NetIO::HostAddress::SetScopeId |
( |
int |
scopeId | ) |
|
◆ ToString()
StdStrBuf C4NetIO::HostAddress::ToString |
( |
int |
flags = 0 | ) |
const |
The documentation for this struct was generated from the following files: